| 
					
				 | 
			
			
				@@ -585,3 +585,117 @@ static struct omap_hwmod_dma_info am35xx_uart4_sdma_reqs[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * should not be needed.  The functional clock structure of the AM35xx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * UART4 is extremely unclear and opaque; it is unclear what the role 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * of uart1/2_fck is for the UART4.  Any clarification from either 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * empirical testing or the AM3505/3517 hardware designers would be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * most welcome. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_opt_clk am35xx_uart4_opt_clks[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .role = "softreset_uart1_fck", .clk = "uart1_fck" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod am35xx_uart4_hwmod = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "uart4", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.mpu_irqs	= am35xx_uart4_mpu_irqs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sdma_reqs	= am35xx_uart4_sdma_reqs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.main_clk	= "uart4_fck", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.prcm		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.omap2 = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_offs = CORE_MOD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.prcm_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_bit = AM35XX_EN_UART4_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_idle_bit = AM35XX_ST_UART4_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks	= am35xx_uart4_opt_clks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks_cnt	= ARRAY_SIZE(am35xx_uart4_opt_clks), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.class		= &omap2_uart_class, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_class i2c_class = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name	= "i2c", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sysc	= &i2c_sysc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.rev	= OMAP_I2C_IP_VERSION_1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.reset	= &omap_i2c_reset, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .name = "dispc", .dma_req = 5 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .name = "dsi1", .dma_req = 74 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .dma_req = -1 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* dss */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_opt_clk dss_opt_clks[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * The DSS HW needs all DSS clocks enabled during reset. The dss_core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * driver does not use these clocks. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .role = "sys_clk", .clk = "dss2_alwon_fck" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .role = "tv_clk", .clk = "dss_tv_fck" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* required only on OMAP3430 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ .role = "tv_dac_clk", .clk = "dss_96m_fck" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod omap3430es1_dss_core_hwmod = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "dss_core", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.class		= &omap2_dss_hwmod_class, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sdma_reqs	= omap3xxx_dss_sdma_chs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.prcm		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.omap2 = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.prcm_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_bit = OMAP3430_EN_DSS1_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_offs = OMAP3430_DSS_MOD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_stdby_bit = OMAP3430ES1_ST_DSS_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks	= dss_opt_clks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.flags		= HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod omap3xxx_dss_core_hwmod = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name		= "dss_core", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.flags		= HWMOD_CONTROL_OPT_CLKS_IN_RESET, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.class		= &omap2_dss_hwmod_class, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sdma_reqs	= omap3xxx_dss_sdma_chs, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.prcm		= { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		.omap2 = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.prcm_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_bit = OMAP3430_EN_DSS1_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.module_offs = OMAP3430_DSS_MOD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_reg_id = 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.idlest_stdby_bit = OMAP3430ES2_ST_DSS_STDBY_SHIFT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks	= dss_opt_clks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 'dispc' class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * display controller 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_class_sysconfig omap3_dispc_sysc = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.rev_offs	= 0x0000, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sysc_offs	= 0x0010, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.syss_offs	= 0x0014, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   SYSC_HAS_ENAWAKEUP), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			   MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sysc_fields	= &omap_hwmod_sysc_type1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod_class omap3_dispc_hwmod_class = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.name	= "dispc", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.sysc	= &omap3_dispc_sysc, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { 
			 |