| 
					
				 | 
			
			
				@@ -92,3 +92,201 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define HWMOD_IDLEMODE_SMART_WKUP	(1 << 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* modulemode control type (SW or HW) */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MODULEMODE_HWCTRL		1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MODULEMODE_SWCTRL		2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_mux_info - hwmod specific mux configuration 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @pads:              array of omap_device_pad entries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @nr_pads:           number of omap_device_pad entries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Note that this is currently built during init as needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_mux_info { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int				nr_pads; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct omap_device_pad		*pads; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int				nr_pads_dynamic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct omap_device_pad		**pads_dynamic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int				*irqs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool				enabled; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_irq_info - MPU IRQs used by the hwmod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name: name of the IRQ channel (module local name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @irq: IRQ channel ID (should be non-negative except -1 = terminator) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name should be something short, e.g., "tx" or "rx".  It is for use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * by platform_get_resource_byname().  It is defined locally to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * hwmod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_irq_info { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char	*name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	s16		irq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_dma_info - DMA channels used by the hwmod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name: name of the DMA channel (module local name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @dma_req: DMA request ID (should be non-negative except -1 = terminator) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name should be something short, e.g., "tx" or "rx".  It is for use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * by platform_get_resource_byname().  It is defined locally to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * hwmod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_dma_info { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char	*name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	s16		dma_req; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_rst_info - IPs reset lines use by hwmod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name: name of the reset line (module local name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @rst_shift: Offset of the reset bit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @st_shift: Offset of the reset status bit (OMAP2/3 only) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name should be something short, e.g., "cpu0" or "rst". It is defined 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * locally to the hwmod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_rst_info { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char	*name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8		rst_shift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8		st_shift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_opt_clk - optional clocks used by this hwmod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @role: "sys", "32k", "tv", etc -- for use in clk_get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @clk: opt clock: OMAP clock name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @_clk: pointer to the struct clk (filled in at runtime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * The module's interface clock and main functional clock should not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * be added as optional clocks. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_opt_clk { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char	*role; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char	*clk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct clk	*_clk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* omap_hwmod_omap2_firewall.flags bits */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OMAP_FIREWALL_L3		(1 << 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OMAP_FIREWALL_L4		(1 << 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_omap2_firewall - OMAP2/3 device firewall data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @l3_perm_bit: bit shift for L3_PM_*_PERMISSION_* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @l4_fw_region: L4 firewall region ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @l4_prot_group: L4 protection group ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @flags: (see omap_hwmod_omap2_firewall.flags macros above) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_omap2_firewall { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 l3_perm_bit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 l4_fw_region; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 l4_prot_group; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 flags; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * omap_hwmod_addr_space.flags bits 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * ADDR_MAP_ON_INIT: Map this address space during omap_hwmod init. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * ADDR_TYPE_RT: Address space contains module register target data. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ADDR_MAP_ON_INIT	(1 << 0)	/* XXX does not belong */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ADDR_TYPE_RT		(1 << 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_addr_space - address space handled by the hwmod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @name: name of the address space 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @pa_start: starting physical address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @pa_end: ending physical address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @flags: (see omap_hwmod_addr_space.flags macros above) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Address space doesn't necessarily follow physical interconnect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * structure.  GPMC is one example. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_addr_space { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char *name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u32 pa_start; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u32 pa_end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 flags; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * omap_hwmod_ocp_if.user bits: these indicate the initiators that use this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * interface to interact with the hwmod.  Used to add sleep dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * when the module is enabled or disabled. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCP_USER_MPU			(1 << 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCP_USER_SDMA			(1 << 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCP_USER_DSP			(1 << 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCP_USER_IVA			(1 << 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* omap_hwmod_ocp_if.flags bits */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCPIF_SWSUP_IDLE		(1 << 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OCPIF_CAN_BURST			(1 << 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* omap_hwmod_ocp_if._int_flags possibilities */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define _OCPIF_INT_FLAGS_REGISTERED	(1 << 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * struct omap_hwmod_ocp_if - OCP interface data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @master: struct omap_hwmod that initiates OCP transactions on this link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @slave: struct omap_hwmod that responds to OCP transactions on this link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @addr: address space associated with this link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @clk: interface clock: OMAP clock name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @_clk: pointer to the interface struct clk (filled in at runtime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @fw: interface firewall data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @width: OCP data width 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @user: initiators using this interface (see OCP_USER_* macros above) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @flags: OCP interface flags (see OCPIF_* macros above) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @_int_flags: internal flags (see _OCPIF_INT_FLAGS* macros above) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * It may also be useful to add a tag_cnt field for OCP2.x devices. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Parameter names beginning with an underscore are managed internally by 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * the omap_hwmod code and should not be set during initialization. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct omap_hwmod_ocp_if { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct omap_hwmod		*master; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct omap_hwmod		*slave; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct omap_hwmod_addr_space	*addr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const char			*clk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct clk			*_clk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	union { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		struct omap_hwmod_omap2_firewall omap2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}				fw; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8				width; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8				user; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8				flags; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8				_int_flags; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Macros for use in struct omap_hwmod_sysconfig */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Flags for use in omap_hwmod_sysconfig.idlemodes */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MASTER_STANDBY_SHIFT	4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SLAVE_IDLE_SHIFT	0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SIDLE_FORCE		(HWMOD_IDLEMODE_FORCE << SLAVE_IDLE_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SIDLE_NO		(HWMOD_IDLEMODE_NO << SLAVE_IDLE_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SIDLE_SMART		(HWMOD_IDLEMODE_SMART << SLAVE_IDLE_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SIDLE_SMART_WKUP	(HWMOD_IDLEMODE_SMART_WKUP << SLAVE_IDLE_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MSTANDBY_FORCE		(HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MSTANDBY_NO		(HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MSTANDBY_SMART		(HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define MSTANDBY_SMART_WKUP	(HWMOD_IDLEMODE_SMART_WKUP << MASTER_STANDBY_SHIFT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* omap_hwmod_sysconfig.sysc_flags capability flags */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_AUTOIDLE	(1 << 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_SOFTRESET	(1 << 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_ENAWAKEUP	(1 << 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_EMUFREE	(1 << 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_CLOCKACTIVITY	(1 << 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SYSC_HAS_SIDLEMODE	(1 << 5) 
			 |