[PATCH V4 02/10] drm/panel: add prepare and unprepare routines

Ajay kumar ajaynumb at gmail.com
Fri Jun 20 01:07:10 PDT 2014


ping.

On Wed, Jun 11, 2014 at 11:57 PM, Ajay Kumar <ajaykumar.rs at samsung.com> wrote:
> Most of the panels need an init sequence as mentioned below:
>         -- poweron LCD unit/LCD_EN
>         -- start video data
>         -- poweron LED unit/BACKLIGHT_EN
> And, a de-init sequence as mentioned below:
>         -- poweroff LED unit/BACKLIGHT_EN
>         -- stop video data
>         -- poweroff LCD unit/LCD_EN
> With existing callbacks for drm panel, we cannot accomodate such panels,
> since only two callbacks, i.e "panel_enable" and panel_disable are supported.
>
> This patch adds:
>         -- "prepare" callback which can be called before
>         the actual video data is on, and then call the "enable"
>         callback after the video data is available.
>
>         -- "unprepare" callback which can be called after
>         the video data is off, and use "disable" callback
>         to do something before switching off the video data.
>
> Now, we can easily map the above scenario as shown below:
>         poweron LCD unit/LCD_EN = "prepare" callback
>         poweron LED unit/BACKLIGHT_EN = "enable" callback
>         poweroff LED unit/BACKLIGHT_EN = "disable" callback
>         poweroff LCD unit/LCD_EN = "unprepare" callback
>
> Signed-off-by: Ajay Kumar <ajaykumar.rs at samsung.com>
> ---
>  include/drm/drm_panel.h |   18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
> index c2ab77a..9addc69 100644
> --- a/include/drm/drm_panel.h
> +++ b/include/drm/drm_panel.h
> @@ -31,7 +31,9 @@ struct drm_device;
>  struct drm_panel;
>
>  struct drm_panel_funcs {
> +       int (*unprepare)(struct drm_panel *panel);
>         int (*disable)(struct drm_panel *panel);
> +       int (*prepare)(struct drm_panel *panel);
>         int (*enable)(struct drm_panel *panel);
>         int (*get_modes)(struct drm_panel *panel);
>  };
> @@ -46,6 +48,14 @@ struct drm_panel {
>         struct list_head list;
>  };
>
> +static inline int drm_panel_unprepare(struct drm_panel *panel)
> +{
> +       if (panel && panel->funcs && panel->funcs->unprepare)
> +               return panel->funcs->unprepare(panel);
> +
> +       return panel ? -ENOSYS : -EINVAL;
> +}
> +
>  static inline int drm_panel_disable(struct drm_panel *panel)
>  {
>         if (panel && panel->funcs && panel->funcs->disable)
> @@ -54,6 +64,14 @@ static inline int drm_panel_disable(struct drm_panel *panel)
>         return panel ? -ENOSYS : -EINVAL;
>  }
>
> +static inline int drm_panel_prepare(struct drm_panel *panel)
> +{
> +       if (panel && panel->funcs && panel->funcs->prepare)
> +               return panel->funcs->prepare(panel);
> +
> +       return panel ? -ENOSYS : -EINVAL;
> +}
> +
>  static inline int drm_panel_enable(struct drm_panel *panel)
>  {
>         if (panel && panel->funcs && panel->funcs->enable)
> --
> 1.7.9.5
>


More information about the dri-devel mailing list