diff options
| -rw-r--r-- | arch/arm/mach-omap2/display.c | 40 | 
1 files changed, 40 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index 7c6011df80a..62510ec863c 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -27,6 +27,8 @@  #include <plat/omap_device.h>  #include <plat/omap-pm.h> +#include "control.h" +  static struct platform_device omap_display_device = {  	.name          = "omapdss",  	.id            = -1, @@ -74,13 +76,51 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {  	{ "dss_hdmi", "omapdss_hdmi", -1 },  }; +static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) +{ +	u32 enable_mask, enable_shift; +	u32 pipd_mask, pipd_shift; +	u32 reg; + +	if (dsi_id == 0) { +		enable_mask = OMAP4_DSI1_LANEENABLE_MASK; +		enable_shift = OMAP4_DSI1_LANEENABLE_SHIFT; +		pipd_mask = OMAP4_DSI1_PIPD_MASK; +		pipd_shift = OMAP4_DSI1_PIPD_SHIFT; +	} else if (dsi_id == 1) { +		enable_mask = OMAP4_DSI2_LANEENABLE_MASK; +		enable_shift = OMAP4_DSI2_LANEENABLE_SHIFT; +		pipd_mask = OMAP4_DSI2_PIPD_MASK; +		pipd_shift = OMAP4_DSI2_PIPD_SHIFT; +	} else { +		return -ENODEV; +	} + +	reg = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY); + +	reg &= ~enable_mask; +	reg &= ~pipd_mask; + +	reg |= (lanes << enable_shift) & enable_mask; +	reg |= (lanes << pipd_shift) & pipd_mask; + +	omap4_ctrl_pad_writel(reg, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY); + +	return 0; +} +  static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)  { +	if (cpu_is_omap44xx()) +		return omap4_dsi_mux_pads(dsi_id, lane_mask); +  	return 0;  }  static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)  { +	if (cpu_is_omap44xx()) +		omap4_dsi_mux_pads(dsi_id, 0);  }  int __init omap_display_init(struct omap_dss_board_info *board_data)  |