diff options
Diffstat (limited to 'drivers/video/omap2/omapfb/omapfb-ioctl.c')
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 68 |
1 files changed, 49 insertions, 19 deletions
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c index 4c4bafdfaa43..1ffa760b8545 100644 --- a/drivers/video/omap2/omapfb/omapfb-ioctl.c +++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c | |||
@@ -167,12 +167,12 @@ static int omapfb_update_window_nolock(struct fb_info *fbi, | |||
167 | if (w == 0 || h == 0) | 167 | if (w == 0 || h == 0) |
168 | return 0; | 168 | return 0; |
169 | 169 | ||
170 | display->get_resolution(display, &dw, &dh); | 170 | display->driver->get_resolution(display, &dw, &dh); |
171 | 171 | ||
172 | if (x + w > dw || y + h > dh) | 172 | if (x + w > dw || y + h > dh) |
173 | return -EINVAL; | 173 | return -EINVAL; |
174 | 174 | ||
175 | return display->update(display, x, y, w, h); | 175 | return display->driver->update(display, x, y, w, h); |
176 | } | 176 | } |
177 | 177 | ||
178 | /* This function is exported for SGX driver use */ | 178 | /* This function is exported for SGX driver use */ |
@@ -202,7 +202,7 @@ static int omapfb_set_update_mode(struct fb_info *fbi, | |||
202 | enum omap_dss_update_mode um; | 202 | enum omap_dss_update_mode um; |
203 | int r; | 203 | int r; |
204 | 204 | ||
205 | if (!display || !display->set_update_mode) | 205 | if (!display || !display->driver->set_update_mode) |
206 | return -EINVAL; | 206 | return -EINVAL; |
207 | 207 | ||
208 | switch (mode) { | 208 | switch (mode) { |
@@ -222,7 +222,7 @@ static int omapfb_set_update_mode(struct fb_info *fbi, | |||
222 | return -EINVAL; | 222 | return -EINVAL; |
223 | } | 223 | } |
224 | 224 | ||
225 | r = display->set_update_mode(display, um); | 225 | r = display->driver->set_update_mode(display, um); |
226 | 226 | ||
227 | return r; | 227 | return r; |
228 | } | 228 | } |
@@ -233,10 +233,15 @@ static int omapfb_get_update_mode(struct fb_info *fbi, | |||
233 | struct omap_dss_device *display = fb2display(fbi); | 233 | struct omap_dss_device *display = fb2display(fbi); |
234 | enum omap_dss_update_mode m; | 234 | enum omap_dss_update_mode m; |
235 | 235 | ||
236 | if (!display || !display->get_update_mode) | 236 | if (!display) |
237 | return -EINVAL; | 237 | return -EINVAL; |
238 | 238 | ||
239 | m = display->get_update_mode(display); | 239 | if (!display->driver->get_update_mode) { |
240 | *mode = OMAPFB_AUTO_UPDATE; | ||
241 | return 0; | ||
242 | } | ||
243 | |||
244 | m = display->driver->get_update_mode(display); | ||
240 | 245 | ||
241 | switch (m) { | 246 | switch (m) { |
242 | case OMAP_DSS_UPDATE_DISABLED: | 247 | case OMAP_DSS_UPDATE_DISABLED: |
@@ -374,7 +379,7 @@ static int omapfb_memory_read(struct fb_info *fbi, | |||
374 | void *buf; | 379 | void *buf; |
375 | int r; | 380 | int r; |
376 | 381 | ||
377 | if (!display || !display->memory_read) | 382 | if (!display || !display->driver->memory_read) |
378 | return -ENOENT; | 383 | return -ENOENT; |
379 | 384 | ||
380 | if (!access_ok(VERIFY_WRITE, mr->buffer, mr->buffer_size)) | 385 | if (!access_ok(VERIFY_WRITE, mr->buffer, mr->buffer_size)) |
@@ -389,7 +394,7 @@ static int omapfb_memory_read(struct fb_info *fbi, | |||
389 | return -ENOMEM; | 394 | return -ENOMEM; |
390 | } | 395 | } |
391 | 396 | ||
392 | r = display->memory_read(display, buf, mr->buffer_size, | 397 | r = display->driver->memory_read(display, buf, mr->buffer_size, |
393 | mr->x, mr->y, mr->w, mr->h); | 398 | mr->x, mr->y, mr->w, mr->h); |
394 | 399 | ||
395 | if (r > 0) { | 400 | if (r > 0) { |
@@ -483,6 +488,7 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
483 | struct omapfb_memory_read memory_read; | 488 | struct omapfb_memory_read memory_read; |
484 | struct omapfb_vram_info vram_info; | 489 | struct omapfb_vram_info vram_info; |
485 | struct omapfb_tearsync_info tearsync_info; | 490 | struct omapfb_tearsync_info tearsync_info; |
491 | struct omapfb_display_info display_info; | ||
486 | } p; | 492 | } p; |
487 | 493 | ||
488 | int r = 0; | 494 | int r = 0; |
@@ -490,18 +496,18 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
490 | switch (cmd) { | 496 | switch (cmd) { |
491 | case OMAPFB_SYNC_GFX: | 497 | case OMAPFB_SYNC_GFX: |
492 | DBG("ioctl SYNC_GFX\n"); | 498 | DBG("ioctl SYNC_GFX\n"); |
493 | if (!display || !display->sync) { | 499 | if (!display || !display->driver->sync) { |
494 | /* DSS1 never returns an error here, so we neither */ | 500 | /* DSS1 never returns an error here, so we neither */ |
495 | /*r = -EINVAL;*/ | 501 | /*r = -EINVAL;*/ |
496 | break; | 502 | break; |
497 | } | 503 | } |
498 | 504 | ||
499 | r = display->sync(display); | 505 | r = display->driver->sync(display); |
500 | break; | 506 | break; |
501 | 507 | ||
502 | case OMAPFB_UPDATE_WINDOW_OLD: | 508 | case OMAPFB_UPDATE_WINDOW_OLD: |
503 | DBG("ioctl UPDATE_WINDOW_OLD\n"); | 509 | DBG("ioctl UPDATE_WINDOW_OLD\n"); |
504 | if (!display || !display->update) { | 510 | if (!display || !display->driver->update) { |
505 | r = -EINVAL; | 511 | r = -EINVAL; |
506 | break; | 512 | break; |
507 | } | 513 | } |
@@ -519,7 +525,7 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
519 | 525 | ||
520 | case OMAPFB_UPDATE_WINDOW: | 526 | case OMAPFB_UPDATE_WINDOW: |
521 | DBG("ioctl UPDATE_WINDOW\n"); | 527 | DBG("ioctl UPDATE_WINDOW\n"); |
522 | if (!display || !display->update) { | 528 | if (!display || !display->driver->update) { |
523 | r = -EINVAL; | 529 | r = -EINVAL; |
524 | break; | 530 | break; |
525 | } | 531 | } |
@@ -648,7 +654,7 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
648 | break; | 654 | break; |
649 | } | 655 | } |
650 | 656 | ||
651 | r = display->wait_vsync(display); | 657 | r = display->manager->wait_for_vsync(display->manager); |
652 | break; | 658 | break; |
653 | 659 | ||
654 | case OMAPFB_WAITFORGO: | 660 | case OMAPFB_WAITFORGO: |
@@ -669,12 +675,12 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
669 | r = -EFAULT; | 675 | r = -EFAULT; |
670 | break; | 676 | break; |
671 | } | 677 | } |
672 | if (!display || !display->run_test) { | 678 | if (!display || !display->driver->run_test) { |
673 | r = -EINVAL; | 679 | r = -EINVAL; |
674 | break; | 680 | break; |
675 | } | 681 | } |
676 | 682 | ||
677 | r = display->run_test(display, p.test_num); | 683 | r = display->driver->run_test(display, p.test_num); |
678 | 684 | ||
679 | break; | 685 | break; |
680 | 686 | ||
@@ -684,12 +690,12 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
684 | r = -EFAULT; | 690 | r = -EFAULT; |
685 | break; | 691 | break; |
686 | } | 692 | } |
687 | if (!display || !display->run_test) { | 693 | if (!display || !display->driver->run_test) { |
688 | r = -EINVAL; | 694 | r = -EINVAL; |
689 | break; | 695 | break; |
690 | } | 696 | } |
691 | 697 | ||
692 | r = display->run_test(display, p.test_num); | 698 | r = display->driver->run_test(display, p.test_num); |
693 | 699 | ||
694 | break; | 700 | break; |
695 | 701 | ||
@@ -731,13 +737,37 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
731 | break; | 737 | break; |
732 | } | 738 | } |
733 | 739 | ||
734 | if (!display->enable_te) { | 740 | if (!display->driver->enable_te) { |
735 | r = -ENODEV; | 741 | r = -ENODEV; |
736 | break; | 742 | break; |
737 | } | 743 | } |
738 | 744 | ||
739 | r = display->enable_te(display, !!p.tearsync_info.enabled); | 745 | r = display->driver->enable_te(display, |
746 | !!p.tearsync_info.enabled); | ||
747 | |||
748 | break; | ||
749 | } | ||
750 | |||
751 | case OMAPFB_GET_DISPLAY_INFO: { | ||
752 | u16 xres, yres; | ||
740 | 753 | ||
754 | DBG("ioctl GET_DISPLAY_INFO\n"); | ||
755 | |||
756 | if (display == NULL) { | ||
757 | r = -ENODEV; | ||
758 | break; | ||
759 | } | ||
760 | |||
761 | display->driver->get_resolution(display, &xres, &yres); | ||
762 | |||
763 | p.display_info.xres = xres; | ||
764 | p.display_info.yres = yres; | ||
765 | p.display_info.width = 0; | ||
766 | p.display_info.height = 0; | ||
767 | |||
768 | if (copy_to_user((void __user *)arg, &p.display_info, | ||
769 | sizeof(p.display_info))) | ||
770 | r = -EFAULT; | ||
741 | break; | 771 | break; |
742 | } | 772 | } |
743 | 773 | ||