OMAPDSS: DPI: DRA7xx support
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 31 Dec 2014 09:26:06 +0000 (11:26 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 4 Feb 2015 10:32:07 +0000 (12:32 +0200)
Add support for DRA7xx DPI output.

DRA7xx has three DPI outputs, each of which gets its input from a DISPC
channel. However, DRA72x has only one video PLL, and DRA74x has two
video PLLs. In both cases the video PLLs need to be shared between
multiple outputs. The driver doesn't handle this at the moment.

Also, DRA7xx requires configuring CONTROL module bits to route the clock
from the PLL to the used DISPC channel.

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

index 9a2f8c3b102d32ca49c786937f64e30a0ee96a4e..f83e7b030249dd49727e0f081b732cf28a62ee9f 100644 (file)
@@ -106,6 +106,17 @@ static struct dss_pll *dpi_get_pll(enum omap_channel channel)
                        return NULL;
                }
 
+       case OMAPDSS_VER_DRA7xx:
+               switch (channel) {
+               case OMAP_DSS_CHANNEL_LCD:
+               case OMAP_DSS_CHANNEL_LCD2:
+                       return dss_pll_find("video0");
+               case OMAP_DSS_CHANNEL_LCD3:
+                       return dss_pll_find("video1");
+               default:
+                       return NULL;
+               }
+
        default:
                return NULL;
        }
@@ -590,6 +601,10 @@ static void dpi_init_pll(struct dpi_data *dpi)
        if (!pll)
                return;
 
+       /* On DRA7 we need to set a mux to use the PLL */
+       if (omapdss_get_version() == OMAPDSS_VER_DRA7xx)
+               dss_ctrl_pll_set_control_mux(pll->id, dpi->output.dispc_channel);
+
        if (dpi_verify_dsi_pll(pll)) {
                DSSWARN("DSI PLL not operational\n");
                return;
@@ -615,6 +630,17 @@ static enum omap_channel dpi_get_channel(int port_num)
        case OMAPDSS_VER_AM43xx:
                return OMAP_DSS_CHANNEL_LCD;
 
+       case OMAPDSS_VER_DRA7xx:
+               switch (port_num) {
+               case 2:
+                       return OMAP_DSS_CHANNEL_LCD3;
+               case 1:
+                       return OMAP_DSS_CHANNEL_LCD2;
+               case 0:
+               default:
+                       return OMAP_DSS_CHANNEL_LCD;
+               }
+
        case OMAPDSS_VER_OMAP4430_ES1:
        case OMAPDSS_VER_OMAP4430_ES2:
        case OMAPDSS_VER_OMAP4: