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 <ajaykumar.rs at samsung.com>
---
 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

Reply via email to