diff options
Diffstat (limited to 'drivers/video/omap2/dss/dpi.c')
-rw-r--r-- | drivers/video/omap2/dss/dpi.c | 102 |
1 files changed, 11 insertions, 91 deletions
diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c index 48ff7ea470aa..1eef8b72dbb9 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 | ||
156 | static int dpi_display_enable(struct omap_dss_device *dssdev) | 156 | int 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 | ||
206 | err6: | 194 | err4: |
207 | dssdev->manager->disable(dssdev->manager); | ||
208 | err5: | ||
209 | #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL | 195 | #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL |
210 | dsi_pll_uninit(); | 196 | dsi_pll_uninit(); |
211 | err4: | 197 | err3: |
212 | dss_clk_disable(DSS_CLK_FCK2); | 198 | dss_clk_disable(DSS_CLK_FCK2); |
213 | #endif | 199 | #endif |
214 | err3: | ||
215 | dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1); | ||
216 | err2: | 200 | err2: |
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); |
219 | err1: | 204 | err1: |
@@ -221,19 +206,10 @@ err1: | |||
221 | err0: | 206 | err0: |
222 | return r; | 207 | return r; |
223 | } | 208 | } |
209 | EXPORT_SYMBOL(omapdss_dpi_display_enable); | ||
224 | 210 | ||
225 | static int dpi_display_resume(struct omap_dss_device *dssdev); | 211 | void omapdss_dpi_display_disable(struct omap_dss_device *dssdev) |
226 | |||
227 | static 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 | 228 | EXPORT_SYMBOL(omapdss_dpi_display_disable); | |
255 | static 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 | |||
277 | static 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; | ||
302 | err0: | ||
303 | return r; | ||
304 | } | ||
305 | 229 | ||
306 | static void dpi_set_timings(struct omap_dss_device *dssdev, | 230 | static 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; |