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: Sam Ravnborg <sam@ravnborg.org> Reviewed-by: Laurent 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
This commit is contained in:
parent
4286dc07e6
commit
5dce87a919
@ -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);
|
|||||||
*/
|
*/
|
||||||
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);
|
|||||||
*/
|
*/
|
||||||
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);
|
|||||||
*/
|
*/
|
||||||
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);
|
|||||||
*/
|
*/
|
||||||
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 {
|
|||||||
* @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 {
|
|||||||
* @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 {
|
|||||||
* @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 {
|
|||||||
* @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 {
|
|||||||
*
|
*
|
||||||
* 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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user