Commit 5dce87a9 authored by Sam Ravnborg's avatar Sam Ravnborg

drm/drm_panel: no error when no callback

The callbacks in drm_panel_funcs are optional, so do not
return an error just because no callback is assigned.

v2:
- Document what functions in drm_panel_funcs are optional (Laurent)
- Return -EOPNOTSUPP if get_modes() is not assigned (Laurent)
  (Sam: -EOPNOTSUPP seems to best error code in this situation)
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20191207140353.23967-2-sam@ravnborg.org
parent 4286dc07
...@@ -151,10 +151,13 @@ EXPORT_SYMBOL(drm_panel_detach); ...@@ -151,10 +151,13 @@ EXPORT_SYMBOL(drm_panel_detach);
*/ */
int drm_panel_prepare(struct drm_panel *panel) int drm_panel_prepare(struct drm_panel *panel)
{ {
if (panel && panel->funcs && panel->funcs->prepare) if (!panel)
return -EINVAL;
if (panel->funcs && panel->funcs->prepare)
return panel->funcs->prepare(panel); return panel->funcs->prepare(panel);
return panel ? -ENOSYS : -EINVAL; return 0;
} }
EXPORT_SYMBOL(drm_panel_prepare); EXPORT_SYMBOL(drm_panel_prepare);
...@@ -171,10 +174,13 @@ EXPORT_SYMBOL(drm_panel_prepare); ...@@ -171,10 +174,13 @@ EXPORT_SYMBOL(drm_panel_prepare);
*/ */
int drm_panel_unprepare(struct drm_panel *panel) int drm_panel_unprepare(struct drm_panel *panel)
{ {
if (panel && panel->funcs && panel->funcs->unprepare) if (!panel)
return -EINVAL;
if (panel->funcs && panel->funcs->unprepare)
return panel->funcs->unprepare(panel); return panel->funcs->unprepare(panel);
return panel ? -ENOSYS : -EINVAL; return 0;
} }
EXPORT_SYMBOL(drm_panel_unprepare); EXPORT_SYMBOL(drm_panel_unprepare);
...@@ -190,10 +196,13 @@ EXPORT_SYMBOL(drm_panel_unprepare); ...@@ -190,10 +196,13 @@ EXPORT_SYMBOL(drm_panel_unprepare);
*/ */
int drm_panel_enable(struct drm_panel *panel) int drm_panel_enable(struct drm_panel *panel)
{ {
if (panel && panel->funcs && panel->funcs->enable) if (!panel)
return -EINVAL;
if (panel->funcs && panel->funcs->enable)
return panel->funcs->enable(panel); return panel->funcs->enable(panel);
return panel ? -ENOSYS : -EINVAL; return 0;
} }
EXPORT_SYMBOL(drm_panel_enable); EXPORT_SYMBOL(drm_panel_enable);
...@@ -209,10 +218,13 @@ EXPORT_SYMBOL(drm_panel_enable); ...@@ -209,10 +218,13 @@ EXPORT_SYMBOL(drm_panel_enable);
*/ */
int drm_panel_disable(struct drm_panel *panel) int drm_panel_disable(struct drm_panel *panel)
{ {
if (panel && panel->funcs && panel->funcs->disable) if (!panel)
return -EINVAL;
if (panel->funcs && panel->funcs->disable)
return panel->funcs->disable(panel); return panel->funcs->disable(panel);
return panel ? -ENOSYS : -EINVAL; return 0;
} }
EXPORT_SYMBOL(drm_panel_disable); EXPORT_SYMBOL(drm_panel_disable);
...@@ -228,10 +240,13 @@ EXPORT_SYMBOL(drm_panel_disable); ...@@ -228,10 +240,13 @@ EXPORT_SYMBOL(drm_panel_disable);
*/ */
int drm_panel_get_modes(struct drm_panel *panel) int drm_panel_get_modes(struct drm_panel *panel)
{ {
if (panel && panel->funcs && panel->funcs->get_modes) if (!panel)
return -EINVAL;
if (panel->funcs && panel->funcs->get_modes)
return panel->funcs->get_modes(panel); return panel->funcs->get_modes(panel);
return panel ? -ENOSYS : -EINVAL; return -EOPNOTSUPP;
} }
EXPORT_SYMBOL(drm_panel_get_modes); EXPORT_SYMBOL(drm_panel_get_modes);
......
...@@ -65,6 +65,8 @@ struct drm_panel_funcs { ...@@ -65,6 +65,8 @@ struct drm_panel_funcs {
* @prepare: * @prepare:
* *
* Turn on panel and perform set up. * Turn on panel and perform set up.
*
* This function is optional.
*/ */
int (*prepare)(struct drm_panel *panel); int (*prepare)(struct drm_panel *panel);
...@@ -72,6 +74,8 @@ struct drm_panel_funcs { ...@@ -72,6 +74,8 @@ struct drm_panel_funcs {
* @enable: * @enable:
* *
* Enable panel (turn on back light, etc.). * Enable panel (turn on back light, etc.).
*
* This function is optional.
*/ */
int (*enable)(struct drm_panel *panel); int (*enable)(struct drm_panel *panel);
...@@ -79,6 +83,8 @@ struct drm_panel_funcs { ...@@ -79,6 +83,8 @@ struct drm_panel_funcs {
* @disable: * @disable:
* *
* Disable panel (turn off back light, etc.). * Disable panel (turn off back light, etc.).
*
* This function is optional.
*/ */
int (*disable)(struct drm_panel *panel); int (*disable)(struct drm_panel *panel);
...@@ -86,14 +92,18 @@ struct drm_panel_funcs { ...@@ -86,14 +92,18 @@ struct drm_panel_funcs {
* @unprepare: * @unprepare:
* *
* Turn off panel. * Turn off panel.
*
* This function is optional.
*/ */
int (*unprepare)(struct drm_panel *panel); int (*unprepare)(struct drm_panel *panel);
/** /**
* @get_modes: * @get_modes:
* *
* Add modes to the connector that the panel is attached to and * Add modes to the connector that the panel is attached to
* return the number of modes added. * and returns the number of modes added.
*
* This function is mandatory.
*/ */
int (*get_modes)(struct drm_panel *panel); int (*get_modes)(struct drm_panel *panel);
...@@ -102,6 +112,8 @@ struct drm_panel_funcs { ...@@ -102,6 +112,8 @@ struct drm_panel_funcs {
* *
* Copy display timings into the provided array and return * Copy display timings into the provided array and return
* the number of display timings available. * the number of display timings available.
*
* This function is optional.
*/ */
int (*get_timings)(struct drm_panel *panel, unsigned int num_timings, int (*get_timings)(struct drm_panel *panel, unsigned int num_timings,
struct display_timing *timings); struct display_timing *timings);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment