OMAP: DSS2: DSI: Add DSI pad muxing support
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 30 Jul 2010 08:57:57 +0000 (11:57 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 11 May 2011 11:20:17 +0000 (14:20 +0300)
Add dsi_mux_pads function pointer to omap_dss_board_info, and use the
function pointer in DSI code to configure the DSI pads either to normal
DSI operation, or to pull down when in ULPS.

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

index f54839f..fcda46c 100644 (file)
@@ -244,6 +244,8 @@ static struct
        void __iomem    *base;
        int irq;
 
+       void (*dsi_mux_pads)(bool enable);
+
        struct dsi_clock_info current_cinfo;
 
        bool vdds_dsi_enabled;
@@ -2035,6 +2037,9 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
 
        DSSDBGF();
 
+       if (dsi.dsi_mux_pads)
+               dsi.dsi_mux_pads(true);
+
        dsi_enable_scp_clk();
 
        /* A dummy read using the SCP interface to any DSIPHY register is
@@ -2122,6 +2127,8 @@ err_cio_pwr:
                dsi_cio_disable_lane_override();
 err_scp_clk_dom:
        dsi_disable_scp_clk();
+       if (dsi.dsi_mux_pads)
+               dsi.dsi_mux_pads(false);
        return r;
 }
 
@@ -2129,6 +2136,8 @@ static void dsi_cio_uninit(void)
 {
        dsi_cio_power(DSI_COMPLEXIO_POWER_OFF);
        dsi_disable_scp_clk();
+       if (dsi.dsi_mux_pads)
+               dsi.dsi_mux_pads(false);
 }
 
 static int _dsi_wait_reset(void)
@@ -3993,10 +4002,16 @@ static void dsi_calc_clock_param_ranges(void)
 
 static int dsi_init(struct platform_device *pdev)
 {
+       struct omap_display_platform_data *dss_plat_data;
+       struct omap_dss_board_info *board_info;
        u32 rev;
        int r, i;
        struct resource *dsi_mem;
 
+       dss_plat_data = pdev->dev.platform_data;
+       board_info = dss_plat_data->board_data;
+       dsi.dsi_mux_pads = board_info->dsi_mux_pads;
+
        spin_lock_init(&dsi.irq_lock);
        spin_lock_init(&dsi.errors_lock);
        dsi.errors = 0;
index 44a8646..ab7d656 100644 (file)
@@ -233,6 +233,7 @@ struct omap_dss_board_info {
        int num_devices;
        struct omap_dss_device **devices;
        struct omap_dss_device *default_device;
+       void (*dsi_mux_pads)(bool enable);
 };
 
 #if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)