diff options
Diffstat (limited to 'drivers/video/omap2/omapfb/omapfb-ioctl.c')
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c index cff450392b79..6b1ac23dbbd3 100644 --- a/drivers/video/omap2/omapfb/omapfb-ioctl.c +++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c | |||
@@ -316,67 +316,67 @@ int omapfb_update_window(struct fb_info *fbi, | |||
316 | } | 316 | } |
317 | EXPORT_SYMBOL(omapfb_update_window); | 317 | EXPORT_SYMBOL(omapfb_update_window); |
318 | 318 | ||
319 | static int omapfb_set_update_mode(struct fb_info *fbi, | 319 | int omapfb_set_update_mode(struct fb_info *fbi, |
320 | enum omapfb_update_mode mode) | 320 | enum omapfb_update_mode mode) |
321 | { | 321 | { |
322 | struct omap_dss_device *display = fb2display(fbi); | 322 | struct omap_dss_device *display = fb2display(fbi); |
323 | enum omap_dss_update_mode um; | 323 | struct omapfb_info *ofbi = FB2OFB(fbi); |
324 | struct omapfb2_device *fbdev = ofbi->fbdev; | ||
325 | struct omapfb_display_data *d; | ||
324 | int r; | 326 | int r; |
325 | 327 | ||
326 | if (!display || !display->driver->set_update_mode) | 328 | if (!display) |
327 | return -EINVAL; | 329 | return -EINVAL; |
328 | 330 | ||
329 | switch (mode) { | 331 | if (mode != OMAPFB_AUTO_UPDATE && mode != OMAPFB_MANUAL_UPDATE) |
330 | case OMAPFB_UPDATE_DISABLED: | 332 | return -EINVAL; |
331 | um = OMAP_DSS_UPDATE_DISABLED; | ||
332 | break; | ||
333 | 333 | ||
334 | case OMAPFB_AUTO_UPDATE: | 334 | omapfb_lock(fbdev); |
335 | um = OMAP_DSS_UPDATE_AUTO; | ||
336 | break; | ||
337 | 335 | ||
338 | case OMAPFB_MANUAL_UPDATE: | 336 | d = get_display_data(fbdev, display); |
339 | um = OMAP_DSS_UPDATE_MANUAL; | ||
340 | break; | ||
341 | 337 | ||
342 | default: | 338 | if (d->update_mode == mode) { |
343 | return -EINVAL; | 339 | omapfb_unlock(fbdev); |
340 | return 0; | ||
344 | } | 341 | } |
345 | 342 | ||
346 | r = display->driver->set_update_mode(display, um); | 343 | r = 0; |
344 | |||
345 | if (display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { | ||
346 | if (mode == OMAPFB_AUTO_UPDATE) | ||
347 | omapfb_start_auto_update(fbdev, display); | ||
348 | else /* MANUAL_UPDATE */ | ||
349 | omapfb_stop_auto_update(fbdev, display); | ||
350 | |||
351 | d->update_mode = mode; | ||
352 | } else { /* AUTO_UPDATE */ | ||
353 | if (mode == OMAPFB_MANUAL_UPDATE) | ||
354 | r = -EINVAL; | ||
355 | } | ||
356 | |||
357 | omapfb_unlock(fbdev); | ||
347 | 358 | ||
348 | return r; | 359 | return r; |
349 | } | 360 | } |
350 | 361 | ||
351 | static int omapfb_get_update_mode(struct fb_info *fbi, | 362 | int omapfb_get_update_mode(struct fb_info *fbi, |
352 | enum omapfb_update_mode *mode) | 363 | enum omapfb_update_mode *mode) |
353 | { | 364 | { |
354 | struct omap_dss_device *display = fb2display(fbi); | 365 | struct omap_dss_device *display = fb2display(fbi); |
355 | enum omap_dss_update_mode m; | 366 | struct omapfb_info *ofbi = FB2OFB(fbi); |
367 | struct omapfb2_device *fbdev = ofbi->fbdev; | ||
368 | struct omapfb_display_data *d; | ||
356 | 369 | ||
357 | if (!display) | 370 | if (!display) |
358 | return -EINVAL; | 371 | return -EINVAL; |
359 | 372 | ||
360 | if (!display->driver->get_update_mode) { | 373 | omapfb_lock(fbdev); |
361 | *mode = OMAPFB_AUTO_UPDATE; | ||
362 | return 0; | ||
363 | } | ||
364 | 374 | ||
365 | m = display->driver->get_update_mode(display); | 375 | d = get_display_data(fbdev, display); |
366 | 376 | ||
367 | switch (m) { | 377 | *mode = d->update_mode; |
368 | case OMAP_DSS_UPDATE_DISABLED: | 378 | |
369 | *mode = OMAPFB_UPDATE_DISABLED; | 379 | omapfb_unlock(fbdev); |
370 | break; | ||
371 | case OMAP_DSS_UPDATE_AUTO: | ||
372 | *mode = OMAPFB_AUTO_UPDATE; | ||
373 | break; | ||
374 | case OMAP_DSS_UPDATE_MANUAL: | ||
375 | *mode = OMAPFB_MANUAL_UPDATE; | ||
376 | break; | ||
377 | default: | ||
378 | BUG(); | ||
379 | } | ||
380 | 380 | ||
381 | return 0; | 381 | return 0; |
382 | } | 382 | } |