aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/omapfb/omapfb-ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/omapfb/omapfb-ioctl.c')
-rw-r--r--drivers/video/omap2/omapfb/omapfb-ioctl.c68
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