Lines Matching defs:fbdev

104 static void omapfb_rqueue_lock(struct omapfb_device *fbdev)
106 mutex_lock(&fbdev->rqueue_mutex);
109 static void omapfb_rqueue_unlock(struct omapfb_device *fbdev)
111 mutex_unlock(&fbdev->rqueue_mutex);
125 static int ctrl_init(struct omapfb_device *fbdev)
133 fbdev->mem_desc.region[i].size =
135 fbdev->mem_desc.region_cnt = i;
138 if (!fbdev->mem_desc.region_cnt) {
139 struct lcd_panel *panel = fbdev->panel;
147 fbdev->mem_desc.region_cnt = 1;
148 fbdev->mem_desc.region[0].size = PAGE_ALIGN(def_size);
150 r = fbdev->ctrl->init(fbdev, 0, &fbdev->mem_desc);
152 dev_err(fbdev->dev, "controller initialization failed (%d)\n",
158 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) {
159 dev_dbg(fbdev->dev, "region%d phys %08x virt %p size=%lu\n",
161 fbdev->mem_desc.region[i].paddr,
162 fbdev->mem_desc.region[i].vaddr,
163 fbdev->mem_desc.region[i].size);
169 static void ctrl_cleanup(struct omapfb_device *fbdev)
171 fbdev->ctrl->cleanup();
174 /* Must be called with fbdev->rqueue_mutex held. */
180 struct omapfb_device *fbdev = plane->fbdev;
186 if (fbdev->ctrl->sync)
187 fbdev->ctrl->sync();
188 r = fbdev->ctrl->setup_plane(plane->idx, plane->info.channel_out,
195 if (fbdev->ctrl->set_rotate != NULL) {
196 r = fbdev->ctrl->set_rotate(var->rotate);
201 if (fbdev->ctrl->set_scale != NULL)
202 r = fbdev->ctrl->set_scale(plane->idx,
212 * fbdev framework callbacks and the ioctl interface
239 struct omapfb_device *fbdev = plane->fbdev;
253 if (fbdev->ctrl->setcolreg)
254 r = fbdev->ctrl->setcolreg(regno, red, green, blue,
313 struct omapfb_device *fbdev = plane->fbdev;
317 omapfb_rqueue_lock(fbdev);
320 if (fbdev->state == OMAPFB_SUSPENDED) {
321 if (fbdev->ctrl->resume)
322 fbdev->ctrl->resume();
323 if (fbdev->panel->enable)
324 fbdev->panel->enable(fbdev->panel);
325 fbdev->state = OMAPFB_ACTIVE;
326 if (fbdev->ctrl->get_update_mode() ==
332 if (fbdev->state == OMAPFB_ACTIVE) {
333 if (fbdev->panel->disable)
334 fbdev->panel->disable(fbdev->panel);
335 if (fbdev->ctrl->suspend)
336 fbdev->ctrl->suspend();
337 fbdev->state = OMAPFB_SUSPENDED;
343 omapfb_rqueue_unlock(fbdev);
354 struct omapfb_device *fbdev = plane->fbdev;
356 omapfb_rqueue_lock(fbdev);
357 if (fbdev->ctrl->sync)
358 fbdev->ctrl->sync();
359 omapfb_rqueue_unlock(fbdev);
363 * Set fb_info.fix fields and also updates fbdev.
374 rg = &plane->fbdev->mem_desc.region[plane->idx];
448 if (plane->fbdev->panel->bpp == 12)
471 struct omapfb_device *fbdev = plane->fbdev;
472 struct lcd_panel *panel = fbdev->panel;
521 max_frame_size = fbdev->mem_desc.region[plane->idx].size;
597 struct omapfb_device *fbdev = plane->fbdev;
600 omapfb_rqueue_lock(fbdev);
603 struct fb_var_screeninfo *new_var = &fbdev->new_var;
615 omapfb_rqueue_unlock(fbdev);
624 struct omapfb_device *fbdev = plane->fbdev;
627 omapfb_rqueue_lock(fbdev);
635 omapfb_rqueue_unlock(fbdev);
647 struct omapfb_device *fbdev = plane->fbdev;
650 omapfb_rqueue_lock(fbdev);
651 if (fbdev->ctrl->sync != NULL)
652 fbdev->ctrl->sync();
654 omapfb_rqueue_unlock(fbdev);
666 struct omapfb_device *fbdev = plane->fbdev;
669 omapfb_rqueue_lock(fbdev);
672 omapfb_rqueue_unlock(fbdev);
684 struct omapfb_device *fbdev = plane->fbdev;
690 xres = fbdev->panel->x_res;
691 yres = fbdev->panel->y_res;
695 xres = fbdev->panel->y_res;
696 yres = fbdev->panel->x_res;
706 if (!fbdev->ctrl->update_window ||
707 fbdev->ctrl->get_update_mode() != OMAPFB_MANUAL_UPDATE)
721 return fbdev->ctrl->update_window(fbi, win, callback, callback_data);
730 omapfb_rqueue_lock(plane->fbdev);
732 omapfb_rqueue_unlock(plane->fbdev);
740 struct omapfb_device *fbdev = plane->fbdev;
744 if (!fbdev->ctrl->update_window ||
745 fbdev->ctrl->get_update_mode() != OMAPFB_MANUAL_UPDATE)
758 omapfb_rqueue_lock(fbdev);
759 r = fbdev->ctrl->update_window(fbi, &win, NULL, NULL);
760 omapfb_rqueue_unlock(fbdev);
768 struct omapfb_device *fbdev = plane->fbdev;
769 struct lcd_panel *panel = fbdev->panel;
777 omapfb_rqueue_lock(fbdev);
778 if (pi->enabled && !fbdev->mem_desc.region[plane->idx].size) {
795 r = fbdev->ctrl->enable_plane(plane->idx, pi->enabled);
801 omapfb_rqueue_unlock(fbdev);
816 struct omapfb_device *fbdev = plane->fbdev;
817 struct omapfb_mem_region *rg = &fbdev->mem_desc.region[plane->idx];
821 if (fbdev->ctrl->setup_mem == NULL)
827 omapfb_rqueue_lock(fbdev);
833 struct fb_var_screeninfo *new_var = &fbdev->new_var;
855 if (fbdev->ctrl->sync)
856 fbdev->ctrl->sync();
857 r = fbdev->ctrl->setup_mem(plane->idx, size, mi->type, &paddr);
884 omapfb_rqueue_unlock(fbdev);
892 struct omapfb_device *fbdev = plane->fbdev;
895 rg = &fbdev->mem_desc.region[plane->idx];
903 static int omapfb_set_color_key(struct omapfb_device *fbdev,
908 if (!fbdev->ctrl->set_color_key)
911 omapfb_rqueue_lock(fbdev);
912 r = fbdev->ctrl->set_color_key(ck);
913 omapfb_rqueue_unlock(fbdev);
918 static int omapfb_get_color_key(struct omapfb_device *fbdev,
923 if (!fbdev->ctrl->get_color_key)
926 omapfb_rqueue_lock(fbdev);
927 r = fbdev->ctrl->get_color_key(ck);
928 omapfb_rqueue_unlock(fbdev);
982 void omapfb_notify_clients(struct omapfb_device *fbdev, unsigned long event)
992 fbdev->fb_info[i]);
996 static int omapfb_set_update_mode(struct omapfb_device *fbdev,
1001 omapfb_rqueue_lock(fbdev);
1002 r = fbdev->ctrl->set_update_mode(mode);
1003 omapfb_rqueue_unlock(fbdev);
1008 static enum omapfb_update_mode omapfb_get_update_mode(struct omapfb_device *fbdev)
1012 omapfb_rqueue_lock(fbdev);
1013 r = fbdev->ctrl->get_update_mode();
1014 omapfb_rqueue_unlock(fbdev);
1019 static void omapfb_get_caps(struct omapfb_device *fbdev, int plane,
1023 fbdev->ctrl->get_caps(plane, caps);
1024 if (fbdev->panel->get_caps)
1025 caps->ctrl |= fbdev->panel->get_caps(fbdev->panel);
1029 void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval)
1031 omapfb_rqueue_lock(fbdev);
1032 *(u16 *)fbdev->mem_desc.region[0].vaddr = pixval;
1033 if (fbdev->ctrl->get_update_mode() == OMAPFB_MANUAL_UPDATE) {
1041 fbdev->ctrl->update_window(fbdev->fb_info[0], &win, NULL, NULL);
1043 omapfb_rqueue_unlock(fbdev);
1055 struct omapfb_device *fbdev = plane->fbdev;
1087 r = omapfb_set_update_mode(fbdev, p.update_mode);
1090 p.update_mode = omapfb_get_update_mode(fbdev);
1149 r = omapfb_set_color_key(fbdev, &p.color_key);
1152 if ((r = omapfb_get_color_key(fbdev, &p.color_key)) < 0)
1159 omapfb_get_caps(fbdev, plane->idx, &p.caps);
1171 if (!fbdev->panel->run_test) {
1175 r = fbdev->panel->run_test(fbdev->panel, test_num);
1186 if (!fbdev->ctrl->run_test) {
1190 r = fbdev->ctrl->run_test(test_num);
1203 struct omapfb_device *fbdev = plane->fbdev;
1206 omapfb_rqueue_lock(fbdev);
1207 r = fbdev->ctrl->mmap(info, vma);
1208 omapfb_rqueue_unlock(fbdev);
1240 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1248 omapfb_get_caps(fbdev, plane, &caps);
1260 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1269 omapfb_get_caps(fbdev, plane, &caps);
1307 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1309 return sysfs_emit(buf, "%s\n", fbdev->panel->name);
1316 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1319 if (fbdev->panel->get_bklight_level) {
1321 fbdev->panel->get_bklight_level(fbdev->panel));
1331 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1334 if (fbdev->panel->set_bklight_level) {
1338 r = fbdev->panel->set_bklight_level(fbdev->panel,
1350 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1353 if (fbdev->panel->get_bklight_level) {
1355 fbdev->panel->get_bklight_max(fbdev->panel));
1383 struct omapfb_device *fbdev = dev_get_drvdata(dev);
1385 return sysfs_emit(buf, "%s\n", fbdev->ctrl->name);
1401 static int omapfb_register_sysfs(struct omapfb_device *fbdev)
1405 if ((r = device_create_file(fbdev->dev, &dev_attr_caps_num)))
1408 if ((r = device_create_file(fbdev->dev, &dev_attr_caps_text)))
1411 if ((r = sysfs_create_group(&fbdev->dev->kobj, &panel_attr_grp)))
1414 if ((r = sysfs_create_group(&fbdev->dev->kobj, &ctrl_attr_grp)))
1419 sysfs_remove_group(&fbdev->dev->kobj, &panel_attr_grp);
1421 device_remove_file(fbdev->dev, &dev_attr_caps_text);
1423 device_remove_file(fbdev->dev, &dev_attr_caps_num);
1425 dev_err(fbdev->dev, "unable to register sysfs interface\n");
1429 static void omapfb_unregister_sysfs(struct omapfb_device *fbdev)
1431 sysfs_remove_group(&fbdev->dev->kobj, &ctrl_attr_grp);
1432 sysfs_remove_group(&fbdev->dev->kobj, &panel_attr_grp);
1433 device_remove_file(fbdev->dev, &dev_attr_caps_num);
1434 device_remove_file(fbdev->dev, &dev_attr_caps_text);
1445 static int fbinfo_init(struct omapfb_device *fbdev, struct fb_info *info)
1455 info->pseudo_palette = fbdev->pseudo_palette;
1463 var->bits_per_pixel = fbdev->panel->bpp;
1470 dev_err(fbdev->dev, "unable to allocate color map memory\n");
1476 static void fbinfo_cleanup(struct omapfb_device *fbdev, struct fb_info *fbi)
1481 static void planes_cleanup(struct omapfb_device *fbdev)
1485 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) {
1486 if (fbdev->fb_info[i] == NULL)
1488 fbinfo_cleanup(fbdev, fbdev->fb_info[i]);
1489 framebuffer_release(fbdev->fb_info[i]);
1493 static int planes_init(struct omapfb_device *fbdev)
1499 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) {
1502 fbdev->dev);
1504 planes_cleanup(fbdev);
1509 plane->fbdev = fbdev;
1511 fbdev->fb_info[i] = fbi;
1513 if ((r = fbinfo_init(fbdev, fbi)) < 0) {
1515 planes_cleanup(fbdev);
1528 static void omapfb_free_resources(struct omapfb_device *fbdev, int state)
1534 for (i = 0; i < fbdev->mem_desc.region_cnt; i++)
1535 unregister_framebuffer(fbdev->fb_info[i]);
1538 omapfb_unregister_sysfs(fbdev);
1541 if (fbdev->panel->disable)
1542 fbdev->panel->disable(fbdev->panel);
1545 omapfb_set_update_mode(fbdev, OMAPFB_UPDATE_DISABLED);
1548 planes_cleanup(fbdev);
1551 ctrl_cleanup(fbdev);
1554 if (fbdev->panel->cleanup)
1555 fbdev->panel->cleanup(fbdev->panel);
1558 dev_set_drvdata(fbdev->dev, NULL);
1559 kfree(fbdev);
1569 static int omapfb_find_ctrl(struct omapfb_device *fbdev)
1575 conf = dev_get_platdata(fbdev->dev);
1577 fbdev->ctrl = NULL;
1582 fbdev->ctrl = fbdev->int_ctrl;
1587 dev_dbg(fbdev->dev, "ctrl %s\n", ctrls[i]->name);
1589 fbdev->ctrl = ctrls[i];
1594 if (fbdev->ctrl == NULL) {
1595 dev_dbg(fbdev->dev, "ctrl %s not supported\n", name);
1618 struct omapfb_device *fbdev = NULL;
1639 fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL);
1640 if (fbdev == NULL) {
1646 fbdev->int_irq = platform_get_irq(pdev, 0);
1647 if (fbdev->int_irq < 0) {
1652 fbdev->ext_irq = platform_get_irq(pdev, 1);
1653 if (fbdev->ext_irq < 0) {
1660 fbdev->dev = &pdev->dev;
1661 fbdev->panel = panel;
1662 fbdev->dssdev = &omapdss_device;
1663 platform_set_drvdata(pdev, fbdev);
1665 mutex_init(&fbdev->rqueue_mutex);
1667 fbdev->int_ctrl = &omap1_int_ctrl;
1669 fbdev->ext_if = &omap1_ext_if;
1671 if (omapfb_find_ctrl(fbdev) < 0) {
1672 dev_err(fbdev->dev,
1678 if (fbdev->panel->init) {
1679 r = fbdev->panel->init(fbdev->panel, fbdev);
1684 pr_info("omapfb: configured for panel %s\n", fbdev->panel->name);
1686 def_vxres = def_vxres ? def_vxres : fbdev->panel->x_res;
1687 def_vyres = def_vyres ? def_vyres : fbdev->panel->y_res;
1691 r = ctrl_init(fbdev);
1694 if (fbdev->ctrl->mmap != NULL)
1698 r = planes_init(fbdev);
1708 r = ctrl_change_mode(fbdev->fb_info[0]);
1710 dev_err(fbdev->dev, "mode setting failed\n");
1715 r = fbdev->ctrl->enable_plane(OMAPFB_PLANE_GFX, 1);
1719 omapfb_set_update_mode(fbdev, manual_update ?
1723 if (fbdev->panel->enable) {
1724 r = fbdev->panel->enable(fbdev->panel);
1730 r = omapfb_register_sysfs(fbdev);
1736 for (i = 0; i < fbdev->mem_desc.region_cnt; i++) {
1737 r = register_framebuffer(fbdev->fb_info[i]);
1739 dev_err(fbdev->dev,
1743 vram += fbdev->mem_desc.region[i].size;
1746 fbdev->state = OMAPFB_ACTIVE;
1748 panel = fbdev->panel;
1753 omapfb_dev = fbdev;
1756 vram, fbdev->mem_desc.region_cnt);
1764 omapfb_free_resources(fbdev, init_state);
1801 struct omapfb_device *fbdev = platform_get_drvdata(pdev);
1802 enum omapfb_state saved_state = fbdev->state;
1806 fbdev->state = OMAPFB_DISABLED;
1807 omapfb_free_resources(fbdev, saved_state);
1810 fbdev->dssdev = NULL;
1816 struct omapfb_device *fbdev = platform_get_drvdata(pdev);
1818 if (fbdev != NULL)
1819 omapfb_blank(FB_BLANK_POWERDOWN, fbdev->fb_info[0]);
1826 struct omapfb_device *fbdev = platform_get_drvdata(pdev);
1828 if (fbdev != NULL)
1829 omapfb_blank(FB_BLANK_UNBLANK, fbdev->fb_info[0]);