Commit f673c37e authored by Ajay Kumar's avatar Ajay Kumar Committed by Thierry Reding

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: default avatarAjay Kumar <ajaykumar.rs@samsung.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 613a633e
...@@ -43,6 +43,24 @@ struct panel_desc { ...@@ -43,6 +43,24 @@ struct panel_desc {
unsigned int width; unsigned int width;
unsigned int height; unsigned int height;
} size; } 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 { struct panel_simple {
...@@ -109,6 +127,9 @@ static int panel_simple_disable(struct drm_panel *panel) ...@@ -109,6 +127,9 @@ static int panel_simple_disable(struct drm_panel *panel)
backlight_update_status(p->backlight); backlight_update_status(p->backlight);
} }
if (p->desc->delay.disable)
msleep(p->desc->delay.disable);
p->enabled = false; p->enabled = false;
return 0; return 0;
...@@ -126,6 +147,9 @@ static int panel_simple_unprepare(struct drm_panel *panel) ...@@ -126,6 +147,9 @@ static int panel_simple_unprepare(struct drm_panel *panel)
regulator_disable(p->supply); regulator_disable(p->supply);
if (p->desc->delay.unprepare)
msleep(p->desc->delay.unprepare);
p->prepared = false; p->prepared = false;
return 0; return 0;
...@@ -148,6 +172,9 @@ static int panel_simple_prepare(struct drm_panel *panel) ...@@ -148,6 +172,9 @@ static int panel_simple_prepare(struct drm_panel *panel)
if (p->enable_gpio) if (p->enable_gpio)
gpiod_set_value_cansleep(p->enable_gpio, 1); gpiod_set_value_cansleep(p->enable_gpio, 1);
if (p->desc->delay.prepare)
msleep(p->desc->delay.prepare);
p->prepared = true; p->prepared = true;
return 0; return 0;
...@@ -160,6 +187,9 @@ static int panel_simple_enable(struct drm_panel *panel) ...@@ -160,6 +187,9 @@ static int panel_simple_enable(struct drm_panel *panel)
if (p->enabled) if (p->enabled)
return 0; return 0;
if (p->desc->delay.enable)
msleep(p->desc->delay.enable);
if (p->backlight) { if (p->backlight) {
p->backlight->props.power = FB_BLANK_UNBLANK; p->backlight->props.power = FB_BLANK_UNBLANK;
backlight_update_status(p->backlight); backlight_update_status(p->backlight);
......
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