aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/dpi.c
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@nokia.com>2010-01-12 08:12:07 -0500
committerTomi Valkeinen <tomi.valkeinen@nokia.com>2010-02-24 07:31:28 -0500
commit37ac60e414052f1d9301368437db8f0cb9e323fe (patch)
treed6b30b58deae82a6d5f2ac2f4d9cf18ed3bc57da /drivers/video/omap2/dss/dpi.c
parent18946f62c6cc8cf051bafca8b7fa72309e8a1067 (diff)
OMAP: DSS2: move enable/disable/suspend/resume
Move enable/disable/suspend/resume from omap_dss_device to omap_dss_driver. This is part of a larger patch-set, which moves the control from omapdss driver to the display driver. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
Diffstat (limited to 'drivers/video/omap2/dss/dpi.c')
-rw-r--r--drivers/video/omap2/dss/dpi.c102
1 files changed, 11 insertions, 91 deletions
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
index 48ff7ea470a..1eef8b72dbb 100644
--- a/drivers/video/omap2/dss/dpi.c
+++ b/drivers/video/omap2/dss/dpi.c
@@ -153,7 +153,7 @@ static int dpi_basic_init(struct omap_dss_device *dssdev)
153 return 0; 153 return 0;
154} 154}
155 155
156static int dpi_display_enable(struct omap_dss_device *dssdev) 156int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
157{ 157{
158 int r; 158 int r;
159 159
@@ -163,57 +163,42 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
163 goto err0; 163 goto err0;
164 } 164 }
165 165
166 if (dssdev->state != OMAP_DSS_DISPLAY_DISABLED) {
167 DSSERR("display already enabled\n");
168 r = -EINVAL;
169 goto err1;
170 }
171
172 if (cpu_is_omap34xx()) { 166 if (cpu_is_omap34xx()) {
173 r = regulator_enable(dpi.vdds_dsi_reg); 167 r = regulator_enable(dpi.vdds_dsi_reg);
174 if (r) 168 if (r)
175 goto err2; 169 goto err1;
176 } 170 }
177 171
178 dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1); 172 dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
179 173
180 r = dpi_basic_init(dssdev); 174 r = dpi_basic_init(dssdev);
181 if (r) 175 if (r)
182 goto err3; 176 goto err2;
183 177
184#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL 178#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
185 dss_clk_enable(DSS_CLK_FCK2); 179 dss_clk_enable(DSS_CLK_FCK2);
186 r = dsi_pll_init(dssdev, 0, 1); 180 r = dsi_pll_init(dssdev, 0, 1);
187 if (r) 181 if (r)
188 goto err4; 182 goto err3;
189#endif 183#endif
190 r = dpi_set_mode(dssdev); 184 r = dpi_set_mode(dssdev);
191 if (r) 185 if (r)
192 goto err5; 186 goto err4;
193 187
194 mdelay(2); 188 mdelay(2);
195 189
196 dssdev->manager->enable(dssdev->manager); 190 dssdev->manager->enable(dssdev->manager);
197 191
198 r = dssdev->driver->enable(dssdev);
199 if (r)
200 goto err6;
201
202 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
203
204 return 0; 192 return 0;
205 193
206err6: 194err4:
207 dssdev->manager->disable(dssdev->manager);
208err5:
209#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL 195#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
210 dsi_pll_uninit(); 196 dsi_pll_uninit();
211err4: 197err3:
212 dss_clk_disable(DSS_CLK_FCK2); 198 dss_clk_disable(DSS_CLK_FCK2);
213#endif 199#endif
214err3:
215 dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
216err2: 200err2:
201 dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
217 if (cpu_is_omap34xx()) 202 if (cpu_is_omap34xx())
218 regulator_disable(dpi.vdds_dsi_reg); 203 regulator_disable(dpi.vdds_dsi_reg);
219err1: 204err1:
@@ -221,19 +206,10 @@ err1:
221err0: 206err0:
222 return r; 207 return r;
223} 208}
209EXPORT_SYMBOL(omapdss_dpi_display_enable);
224 210
225static int dpi_display_resume(struct omap_dss_device *dssdev); 211void omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
226
227static void dpi_display_disable(struct omap_dss_device *dssdev)
228{ 212{
229 if (dssdev->state == OMAP_DSS_DISPLAY_DISABLED)
230 return;
231
232 if (dssdev->state == OMAP_DSS_DISPLAY_SUSPENDED)
233 dpi_display_resume(dssdev);
234
235 dssdev->driver->disable(dssdev);
236
237 dssdev->manager->disable(dssdev->manager); 213 dssdev->manager->disable(dssdev->manager);
238 214
239#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL 215#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
@@ -247,61 +223,9 @@ static void dpi_display_disable(struct omap_dss_device *dssdev)
247 if (cpu_is_omap34xx()) 223 if (cpu_is_omap34xx())
248 regulator_disable(dpi.vdds_dsi_reg); 224 regulator_disable(dpi.vdds_dsi_reg);
249 225
250 dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
251
252 omap_dss_stop_device(dssdev); 226 omap_dss_stop_device(dssdev);
253} 227}
254 228EXPORT_SYMBOL(omapdss_dpi_display_disable);
255static int dpi_display_suspend(struct omap_dss_device *dssdev)
256{
257 if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
258 return -EINVAL;
259
260 DSSDBG("dpi_display_suspend\n");
261
262 if (dssdev->driver->suspend)
263 dssdev->driver->suspend(dssdev);
264
265 dssdev->manager->disable(dssdev->manager);
266
267 dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
268
269 if (cpu_is_omap34xx())
270 regulator_disable(dpi.vdds_dsi_reg);
271
272 dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
273
274 return 0;
275}
276
277static int dpi_display_resume(struct omap_dss_device *dssdev)
278{
279 int r;
280
281 if (dssdev->state != OMAP_DSS_DISPLAY_SUSPENDED)
282 return -EINVAL;
283
284 DSSDBG("dpi_display_resume\n");
285
286 if (cpu_is_omap34xx()) {
287 r = regulator_enable(dpi.vdds_dsi_reg);
288 if (r)
289 goto err0;
290 }
291
292 dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
293
294 dssdev->manager->enable(dssdev->manager);
295
296 if (dssdev->driver->resume)
297 dssdev->driver->resume(dssdev);
298
299 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
300
301 return 0;
302err0:
303 return r;
304}
305 229
306static void dpi_set_timings(struct omap_dss_device *dssdev, 230static void dpi_set_timings(struct omap_dss_device *dssdev,
307 struct omap_video_timings *timings) 231 struct omap_video_timings *timings)
@@ -379,10 +303,6 @@ int dpi_init_display(struct omap_dss_device *dssdev)
379{ 303{
380 DSSDBG("init_display\n"); 304 DSSDBG("init_display\n");
381 305
382 dssdev->enable = dpi_display_enable;
383 dssdev->disable = dpi_display_disable;
384 dssdev->suspend = dpi_display_suspend;
385 dssdev->resume = dpi_display_resume;
386 dssdev->set_timings = dpi_set_timings; 306 dssdev->set_timings = dpi_set_timings;
387 dssdev->check_timings = dpi_check_timings; 307 dssdev->check_timings = dpi_check_timings;
388 dssdev->get_timings = dpi_get_timings; 308 dssdev->get_timings = dpi_get_timings;