drm/panel: simple: Support delays in panel functions
For most of the panels, we need to provide delays during various stages of panel power up and power down. Add a structure to hold those delay values and use them in corresponding functions. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
Родитель
613a633e7a
Коммит
f673c37ec4
|
@ -43,6 +43,24 @@ struct panel_desc {
|
|||
unsigned int width;
|
||||
unsigned int height;
|
||||
} size;
|
||||
|
||||
/**
|
||||
* @prepare: the time (in milliseconds) that it takes for the panel to
|
||||
* become ready and start receiving video data
|
||||
* @enable: the time (in milliseconds) that it takes for the panel to
|
||||
* display the first valid frame after starting to receive
|
||||
* video data
|
||||
* @disable: the time (in milliseconds) that it takes for the panel to
|
||||
* turn the display off (no content is visible)
|
||||
* @unprepare: the time (in milliseconds) that it takes for the panel
|
||||
* to power itself down completely
|
||||
*/
|
||||
struct {
|
||||
unsigned int prepare;
|
||||
unsigned int enable;
|
||||
unsigned int disable;
|
||||
unsigned int unprepare;
|
||||
} delay;
|
||||
};
|
||||
|
||||
struct panel_simple {
|
||||
|
@ -109,6 +127,9 @@ static int panel_simple_disable(struct drm_panel *panel)
|
|||
backlight_update_status(p->backlight);
|
||||
}
|
||||
|
||||
if (p->desc->delay.disable)
|
||||
msleep(p->desc->delay.disable);
|
||||
|
||||
p->enabled = false;
|
||||
|
||||
return 0;
|
||||
|
@ -126,6 +147,9 @@ static int panel_simple_unprepare(struct drm_panel *panel)
|
|||
|
||||
regulator_disable(p->supply);
|
||||
|
||||
if (p->desc->delay.unprepare)
|
||||
msleep(p->desc->delay.unprepare);
|
||||
|
||||
p->prepared = false;
|
||||
|
||||
return 0;
|
||||
|
@ -148,6 +172,9 @@ static int panel_simple_prepare(struct drm_panel *panel)
|
|||
if (p->enable_gpio)
|
||||
gpiod_set_value_cansleep(p->enable_gpio, 1);
|
||||
|
||||
if (p->desc->delay.prepare)
|
||||
msleep(p->desc->delay.prepare);
|
||||
|
||||
p->prepared = true;
|
||||
|
||||
return 0;
|
||||
|
@ -160,6 +187,9 @@ static int panel_simple_enable(struct drm_panel *panel)
|
|||
if (p->enabled)
|
||||
return 0;
|
||||
|
||||
if (p->desc->delay.enable)
|
||||
msleep(p->desc->delay.enable);
|
||||
|
||||
if (p->backlight) {
|
||||
p->backlight->props.power = FB_BLANK_UNBLANK;
|
||||
backlight_update_status(p->backlight);
|
||||
|
|
Загрузка…
Ссылка в новой задаче