24 #include <linux/device.h>
28 #include <linux/omapfb.h>
30 #include <linux/export.h>
59 return &fbdev->
regions[mem_idx];
71 DBG(
"omapfb_setup_plane\n");
82 new_rg = get_mem_region(ofbi, pi->
mem_idx);
89 if (old_rg->
id < new_rg->
id) {
90 omapfb_get_mem_region(old_rg);
91 omapfb_get_mem_region(new_rg);
92 }
else if (new_rg->
id < old_rg->
id) {
93 omapfb_get_mem_region(new_rg);
94 omapfb_get_mem_region(old_rg);
96 omapfb_get_mem_region(old_rg);
109 if (old_rg != new_rg) {
150 if (old_rg->
id > new_rg->
id) {
151 omapfb_put_mem_region(old_rg);
152 omapfb_put_mem_region(new_rg);
153 }
else if (new_rg->
id > old_rg->
id) {
154 omapfb_put_mem_region(new_rg);
155 omapfb_put_mem_region(old_rg);
157 omapfb_put_mem_region(old_rg);
162 if (old_rg != new_rg) {
170 if (old_rg->
id > new_rg->
id) {
171 omapfb_put_mem_region(old_rg);
172 omapfb_put_mem_region(new_rg);
173 }
else if (new_rg->
id > old_rg->
id) {
174 omapfb_put_mem_region(new_rg);
175 omapfb_put_mem_region(old_rg);
177 omapfb_put_mem_region(old_rg);
189 memset(pi, 0,
sizeof(*pi));
195 ovl->get_overlay_info(ovl, &ovli);
197 pi->
pos_x = ovli.pos_x;
198 pi->
pos_y = ovli.pos_y;
199 pi->
enabled = ovl->is_enabled(ovl);
202 pi->
mem_idx = get_mem_idx(ofbi);
255 dev_err(fbdev->
dev,
"realloc fbmem failed\n");
271 rg = omapfb_get_mem_region(ofbi->
region);
272 memset(mi, 0,
sizeof(*mi));
277 omapfb_put_mem_region(rg);
282 static int omapfb_update_window_nolock(
struct fb_info *fbi,
291 if (w == 0 || h == 0)
294 display->
driver->get_resolution(display, &dw, &dh);
296 if (x + w > dw || y + h > dh)
299 return display->
driver->update(display, x, y, w, h);
314 r = omapfb_update_window_nolock(fbi, x, y, w, h);
316 omapfb_unlock(fbdev);
340 d = get_display_data(fbdev, display);
343 omapfb_unlock(fbdev);
361 omapfb_unlock(fbdev);
379 d = get_display_data(fbdev, display);
383 omapfb_unlock(fbdev);
401 info.trans_enabled =
false;
402 omapfb_color_keys[mgr->
id] = *ck;
426 info.trans_key_type = kt;
427 info.trans_enabled =
true;
429 omapfb_color_keys[mgr->
id] = *ck;
440 static int omapfb_set_color_key(
struct fb_info *fbi,
463 r = _omapfb_set_color_key(mgr, ck);
465 omapfb_unlock(fbdev);
470 static int omapfb_get_color_key(
struct fb_info *fbi,
493 *ck = omapfb_color_keys[mgr->
id];
495 omapfb_unlock(fbdev);
507 if (!display || !display->
driver->memory_read)
518 DBG(
"vmalloc failed\n");
523 mr->
x, mr->
y, mr->
w, mr->
h);
552 for (i = 0; i <
sizeof(supported_modes) * 8; i++) {
553 if (!(supported_modes & (1 << i)))
568 if (i ==
sizeof(supported_modes) * 8)
572 mode->
nonstd = var.nonstd;
574 mode->
green = var.green;
575 mode->
blue = var.blue;
576 mode->
transp = var.transp;
581 static int omapfb_wait_for_go(
struct fb_info *fbi)
625 DBG(
"ioctl SYNC_GFX\n");
626 if (!display || !display->
driver->sync) {
632 r = display->
driver->sync(display);
636 DBG(
"ioctl UPDATE_WINDOW_OLD\n");
637 if (!display || !display->
driver->update) {
649 r = omapfb_update_window_nolock(fbi,
p.uwnd_o.x,
p.uwnd_o.y,
650 p.uwnd_o.width,
p.uwnd_o.height);
654 DBG(
"ioctl UPDATE_WINDOW\n");
655 if (!display || !display->
driver->update) {
666 r = omapfb_update_window_nolock(fbi,
p.uwnd.x,
p.uwnd.y,
667 p.uwnd.width,
p.uwnd.height);
671 DBG(
"ioctl SETUP_PLANE\n");
673 sizeof(
p.plane_info)))
676 r = omapfb_setup_plane(fbi, &
p.plane_info);
680 DBG(
"ioctl QUERY_PLANE\n");
681 r = omapfb_query_plane(fbi, &
p.plane_info);
685 sizeof(
p.plane_info)))
690 DBG(
"ioctl SETUP_MEM\n");
695 r = omapfb_setup_mem(fbi, &
p.mem_info);
699 DBG(
"ioctl QUERY_MEM\n");
700 r = omapfb_query_mem(fbi, &
p.mem_info);
709 DBG(
"ioctl GET_CAPS\n");
726 DBG(
"ioctl GET_OVERLAY_COLORMODE\n");
728 sizeof(
p.ovl_colormode))) {
732 r = omapfb_get_ovl_colormode(fbdev, &
p.ovl_colormode);
736 sizeof(
p.ovl_colormode)))
741 DBG(
"ioctl SET_UPDATE_MODE\n");
749 DBG(
"ioctl GET_UPDATE_MODE\n");
759 DBG(
"ioctl SET_COLOR_KEY\n");
761 sizeof(
p.color_key)))
764 r = omapfb_set_color_key(fbi, &
p.color_key);
768 DBG(
"ioctl GET_COLOR_KEY\n");
769 r = omapfb_get_color_key(fbi, &
p.color_key);
773 sizeof(
p.color_key)))
789 DBG(
"ioctl WAITFORVSYNC\n");
790 if (!display || !display->
output || !display->
output->manager) {
795 mgr = display->
output->manager;
801 DBG(
"ioctl WAITFORGO\n");
807 r = omapfb_wait_for_go(fbi);
813 DBG(
"ioctl LCD_TEST\n");
818 if (!display || !display->
driver->run_test) {
823 r = display->
driver->run_test(display,
p.test_num);
828 DBG(
"ioctl CTRL_TEST\n");
833 if (!display || !display->
driver->run_test) {
838 r = display->
driver->run_test(display,
p.test_num);
843 DBG(
"ioctl MEMORY_READ\n");
846 sizeof(
p.memory_read))) {
856 unsigned long vram,
free, largest;
858 DBG(
"ioctl GET_VRAM_INFO\n");
861 p.vram_info.total = vram;
862 p.vram_info.free =
free;
863 p.vram_info.largest_free_block = largest;
866 sizeof(
p.vram_info)))
872 DBG(
"ioctl SET_TEARSYNC\n");
875 sizeof(
p.tearsync_info))) {
880 if (!display || !display->
driver->enable_te) {
885 r = display->
driver->enable_te(display,
886 !!
p.tearsync_info.enabled);
894 DBG(
"ioctl GET_DISPLAY_INFO\n");
896 if (display ==
NULL) {
901 display->
driver->get_resolution(display, &xres, &yres);
903 p.display_info.xres =
xres;
904 p.display_info.yres =
yres;
906 if (display->
driver->get_dimensions) {
908 display->
driver->get_dimensions(display, &w, &h);
909 p.display_info.width =
w;
910 p.display_info.height =
h;
912 p.display_info.width = 0;
913 p.display_info.height = 0;
917 sizeof(
p.display_info)))
923 dev_err(fbdev->
dev,
"Unknown ioctl 0x%x\n", cmd);
928 DBG(
"ioctl failed: %d\n", r);