Lines Matching refs:fbdev
104 static void omapfb_rqueue_lock(struct omapfb_device *fbdev) in omapfb_rqueue_lock() argument
106 mutex_lock(&fbdev->rqueue_mutex); in omapfb_rqueue_lock()
109 static void omapfb_rqueue_unlock(struct omapfb_device *fbdev) in omapfb_rqueue_unlock() argument
111 mutex_unlock(&fbdev->rqueue_mutex); in omapfb_rqueue_unlock()
125 static int ctrl_init(struct omapfb_device *fbdev) in ctrl_init() argument
133 fbdev->mem_desc.region[i].size = in ctrl_init()
135 fbdev->mem_desc.region_cnt = i; in ctrl_init()
138 if (!fbdev->mem_desc.region_cnt) { in ctrl_init()
139 struct lcd_panel *panel = fbdev->panel; in ctrl_init()
147 fbdev->mem_desc.region_cnt = 1; in ctrl_init()
148 fbdev->mem_desc.region[0].size = PAGE_ALIGN(def_size); in ctrl_init()
150 r = fbdev->ctrl->init(fbdev, 0, &fbdev->mem_desc); in ctrl_init()
152 dev_err(fbdev->dev, "controller initialization failed (%d)\n", in ctrl_init()
158 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) { in ctrl_init()
159 dev_dbg(fbdev->dev, "region%d phys %08x virt %p size=%lu\n", in ctrl_init()
161 fbdev->mem_desc.region[i].paddr, in ctrl_init()
162 fbdev->mem_desc.region[i].vaddr, in ctrl_init()
163 fbdev->mem_desc.region[i].size); in ctrl_init()
169 static void ctrl_cleanup(struct omapfb_device *fbdev) in ctrl_cleanup() argument
171 fbdev->ctrl->cleanup(); in ctrl_cleanup()
180 struct omapfb_device *fbdev = plane->fbdev; in ctrl_change_mode() local
186 if (fbdev->ctrl->sync) in ctrl_change_mode()
187 fbdev->ctrl->sync(); in ctrl_change_mode()
188 r = fbdev->ctrl->setup_plane(plane->idx, plane->info.channel_out, in ctrl_change_mode()
195 if (fbdev->ctrl->set_rotate != NULL) { in ctrl_change_mode()
196 r = fbdev->ctrl->set_rotate(var->rotate); in ctrl_change_mode()
201 if (fbdev->ctrl->set_scale != NULL) in ctrl_change_mode()
202 r = fbdev->ctrl->set_scale(plane->idx, in ctrl_change_mode()
239 struct omapfb_device *fbdev = plane->fbdev; in _setcolreg() local
253 if (fbdev->ctrl->setcolreg) in _setcolreg()
254 r = fbdev->ctrl->setcolreg(regno, red, green, blue, in _setcolreg()
313 struct omapfb_device *fbdev = plane->fbdev; in omapfb_blank() local
317 omapfb_rqueue_lock(fbdev); in omapfb_blank()
320 if (fbdev->state == OMAPFB_SUSPENDED) { in omapfb_blank()
321 if (fbdev->ctrl->resume) in omapfb_blank()
322 fbdev->ctrl->resume(); in omapfb_blank()
323 if (fbdev->panel->enable) in omapfb_blank()
324 fbdev->panel->enable(fbdev->panel); in omapfb_blank()
325 fbdev->state = OMAPFB_ACTIVE; in omapfb_blank()
326 if (fbdev->ctrl->get_update_mode() == in omapfb_blank()
332 if (fbdev->state == OMAPFB_ACTIVE) { in omapfb_blank()
333 if (fbdev->panel->disable) in omapfb_blank()
334 fbdev->panel->disable(fbdev->panel); in omapfb_blank()
335 if (fbdev->ctrl->suspend) in omapfb_blank()
336 fbdev->ctrl->suspend(); in omapfb_blank()
337 fbdev->state = OMAPFB_SUSPENDED; in omapfb_blank()
343 omapfb_rqueue_unlock(fbdev); in omapfb_blank()
354 struct omapfb_device *fbdev = plane->fbdev; in omapfb_sync() local
356 omapfb_rqueue_lock(fbdev); in omapfb_sync()
357 if (fbdev->ctrl->sync) in omapfb_sync()
358 fbdev->ctrl->sync(); in omapfb_sync()
359 omapfb_rqueue_unlock(fbdev); in omapfb_sync()
374 rg = &plane->fbdev->mem_desc.region[plane->idx]; in set_fb_fix()
448 if (plane->fbdev->panel->bpp == 12) in set_color_mode()
471 struct omapfb_device *fbdev = plane->fbdev; in set_fb_var() local
472 struct lcd_panel *panel = fbdev->panel; in set_fb_var()
521 max_frame_size = fbdev->mem_desc.region[plane->idx].size; in set_fb_var()
591 struct omapfb_device *fbdev = plane->fbdev; in omapfb_pan_display() local
594 omapfb_rqueue_lock(fbdev); in omapfb_pan_display()
597 struct fb_var_screeninfo *new_var = &fbdev->new_var; in omapfb_pan_display()
609 omapfb_rqueue_unlock(fbdev); in omapfb_pan_display()
618 struct omapfb_device *fbdev = plane->fbdev; in omapfb_mirror() local
621 omapfb_rqueue_lock(fbdev); in omapfb_mirror()
629 omapfb_rqueue_unlock(fbdev); in omapfb_mirror()
641 struct omapfb_device *fbdev = plane->fbdev; in omapfb_check_var() local
644 omapfb_rqueue_lock(fbdev); in omapfb_check_var()
645 if (fbdev->ctrl->sync != NULL) in omapfb_check_var()
646 fbdev->ctrl->sync(); in omapfb_check_var()
648 omapfb_rqueue_unlock(fbdev); in omapfb_check_var()
660 struct omapfb_device *fbdev = plane->fbdev; in omapfb_set_par() local
663 omapfb_rqueue_lock(fbdev); in omapfb_set_par()
666 omapfb_rqueue_unlock(fbdev); in omapfb_set_par()
678 struct omapfb_device *fbdev = plane->fbdev; in omapfb_update_window_async() local
684 xres = fbdev->panel->x_res; in omapfb_update_window_async()
685 yres = fbdev->panel->y_res; in omapfb_update_window_async()
689 xres = fbdev->panel->y_res; in omapfb_update_window_async()
690 yres = fbdev->panel->x_res; in omapfb_update_window_async()
700 if (!fbdev->ctrl->update_window || in omapfb_update_window_async()
701 fbdev->ctrl->get_update_mode() != OMAPFB_MANUAL_UPDATE) in omapfb_update_window_async()
715 return fbdev->ctrl->update_window(fbi, win, callback, callback_data); in omapfb_update_window_async()
724 omapfb_rqueue_lock(plane->fbdev); in omapfb_update_win()
726 omapfb_rqueue_unlock(plane->fbdev); in omapfb_update_win()
734 struct omapfb_device *fbdev = plane->fbdev; in omapfb_update_full_screen() local
738 if (!fbdev->ctrl->update_window || in omapfb_update_full_screen()
739 fbdev->ctrl->get_update_mode() != OMAPFB_MANUAL_UPDATE) in omapfb_update_full_screen()
752 omapfb_rqueue_lock(fbdev); in omapfb_update_full_screen()
753 r = fbdev->ctrl->update_window(fbi, &win, NULL, NULL); in omapfb_update_full_screen()
754 omapfb_rqueue_unlock(fbdev); in omapfb_update_full_screen()
762 struct omapfb_device *fbdev = plane->fbdev; in omapfb_setup_plane() local
763 struct lcd_panel *panel = fbdev->panel; in omapfb_setup_plane()
771 omapfb_rqueue_lock(fbdev); in omapfb_setup_plane()
772 if (pi->enabled && !fbdev->mem_desc.region[plane->idx].size) { in omapfb_setup_plane()
789 r = fbdev->ctrl->enable_plane(plane->idx, pi->enabled); in omapfb_setup_plane()
795 omapfb_rqueue_unlock(fbdev); in omapfb_setup_plane()
810 struct omapfb_device *fbdev = plane->fbdev; in omapfb_setup_mem() local
811 struct omapfb_mem_region *rg = &fbdev->mem_desc.region[plane->idx]; in omapfb_setup_mem()
815 if (fbdev->ctrl->setup_mem == NULL) in omapfb_setup_mem()
821 omapfb_rqueue_lock(fbdev); in omapfb_setup_mem()
827 struct fb_var_screeninfo *new_var = &fbdev->new_var; in omapfb_setup_mem()
849 if (fbdev->ctrl->sync) in omapfb_setup_mem()
850 fbdev->ctrl->sync(); in omapfb_setup_mem()
851 r = fbdev->ctrl->setup_mem(plane->idx, size, mi->type, &paddr); in omapfb_setup_mem()
878 omapfb_rqueue_unlock(fbdev); in omapfb_setup_mem()
886 struct omapfb_device *fbdev = plane->fbdev; in omapfb_query_mem() local
889 rg = &fbdev->mem_desc.region[plane->idx]; in omapfb_query_mem()
897 static int omapfb_set_color_key(struct omapfb_device *fbdev, in omapfb_set_color_key() argument
902 if (!fbdev->ctrl->set_color_key) in omapfb_set_color_key()
905 omapfb_rqueue_lock(fbdev); in omapfb_set_color_key()
906 r = fbdev->ctrl->set_color_key(ck); in omapfb_set_color_key()
907 omapfb_rqueue_unlock(fbdev); in omapfb_set_color_key()
912 static int omapfb_get_color_key(struct omapfb_device *fbdev, in omapfb_get_color_key() argument
917 if (!fbdev->ctrl->get_color_key) in omapfb_get_color_key()
920 omapfb_rqueue_lock(fbdev); in omapfb_get_color_key()
921 r = fbdev->ctrl->get_color_key(ck); in omapfb_get_color_key()
922 omapfb_rqueue_unlock(fbdev); in omapfb_get_color_key()
976 void omapfb_notify_clients(struct omapfb_device *fbdev, unsigned long event) in omapfb_notify_clients() argument
986 fbdev->fb_info[i]); in omapfb_notify_clients()
990 static int omapfb_set_update_mode(struct omapfb_device *fbdev, in omapfb_set_update_mode() argument
995 omapfb_rqueue_lock(fbdev); in omapfb_set_update_mode()
996 r = fbdev->ctrl->set_update_mode(mode); in omapfb_set_update_mode()
997 omapfb_rqueue_unlock(fbdev); in omapfb_set_update_mode()
1002 static enum omapfb_update_mode omapfb_get_update_mode(struct omapfb_device *fbdev) in omapfb_get_update_mode() argument
1006 omapfb_rqueue_lock(fbdev); in omapfb_get_update_mode()
1007 r = fbdev->ctrl->get_update_mode(); in omapfb_get_update_mode()
1008 omapfb_rqueue_unlock(fbdev); in omapfb_get_update_mode()
1013 static void omapfb_get_caps(struct omapfb_device *fbdev, int plane, in omapfb_get_caps() argument
1017 fbdev->ctrl->get_caps(plane, caps); in omapfb_get_caps()
1018 if (fbdev->panel->get_caps) in omapfb_get_caps()
1019 caps->ctrl |= fbdev->panel->get_caps(fbdev->panel); in omapfb_get_caps()
1023 void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval) in omapfb_write_first_pixel() argument
1025 omapfb_rqueue_lock(fbdev); in omapfb_write_first_pixel()
1026 *(u16 *)fbdev->mem_desc.region[0].vaddr = pixval; in omapfb_write_first_pixel()
1027 if (fbdev->ctrl->get_update_mode() == OMAPFB_MANUAL_UPDATE) { in omapfb_write_first_pixel()
1035 fbdev->ctrl->update_window(fbdev->fb_info[0], &win, NULL, NULL); in omapfb_write_first_pixel()
1037 omapfb_rqueue_unlock(fbdev); in omapfb_write_first_pixel()
1049 struct omapfb_device *fbdev = plane->fbdev; in omapfb_ioctl() local
1081 r = omapfb_set_update_mode(fbdev, p.update_mode); in omapfb_ioctl()
1084 p.update_mode = omapfb_get_update_mode(fbdev); in omapfb_ioctl()
1143 r = omapfb_set_color_key(fbdev, &p.color_key); in omapfb_ioctl()
1146 if ((r = omapfb_get_color_key(fbdev, &p.color_key)) < 0) in omapfb_ioctl()
1153 omapfb_get_caps(fbdev, plane->idx, &p.caps); in omapfb_ioctl()
1165 if (!fbdev->panel->run_test) { in omapfb_ioctl()
1169 r = fbdev->panel->run_test(fbdev->panel, test_num); in omapfb_ioctl()
1180 if (!fbdev->ctrl->run_test) { in omapfb_ioctl()
1184 r = fbdev->ctrl->run_test(test_num); in omapfb_ioctl()
1197 struct omapfb_device *fbdev = plane->fbdev; in omapfb_mmap() local
1200 omapfb_rqueue_lock(fbdev); in omapfb_mmap()
1201 r = fbdev->ctrl->mmap(info, vma); in omapfb_mmap()
1202 omapfb_rqueue_unlock(fbdev); in omapfb_mmap()
1236 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_caps_num() local
1244 omapfb_get_caps(fbdev, plane, &caps); in omapfb_show_caps_num()
1256 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_caps_text() local
1265 omapfb_get_caps(fbdev, plane, &caps); in omapfb_show_caps_text()
1303 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_panel_name() local
1305 return sysfs_emit(buf, "%s\n", fbdev->panel->name); in omapfb_show_panel_name()
1312 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_bklight_level() local
1315 if (fbdev->panel->get_bklight_level) { in omapfb_show_bklight_level()
1317 fbdev->panel->get_bklight_level(fbdev->panel)); in omapfb_show_bklight_level()
1327 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_store_bklight_level() local
1330 if (fbdev->panel->set_bklight_level) { in omapfb_store_bklight_level()
1334 r = fbdev->panel->set_bklight_level(fbdev->panel, in omapfb_store_bklight_level()
1346 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_bklight_max() local
1349 if (fbdev->panel->get_bklight_level) { in omapfb_show_bklight_max()
1351 fbdev->panel->get_bklight_max(fbdev->panel)); in omapfb_show_bklight_max()
1379 struct omapfb_device *fbdev = dev_get_drvdata(dev); in omapfb_show_ctrl_name() local
1381 return sysfs_emit(buf, "%s\n", fbdev->ctrl->name); in omapfb_show_ctrl_name()
1397 static int omapfb_register_sysfs(struct omapfb_device *fbdev) in omapfb_register_sysfs() argument
1401 if ((r = device_create_file(fbdev->dev, &dev_attr_caps_num))) in omapfb_register_sysfs()
1404 if ((r = device_create_file(fbdev->dev, &dev_attr_caps_text))) in omapfb_register_sysfs()
1407 if ((r = sysfs_create_group(&fbdev->dev->kobj, &panel_attr_grp))) in omapfb_register_sysfs()
1410 if ((r = sysfs_create_group(&fbdev->dev->kobj, &ctrl_attr_grp))) in omapfb_register_sysfs()
1415 sysfs_remove_group(&fbdev->dev->kobj, &panel_attr_grp); in omapfb_register_sysfs()
1417 device_remove_file(fbdev->dev, &dev_attr_caps_text); in omapfb_register_sysfs()
1419 device_remove_file(fbdev->dev, &dev_attr_caps_num); in omapfb_register_sysfs()
1421 dev_err(fbdev->dev, "unable to register sysfs interface\n"); in omapfb_register_sysfs()
1425 static void omapfb_unregister_sysfs(struct omapfb_device *fbdev) in omapfb_unregister_sysfs() argument
1427 sysfs_remove_group(&fbdev->dev->kobj, &ctrl_attr_grp); in omapfb_unregister_sysfs()
1428 sysfs_remove_group(&fbdev->dev->kobj, &panel_attr_grp); in omapfb_unregister_sysfs()
1429 device_remove_file(fbdev->dev, &dev_attr_caps_num); in omapfb_unregister_sysfs()
1430 device_remove_file(fbdev->dev, &dev_attr_caps_text); in omapfb_unregister_sysfs()
1441 static int fbinfo_init(struct omapfb_device *fbdev, struct fb_info *info) in fbinfo_init() argument
1452 info->pseudo_palette = fbdev->pseudo_palette; in fbinfo_init()
1460 var->bits_per_pixel = fbdev->panel->bpp; in fbinfo_init()
1467 dev_err(fbdev->dev, "unable to allocate color map memory\n"); in fbinfo_init()
1473 static void fbinfo_cleanup(struct omapfb_device *fbdev, struct fb_info *fbi) in fbinfo_cleanup() argument
1478 static void planes_cleanup(struct omapfb_device *fbdev) in planes_cleanup() argument
1482 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) { in planes_cleanup()
1483 if (fbdev->fb_info[i] == NULL) in planes_cleanup()
1485 fbinfo_cleanup(fbdev, fbdev->fb_info[i]); in planes_cleanup()
1486 framebuffer_release(fbdev->fb_info[i]); in planes_cleanup()
1490 static int planes_init(struct omapfb_device *fbdev) in planes_init() argument
1496 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) { in planes_init()
1499 fbdev->dev); in planes_init()
1501 planes_cleanup(fbdev); in planes_init()
1506 plane->fbdev = fbdev; in planes_init()
1508 fbdev->fb_info[i] = fbi; in planes_init()
1510 if ((r = fbinfo_init(fbdev, fbi)) < 0) { in planes_init()
1512 planes_cleanup(fbdev); in planes_init()
1525 static void omapfb_free_resources(struct omapfb_device *fbdev, int state) in omapfb_free_resources() argument
1531 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) in omapfb_free_resources()
1532 unregister_framebuffer(fbdev->fb_info[i]); in omapfb_free_resources()
1535 omapfb_unregister_sysfs(fbdev); in omapfb_free_resources()
1538 if (fbdev->panel->disable) in omapfb_free_resources()
1539 fbdev->panel->disable(fbdev->panel); in omapfb_free_resources()
1542 omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED); in omapfb_free_resources()
1545 planes_cleanup(fbdev); in omapfb_free_resources()
1548 ctrl_cleanup(fbdev); in omapfb_free_resources()
1551 if (fbdev->panel->cleanup) in omapfb_free_resources()
1552 fbdev->panel->cleanup(fbdev->panel); in omapfb_free_resources()
1555 dev_set_drvdata(fbdev->dev, NULL); in omapfb_free_resources()
1556 kfree(fbdev); in omapfb_free_resources()
1566 static int omapfb_find_ctrl(struct omapfb_device *fbdev) in omapfb_find_ctrl() argument
1572 conf = dev_get_platdata(fbdev->dev); in omapfb_find_ctrl()
1574 fbdev->ctrl = NULL; in omapfb_find_ctrl()
1580 fbdev->ctrl = fbdev->int_ctrl; in omapfb_find_ctrl()
1585 dev_dbg(fbdev->dev, "ctrl %s\n", ctrls[i]->name); in omapfb_find_ctrl()
1587 fbdev->ctrl = ctrls[i]; in omapfb_find_ctrl()
1592 if (fbdev->ctrl == NULL) { in omapfb_find_ctrl()
1593 dev_dbg(fbdev->dev, "ctrl %s not supported\n", name); in omapfb_find_ctrl()
1616 struct omapfb_device *fbdev = NULL; in omapfb_do_probe() local
1637 fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL); in omapfb_do_probe()
1638 if (fbdev == NULL) { in omapfb_do_probe()
1644 fbdev->int_irq = platform_get_irq(pdev, 0); in omapfb_do_probe()
1645 if (fbdev->int_irq < 0) { in omapfb_do_probe()
1650 fbdev->ext_irq = platform_get_irq(pdev, 1); in omapfb_do_probe()
1651 if (fbdev->ext_irq < 0) { in omapfb_do_probe()
1658 fbdev->dev = &pdev->dev; in omapfb_do_probe()
1659 fbdev->panel = panel; in omapfb_do_probe()
1660 fbdev->dssdev = &omapdss_device; in omapfb_do_probe()
1661 platform_set_drvdata(pdev, fbdev); in omapfb_do_probe()
1663 mutex_init(&fbdev->rqueue_mutex); in omapfb_do_probe()
1665 fbdev->int_ctrl = &omap1_int_ctrl; in omapfb_do_probe()
1667 fbdev->ext_if = &omap1_ext_if; in omapfb_do_probe()
1669 if (omapfb_find_ctrl(fbdev) < 0) { in omapfb_do_probe()
1670 dev_err(fbdev->dev, in omapfb_do_probe()
1676 if (fbdev->panel->init) { in omapfb_do_probe()
1677 r = fbdev->panel->init(fbdev->panel, fbdev); in omapfb_do_probe()
1682 pr_info("omapfb: configured for panel %s\n", fbdev->panel->name); in omapfb_do_probe()
1684 def_vxres = def_vxres ? def_vxres : fbdev->panel->x_res; in omapfb_do_probe()
1685 def_vyres = def_vyres ? def_vyres : fbdev->panel->y_res; in omapfb_do_probe()
1689 r = ctrl_init(fbdev); in omapfb_do_probe()
1692 if (fbdev->ctrl->mmap != NULL) in omapfb_do_probe()
1696 r = planes_init(fbdev); in omapfb_do_probe()
1706 r = ctrl_change_mode(fbdev->fb_info[0]); in omapfb_do_probe()
1708 dev_err(fbdev->dev, "mode setting failed\n"); in omapfb_do_probe()
1713 r = fbdev->ctrl->enable_plane(OMAPFB_PLANE_GFX, 1); in omapfb_do_probe()
1717 omapfb_set_update_mode(fbdev, manual_update ? in omapfb_do_probe()
1721 if (fbdev->panel->enable) { in omapfb_do_probe()
1722 r = fbdev->panel->enable(fbdev->panel); in omapfb_do_probe()
1728 r = omapfb_register_sysfs(fbdev); in omapfb_do_probe()
1734 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) { in omapfb_do_probe()
1735 r = register_framebuffer(fbdev->fb_info[i]); in omapfb_do_probe()
1737 dev_err(fbdev->dev, in omapfb_do_probe()
1741 vram += fbdev->mem_desc.region[i].size; in omapfb_do_probe()
1744 fbdev->state = OMAPFB_ACTIVE; in omapfb_do_probe()
1746 panel = fbdev->panel; in omapfb_do_probe()
1751 omapfb_dev = fbdev; in omapfb_do_probe()
1754 vram, fbdev->mem_desc.region_cnt); in omapfb_do_probe()
1762 omapfb_free_resources(fbdev, init_state); in omapfb_do_probe()
1799 struct omapfb_device *fbdev = platform_get_drvdata(pdev); in omapfb_remove() local
1800 enum omapfb_state saved_state = fbdev->state; in omapfb_remove()
1804 fbdev->state = OMAPFB_DISABLED; in omapfb_remove()
1805 omapfb_free_resources(fbdev, saved_state); in omapfb_remove()
1808 fbdev->dssdev = NULL; in omapfb_remove()
1816 struct omapfb_device *fbdev = platform_get_drvdata(pdev); in omapfb_suspend() local
1818 if (fbdev != NULL) in omapfb_suspend()
1819 omapfb_blank(FB_BLANK_POWERDOWN, fbdev->fb_info[0]); in omapfb_suspend()
1826 struct omapfb_device *fbdev = platform_get_drvdata(pdev); in omapfb_resume() local
1828 if (fbdev != NULL) in omapfb_resume()
1829 omapfb_blank(FB_BLANK_UNBLANK, fbdev->fb_info[0]); in omapfb_resume()