aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAjay Kumar <ajaykumar.rs@samsung.com>2014-07-31 13:42:10 -0400
committerThierry Reding <treding@nvidia.com>2014-08-06 10:44:14 -0400
commit613a633e7a567593efc03dc2357b6d25cd365c10 (patch)
tree09d536ed509b78e1a4bc152ccafbbeb0bf8fba99
parent1a670e7b8c4227bcff5119802ef04bbf5916cabb (diff)
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: Ajay Kumar <ajaykumar.rs@samsung.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/drm/panel/panel-simple.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 4bf33c6b42f0..806beae77938 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -47,6 +47,7 @@ struct panel_desc {
47 47
48struct panel_simple { 48struct panel_simple {
49 struct drm_panel base; 49 struct drm_panel base;
50 bool prepared;
50 bool enabled; 51 bool enabled;
51 52
52 const struct panel_desc *desc; 53 const struct panel_desc *desc;
@@ -108,10 +109,6 @@ static int panel_simple_disable(struct drm_panel *panel)
108 backlight_update_status(p->backlight); 109 backlight_update_status(p->backlight);
109 } 110 }
110 111
111 if (p->enable_gpio)
112 gpiod_set_value_cansleep(p->enable_gpio, 0);
113
114 regulator_disable(p->supply);
115 p->enabled = false; 112 p->enabled = false;
116 113
117 return 0; 114 return 0;
@@ -119,20 +116,27 @@ static int panel_simple_disable(struct drm_panel *panel)
119 116
120static int panel_simple_unprepare(struct drm_panel *panel) 117static int panel_simple_unprepare(struct drm_panel *panel)
121{ 118{
122 return 0; 119 struct panel_simple *p = to_panel_simple(panel);
123} 120
121 if (!p->prepared)
122 return 0;
123
124 if (p->enable_gpio)
125 gpiod_set_value_cansleep(p->enable_gpio, 0);
126
127 regulator_disable(p->supply);
128
129 p->prepared = false;
124 130
125static int panel_simple_prepare(struct drm_panel *panel)
126{
127 return 0; 131 return 0;
128} 132}
129 133
130static int panel_simple_enable(struct drm_panel *panel) 134static int panel_simple_prepare(struct drm_panel *panel)
131{ 135{
132 struct panel_simple *p = to_panel_simple(panel); 136 struct panel_simple *p = to_panel_simple(panel);
133 int err; 137 int err;
134 138
135 if (p->enabled) 139 if (p->prepared)
136 return 0; 140 return 0;
137 141
138 err = regulator_enable(p->supply); 142 err = regulator_enable(p->supply);
@@ -144,6 +148,18 @@ static int panel_simple_enable(struct drm_panel *panel)
144 if (p->enable_gpio) 148 if (p->enable_gpio)
145 gpiod_set_value_cansleep(p->enable_gpio, 1); 149 gpiod_set_value_cansleep(p->enable_gpio, 1);
146 150
151 p->prepared = true;
152
153 return 0;
154}
155
156static int panel_simple_enable(struct drm_panel *panel)
157{
158 struct panel_simple *p = to_panel_simple(panel);
159
160 if (p->enabled)
161 return 0;
162
147 if (p->backlight) { 163 if (p->backlight) {
148 p->backlight->props.power = FB_BLANK_UNBLANK; 164 p->backlight->props.power = FB_BLANK_UNBLANK;
149 backlight_update_status(p->backlight); 165 backlight_update_status(p->backlight);
@@ -194,6 +210,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
194 return -ENOMEM; 210 return -ENOMEM;
195 211
196 panel->enabled = false; 212 panel->enabled = false;
213 panel->prepared = false;
197 panel->desc = desc; 214 panel->desc = desc;
198 215
199 panel->supply = devm_regulator_get(dev, "power"); 216 panel->supply = devm_regulator_get(dev, "power");