Commit 613a633e authored by Ajay Kumar's avatar Ajay Kumar Committed by Thierry Reding

drm/panel: simple: Add proper definition for prepare and unprepare

Move out code from enable and disable routines to prepare
and unprepare routines, so that functionality is properly
distributed across all the panel functions.
Signed-off-by: default avatarAjay Kumar <ajaykumar.rs@samsung.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 1a670e7b
...@@ -47,6 +47,7 @@ struct panel_desc { ...@@ -47,6 +47,7 @@ struct panel_desc {
struct panel_simple { struct panel_simple {
struct drm_panel base; struct drm_panel base;
bool prepared;
bool enabled; bool enabled;
const struct panel_desc *desc; const struct panel_desc *desc;
...@@ -108,10 +109,6 @@ static int panel_simple_disable(struct drm_panel *panel) ...@@ -108,10 +109,6 @@ static int panel_simple_disable(struct drm_panel *panel)
backlight_update_status(p->backlight); backlight_update_status(p->backlight);
} }
if (p->enable_gpio)
gpiod_set_value_cansleep(p->enable_gpio, 0);
regulator_disable(p->supply);
p->enabled = false; p->enabled = false;
return 0; return 0;
...@@ -119,20 +116,27 @@ static int panel_simple_disable(struct drm_panel *panel) ...@@ -119,20 +116,27 @@ static int panel_simple_disable(struct drm_panel *panel)
static int panel_simple_unprepare(struct drm_panel *panel) static int panel_simple_unprepare(struct drm_panel *panel)
{ {
return 0; struct panel_simple *p = to_panel_simple(panel);
}
if (!p->prepared)
return 0;
if (p->enable_gpio)
gpiod_set_value_cansleep(p->enable_gpio, 0);
regulator_disable(p->supply);
p->prepared = false;
static int panel_simple_prepare(struct drm_panel *panel)
{
return 0; return 0;
} }
static int panel_simple_enable(struct drm_panel *panel) static int panel_simple_prepare(struct drm_panel *panel)
{ {
struct panel_simple *p = to_panel_simple(panel); struct panel_simple *p = to_panel_simple(panel);
int err; int err;
if (p->enabled) if (p->prepared)
return 0; return 0;
err = regulator_enable(p->supply); err = regulator_enable(p->supply);
...@@ -144,6 +148,18 @@ static int panel_simple_enable(struct drm_panel *panel) ...@@ -144,6 +148,18 @@ static int panel_simple_enable(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);
p->prepared = true;
return 0;
}
static int panel_simple_enable(struct drm_panel *panel)
{
struct panel_simple *p = to_panel_simple(panel);
if (p->enabled)
return 0;
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);
...@@ -194,6 +210,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) ...@@ -194,6 +210,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
return -ENOMEM; return -ENOMEM;
panel->enabled = false; panel->enabled = false;
panel->prepared = false;
panel->desc = desc; panel->desc = desc;
panel->supply = devm_regulator_get(dev, "power"); panel->supply = devm_regulator_get(dev, "power");
......
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