Lines Matching refs:fbdev
60 static int omapfb_fb_init(struct omapfb2_device *fbdev, struct fb_info *fbi);
61 static int omapfb_get_recommended_bpp(struct omapfb2_device *fbdev,
1231 struct omapfb2_device *fbdev = ofbi->fbdev; in omapfb_blank() local
1239 omapfb_lock(fbdev); in omapfb_blank()
1241 d = get_display_data(fbdev, display); in omapfb_blank()
1253 omapfb_start_auto_update(fbdev, display); in omapfb_blank()
1267 omapfb_stop_auto_update(fbdev, display); in omapfb_blank()
1278 omapfb_unlock(fbdev); in omapfb_blank()
1315 struct omapfb2_device *fbdev = ofbi->fbdev; in omapfb_free_fbmem() local
1335 dma_free_attrs(fbdev->dev, rg->size, rg->token, rg->dma_handle, in omapfb_free_fbmem()
1352 static int omapfb_free_all_fbmem(struct omapfb2_device *fbdev) in omapfb_free_all_fbmem() argument
1358 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_free_all_fbmem()
1359 struct fb_info *fbi = fbdev->fbs[i]; in omapfb_free_all_fbmem()
1371 struct omapfb2_device *fbdev = ofbi->fbdev; in omapfb_alloc_fbmem() local
1397 token = dma_alloc_attrs(fbdev->dev, size, &dma_handle, in omapfb_alloc_fbmem()
1401 dev_err(fbdev->dev, "failed to allocate framebuffer\n"); in omapfb_alloc_fbmem()
1411 dma_free_attrs(fbdev->dev, size, token, dma_handle, in omapfb_alloc_fbmem()
1413 dev_err(fbdev->dev, "vrfb create ctx failed\n"); in omapfb_alloc_fbmem()
1435 struct omapfb2_device *fbdev = ofbi->fbdev; in omapfb_alloc_fbmem_display() local
1444 switch (omapfb_get_recommended_bpp(fbdev, display)) { in omapfb_alloc_fbmem_display()
1537 static int omapfb_allocate_all_fbs(struct omapfb2_device *fbdev) in omapfb_allocate_all_fbs() argument
1548 dev_err(fbdev->dev, "failed to parse vram parameter\n"); in omapfb_allocate_all_fbs()
1554 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_allocate_all_fbs()
1558 r = omapfb_alloc_fbmem_display(fbdev->fbs[i], in omapfb_allocate_all_fbs()
1566 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_allocate_all_fbs()
1567 struct omapfb_info *ofbi = FB2OFB(fbdev->fbs[i]); in omapfb_allocate_all_fbs()
1598 struct omapfb2_device *fbdev = ofbi->fbdev; in omapfb_realloc_fbmem() local
1637 r = omapfb_fb_init(fbdev, fbi); in omapfb_realloc_fbmem()
1676 struct omapfb2_device *fbdev; in omapfb_auto_update_work() local
1683 fbdev = d->fbdev; in omapfb_auto_update_work()
1697 queue_delayed_work(fbdev->auto_update_wq, in omapfb_auto_update_work()
1701 void omapfb_start_auto_update(struct omapfb2_device *fbdev, in omapfb_start_auto_update() argument
1706 if (fbdev->auto_update_wq == NULL) { in omapfb_start_auto_update()
1712 dev_err(fbdev->dev, "Failed to create workqueue for " in omapfb_start_auto_update()
1717 fbdev->auto_update_wq = wq; in omapfb_start_auto_update()
1720 d = get_display_data(fbdev, display); in omapfb_start_auto_update()
1729 void omapfb_stop_auto_update(struct omapfb2_device *fbdev, in omapfb_stop_auto_update() argument
1734 d = get_display_data(fbdev, display); in omapfb_stop_auto_update()
1742 static int omapfb_fb_init(struct omapfb2_device *fbdev, struct fb_info *fbi) in omapfb_fb_init() argument
1751 fbi->pseudo_palette = fbdev->pseudo_palette; in omapfb_fb_init()
1782 switch (omapfb_get_recommended_bpp(fbdev, display)) { in omapfb_fb_init()
1790 dev_err(fbdev->dev, "illegal display " in omapfb_fb_init()
1816 dev_err(fbdev->dev, "unable to allocate color map memory\n"); in omapfb_fb_init()
1822 static void fbinfo_cleanup(struct omapfb2_device *fbdev, struct fb_info *fbi) in fbinfo_cleanup() argument
1828 static void omapfb_free_resources(struct omapfb2_device *fbdev) in omapfb_free_resources() argument
1834 if (fbdev == NULL) in omapfb_free_resources()
1837 for (i = 0; i < fbdev->num_overlays; i++) { in omapfb_free_resources()
1838 struct omap_overlay *ovl = fbdev->overlays[i]; in omapfb_free_resources()
1846 for (i = 0; i < fbdev->num_fbs; i++) in omapfb_free_resources()
1847 unregister_framebuffer(fbdev->fbs[i]); in omapfb_free_resources()
1850 omapfb_free_all_fbmem(fbdev); in omapfb_free_resources()
1852 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_free_resources()
1853 fbinfo_cleanup(fbdev, fbdev->fbs[i]); in omapfb_free_resources()
1854 framebuffer_release(fbdev->fbs[i]); in omapfb_free_resources()
1857 for (i = 0; i < fbdev->num_displays; i++) { in omapfb_free_resources()
1858 struct omap_dss_device *dssdev = fbdev->displays[i].dssdev; in omapfb_free_resources()
1860 if (fbdev->displays[i].auto_update_work_enabled) in omapfb_free_resources()
1861 omapfb_stop_auto_update(fbdev, dssdev); in omapfb_free_resources()
1871 if (fbdev->auto_update_wq != NULL) { in omapfb_free_resources()
1872 flush_workqueue(fbdev->auto_update_wq); in omapfb_free_resources()
1873 destroy_workqueue(fbdev->auto_update_wq); in omapfb_free_resources()
1874 fbdev->auto_update_wq = NULL; in omapfb_free_resources()
1877 dev_set_drvdata(fbdev->dev, NULL); in omapfb_free_resources()
1880 static int omapfb_create_framebuffers(struct omapfb2_device *fbdev) in omapfb_create_framebuffers() argument
1884 fbdev->num_fbs = 0; in omapfb_create_framebuffers()
1894 fbdev->dev); in omapfb_create_framebuffers()
1897 dev_err(fbdev->dev, in omapfb_create_framebuffers()
1904 fbdev->fbs[i] = fbi; in omapfb_create_framebuffers()
1907 ofbi->fbdev = fbdev; in omapfb_create_framebuffers()
1910 ofbi->region = &fbdev->regions[i]; in omapfb_create_framebuffers()
1919 fbdev->num_fbs++; in omapfb_create_framebuffers()
1925 for (i = 0; i < min(fbdev->num_fbs, fbdev->num_overlays); i++) { in omapfb_create_framebuffers()
1926 struct omapfb_info *ofbi = FB2OFB(fbdev->fbs[i]); in omapfb_create_framebuffers()
1928 ofbi->overlays[0] = fbdev->overlays[i]; in omapfb_create_framebuffers()
1933 r = omapfb_allocate_all_fbs(fbdev); in omapfb_create_framebuffers()
1935 dev_err(fbdev->dev, "failed to allocate fbmem\n"); in omapfb_create_framebuffers()
1942 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_create_framebuffers()
1943 struct fb_info *fbi = fbdev->fbs[i]; in omapfb_create_framebuffers()
1947 r = omapfb_fb_init(fbdev, fbi); in omapfb_create_framebuffers()
1951 dev_err(fbdev->dev, "failed to setup fb_info\n"); in omapfb_create_framebuffers()
1956 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_create_framebuffers()
1957 struct fb_info *fbi = fbdev->fbs[i]; in omapfb_create_framebuffers()
1968 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_create_framebuffers()
1969 r = register_framebuffer(fbdev->fbs[i]); in omapfb_create_framebuffers()
1971 dev_err(fbdev->dev, in omapfb_create_framebuffers()
1979 for (i = 0; i < fbdev->num_fbs; i++) { in omapfb_create_framebuffers()
1980 struct fb_info *fbi = fbdev->fbs[i]; in omapfb_create_framebuffers()
1988 dev_err(fbdev->dev, "failed to change mode\n"); in omapfb_create_framebuffers()
1994 if (fbdev->num_fbs > 0) { in omapfb_create_framebuffers()
1995 struct omapfb_info *ofbi = FB2OFB(fbdev->fbs[0]); in omapfb_create_framebuffers()
2005 dev_err(fbdev->dev, in omapfb_create_framebuffers()
2118 static int omapfb_set_def_mode(struct omapfb2_device *fbdev, in omapfb_set_def_mode() argument
2130 d = get_display_data(fbdev, display); in omapfb_set_def_mode()
2154 static int omapfb_get_recommended_bpp(struct omapfb2_device *fbdev, in omapfb_get_recommended_bpp() argument
2161 d = get_display_data(fbdev, dssdev); in omapfb_get_recommended_bpp()
2169 static int omapfb_parse_def_modes(struct omapfb2_device *fbdev) in omapfb_parse_def_modes() argument
2195 for (i = 0; i < fbdev->num_displays; ++i) { in omapfb_parse_def_modes()
2196 if (strcmp(fbdev->displays[i].dssdev->name, in omapfb_parse_def_modes()
2198 display = fbdev->displays[i].dssdev; in omapfb_parse_def_modes()
2208 r = omapfb_set_def_mode(fbdev, display, mode_str); in omapfb_parse_def_modes()
2322 static int omapfb_init_display(struct omapfb2_device *fbdev, in omapfb_init_display() argument
2331 dev_warn(fbdev->dev, "Failed to enable display '%s'\n", in omapfb_init_display()
2336 d = get_display_data(fbdev, dssdev); in omapfb_init_display()
2338 d->fbdev = fbdev; in omapfb_init_display()
2344 omapfb_start_auto_update(fbdev, dssdev); in omapfb_init_display()
2353 dev_err(fbdev->dev, "Failed to set TE\n"); in omapfb_init_display()
2361 dev_err(fbdev->dev, in omapfb_init_display()
2372 static int omapfb_init_connections(struct omapfb2_device *fbdev, in omapfb_init_connections() argument
2380 dev_err(fbdev->dev, "failed to connect default display\n"); in omapfb_init_connections()
2384 for (i = 0; i < fbdev->num_displays; ++i) { in omapfb_init_connections()
2385 struct omap_dss_device *dssdev = fbdev->displays[i].dssdev; in omapfb_init_connections()
2400 dev_err(fbdev->dev, "no ovl manager for the default display\n"); in omapfb_init_connections()
2404 for (i = 0; i < fbdev->num_overlays; i++) { in omapfb_init_connections()
2405 struct omap_overlay *ovl = fbdev->overlays[i]; in omapfb_init_connections()
2412 dev_warn(fbdev->dev, in omapfb_init_connections()
2421 omapfb_find_default_display(struct omapfb2_device *fbdev) in omapfb_find_default_display() argument
2434 for (i = 0; i < fbdev->num_displays; ++i) { in omapfb_find_default_display()
2437 dssdev = fbdev->displays[i].dssdev; in omapfb_find_default_display()
2451 for (i = 0; i < fbdev->num_displays; ++i) { in omapfb_find_default_display()
2455 dssdev = fbdev->displays[i].dssdev; in omapfb_find_default_display()
2466 return fbdev->displays[0].dssdev; in omapfb_find_default_display()
2471 struct omapfb2_device *fbdev = NULL; in omapfb_probe() local
2488 fbdev = devm_kzalloc(&pdev->dev, sizeof(struct omapfb2_device), in omapfb_probe()
2490 if (fbdev == NULL) { in omapfb_probe()
2505 mutex_init(&fbdev->mtx); in omapfb_probe()
2507 fbdev->dev = &pdev->dev; in omapfb_probe()
2508 platform_set_drvdata(pdev, fbdev); in omapfb_probe()
2510 fbdev->num_displays = 0; in omapfb_probe()
2524 d = &fbdev->displays[fbdev->num_displays++]; in omapfb_probe()
2532 if (fbdev->num_displays == 0) { in omapfb_probe()
2538 fbdev->num_overlays = omap_dss_get_num_overlays(); in omapfb_probe()
2539 for (i = 0; i < fbdev->num_overlays; i++) in omapfb_probe()
2540 fbdev->overlays[i] = omap_dss_get_overlay(i); in omapfb_probe()
2542 fbdev->num_managers = omap_dss_get_num_overlay_managers(); in omapfb_probe()
2543 for (i = 0; i < fbdev->num_managers; i++) in omapfb_probe()
2544 fbdev->managers[i] = omap_dss_get_overlay_manager(i); in omapfb_probe()
2546 def_display = omapfb_find_default_display(fbdev); in omapfb_probe()
2548 dev_err(fbdev->dev, "failed to find default display\n"); in omapfb_probe()
2553 r = omapfb_init_connections(fbdev, def_display); in omapfb_probe()
2555 dev_err(fbdev->dev, "failed to init overlay connections\n"); in omapfb_probe()
2560 if (omapfb_parse_def_modes(fbdev)) in omapfb_probe()
2572 r = omapfb_create_framebuffers(fbdev); in omapfb_probe()
2576 for (i = 0; i < fbdev->num_managers; i++) { in omapfb_probe()
2578 mgr = fbdev->managers[i]; in omapfb_probe()
2581 dev_warn(fbdev->dev, "failed to apply dispc config\n"); in omapfb_probe()
2587 r = omapfb_init_display(fbdev, def_display); in omapfb_probe()
2589 dev_err(fbdev->dev, in omapfb_probe()
2597 r = omapfb_create_sysfs(fbdev); in omapfb_probe()
2599 dev_err(fbdev->dev, "failed to create sysfs entries\n"); in omapfb_probe()
2608 dev_info(fbdev->dev, "using display '%s' mode %dx%d\n", in omapfb_probe()
2615 omapfb_free_resources(fbdev); in omapfb_probe()
2624 struct omapfb2_device *fbdev = platform_get_drvdata(pdev); in omapfb_remove() local
2628 omapfb_remove_sysfs(fbdev); in omapfb_remove()
2630 omapfb_free_resources(fbdev); in omapfb_remove()