diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-11 21:21:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-11 21:21:02 -0400 |
commit | 5f76945a9c978b8b8bf8eb7fe3b17b9981240a97 (patch) | |
tree | df61aca168df657bc71ce8b578bcb0c81b0622ee /drivers/video/omap2/omapfb | |
parent | 940e3a8dd6683a3787faf769b3df7a06f1c2fa31 (diff) | |
parent | cd9d6f10d07f26dd8a70e519c22b6b4f8a9e3e7a (diff) |
Merge tag 'fbdev-updates-for-3.7' of git://github.com/schandinat/linux-2.6
Pull fbdev updates from Florian Tobias Schandinat:
"This includes:
- large updates for OMAP
- basic OMAP5 DSS support for DPI and DSI outputs
- large cleanups and restructuring
- some update to Exynos and da8xx-fb
- removal of the pnx4008 driver (arch removed)
- various other small patches"
Fix up some trivial conflicts (mostly just include line changes, but
also some due to the renaming of the deferred work functions by Tejun).
* tag 'fbdev-updates-for-3.7' of git://github.com/schandinat/linux-2.6: (193 commits)
gbefb: fix compile error
video: mark nuc900fb_map_video_memory as __devinit
video/mx3fb: set .owner to prevent module unloading while being used
video: exynos_dp: use clk_prepare_enable and clk_disable_unprepare
drivers/video/exynos/exynos_mipi_dsi.c: fix error return code
drivers/video/savage/savagefb_driver.c: fix error return code
video: s3c-fb: use clk_prepare_enable and clk_disable_unprepare
da8xx-fb: save and restore LCDC context across suspend/resume cycle
da8xx-fb: add pm_runtime support
video/udlfb: fix line counting in fb_write
OMAPDSS: add missing include for string.h
OMAPDSS: DISPC: Configure color conversion coefficients for writeback
OMAPDSS: DISPC: Add manager like functions for writeback
OMAPDSS: DISPC: Configure writeback FIFOs
OMAPDSS: DISPC: Configure writeback specific parameters in dispc_wb_setup()
OMAPDSS: DISPC: Configure overlay-like parameters in dispc_wb_setup
OMAPDSS: DISPC: Add function to set channel in for writeback
OMAPDSS: DISPC: Don't set chroma resampling bit for writeback
OMAPDSS: DISPC: Downscale chroma if plane is writeback
OMAPDSS: DISPC: Configure input and output sizes for writeback
...
Diffstat (limited to 'drivers/video/omap2/omapfb')
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 7 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-main.c | 32 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb.h | 5 |
3 files changed, 38 insertions, 6 deletions
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c index c6cf372d22c5..606b89f12351 100644 --- a/drivers/video/omap2/omapfb/omapfb-ioctl.c +++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c | |||
@@ -599,6 +599,7 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
599 | struct omapfb_info *ofbi = FB2OFB(fbi); | 599 | struct omapfb_info *ofbi = FB2OFB(fbi); |
600 | struct omapfb2_device *fbdev = ofbi->fbdev; | 600 | struct omapfb2_device *fbdev = ofbi->fbdev; |
601 | struct omap_dss_device *display = fb2display(fbi); | 601 | struct omap_dss_device *display = fb2display(fbi); |
602 | struct omap_overlay_manager *mgr; | ||
602 | 603 | ||
603 | union { | 604 | union { |
604 | struct omapfb_update_window_old uwnd_o; | 605 | struct omapfb_update_window_old uwnd_o; |
@@ -786,12 +787,14 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
786 | 787 | ||
787 | case OMAPFB_WAITFORVSYNC: | 788 | case OMAPFB_WAITFORVSYNC: |
788 | DBG("ioctl WAITFORVSYNC\n"); | 789 | DBG("ioctl WAITFORVSYNC\n"); |
789 | if (!display) { | 790 | if (!display && !display->output && !display->output->manager) { |
790 | r = -EINVAL; | 791 | r = -EINVAL; |
791 | break; | 792 | break; |
792 | } | 793 | } |
793 | 794 | ||
794 | r = display->manager->wait_for_vsync(display->manager); | 795 | mgr = display->output->manager; |
796 | |||
797 | r = mgr->wait_for_vsync(mgr); | ||
795 | break; | 798 | break; |
796 | 799 | ||
797 | case OMAPFB_WAITFORGO: | 800 | case OMAPFB_WAITFORGO: |
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c index 15373f4aee19..16db1589bd91 100644 --- a/drivers/video/omap2/omapfb/omapfb-main.c +++ b/drivers/video/omap2/omapfb/omapfb-main.c | |||
@@ -1593,6 +1593,20 @@ static int omapfb_allocate_all_fbs(struct omapfb2_device *fbdev) | |||
1593 | return 0; | 1593 | return 0; |
1594 | } | 1594 | } |
1595 | 1595 | ||
1596 | static void omapfb_clear_fb(struct fb_info *fbi) | ||
1597 | { | ||
1598 | const struct fb_fillrect rect = { | ||
1599 | .dx = 0, | ||
1600 | .dy = 0, | ||
1601 | .width = fbi->var.xres_virtual, | ||
1602 | .height = fbi->var.yres_virtual, | ||
1603 | .color = 0, | ||
1604 | .rop = ROP_COPY, | ||
1605 | }; | ||
1606 | |||
1607 | cfb_fillrect(fbi, &rect); | ||
1608 | } | ||
1609 | |||
1596 | int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) | 1610 | int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) |
1597 | { | 1611 | { |
1598 | struct omapfb_info *ofbi = FB2OFB(fbi); | 1612 | struct omapfb_info *ofbi = FB2OFB(fbi); |
@@ -1662,6 +1676,8 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) | |||
1662 | goto err; | 1676 | goto err; |
1663 | } | 1677 | } |
1664 | 1678 | ||
1679 | omapfb_clear_fb(fbi); | ||
1680 | |||
1665 | return 0; | 1681 | return 0; |
1666 | err: | 1682 | err: |
1667 | omapfb_free_fbmem(fbi); | 1683 | omapfb_free_fbmem(fbi); |
@@ -1946,6 +1962,16 @@ static int omapfb_create_framebuffers(struct omapfb2_device *fbdev) | |||
1946 | } | 1962 | } |
1947 | } | 1963 | } |
1948 | 1964 | ||
1965 | for (i = 0; i < fbdev->num_fbs; i++) { | ||
1966 | struct fb_info *fbi = fbdev->fbs[i]; | ||
1967 | struct omapfb_info *ofbi = FB2OFB(fbi); | ||
1968 | |||
1969 | if (ofbi->region->size == 0) | ||
1970 | continue; | ||
1971 | |||
1972 | omapfb_clear_fb(fbi); | ||
1973 | } | ||
1974 | |||
1949 | DBG("fb_infos initialized\n"); | 1975 | DBG("fb_infos initialized\n"); |
1950 | 1976 | ||
1951 | for (i = 0; i < fbdev->num_fbs; i++) { | 1977 | for (i = 0; i < fbdev->num_fbs; i++) { |
@@ -2354,6 +2380,7 @@ static int __init omapfb_probe(struct platform_device *pdev) | |||
2354 | struct omap_overlay *ovl; | 2380 | struct omap_overlay *ovl; |
2355 | struct omap_dss_device *def_display; | 2381 | struct omap_dss_device *def_display; |
2356 | struct omap_dss_device *dssdev; | 2382 | struct omap_dss_device *dssdev; |
2383 | struct omap_dss_device *ovl_device; | ||
2357 | 2384 | ||
2358 | DBG("omapfb_probe\n"); | 2385 | DBG("omapfb_probe\n"); |
2359 | 2386 | ||
@@ -2427,8 +2454,9 @@ static int __init omapfb_probe(struct platform_device *pdev) | |||
2427 | /* gfx overlay should be the default one. find a display | 2454 | /* gfx overlay should be the default one. find a display |
2428 | * connected to that, and use it as default display */ | 2455 | * connected to that, and use it as default display */ |
2429 | ovl = omap_dss_get_overlay(0); | 2456 | ovl = omap_dss_get_overlay(0); |
2430 | if (ovl->manager && ovl->manager->device) { | 2457 | ovl_device = ovl->get_device(ovl); |
2431 | def_display = ovl->manager->device; | 2458 | if (ovl_device) { |
2459 | def_display = ovl_device; | ||
2432 | } else { | 2460 | } else { |
2433 | dev_warn(&pdev->dev, "cannot find default display\n"); | 2461 | dev_warn(&pdev->dev, "cannot find default display\n"); |
2434 | def_display = NULL; | 2462 | def_display = NULL; |
diff --git a/drivers/video/omap2/omapfb/omapfb.h b/drivers/video/omap2/omapfb/omapfb.h index 30361a09aecd..5ced9b334d35 100644 --- a/drivers/video/omap2/omapfb/omapfb.h +++ b/drivers/video/omap2/omapfb/omapfb.h | |||
@@ -148,8 +148,9 @@ static inline struct omap_dss_device *fb2display(struct fb_info *fbi) | |||
148 | 148 | ||
149 | /* XXX: returns the display connected to first attached overlay */ | 149 | /* XXX: returns the display connected to first attached overlay */ |
150 | for (i = 0; i < ofbi->num_overlays; i++) { | 150 | for (i = 0; i < ofbi->num_overlays; i++) { |
151 | if (ofbi->overlays[i]->manager) | 151 | struct omap_overlay *ovl = ofbi->overlays[i]; |
152 | return ofbi->overlays[i]->manager->device; | 152 | |
153 | return ovl->get_device(ovl); | ||
153 | } | 154 | } |
154 | 155 | ||
155 | return NULL; | 156 | return NULL; |