diff options
| -rw-r--r-- | arch/arm/plat-omap/include/plat/display.h | 5 | ||||
| -rw-r--r-- | drivers/video/omap2/displays/panel-taal.c | 18 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/display.c | 7 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dsi.c | 53 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/rfbi.c | 7 | ||||
| -rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 5 | ||||
| -rw-r--r-- | drivers/video/omap2/omapfb/omapfb-main.c | 8 |
7 files changed, 34 insertions, 69 deletions
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h index aadea59b69bc..fe9601d2cd72 100644 --- a/arch/arm/plat-omap/include/plat/display.h +++ b/arch/arm/plat-omap/include/plat/display.h | |||
| @@ -483,9 +483,6 @@ struct omap_dss_device { | |||
| 483 | enum omap_dss_update_mode (*get_update_mode) | 483 | enum omap_dss_update_mode (*get_update_mode) |
| 484 | (struct omap_dss_device *dssdev); | 484 | (struct omap_dss_device *dssdev); |
| 485 | 485 | ||
| 486 | int (*enable_te)(struct omap_dss_device *dssdev, bool enable); | ||
| 487 | int (*get_te)(struct omap_dss_device *dssdev); | ||
| 488 | |||
| 489 | int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); | 486 | int (*set_wss)(struct omap_dss_device *dssdev, u32 wss); |
| 490 | u32 (*get_wss)(struct omap_dss_device *dssdev); | 487 | u32 (*get_wss)(struct omap_dss_device *dssdev); |
| 491 | 488 | ||
| @@ -513,6 +510,7 @@ struct omap_dss_driver { | |||
| 513 | 510 | ||
| 514 | int (*enable_te)(struct omap_dss_device *dssdev, bool enable); | 511 | int (*enable_te)(struct omap_dss_device *dssdev, bool enable); |
| 515 | int (*wait_for_te)(struct omap_dss_device *dssdev); | 512 | int (*wait_for_te)(struct omap_dss_device *dssdev); |
| 513 | int (*get_te)(struct omap_dss_device *dssdev); | ||
| 516 | 514 | ||
| 517 | u8 (*get_rotate)(struct omap_dss_device *dssdev); | 515 | u8 (*get_rotate)(struct omap_dss_device *dssdev); |
| 518 | int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate); | 516 | int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate); |
| @@ -567,5 +565,6 @@ int omap_dispc_wait_for_irq_interruptible_timeout(u32 irqmask, | |||
| 567 | #define to_dss_device(x) container_of((x), struct omap_dss_device, dev) | 565 | #define to_dss_device(x) container_of((x), struct omap_dss_device, dev) |
| 568 | 566 | ||
| 569 | void omapdss_dsi_vc_enable_hs(int channel, bool enable); | 567 | void omapdss_dsi_vc_enable_hs(int channel, bool enable); |
| 568 | int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable); | ||
| 570 | 569 | ||
| 571 | #endif | 570 | #endif |
diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c index e00502ea46e5..af4b0b03b745 100644 --- a/drivers/video/omap2/displays/panel-taal.c +++ b/drivers/video/omap2/displays/panel-taal.c | |||
| @@ -736,6 +736,8 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable) | |||
| 736 | struct taal_data *td = dev_get_drvdata(&dssdev->dev); | 736 | struct taal_data *td = dev_get_drvdata(&dssdev->dev); |
| 737 | int r; | 737 | int r; |
| 738 | 738 | ||
| 739 | dsi_bus_lock(); | ||
| 740 | |||
| 739 | td->te_enabled = enable; | 741 | td->te_enabled = enable; |
| 740 | 742 | ||
| 741 | if (enable) | 743 | if (enable) |
| @@ -743,9 +745,23 @@ static int taal_enable_te(struct omap_dss_device *dssdev, bool enable) | |||
| 743 | else | 745 | else |
| 744 | r = taal_dcs_write_0(DCS_TEAR_OFF); | 746 | r = taal_dcs_write_0(DCS_TEAR_OFF); |
| 745 | 747 | ||
| 748 | omapdss_dsi_enable_te(dssdev, enable); | ||
| 749 | |||
| 750 | /* XXX for some reason, DSI TE breaks if we don't wait here. | ||
| 751 | * Panel bug? Needs more studying */ | ||
| 752 | msleep(100); | ||
| 753 | |||
| 754 | dsi_bus_unlock(); | ||
| 755 | |||
| 746 | return r; | 756 | return r; |
| 747 | } | 757 | } |
| 748 | 758 | ||
| 759 | static int taal_get_te(struct omap_dss_device *dssdev) | ||
| 760 | { | ||
| 761 | struct taal_data *td = dev_get_drvdata(&dssdev->dev); | ||
| 762 | return td->te_enabled; | ||
| 763 | } | ||
| 764 | |||
| 749 | static int taal_wait_te(struct omap_dss_device *dssdev) | 765 | static int taal_wait_te(struct omap_dss_device *dssdev) |
| 750 | { | 766 | { |
| 751 | struct taal_data *td = dev_get_drvdata(&dssdev->dev); | 767 | struct taal_data *td = dev_get_drvdata(&dssdev->dev); |
| @@ -993,7 +1009,9 @@ static struct omap_dss_driver taal_driver = { | |||
| 993 | .get_recommended_bpp = omapdss_default_get_recommended_bpp, | 1009 | .get_recommended_bpp = omapdss_default_get_recommended_bpp, |
| 994 | 1010 | ||
| 995 | .enable_te = taal_enable_te, | 1011 | .enable_te = taal_enable_te, |
| 1012 | .get_te = taal_get_te, | ||
| 996 | .wait_for_te = taal_wait_te, | 1013 | .wait_for_te = taal_wait_te, |
| 1014 | |||
| 997 | .set_rotate = taal_rotate, | 1015 | .set_rotate = taal_rotate, |
| 998 | .get_rotate = taal_get_rotate, | 1016 | .get_rotate = taal_get_rotate, |
| 999 | .set_mirror = taal_mirror, | 1017 | .set_mirror = taal_mirror, |
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c index af8aae7ef814..383a8c82dae8 100644 --- a/drivers/video/omap2/dss/display.c +++ b/drivers/video/omap2/dss/display.c | |||
| @@ -106,7 +106,8 @@ static ssize_t display_tear_show(struct device *dev, | |||
| 106 | { | 106 | { |
| 107 | struct omap_dss_device *dssdev = to_dss_device(dev); | 107 | struct omap_dss_device *dssdev = to_dss_device(dev); |
| 108 | return snprintf(buf, PAGE_SIZE, "%d\n", | 108 | return snprintf(buf, PAGE_SIZE, "%d\n", |
| 109 | dssdev->get_te ? dssdev->get_te(dssdev) : 0); | 109 | dssdev->driver->get_te ? |
| 110 | dssdev->driver->get_te(dssdev) : 0); | ||
| 110 | } | 111 | } |
| 111 | 112 | ||
| 112 | static ssize_t display_tear_store(struct device *dev, | 113 | static ssize_t display_tear_store(struct device *dev, |
| @@ -116,12 +117,12 @@ static ssize_t display_tear_store(struct device *dev, | |||
| 116 | unsigned long te; | 117 | unsigned long te; |
| 117 | int r; | 118 | int r; |
| 118 | 119 | ||
| 119 | if (!dssdev->enable_te || !dssdev->get_te) | 120 | if (!dssdev->driver->enable_te || !dssdev->driver->get_te) |
| 120 | return -ENOENT; | 121 | return -ENOENT; |
| 121 | 122 | ||
| 122 | te = simple_strtoul(buf, NULL, 0); | 123 | te = simple_strtoul(buf, NULL, 0); |
| 123 | 124 | ||
| 124 | r = dssdev->enable_te(dssdev, te); | 125 | r = dssdev->driver->enable_te(dssdev, te); |
| 125 | if (r) | 126 | if (r) |
| 126 | return r; | 127 | return r; |
| 127 | 128 | ||
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c index abc66f2c0705..697a78b85807 100644 --- a/drivers/video/omap2/dss/dsi.c +++ b/drivers/video/omap2/dss/dsi.c | |||
| @@ -2879,20 +2879,6 @@ static int dsi_set_update_mode(struct omap_dss_device *dssdev, | |||
| 2879 | return r; | 2879 | return r; |
| 2880 | } | 2880 | } |
| 2881 | 2881 | ||
| 2882 | static int dsi_set_te(struct omap_dss_device *dssdev, bool enable) | ||
| 2883 | { | ||
| 2884 | int r = 0; | ||
| 2885 | |||
| 2886 | if (dssdev->driver->enable_te) { | ||
| 2887 | r = dssdev->driver->enable_te(dssdev, enable); | ||
| 2888 | /* XXX for some reason, DSI TE breaks if we don't wait here. | ||
| 2889 | * Panel bug? Needs more studying */ | ||
| 2890 | msleep(100); | ||
| 2891 | } | ||
| 2892 | |||
| 2893 | return r; | ||
| 2894 | } | ||
| 2895 | |||
| 2896 | static void dsi_handle_framedone(void) | 2882 | static void dsi_handle_framedone(void) |
| 2897 | { | 2883 | { |
| 2898 | int r; | 2884 | int r; |
| @@ -3267,9 +3253,6 @@ static int dsi_display_enable(struct omap_dss_device *dssdev) | |||
| 3267 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; | 3253 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; |
| 3268 | 3254 | ||
| 3269 | dsi.use_ext_te = dssdev->phy.dsi.ext_te; | 3255 | dsi.use_ext_te = dssdev->phy.dsi.ext_te; |
| 3270 | r = dsi_set_te(dssdev, dsi.te_enabled); | ||
| 3271 | if (r) | ||
| 3272 | goto err4; | ||
| 3273 | 3256 | ||
| 3274 | dsi_set_update_mode(dssdev, dsi.user_update_mode); | 3257 | dsi_set_update_mode(dssdev, dsi.user_update_mode); |
| 3275 | 3258 | ||
| @@ -3278,9 +3261,6 @@ static int dsi_display_enable(struct omap_dss_device *dssdev) | |||
| 3278 | 3261 | ||
| 3279 | return 0; | 3262 | return 0; |
| 3280 | 3263 | ||
| 3281 | err4: | ||
| 3282 | |||
| 3283 | dsi_display_uninit_dsi(dssdev); | ||
| 3284 | err3: | 3264 | err3: |
| 3285 | dsi_display_uninit_dispc(dssdev); | 3265 | dsi_display_uninit_dispc(dssdev); |
| 3286 | err2: | 3266 | err2: |
| @@ -3383,10 +3363,6 @@ static int dsi_display_resume(struct omap_dss_device *dssdev) | |||
| 3383 | 3363 | ||
| 3384 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; | 3364 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; |
| 3385 | 3365 | ||
| 3386 | r = dsi_set_te(dssdev, dsi.te_enabled); | ||
| 3387 | if (r) | ||
| 3388 | goto err2; | ||
| 3389 | |||
| 3390 | dsi_set_update_mode(dssdev, dsi.user_update_mode); | 3366 | dsi_set_update_mode(dssdev, dsi.user_update_mode); |
| 3391 | 3367 | ||
| 3392 | dsi_bus_unlock(); | 3368 | dsi_bus_unlock(); |
| @@ -3504,33 +3480,12 @@ static enum omap_dss_update_mode dsi_display_get_update_mode( | |||
| 3504 | } | 3480 | } |
| 3505 | 3481 | ||
| 3506 | 3482 | ||
| 3507 | static int dsi_display_enable_te(struct omap_dss_device *dssdev, bool enable) | 3483 | int omapdss_dsi_enable_te(struct omap_dss_device *dssdev, bool enable) |
| 3508 | { | 3484 | { |
| 3509 | int r = 0; | ||
| 3510 | |||
| 3511 | DSSDBGF("%d", enable); | ||
| 3512 | |||
| 3513 | if (!dssdev->driver->enable_te) | ||
| 3514 | return -ENOENT; | ||
| 3515 | |||
| 3516 | dsi_bus_lock(); | ||
| 3517 | |||
| 3518 | dsi.te_enabled = enable; | 3485 | dsi.te_enabled = enable; |
| 3519 | 3486 | return 0; | |
| 3520 | if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) | ||
| 3521 | goto end; | ||
| 3522 | |||
| 3523 | r = dsi_set_te(dssdev, enable); | ||
| 3524 | end: | ||
| 3525 | dsi_bus_unlock(); | ||
| 3526 | |||
| 3527 | return r; | ||
| 3528 | } | ||
| 3529 | |||
| 3530 | static int dsi_display_get_te(struct omap_dss_device *dssdev) | ||
| 3531 | { | ||
| 3532 | return dsi.te_enabled; | ||
| 3533 | } | 3487 | } |
| 3488 | EXPORT_SYMBOL(omapdss_dsi_enable_te); | ||
| 3534 | 3489 | ||
| 3535 | void dsi_get_overlay_fifo_thresholds(enum omap_plane plane, | 3490 | void dsi_get_overlay_fifo_thresholds(enum omap_plane plane, |
| 3536 | u32 fifo_size, enum omap_burst_size *burst_size, | 3491 | u32 fifo_size, enum omap_burst_size *burst_size, |
| @@ -3557,8 +3512,6 @@ int dsi_init_display(struct omap_dss_device *dssdev) | |||
| 3557 | dssdev->sync = dsi_display_sync; | 3512 | dssdev->sync = dsi_display_sync; |
| 3558 | dssdev->set_update_mode = dsi_display_set_update_mode; | 3513 | dssdev->set_update_mode = dsi_display_set_update_mode; |
| 3559 | dssdev->get_update_mode = dsi_display_get_update_mode; | 3514 | dssdev->get_update_mode = dsi_display_get_update_mode; |
| 3560 | dssdev->enable_te = dsi_display_enable_te; | ||
| 3561 | dssdev->get_te = dsi_display_get_te; | ||
| 3562 | 3515 | ||
| 3563 | /* XXX these should be figured out dynamically */ | 3516 | /* XXX these should be figured out dynamically */ |
| 3564 | dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE | | 3517 | dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE | |
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c index 6b9cd767c7c1..71293876fed1 100644 --- a/drivers/video/omap2/dss/rfbi.c +++ b/drivers/video/omap2/dss/rfbi.c | |||
| @@ -1232,12 +1232,6 @@ static int rfbi_display_sync(struct omap_dss_device *dssdev) | |||
| 1232 | return 0; | 1232 | return 0; |
| 1233 | } | 1233 | } |
| 1234 | 1234 | ||
| 1235 | static int rfbi_display_enable_te(struct omap_dss_device *dssdev, bool enable) | ||
| 1236 | { | ||
| 1237 | dssdev->driver->enable_te(dssdev, enable); | ||
| 1238 | return 0; | ||
| 1239 | } | ||
| 1240 | |||
| 1241 | static int rfbi_display_enable(struct omap_dss_device *dssdev) | 1235 | static int rfbi_display_enable(struct omap_dss_device *dssdev) |
| 1242 | { | 1236 | { |
| 1243 | int r; | 1237 | int r; |
| @@ -1299,7 +1293,6 @@ int rfbi_init_display(struct omap_dss_device *dssdev) | |||
| 1299 | dssdev->disable = rfbi_display_disable; | 1293 | dssdev->disable = rfbi_display_disable; |
| 1300 | dssdev->update = rfbi_display_update; | 1294 | dssdev->update = rfbi_display_update; |
| 1301 | dssdev->sync = rfbi_display_sync; | 1295 | dssdev->sync = rfbi_display_sync; |
| 1302 | dssdev->enable_te = rfbi_display_enable_te; | ||
| 1303 | 1296 | ||
| 1304 | rfbi.dssdev[dssdev->phy.rfbi.channel] = dssdev; | 1297 | rfbi.dssdev[dssdev->phy.rfbi.channel] = dssdev; |
| 1305 | 1298 | ||
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c index 6deabb94fd31..cb2e3432618d 100644 --- a/drivers/video/omap2/omapfb/omapfb-ioctl.c +++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c | |||
| @@ -732,12 +732,13 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg) | |||
| 732 | break; | 732 | break; |
| 733 | } | 733 | } |
| 734 | 734 | ||
| 735 | if (!display->enable_te) { | 735 | if (!display->driver->enable_te) { |
| 736 | r = -ENODEV; | 736 | r = -ENODEV; |
| 737 | break; | 737 | break; |
| 738 | } | 738 | } |
| 739 | 739 | ||
| 740 | r = display->enable_te(display, !!p.tearsync_info.enabled); | 740 | r = display->driver->enable_te(display, |
| 741 | !!p.tearsync_info.enabled); | ||
| 741 | 742 | ||
| 742 | break; | 743 | break; |
| 743 | } | 744 | } |
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c index 216ed80293b8..b0adfb5915c8 100644 --- a/drivers/video/omap2/omapfb/omapfb-main.c +++ b/drivers/video/omap2/omapfb/omapfb-main.c | |||
| @@ -2206,14 +2206,14 @@ static int omapfb_probe(struct platform_device *pdev) | |||
| 2206 | /* set the update mode */ | 2206 | /* set the update mode */ |
| 2207 | if (def_display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { | 2207 | if (def_display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) { |
| 2208 | #ifdef CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE | 2208 | #ifdef CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE |
| 2209 | if (def_display->enable_te) | 2209 | if (def_display->driver->enable_te) |
| 2210 | def_display->enable_te(def_display, 1); | 2210 | def_display->driver->enable_te(def_display, 1); |
| 2211 | if (def_display->set_update_mode) | 2211 | if (def_display->set_update_mode) |
| 2212 | def_display->set_update_mode(def_display, | 2212 | def_display->set_update_mode(def_display, |
| 2213 | OMAP_DSS_UPDATE_AUTO); | 2213 | OMAP_DSS_UPDATE_AUTO); |
| 2214 | #else /* MANUAL_UPDATE */ | 2214 | #else /* MANUAL_UPDATE */ |
| 2215 | if (def_display->enable_te) | 2215 | if (def_display->driver->enable_te) |
| 2216 | def_display->enable_te(def_display, 0); | 2216 | def_display->driver->enable_te(def_display, 0); |
| 2217 | if (def_display->set_update_mode) | 2217 | if (def_display->set_update_mode) |
| 2218 | def_display->set_update_mode(def_display, | 2218 | def_display->set_update_mode(def_display, |
| 2219 | OMAP_DSS_UPDATE_MANUAL); | 2219 | OMAP_DSS_UPDATE_MANUAL); |
