OMAPDSS: fix TV-out issue with DSI PLL
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 13 Dec 2012 12:21:30 +0000 (14:21 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 13 Dec 2012 12:24:43 +0000 (14:24 +0200)
Commit 0e8276ef75f5c7811b038d1d23b2b42c16efc5ac (OMAPDSS: DPI: always
use DSI PLL if available) made dpi.c use DSI PLL for its clock. This
works fine, for DPI, but has a nasty side effect on OMAP3:

On OMAP3 the same clock is used for DISPC fclk and LCD output. Thus,
after the above patch, DSI PLL is used for DISPC and LCD output. If
TV-out is used, the TV-out needs DISPC. And if DPI is turned off, the
DSI PLL is also turned off, disabling DISPC.

For this to work, we'd need proper DSS internal clock handling, with
refcounts, which is a non-trivial project.

This patch fixes the issue for now by disabling the use of DSI PLL for
DPI on OMAP3.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/dpi.c

index 6cbcc81991a1d139817f1b8af0595fd4df65f87b..4af136a04e53ce4fafc67a3435a0121062e53674 100644 (file)
@@ -51,6 +51,22 @@ static struct {
 
 static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
 {
+       /*
+        * XXX we can't currently use DSI PLL for DPI with OMAP3, as the DSI PLL
+        * would also be used for DISPC fclk. Meaning, when the DPI output is
+        * disabled, DISPC clock will be disabled, and TV out will stop.
+        */
+       switch (omapdss_get_version()) {
+       case OMAPDSS_VER_OMAP24xx:
+       case OMAPDSS_VER_OMAP34xx_ES1:
+       case OMAPDSS_VER_OMAP34xx_ES3:
+       case OMAPDSS_VER_OMAP3630:
+       case OMAPDSS_VER_AM35xx:
+               return NULL;
+       default:
+               break;
+       }
+
        switch (channel) {
        case OMAP_DSS_CHANNEL_LCD:
                return dsi_get_dsidev_from_id(0);