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: Ajay Kumar <[email protected]>
---
 drivers/gpu/drm/panel/panel-simple.c |   37 +++++++++++++++++++++++++---------
 1 file changed, 27 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-simple.c 
b/drivers/gpu/drm/panel/panel-simple.c
index 2e51c34..9801728 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -45,6 +45,7 @@ struct panel_desc {
 
 struct panel_simple {
        struct drm_panel base;
+       bool prepared;
        bool enabled;
 
        const struct panel_desc *desc;
@@ -105,10 +106,6 @@ static int panel_simple_disable(struct drm_panel *panel)
                backlight_update_status(p->backlight);
        }
 
-       if (p->enable_gpio)
-               gpiod_set_value_cansleep(p->enable_gpio, 0);
-
-       regulator_disable(p->supply);
        p->enabled = false;
 
        return 0;
@@ -116,20 +113,27 @@ static int panel_simple_disable(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;
 }
 
-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);
        int err;
 
-       if (p->enabled)
+       if (p->prepared)
                return 0;
 
        err = regulator_enable(p->supply);
@@ -141,6 +145,18 @@ static int panel_simple_enable(struct drm_panel *panel)
        if (p->enable_gpio)
                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) {
                p->backlight->props.power = FB_BLANK_UNBLANK;
                backlight_update_status(p->backlight);
@@ -191,6 +207,7 @@ static int panel_simple_probe(struct device *dev, const 
struct panel_desc *desc)
                return -ENOMEM;
 
        panel->enabled = false;
+       panel->prepared = false;
        panel->desc = desc;
 
        panel->supply = devm_regulator_get(dev, "power");
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to