xref: /OK3568_Linux_fs/kernel/arch/arm/mach-omap2/omap_hwmod_81xx_data.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * DM81xx hwmod data.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2010 Texas Instruments, Inc. - https://www.ti.com/
5*4882a593Smuzhiyun  * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or
8*4882a593Smuzhiyun  * modify it under the terms of the GNU General Public License as
9*4882a593Smuzhiyun  * published by the Free Software Foundation version 2.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
12*4882a593Smuzhiyun  * kind, whether express or implied; without even the implied warranty
13*4882a593Smuzhiyun  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*4882a593Smuzhiyun  * GNU General Public License for more details.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <linux/types.h>
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include <linux/platform_data/hsmmc-omap.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include "omap_hwmod_common_data.h"
23*4882a593Smuzhiyun #include "cm81xx.h"
24*4882a593Smuzhiyun #include "ti81xx.h"
25*4882a593Smuzhiyun #include "wd_timer.h"
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /*
28*4882a593Smuzhiyun  * DM816X hardware modules integration data
29*4882a593Smuzhiyun  *
30*4882a593Smuzhiyun  * Note: This is incomplete and at present, not generated from h/w database.
31*4882a593Smuzhiyun  */
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /*
34*4882a593Smuzhiyun  * Common alwon .clkctrl_offs from dm814x TRM "Table 2-278. CM_ALWON REGISTERS"
35*4882a593Smuzhiyun  * also dm816x TRM 18.7.17 CM_ALWON device register values minus 0x1400.
36*4882a593Smuzhiyun  */
37*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MCASP0_CLKCTRL		0x140
38*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MCASP1_CLKCTRL		0x144
39*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MCASP2_CLKCTRL		0x148
40*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MCBSP_CLKCTRL		0x14c
41*4882a593Smuzhiyun #define DM81XX_CM_ALWON_UART_0_CLKCTRL		0x150
42*4882a593Smuzhiyun #define DM81XX_CM_ALWON_UART_1_CLKCTRL		0x154
43*4882a593Smuzhiyun #define DM81XX_CM_ALWON_UART_2_CLKCTRL		0x158
44*4882a593Smuzhiyun #define DM81XX_CM_ALWON_GPIO_0_CLKCTRL		0x15c
45*4882a593Smuzhiyun #define DM81XX_CM_ALWON_GPIO_1_CLKCTRL		0x160
46*4882a593Smuzhiyun #define DM81XX_CM_ALWON_I2C_0_CLKCTRL		0x164
47*4882a593Smuzhiyun #define DM81XX_CM_ALWON_I2C_1_CLKCTRL		0x168
48*4882a593Smuzhiyun #define DM81XX_CM_ALWON_WDTIMER_CLKCTRL		0x18c
49*4882a593Smuzhiyun #define DM81XX_CM_ALWON_SPI_CLKCTRL		0x190
50*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MAILBOX_CLKCTRL		0x194
51*4882a593Smuzhiyun #define DM81XX_CM_ALWON_SPINBOX_CLKCTRL		0x198
52*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MMUDATA_CLKCTRL		0x19c
53*4882a593Smuzhiyun #define DM81XX_CM_ALWON_MMUCFG_CLKCTRL		0x1a8
54*4882a593Smuzhiyun #define DM81XX_CM_ALWON_CONTROL_CLKCTRL		0x1c4
55*4882a593Smuzhiyun #define DM81XX_CM_ALWON_GPMC_CLKCTRL		0x1d0
56*4882a593Smuzhiyun #define DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL	0x1d4
57*4882a593Smuzhiyun #define DM81XX_CM_ALWON_L3_CLKCTRL		0x1e4
58*4882a593Smuzhiyun #define DM81XX_CM_ALWON_L4HS_CLKCTRL		0x1e8
59*4882a593Smuzhiyun #define DM81XX_CM_ALWON_L4LS_CLKCTRL		0x1ec
60*4882a593Smuzhiyun #define DM81XX_CM_ALWON_RTC_CLKCTRL		0x1f0
61*4882a593Smuzhiyun #define DM81XX_CM_ALWON_TPCC_CLKCTRL		0x1f4
62*4882a593Smuzhiyun #define DM81XX_CM_ALWON_TPTC0_CLKCTRL		0x1f8
63*4882a593Smuzhiyun #define DM81XX_CM_ALWON_TPTC1_CLKCTRL		0x1fc
64*4882a593Smuzhiyun #define DM81XX_CM_ALWON_TPTC2_CLKCTRL		0x200
65*4882a593Smuzhiyun #define DM81XX_CM_ALWON_TPTC3_CLKCTRL		0x204
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /* Registers specific to dm814x */
68*4882a593Smuzhiyun #define DM814X_CM_ALWON_MCASP_3_4_5_CLKCTRL	0x16c
69*4882a593Smuzhiyun #define DM814X_CM_ALWON_ATL_CLKCTRL		0x170
70*4882a593Smuzhiyun #define DM814X_CM_ALWON_MLB_CLKCTRL		0x174
71*4882a593Smuzhiyun #define DM814X_CM_ALWON_PATA_CLKCTRL		0x178
72*4882a593Smuzhiyun #define DM814X_CM_ALWON_UART_3_CLKCTRL		0x180
73*4882a593Smuzhiyun #define DM814X_CM_ALWON_UART_4_CLKCTRL		0x184
74*4882a593Smuzhiyun #define DM814X_CM_ALWON_UART_5_CLKCTRL		0x188
75*4882a593Smuzhiyun #define DM814X_CM_ALWON_OCM_0_CLKCTRL		0x1b4
76*4882a593Smuzhiyun #define DM814X_CM_ALWON_VCP_CLKCTRL		0x1b8
77*4882a593Smuzhiyun #define DM814X_CM_ALWON_MPU_CLKCTRL		0x1dc
78*4882a593Smuzhiyun #define DM814X_CM_ALWON_DEBUGSS_CLKCTRL		0x1e0
79*4882a593Smuzhiyun #define DM814X_CM_ALWON_DCAN_0_1_CLKCTRL	0x218
80*4882a593Smuzhiyun #define DM814X_CM_ALWON_MMCHS_0_CLKCTRL		0x21c
81*4882a593Smuzhiyun #define DM814X_CM_ALWON_MMCHS_1_CLKCTRL		0x220
82*4882a593Smuzhiyun #define DM814X_CM_ALWON_MMCHS_2_CLKCTRL		0x224
83*4882a593Smuzhiyun #define DM814X_CM_ALWON_CUST_EFUSE_CLKCTRL	0x228
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /* Registers specific to dm816x */
86*4882a593Smuzhiyun #define DM816X_DM_ALWON_BASE		0x1400
87*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_1_CLKCTRL	(0x1570 - DM816X_DM_ALWON_BASE)
88*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_2_CLKCTRL	(0x1574 - DM816X_DM_ALWON_BASE)
89*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_3_CLKCTRL	(0x1578 - DM816X_DM_ALWON_BASE)
90*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_4_CLKCTRL	(0x157c - DM816X_DM_ALWON_BASE)
91*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_5_CLKCTRL	(0x1580 - DM816X_DM_ALWON_BASE)
92*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_6_CLKCTRL	(0x1584 - DM816X_DM_ALWON_BASE)
93*4882a593Smuzhiyun #define DM816X_CM_ALWON_TIMER_7_CLKCTRL	(0x1588 - DM816X_DM_ALWON_BASE)
94*4882a593Smuzhiyun #define DM816X_CM_ALWON_SDIO_CLKCTRL	(0x15b0 - DM816X_DM_ALWON_BASE)
95*4882a593Smuzhiyun #define DM816X_CM_ALWON_OCMC_0_CLKCTRL	(0x15b4 - DM816X_DM_ALWON_BASE)
96*4882a593Smuzhiyun #define DM816X_CM_ALWON_OCMC_1_CLKCTRL	(0x15b8 - DM816X_DM_ALWON_BASE)
97*4882a593Smuzhiyun #define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
98*4882a593Smuzhiyun #define DM816X_CM_ALWON_MPU_CLKCTRL	(0x15dc - DM816X_DM_ALWON_BASE)
99*4882a593Smuzhiyun #define DM816X_CM_ALWON_SR_0_CLKCTRL	(0x1608 - DM816X_DM_ALWON_BASE)
100*4882a593Smuzhiyun #define DM816X_CM_ALWON_SR_1_CLKCTRL	(0x160c - DM816X_DM_ALWON_BASE)
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /*
103*4882a593Smuzhiyun  * The default .clkctrl_offs field is offset from CM_DEFAULT, that's
104*4882a593Smuzhiyun  * TRM 18.7.6 CM_DEFAULT device register values minus 0x500
105*4882a593Smuzhiyun  */
106*4882a593Smuzhiyun #define DM81XX_CM_DEFAULT_OFFSET	0x500
107*4882a593Smuzhiyun #define DM81XX_CM_DEFAULT_USB_CLKCTRL	(0x558 - DM81XX_CM_DEFAULT_OFFSET)
108*4882a593Smuzhiyun #define DM81XX_CM_DEFAULT_SATA_CLKCTRL	(0x560 - DM81XX_CM_DEFAULT_OFFSET)
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun /* L3 Interconnect entries clocked at 125, 250 and 500MHz */
111*4882a593Smuzhiyun static struct omap_hwmod dm81xx_alwon_l3_slow_hwmod = {
112*4882a593Smuzhiyun 	.name		= "alwon_l3_slow",
113*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
114*4882a593Smuzhiyun 	.class		= &l3_hwmod_class,
115*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
116*4882a593Smuzhiyun };
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun static struct omap_hwmod dm81xx_default_l3_slow_hwmod = {
119*4882a593Smuzhiyun 	.name		= "default_l3_slow",
120*4882a593Smuzhiyun 	.clkdm_name	= "default_l3_slow_clkdm",
121*4882a593Smuzhiyun 	.class		= &l3_hwmod_class,
122*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
123*4882a593Smuzhiyun };
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun static struct omap_hwmod dm81xx_alwon_l3_med_hwmod = {
126*4882a593Smuzhiyun 	.name		= "l3_med",
127*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3_med_clkdm",
128*4882a593Smuzhiyun 	.class		= &l3_hwmod_class,
129*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
130*4882a593Smuzhiyun };
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun /*
133*4882a593Smuzhiyun  * L4 standard peripherals, see TRM table 1-12 for devices using this.
134*4882a593Smuzhiyun  * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock.
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun static struct omap_hwmod dm81xx_l4_ls_hwmod = {
137*4882a593Smuzhiyun 	.name		= "l4_ls",
138*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
139*4882a593Smuzhiyun 	.class		= &l4_hwmod_class,
140*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
141*4882a593Smuzhiyun };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /*
144*4882a593Smuzhiyun  * L4 high-speed peripherals. For devices using this, please see the TRM
145*4882a593Smuzhiyun  * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM
146*4882a593Smuzhiyun  * table 1-73 for devices using 250MHz SYSCLK5 clock.
147*4882a593Smuzhiyun  */
148*4882a593Smuzhiyun static struct omap_hwmod dm81xx_l4_hs_hwmod = {
149*4882a593Smuzhiyun 	.name		= "l4_hs",
150*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3_med_clkdm",
151*4882a593Smuzhiyun 	.class		= &l4_hwmod_class,
152*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
153*4882a593Smuzhiyun };
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /* L3 slow -> L4 ls peripheral interface running at 125MHz */
156*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_ls = {
157*4882a593Smuzhiyun 	.master	= &dm81xx_alwon_l3_slow_hwmod,
158*4882a593Smuzhiyun 	.slave	= &dm81xx_l4_ls_hwmod,
159*4882a593Smuzhiyun 	.user	= OCP_USER_MPU,
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun /* L3 med -> L4 fast peripheral interface running at 250MHz */
163*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__l4_hs = {
164*4882a593Smuzhiyun 	.master	= &dm81xx_alwon_l3_med_hwmod,
165*4882a593Smuzhiyun 	.slave	= &dm81xx_l4_hs_hwmod,
166*4882a593Smuzhiyun 	.user	= OCP_USER_MPU,
167*4882a593Smuzhiyun };
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /* MPU */
170*4882a593Smuzhiyun static struct omap_hwmod dm814x_mpu_hwmod = {
171*4882a593Smuzhiyun 	.name		= "mpu",
172*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
173*4882a593Smuzhiyun 	.class		= &mpu_hwmod_class,
174*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_IDLE,
175*4882a593Smuzhiyun 	.main_clk	= "mpu_ck",
176*4882a593Smuzhiyun 	.prcm		= {
177*4882a593Smuzhiyun 		.omap4 = {
178*4882a593Smuzhiyun 			.clkctrl_offs = DM814X_CM_ALWON_MPU_CLKCTRL,
179*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
180*4882a593Smuzhiyun 		},
181*4882a593Smuzhiyun 	},
182*4882a593Smuzhiyun };
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_slow = {
185*4882a593Smuzhiyun 	.master		= &dm814x_mpu_hwmod,
186*4882a593Smuzhiyun 	.slave		= &dm81xx_alwon_l3_slow_hwmod,
187*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
188*4882a593Smuzhiyun };
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /* L3 med peripheral interface running at 200MHz */
191*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_mpu__alwon_l3_med = {
192*4882a593Smuzhiyun 	.master	= &dm814x_mpu_hwmod,
193*4882a593Smuzhiyun 	.slave	= &dm81xx_alwon_l3_med_hwmod,
194*4882a593Smuzhiyun 	.user	= OCP_USER_MPU,
195*4882a593Smuzhiyun };
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun static struct omap_hwmod dm816x_mpu_hwmod = {
198*4882a593Smuzhiyun 	.name		= "mpu",
199*4882a593Smuzhiyun 	.clkdm_name	= "alwon_mpu_clkdm",
200*4882a593Smuzhiyun 	.class		= &mpu_hwmod_class,
201*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_IDLE,
202*4882a593Smuzhiyun 	.main_clk	= "mpu_ck",
203*4882a593Smuzhiyun 	.prcm		= {
204*4882a593Smuzhiyun 		.omap4 = {
205*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL,
206*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
207*4882a593Smuzhiyun 		},
208*4882a593Smuzhiyun 	},
209*4882a593Smuzhiyun };
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = {
212*4882a593Smuzhiyun 	.master		= &dm816x_mpu_hwmod,
213*4882a593Smuzhiyun 	.slave		= &dm81xx_alwon_l3_slow_hwmod,
214*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
215*4882a593Smuzhiyun };
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun /* L3 med peripheral interface running at 250MHz */
218*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = {
219*4882a593Smuzhiyun 	.master	= &dm816x_mpu_hwmod,
220*4882a593Smuzhiyun 	.slave	= &dm81xx_alwon_l3_med_hwmod,
221*4882a593Smuzhiyun 	.user	= OCP_USER_MPU,
222*4882a593Smuzhiyun };
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun /* RTC */
225*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig ti81xx_rtc_sysc = {
226*4882a593Smuzhiyun 	.rev_offs	= 0x74,
227*4882a593Smuzhiyun 	.sysc_offs	= 0x78,
228*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE,
229*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO |
230*4882a593Smuzhiyun 			  SIDLE_SMART | SIDLE_SMART_WKUP,
231*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type3,
232*4882a593Smuzhiyun };
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun static struct omap_hwmod_class ti81xx_rtc_hwmod_class = {
235*4882a593Smuzhiyun 	.name		= "rtc",
236*4882a593Smuzhiyun 	.sysc		= &ti81xx_rtc_sysc,
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun static struct omap_hwmod ti81xx_rtc_hwmod = {
240*4882a593Smuzhiyun 	.name		= "rtc",
241*4882a593Smuzhiyun 	.class		= &ti81xx_rtc_hwmod_class,
242*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
243*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
244*4882a593Smuzhiyun 	.main_clk	= "sysclk18_ck",
245*4882a593Smuzhiyun 	.prcm		= {
246*4882a593Smuzhiyun 		.omap4	= {
247*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_RTC_CLKCTRL,
248*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
249*4882a593Smuzhiyun 		},
250*4882a593Smuzhiyun 	},
251*4882a593Smuzhiyun };
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun static struct omap_hwmod_ocp_if ti81xx_l4_ls__rtc = {
254*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
255*4882a593Smuzhiyun 	.slave		= &ti81xx_rtc_hwmod,
256*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
257*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
258*4882a593Smuzhiyun };
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun /* UART common */
261*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig uart_sysc = {
262*4882a593Smuzhiyun 	.rev_offs	= 0x50,
263*4882a593Smuzhiyun 	.sysc_offs	= 0x54,
264*4882a593Smuzhiyun 	.syss_offs	= 0x58,
265*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
266*4882a593Smuzhiyun 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
267*4882a593Smuzhiyun 				SYSS_HAS_RESET_STATUS,
268*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
269*4882a593Smuzhiyun 				MSTANDBY_SMART_WKUP,
270*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun static struct omap_hwmod_class uart_class = {
274*4882a593Smuzhiyun 	.name = "uart",
275*4882a593Smuzhiyun 	.sysc = &uart_sysc,
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun static struct omap_hwmod dm81xx_uart1_hwmod = {
279*4882a593Smuzhiyun 	.name		= "uart1",
280*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
281*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
282*4882a593Smuzhiyun 	.prcm		= {
283*4882a593Smuzhiyun 		.omap4 = {
284*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_UART_0_CLKCTRL,
285*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
286*4882a593Smuzhiyun 		},
287*4882a593Smuzhiyun 	},
288*4882a593Smuzhiyun 	.class		= &uart_class,
289*4882a593Smuzhiyun 	.flags		= DEBUG_TI81XXUART1_FLAGS,
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart1 = {
293*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
294*4882a593Smuzhiyun 	.slave		= &dm81xx_uart1_hwmod,
295*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
296*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
297*4882a593Smuzhiyun };
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun static struct omap_hwmod dm81xx_uart2_hwmod = {
300*4882a593Smuzhiyun 	.name		= "uart2",
301*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
302*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
303*4882a593Smuzhiyun 	.prcm		= {
304*4882a593Smuzhiyun 		.omap4 = {
305*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_UART_1_CLKCTRL,
306*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
307*4882a593Smuzhiyun 		},
308*4882a593Smuzhiyun 	},
309*4882a593Smuzhiyun 	.class		= &uart_class,
310*4882a593Smuzhiyun 	.flags		= DEBUG_TI81XXUART2_FLAGS,
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart2 = {
314*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
315*4882a593Smuzhiyun 	.slave		= &dm81xx_uart2_hwmod,
316*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
317*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
318*4882a593Smuzhiyun };
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun static struct omap_hwmod dm81xx_uart3_hwmod = {
321*4882a593Smuzhiyun 	.name		= "uart3",
322*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
323*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
324*4882a593Smuzhiyun 	.prcm		= {
325*4882a593Smuzhiyun 		.omap4 = {
326*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_UART_2_CLKCTRL,
327*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
328*4882a593Smuzhiyun 		},
329*4882a593Smuzhiyun 	},
330*4882a593Smuzhiyun 	.class		= &uart_class,
331*4882a593Smuzhiyun 	.flags		= DEBUG_TI81XXUART3_FLAGS,
332*4882a593Smuzhiyun };
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__uart3 = {
335*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
336*4882a593Smuzhiyun 	.slave		= &dm81xx_uart3_hwmod,
337*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
338*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
339*4882a593Smuzhiyun };
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig wd_timer_sysc = {
342*4882a593Smuzhiyun 	.rev_offs	= 0x0,
343*4882a593Smuzhiyun 	.sysc_offs	= 0x10,
344*4882a593Smuzhiyun 	.syss_offs	= 0x14,
345*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
346*4882a593Smuzhiyun 				SYSS_HAS_RESET_STATUS,
347*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
348*4882a593Smuzhiyun };
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun static struct omap_hwmod_class wd_timer_class = {
351*4882a593Smuzhiyun 	.name		= "wd_timer",
352*4882a593Smuzhiyun 	.sysc		= &wd_timer_sysc,
353*4882a593Smuzhiyun 	.pre_shutdown	= &omap2_wd_timer_disable,
354*4882a593Smuzhiyun 	.reset		= &omap2_wd_timer_reset,
355*4882a593Smuzhiyun };
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun static struct omap_hwmod dm81xx_wd_timer_hwmod = {
358*4882a593Smuzhiyun 	.name		= "wd_timer",
359*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
360*4882a593Smuzhiyun 	.main_clk	= "sysclk18_ck",
361*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
362*4882a593Smuzhiyun 	.prcm		= {
363*4882a593Smuzhiyun 		.omap4 = {
364*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_WDTIMER_CLKCTRL,
365*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
366*4882a593Smuzhiyun 		},
367*4882a593Smuzhiyun 	},
368*4882a593Smuzhiyun 	.class		= &wd_timer_class,
369*4882a593Smuzhiyun };
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__wd_timer1 = {
372*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
373*4882a593Smuzhiyun 	.slave		= &dm81xx_wd_timer_hwmod,
374*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
375*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
376*4882a593Smuzhiyun };
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun /* I2C common */
379*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig i2c_sysc = {
380*4882a593Smuzhiyun 	.rev_offs	= 0x0,
381*4882a593Smuzhiyun 	.sysc_offs	= 0x10,
382*4882a593Smuzhiyun 	.syss_offs	= 0x90,
383*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE |
384*4882a593Smuzhiyun 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
385*4882a593Smuzhiyun 				SYSC_HAS_AUTOIDLE,
386*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
387*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
388*4882a593Smuzhiyun };
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun static struct omap_hwmod_class i2c_class = {
391*4882a593Smuzhiyun 	.name = "i2c",
392*4882a593Smuzhiyun 	.sysc = &i2c_sysc,
393*4882a593Smuzhiyun };
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun static struct omap_hwmod dm81xx_i2c1_hwmod = {
396*4882a593Smuzhiyun 	.name		= "i2c1",
397*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
398*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
399*4882a593Smuzhiyun 	.prcm		= {
400*4882a593Smuzhiyun 		.omap4 = {
401*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_I2C_0_CLKCTRL,
402*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
403*4882a593Smuzhiyun 		},
404*4882a593Smuzhiyun 	},
405*4882a593Smuzhiyun 	.class		= &i2c_class,
406*4882a593Smuzhiyun };
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c1 = {
409*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
410*4882a593Smuzhiyun 	.slave		= &dm81xx_i2c1_hwmod,
411*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
412*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
413*4882a593Smuzhiyun };
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun static struct omap_hwmod dm81xx_i2c2_hwmod = {
416*4882a593Smuzhiyun 	.name		= "i2c2",
417*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
418*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
419*4882a593Smuzhiyun 	.prcm		= {
420*4882a593Smuzhiyun 		.omap4 = {
421*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_I2C_1_CLKCTRL,
422*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
423*4882a593Smuzhiyun 		},
424*4882a593Smuzhiyun 	},
425*4882a593Smuzhiyun 	.class		= &i2c_class,
426*4882a593Smuzhiyun };
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__i2c2 = {
429*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
430*4882a593Smuzhiyun 	.slave		= &dm81xx_i2c2_hwmod,
431*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
432*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
433*4882a593Smuzhiyun };
434*4882a593Smuzhiyun 
435*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = {
436*4882a593Smuzhiyun 	.rev_offs	= 0x0000,
437*4882a593Smuzhiyun 	.sysc_offs	= 0x0010,
438*4882a593Smuzhiyun 	.syss_offs	= 0x0014,
439*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
440*4882a593Smuzhiyun 				SYSC_HAS_SOFTRESET |
441*4882a593Smuzhiyun 				SYSS_HAS_RESET_STATUS,
442*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
443*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
444*4882a593Smuzhiyun };
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_elm_hwmod_class = {
447*4882a593Smuzhiyun 	.name = "elm",
448*4882a593Smuzhiyun 	.sysc = &dm81xx_elm_sysc,
449*4882a593Smuzhiyun };
450*4882a593Smuzhiyun 
451*4882a593Smuzhiyun static struct omap_hwmod dm81xx_elm_hwmod = {
452*4882a593Smuzhiyun 	.name		= "elm",
453*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
454*4882a593Smuzhiyun 	.class		= &dm81xx_elm_hwmod_class,
455*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
456*4882a593Smuzhiyun };
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = {
459*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
460*4882a593Smuzhiyun 	.slave		= &dm81xx_elm_hwmod,
461*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
462*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
463*4882a593Smuzhiyun };
464*4882a593Smuzhiyun 
465*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
466*4882a593Smuzhiyun 	.rev_offs	= 0x0000,
467*4882a593Smuzhiyun 	.sysc_offs	= 0x0010,
468*4882a593Smuzhiyun 	.syss_offs	= 0x0114,
469*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
470*4882a593Smuzhiyun 				SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
471*4882a593Smuzhiyun 				SYSS_HAS_RESET_STATUS,
472*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
473*4882a593Smuzhiyun 				SIDLE_SMART_WKUP,
474*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
475*4882a593Smuzhiyun };
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
478*4882a593Smuzhiyun 	.name	= "gpio",
479*4882a593Smuzhiyun 	.sysc	= &dm81xx_gpio_sysc,
480*4882a593Smuzhiyun };
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
483*4882a593Smuzhiyun 	{ .role = "dbclk", .clk = "sysclk18_ck" },
484*4882a593Smuzhiyun };
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun static struct omap_hwmod dm81xx_gpio1_hwmod = {
487*4882a593Smuzhiyun 	.name		= "gpio1",
488*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
489*4882a593Smuzhiyun 	.class		= &dm81xx_gpio_hwmod_class,
490*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
491*4882a593Smuzhiyun 	.prcm = {
492*4882a593Smuzhiyun 		.omap4 = {
493*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_0_CLKCTRL,
494*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
495*4882a593Smuzhiyun 		},
496*4882a593Smuzhiyun 	},
497*4882a593Smuzhiyun 	.opt_clks	= gpio1_opt_clks,
498*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(gpio1_opt_clks),
499*4882a593Smuzhiyun };
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = {
502*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
503*4882a593Smuzhiyun 	.slave		= &dm81xx_gpio1_hwmod,
504*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
505*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
506*4882a593Smuzhiyun };
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
509*4882a593Smuzhiyun 	{ .role = "dbclk", .clk = "sysclk18_ck" },
510*4882a593Smuzhiyun };
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun static struct omap_hwmod dm81xx_gpio2_hwmod = {
513*4882a593Smuzhiyun 	.name		= "gpio2",
514*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
515*4882a593Smuzhiyun 	.class		= &dm81xx_gpio_hwmod_class,
516*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
517*4882a593Smuzhiyun 	.prcm = {
518*4882a593Smuzhiyun 		.omap4 = {
519*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
520*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
521*4882a593Smuzhiyun 		},
522*4882a593Smuzhiyun 	},
523*4882a593Smuzhiyun 	.opt_clks	= gpio2_opt_clks,
524*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(gpio2_opt_clks),
525*4882a593Smuzhiyun };
526*4882a593Smuzhiyun 
527*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = {
528*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
529*4882a593Smuzhiyun 	.slave		= &dm81xx_gpio2_hwmod,
530*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
531*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
532*4882a593Smuzhiyun };
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
535*4882a593Smuzhiyun 	{ .role = "dbclk", .clk = "sysclk18_ck" },
536*4882a593Smuzhiyun };
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun static struct omap_hwmod dm81xx_gpio3_hwmod = {
539*4882a593Smuzhiyun 	.name		= "gpio3",
540*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
541*4882a593Smuzhiyun 	.class		= &dm81xx_gpio_hwmod_class,
542*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
543*4882a593Smuzhiyun 	.prcm = {
544*4882a593Smuzhiyun 		.omap4 = {
545*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
546*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
547*4882a593Smuzhiyun 		},
548*4882a593Smuzhiyun 	},
549*4882a593Smuzhiyun 	.opt_clks	= gpio3_opt_clks,
550*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(gpio3_opt_clks),
551*4882a593Smuzhiyun };
552*4882a593Smuzhiyun 
553*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio3 = {
554*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
555*4882a593Smuzhiyun 	.slave		= &dm81xx_gpio3_hwmod,
556*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
557*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
558*4882a593Smuzhiyun };
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
561*4882a593Smuzhiyun 	{ .role = "dbclk", .clk = "sysclk18_ck" },
562*4882a593Smuzhiyun };
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun static struct omap_hwmod dm81xx_gpio4_hwmod = {
565*4882a593Smuzhiyun 	.name		= "gpio4",
566*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
567*4882a593Smuzhiyun 	.class		= &dm81xx_gpio_hwmod_class,
568*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
569*4882a593Smuzhiyun 	.prcm = {
570*4882a593Smuzhiyun 		.omap4 = {
571*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_GPIO_1_CLKCTRL,
572*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
573*4882a593Smuzhiyun 		},
574*4882a593Smuzhiyun 	},
575*4882a593Smuzhiyun 	.opt_clks	= gpio4_opt_clks,
576*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(gpio4_opt_clks),
577*4882a593Smuzhiyun };
578*4882a593Smuzhiyun 
579*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio4 = {
580*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
581*4882a593Smuzhiyun 	.slave		= &dm81xx_gpio4_hwmod,
582*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
583*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
584*4882a593Smuzhiyun };
585*4882a593Smuzhiyun 
586*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = {
587*4882a593Smuzhiyun 	.rev_offs	= 0x0,
588*4882a593Smuzhiyun 	.sysc_offs	= 0x10,
589*4882a593Smuzhiyun 	.syss_offs	= 0x14,
590*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
591*4882a593Smuzhiyun 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
592*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
593*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
594*4882a593Smuzhiyun };
595*4882a593Smuzhiyun 
596*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = {
597*4882a593Smuzhiyun 	.name	= "gpmc",
598*4882a593Smuzhiyun 	.sysc	= &dm81xx_gpmc_sysc,
599*4882a593Smuzhiyun };
600*4882a593Smuzhiyun 
601*4882a593Smuzhiyun static struct omap_hwmod dm81xx_gpmc_hwmod = {
602*4882a593Smuzhiyun 	.name		= "gpmc",
603*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
604*4882a593Smuzhiyun 	.class		= &dm81xx_gpmc_hwmod_class,
605*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
606*4882a593Smuzhiyun 	/* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */
607*4882a593Smuzhiyun 	.flags		= DEBUG_OMAP_GPMC_HWMOD_FLAGS,
608*4882a593Smuzhiyun 	.prcm = {
609*4882a593Smuzhiyun 		.omap4 = {
610*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_GPMC_CLKCTRL,
611*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
612*4882a593Smuzhiyun 		},
613*4882a593Smuzhiyun 	},
614*4882a593Smuzhiyun };
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
617*4882a593Smuzhiyun 	.master		= &dm81xx_alwon_l3_slow_hwmod,
618*4882a593Smuzhiyun 	.slave		= &dm81xx_gpmc_hwmod,
619*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
620*4882a593Smuzhiyun };
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun /* USB needs udelay 1 after reset at least on hp t410, use 2 for margin */
623*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
624*4882a593Smuzhiyun 	.rev_offs	= 0x0,
625*4882a593Smuzhiyun 	.sysc_offs	= 0x10,
626*4882a593Smuzhiyun 	.srst_udelay	= 2,
627*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
628*4882a593Smuzhiyun 				SYSC_HAS_SOFTRESET,
629*4882a593Smuzhiyun 	.idlemodes	= SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART,
630*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type2,
631*4882a593Smuzhiyun };
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_usbotg_class = {
634*4882a593Smuzhiyun 	.name = "usbotg",
635*4882a593Smuzhiyun 	.sysc = &dm81xx_usbhsotg_sysc,
636*4882a593Smuzhiyun };
637*4882a593Smuzhiyun 
638*4882a593Smuzhiyun static struct omap_hwmod dm814x_usbss_hwmod = {
639*4882a593Smuzhiyun 	.name		= "usb_otg_hs",
640*4882a593Smuzhiyun 	.clkdm_name	= "default_l3_slow_clkdm",
641*4882a593Smuzhiyun 	.main_clk	= "pll260dcoclkldo",	/* 481c5260.adpll.dcoclkldo */
642*4882a593Smuzhiyun 	.prcm		= {
643*4882a593Smuzhiyun 		.omap4 = {
644*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
645*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
646*4882a593Smuzhiyun 		},
647*4882a593Smuzhiyun 	},
648*4882a593Smuzhiyun 	.class		= &dm81xx_usbotg_class,
649*4882a593Smuzhiyun };
650*4882a593Smuzhiyun 
651*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_default_l3_slow__usbss = {
652*4882a593Smuzhiyun 	.master		= &dm81xx_default_l3_slow_hwmod,
653*4882a593Smuzhiyun 	.slave		= &dm814x_usbss_hwmod,
654*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
655*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
656*4882a593Smuzhiyun };
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun static struct omap_hwmod dm816x_usbss_hwmod = {
659*4882a593Smuzhiyun 	.name		= "usb_otg_hs",
660*4882a593Smuzhiyun 	.clkdm_name	= "default_l3_slow_clkdm",
661*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
662*4882a593Smuzhiyun 	.prcm		= {
663*4882a593Smuzhiyun 		.omap4 = {
664*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_DEFAULT_USB_CLKCTRL,
665*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
666*4882a593Smuzhiyun 		},
667*4882a593Smuzhiyun 	},
668*4882a593Smuzhiyun 	.class		= &dm81xx_usbotg_class,
669*4882a593Smuzhiyun };
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_default_l3_slow__usbss = {
672*4882a593Smuzhiyun 	.master		= &dm81xx_default_l3_slow_hwmod,
673*4882a593Smuzhiyun 	.slave		= &dm816x_usbss_hwmod,
674*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
675*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
676*4882a593Smuzhiyun };
677*4882a593Smuzhiyun 
678*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = {
679*4882a593Smuzhiyun 	.rev_offs	= 0x0000,
680*4882a593Smuzhiyun 	.sysc_offs	= 0x0010,
681*4882a593Smuzhiyun 	.syss_offs	= 0x0014,
682*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET,
683*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
684*4882a593Smuzhiyun 				SIDLE_SMART_WKUP,
685*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type2,
686*4882a593Smuzhiyun };
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun static struct omap_hwmod_class dm816x_timer_hwmod_class = {
689*4882a593Smuzhiyun 	.name = "timer",
690*4882a593Smuzhiyun 	.sysc = &dm816x_timer_sysc,
691*4882a593Smuzhiyun };
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun static struct omap_hwmod dm816x_timer3_hwmod = {
694*4882a593Smuzhiyun 	.name		= "timer3",
695*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
696*4882a593Smuzhiyun 	.main_clk	= "timer3_fck",
697*4882a593Smuzhiyun 	.prcm		= {
698*4882a593Smuzhiyun 		.omap4 = {
699*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL,
700*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
701*4882a593Smuzhiyun 		},
702*4882a593Smuzhiyun 	},
703*4882a593Smuzhiyun 	.class		= &dm816x_timer_hwmod_class,
704*4882a593Smuzhiyun };
705*4882a593Smuzhiyun 
706*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = {
707*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
708*4882a593Smuzhiyun 	.slave		= &dm816x_timer3_hwmod,
709*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
710*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
711*4882a593Smuzhiyun };
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun static struct omap_hwmod dm816x_timer4_hwmod = {
714*4882a593Smuzhiyun 	.name		= "timer4",
715*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
716*4882a593Smuzhiyun 	.main_clk	= "timer4_fck",
717*4882a593Smuzhiyun 	.prcm		= {
718*4882a593Smuzhiyun 		.omap4 = {
719*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL,
720*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
721*4882a593Smuzhiyun 		},
722*4882a593Smuzhiyun 	},
723*4882a593Smuzhiyun 	.class		= &dm816x_timer_hwmod_class,
724*4882a593Smuzhiyun };
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = {
727*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
728*4882a593Smuzhiyun 	.slave		= &dm816x_timer4_hwmod,
729*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
730*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
731*4882a593Smuzhiyun };
732*4882a593Smuzhiyun 
733*4882a593Smuzhiyun static struct omap_hwmod dm816x_timer5_hwmod = {
734*4882a593Smuzhiyun 	.name		= "timer5",
735*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
736*4882a593Smuzhiyun 	.main_clk	= "timer5_fck",
737*4882a593Smuzhiyun 	.prcm		= {
738*4882a593Smuzhiyun 		.omap4 = {
739*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL,
740*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
741*4882a593Smuzhiyun 		},
742*4882a593Smuzhiyun 	},
743*4882a593Smuzhiyun 	.class		= &dm816x_timer_hwmod_class,
744*4882a593Smuzhiyun };
745*4882a593Smuzhiyun 
746*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = {
747*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
748*4882a593Smuzhiyun 	.slave		= &dm816x_timer5_hwmod,
749*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
750*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
751*4882a593Smuzhiyun };
752*4882a593Smuzhiyun 
753*4882a593Smuzhiyun static struct omap_hwmod dm816x_timer6_hwmod = {
754*4882a593Smuzhiyun 	.name		= "timer6",
755*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
756*4882a593Smuzhiyun 	.main_clk	= "timer6_fck",
757*4882a593Smuzhiyun 	.prcm		= {
758*4882a593Smuzhiyun 		.omap4 = {
759*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL,
760*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
761*4882a593Smuzhiyun 		},
762*4882a593Smuzhiyun 	},
763*4882a593Smuzhiyun 	.class		= &dm816x_timer_hwmod_class,
764*4882a593Smuzhiyun };
765*4882a593Smuzhiyun 
766*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = {
767*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
768*4882a593Smuzhiyun 	.slave		= &dm816x_timer6_hwmod,
769*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
770*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
771*4882a593Smuzhiyun };
772*4882a593Smuzhiyun 
773*4882a593Smuzhiyun static struct omap_hwmod dm816x_timer7_hwmod = {
774*4882a593Smuzhiyun 	.name		= "timer7",
775*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
776*4882a593Smuzhiyun 	.main_clk	= "timer7_fck",
777*4882a593Smuzhiyun 	.prcm		= {
778*4882a593Smuzhiyun 		.omap4 = {
779*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL,
780*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
781*4882a593Smuzhiyun 		},
782*4882a593Smuzhiyun 	},
783*4882a593Smuzhiyun 	.class		= &dm816x_timer_hwmod_class,
784*4882a593Smuzhiyun };
785*4882a593Smuzhiyun 
786*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = {
787*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
788*4882a593Smuzhiyun 	.slave		= &dm816x_timer7_hwmod,
789*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
790*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
791*4882a593Smuzhiyun };
792*4882a593Smuzhiyun 
793*4882a593Smuzhiyun /* EMAC Ethernet */
794*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = {
795*4882a593Smuzhiyun 	.rev_offs	= 0x0,
796*4882a593Smuzhiyun 	.sysc_offs	= 0x4,
797*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SOFTRESET,
798*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type2,
799*4882a593Smuzhiyun };
800*4882a593Smuzhiyun 
801*4882a593Smuzhiyun static struct omap_hwmod_class dm816x_emac_hwmod_class = {
802*4882a593Smuzhiyun 	.name		= "emac",
803*4882a593Smuzhiyun 	.sysc		= &dm816x_emac_sysc,
804*4882a593Smuzhiyun };
805*4882a593Smuzhiyun 
806*4882a593Smuzhiyun /*
807*4882a593Smuzhiyun  * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate
808*4882a593Smuzhiyun  * driver probed before EMAC0, we let MDIO do the clock idling.
809*4882a593Smuzhiyun  */
810*4882a593Smuzhiyun static struct omap_hwmod dm816x_emac0_hwmod = {
811*4882a593Smuzhiyun 	.name		= "emac0",
812*4882a593Smuzhiyun 	.clkdm_name	= "alwon_ethernet_clkdm",
813*4882a593Smuzhiyun 	.class		= &dm816x_emac_hwmod_class,
814*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
815*4882a593Smuzhiyun };
816*4882a593Smuzhiyun 
817*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_hs__emac0 = {
818*4882a593Smuzhiyun 	.master		= &dm81xx_l4_hs_hwmod,
819*4882a593Smuzhiyun 	.slave		= &dm816x_emac0_hwmod,
820*4882a593Smuzhiyun 	.clk		= "sysclk5_ck",
821*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
822*4882a593Smuzhiyun };
823*4882a593Smuzhiyun 
824*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_mdio_hwmod_class = {
825*4882a593Smuzhiyun 	.name		= "davinci_mdio",
826*4882a593Smuzhiyun 	.sysc		= &dm816x_emac_sysc,
827*4882a593Smuzhiyun };
828*4882a593Smuzhiyun 
829*4882a593Smuzhiyun static struct omap_hwmod dm81xx_emac0_mdio_hwmod = {
830*4882a593Smuzhiyun 	.name		= "davinci_mdio",
831*4882a593Smuzhiyun 	.class		= &dm81xx_mdio_hwmod_class,
832*4882a593Smuzhiyun 	.clkdm_name	= "alwon_ethernet_clkdm",
833*4882a593Smuzhiyun 	.main_clk	= "sysclk24_ck",
834*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
835*4882a593Smuzhiyun 	/*
836*4882a593Smuzhiyun 	 * REVISIT: This should be moved to the emac0_hwmod
837*4882a593Smuzhiyun 	 * once we have a better way to handle device slaves.
838*4882a593Smuzhiyun 	 */
839*4882a593Smuzhiyun 	.prcm		= {
840*4882a593Smuzhiyun 		.omap4 = {
841*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_ETHERNET_0_CLKCTRL,
842*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
843*4882a593Smuzhiyun 		},
844*4882a593Smuzhiyun 	},
845*4882a593Smuzhiyun };
846*4882a593Smuzhiyun 
847*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_emac0__mdio = {
848*4882a593Smuzhiyun 	.master		= &dm81xx_l4_hs_hwmod,
849*4882a593Smuzhiyun 	.slave		= &dm81xx_emac0_mdio_hwmod,
850*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
851*4882a593Smuzhiyun };
852*4882a593Smuzhiyun 
853*4882a593Smuzhiyun static struct omap_hwmod dm816x_emac1_hwmod = {
854*4882a593Smuzhiyun 	.name		= "emac1",
855*4882a593Smuzhiyun 	.clkdm_name	= "alwon_ethernet_clkdm",
856*4882a593Smuzhiyun 	.main_clk	= "sysclk24_ck",
857*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
858*4882a593Smuzhiyun 	.prcm		= {
859*4882a593Smuzhiyun 		.omap4 = {
860*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL,
861*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
862*4882a593Smuzhiyun 		},
863*4882a593Smuzhiyun 	},
864*4882a593Smuzhiyun 	.class		= &dm816x_emac_hwmod_class,
865*4882a593Smuzhiyun };
866*4882a593Smuzhiyun 
867*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
868*4882a593Smuzhiyun 	.master		= &dm81xx_l4_hs_hwmod,
869*4882a593Smuzhiyun 	.slave		= &dm816x_emac1_hwmod,
870*4882a593Smuzhiyun 	.clk		= "sysclk5_ck",
871*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
872*4882a593Smuzhiyun };
873*4882a593Smuzhiyun 
874*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_sata_sysc = {
875*4882a593Smuzhiyun 	.rev_offs	= 0x00fc,
876*4882a593Smuzhiyun 	.sysc_offs	= 0x1100,
877*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_SIDLEMODE,
878*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE,
879*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type3,
880*4882a593Smuzhiyun };
881*4882a593Smuzhiyun 
882*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_sata_hwmod_class = {
883*4882a593Smuzhiyun 	.name	= "sata",
884*4882a593Smuzhiyun 	.sysc	= &dm81xx_sata_sysc,
885*4882a593Smuzhiyun };
886*4882a593Smuzhiyun 
887*4882a593Smuzhiyun static struct omap_hwmod dm81xx_sata_hwmod = {
888*4882a593Smuzhiyun 	.name		= "sata",
889*4882a593Smuzhiyun 	.clkdm_name	= "default_clkdm",
890*4882a593Smuzhiyun 	.flags		= HWMOD_NO_IDLEST,
891*4882a593Smuzhiyun 	.prcm = {
892*4882a593Smuzhiyun 		.omap4 = {
893*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_DEFAULT_SATA_CLKCTRL,
894*4882a593Smuzhiyun 			.modulemode   = MODULEMODE_SWCTRL,
895*4882a593Smuzhiyun 		},
896*4882a593Smuzhiyun 	},
897*4882a593Smuzhiyun 	.class		= &dm81xx_sata_hwmod_class,
898*4882a593Smuzhiyun };
899*4882a593Smuzhiyun 
900*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_hs__sata = {
901*4882a593Smuzhiyun 	.master		= &dm81xx_l4_hs_hwmod,
902*4882a593Smuzhiyun 	.slave		= &dm81xx_sata_hwmod,
903*4882a593Smuzhiyun 	.clk		= "sysclk5_ck",
904*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
905*4882a593Smuzhiyun };
906*4882a593Smuzhiyun 
907*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_mmc_sysc = {
908*4882a593Smuzhiyun 	.rev_offs	= 0x0,
909*4882a593Smuzhiyun 	.sysc_offs	= 0x110,
910*4882a593Smuzhiyun 	.syss_offs	= 0x114,
911*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
912*4882a593Smuzhiyun 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
913*4882a593Smuzhiyun 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
914*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
915*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
916*4882a593Smuzhiyun };
917*4882a593Smuzhiyun 
918*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_mmc_class = {
919*4882a593Smuzhiyun 	.name = "mmc",
920*4882a593Smuzhiyun 	.sysc = &dm81xx_mmc_sysc,
921*4882a593Smuzhiyun };
922*4882a593Smuzhiyun 
923*4882a593Smuzhiyun static struct omap_hwmod_opt_clk dm81xx_mmc_opt_clks[] = {
924*4882a593Smuzhiyun 	{ .role = "dbck", .clk = "sysclk18_ck", },
925*4882a593Smuzhiyun };
926*4882a593Smuzhiyun 
927*4882a593Smuzhiyun static struct omap_hsmmc_dev_attr mmc_dev_attr = {
928*4882a593Smuzhiyun };
929*4882a593Smuzhiyun 
930*4882a593Smuzhiyun static struct omap_hwmod dm814x_mmc1_hwmod = {
931*4882a593Smuzhiyun 	.name		= "mmc1",
932*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
933*4882a593Smuzhiyun 	.opt_clks	= dm81xx_mmc_opt_clks,
934*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
935*4882a593Smuzhiyun 	.main_clk	= "sysclk8_ck",
936*4882a593Smuzhiyun 	.prcm		= {
937*4882a593Smuzhiyun 		.omap4 = {
938*4882a593Smuzhiyun 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_0_CLKCTRL,
939*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
940*4882a593Smuzhiyun 		},
941*4882a593Smuzhiyun 	},
942*4882a593Smuzhiyun 	.dev_attr	= &mmc_dev_attr,
943*4882a593Smuzhiyun 	.class		= &dm81xx_mmc_class,
944*4882a593Smuzhiyun };
945*4882a593Smuzhiyun 
946*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc1 = {
947*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
948*4882a593Smuzhiyun 	.slave		= &dm814x_mmc1_hwmod,
949*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
950*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
951*4882a593Smuzhiyun 	.flags		= OMAP_FIREWALL_L4
952*4882a593Smuzhiyun };
953*4882a593Smuzhiyun 
954*4882a593Smuzhiyun static struct omap_hwmod dm814x_mmc2_hwmod = {
955*4882a593Smuzhiyun 	.name		= "mmc2",
956*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
957*4882a593Smuzhiyun 	.opt_clks	= dm81xx_mmc_opt_clks,
958*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
959*4882a593Smuzhiyun 	.main_clk	= "sysclk8_ck",
960*4882a593Smuzhiyun 	.prcm		= {
961*4882a593Smuzhiyun 		.omap4 = {
962*4882a593Smuzhiyun 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_1_CLKCTRL,
963*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
964*4882a593Smuzhiyun 		},
965*4882a593Smuzhiyun 	},
966*4882a593Smuzhiyun 	.dev_attr	= &mmc_dev_attr,
967*4882a593Smuzhiyun 	.class		= &dm81xx_mmc_class,
968*4882a593Smuzhiyun };
969*4882a593Smuzhiyun 
970*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_l4_ls__mmc2 = {
971*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
972*4882a593Smuzhiyun 	.slave		= &dm814x_mmc2_hwmod,
973*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
974*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
975*4882a593Smuzhiyun 	.flags		= OMAP_FIREWALL_L4
976*4882a593Smuzhiyun };
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun static struct omap_hwmod dm814x_mmc3_hwmod = {
979*4882a593Smuzhiyun 	.name		= "mmc3",
980*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3_med_clkdm",
981*4882a593Smuzhiyun 	.opt_clks	= dm81xx_mmc_opt_clks,
982*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
983*4882a593Smuzhiyun 	.main_clk	= "sysclk8_ck",
984*4882a593Smuzhiyun 	.prcm		= {
985*4882a593Smuzhiyun 		.omap4 = {
986*4882a593Smuzhiyun 			.clkctrl_offs = DM814X_CM_ALWON_MMCHS_2_CLKCTRL,
987*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
988*4882a593Smuzhiyun 		},
989*4882a593Smuzhiyun 	},
990*4882a593Smuzhiyun 	.dev_attr	= &mmc_dev_attr,
991*4882a593Smuzhiyun 	.class		= &dm81xx_mmc_class,
992*4882a593Smuzhiyun };
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm814x_alwon_l3_med__mmc3 = {
995*4882a593Smuzhiyun 	.master		= &dm81xx_alwon_l3_med_hwmod,
996*4882a593Smuzhiyun 	.slave		= &dm814x_mmc3_hwmod,
997*4882a593Smuzhiyun 	.clk		= "sysclk4_ck",
998*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
999*4882a593Smuzhiyun };
1000*4882a593Smuzhiyun 
1001*4882a593Smuzhiyun static struct omap_hwmod dm816x_mmc1_hwmod = {
1002*4882a593Smuzhiyun 	.name		= "mmc1",
1003*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1004*4882a593Smuzhiyun 	.opt_clks	= dm81xx_mmc_opt_clks,
1005*4882a593Smuzhiyun 	.opt_clks_cnt	= ARRAY_SIZE(dm81xx_mmc_opt_clks),
1006*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
1007*4882a593Smuzhiyun 	.prcm		= {
1008*4882a593Smuzhiyun 		.omap4 = {
1009*4882a593Smuzhiyun 			.clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
1010*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1011*4882a593Smuzhiyun 		},
1012*4882a593Smuzhiyun 	},
1013*4882a593Smuzhiyun 	.dev_attr	= &mmc_dev_attr,
1014*4882a593Smuzhiyun 	.class		= &dm81xx_mmc_class,
1015*4882a593Smuzhiyun };
1016*4882a593Smuzhiyun 
1017*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
1018*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1019*4882a593Smuzhiyun 	.slave		= &dm816x_mmc1_hwmod,
1020*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1021*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1022*4882a593Smuzhiyun 	.flags		= OMAP_FIREWALL_L4
1023*4882a593Smuzhiyun };
1024*4882a593Smuzhiyun 
1025*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = {
1026*4882a593Smuzhiyun 	.rev_offs	= 0x0,
1027*4882a593Smuzhiyun 	.sysc_offs	= 0x110,
1028*4882a593Smuzhiyun 	.syss_offs	= 0x114,
1029*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1030*4882a593Smuzhiyun 				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1031*4882a593Smuzhiyun 				SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
1032*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1033*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
1034*4882a593Smuzhiyun };
1035*4882a593Smuzhiyun 
1036*4882a593Smuzhiyun static struct omap_hwmod_class dm816x_mcspi_class = {
1037*4882a593Smuzhiyun 	.name = "mcspi",
1038*4882a593Smuzhiyun 	.sysc = &dm816x_mcspi_sysc,
1039*4882a593Smuzhiyun };
1040*4882a593Smuzhiyun 
1041*4882a593Smuzhiyun static struct omap_hwmod dm81xx_mcspi1_hwmod = {
1042*4882a593Smuzhiyun 	.name		= "mcspi1",
1043*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1044*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
1045*4882a593Smuzhiyun 	.prcm		= {
1046*4882a593Smuzhiyun 		.omap4 = {
1047*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1048*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1049*4882a593Smuzhiyun 		},
1050*4882a593Smuzhiyun 	},
1051*4882a593Smuzhiyun 	.class		= &dm816x_mcspi_class,
1052*4882a593Smuzhiyun };
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun static struct omap_hwmod dm81xx_mcspi2_hwmod = {
1055*4882a593Smuzhiyun 	.name		= "mcspi2",
1056*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1057*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
1058*4882a593Smuzhiyun 	.prcm		= {
1059*4882a593Smuzhiyun 		.omap4 = {
1060*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1061*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1062*4882a593Smuzhiyun 		},
1063*4882a593Smuzhiyun 	},
1064*4882a593Smuzhiyun 	.class		= &dm816x_mcspi_class,
1065*4882a593Smuzhiyun };
1066*4882a593Smuzhiyun 
1067*4882a593Smuzhiyun static struct omap_hwmod dm81xx_mcspi3_hwmod = {
1068*4882a593Smuzhiyun 	.name		= "mcspi3",
1069*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1070*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
1071*4882a593Smuzhiyun 	.prcm		= {
1072*4882a593Smuzhiyun 		.omap4 = {
1073*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1074*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1075*4882a593Smuzhiyun 		},
1076*4882a593Smuzhiyun 	},
1077*4882a593Smuzhiyun 	.class		= &dm816x_mcspi_class,
1078*4882a593Smuzhiyun };
1079*4882a593Smuzhiyun 
1080*4882a593Smuzhiyun static struct omap_hwmod dm81xx_mcspi4_hwmod = {
1081*4882a593Smuzhiyun 	.name		= "mcspi4",
1082*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1083*4882a593Smuzhiyun 	.main_clk	= "sysclk10_ck",
1084*4882a593Smuzhiyun 	.prcm		= {
1085*4882a593Smuzhiyun 		.omap4 = {
1086*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_SPI_CLKCTRL,
1087*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1088*4882a593Smuzhiyun 		},
1089*4882a593Smuzhiyun 	},
1090*4882a593Smuzhiyun 	.class		= &dm816x_mcspi_class,
1091*4882a593Smuzhiyun };
1092*4882a593Smuzhiyun 
1093*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi1 = {
1094*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1095*4882a593Smuzhiyun 	.slave		= &dm81xx_mcspi1_hwmod,
1096*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1097*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1098*4882a593Smuzhiyun };
1099*4882a593Smuzhiyun 
1100*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi2 = {
1101*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1102*4882a593Smuzhiyun 	.slave		= &dm81xx_mcspi2_hwmod,
1103*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1104*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1105*4882a593Smuzhiyun };
1106*4882a593Smuzhiyun 
1107*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi3 = {
1108*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1109*4882a593Smuzhiyun 	.slave		= &dm81xx_mcspi3_hwmod,
1110*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1111*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1112*4882a593Smuzhiyun };
1113*4882a593Smuzhiyun 
1114*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__mcspi4 = {
1115*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1116*4882a593Smuzhiyun 	.slave		= &dm81xx_mcspi4_hwmod,
1117*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1118*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1119*4882a593Smuzhiyun };
1120*4882a593Smuzhiyun 
1121*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_mailbox_sysc = {
1122*4882a593Smuzhiyun 	.rev_offs	= 0x000,
1123*4882a593Smuzhiyun 	.sysc_offs	= 0x010,
1124*4882a593Smuzhiyun 	.syss_offs	= 0x014,
1125*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1126*4882a593Smuzhiyun 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1127*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1128*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
1129*4882a593Smuzhiyun };
1130*4882a593Smuzhiyun 
1131*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_mailbox_hwmod_class = {
1132*4882a593Smuzhiyun 	.name = "mailbox",
1133*4882a593Smuzhiyun 	.sysc = &dm81xx_mailbox_sysc,
1134*4882a593Smuzhiyun };
1135*4882a593Smuzhiyun 
1136*4882a593Smuzhiyun static struct omap_hwmod dm81xx_mailbox_hwmod = {
1137*4882a593Smuzhiyun 	.name		= "mailbox",
1138*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1139*4882a593Smuzhiyun 	.class		= &dm81xx_mailbox_hwmod_class,
1140*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
1141*4882a593Smuzhiyun 	.prcm		= {
1142*4882a593Smuzhiyun 		.omap4 = {
1143*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_MAILBOX_CLKCTRL,
1144*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1145*4882a593Smuzhiyun 		},
1146*4882a593Smuzhiyun 	},
1147*4882a593Smuzhiyun };
1148*4882a593Smuzhiyun 
1149*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__mailbox = {
1150*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1151*4882a593Smuzhiyun 	.slave		= &dm81xx_mailbox_hwmod,
1152*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1153*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1154*4882a593Smuzhiyun };
1155*4882a593Smuzhiyun 
1156*4882a593Smuzhiyun static struct omap_hwmod_class_sysconfig dm81xx_spinbox_sysc = {
1157*4882a593Smuzhiyun 	.rev_offs	= 0x000,
1158*4882a593Smuzhiyun 	.sysc_offs	= 0x010,
1159*4882a593Smuzhiyun 	.syss_offs	= 0x014,
1160*4882a593Smuzhiyun 	.sysc_flags	= SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1161*4882a593Smuzhiyun 				SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
1162*4882a593Smuzhiyun 	.idlemodes	= SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
1163*4882a593Smuzhiyun 	.sysc_fields	= &omap_hwmod_sysc_type1,
1164*4882a593Smuzhiyun };
1165*4882a593Smuzhiyun 
1166*4882a593Smuzhiyun static struct omap_hwmod_class dm81xx_spinbox_hwmod_class = {
1167*4882a593Smuzhiyun 	.name = "spinbox",
1168*4882a593Smuzhiyun 	.sysc = &dm81xx_spinbox_sysc,
1169*4882a593Smuzhiyun };
1170*4882a593Smuzhiyun 
1171*4882a593Smuzhiyun static struct omap_hwmod dm81xx_spinbox_hwmod = {
1172*4882a593Smuzhiyun 	.name		= "spinbox",
1173*4882a593Smuzhiyun 	.clkdm_name	= "alwon_l3s_clkdm",
1174*4882a593Smuzhiyun 	.class		= &dm81xx_spinbox_hwmod_class,
1175*4882a593Smuzhiyun 	.main_clk	= "sysclk6_ck",
1176*4882a593Smuzhiyun 	.prcm		= {
1177*4882a593Smuzhiyun 		.omap4 = {
1178*4882a593Smuzhiyun 			.clkctrl_offs = DM81XX_CM_ALWON_SPINBOX_CLKCTRL,
1179*4882a593Smuzhiyun 			.modulemode = MODULEMODE_SWCTRL,
1180*4882a593Smuzhiyun 		},
1181*4882a593Smuzhiyun 	},
1182*4882a593Smuzhiyun };
1183*4882a593Smuzhiyun 
1184*4882a593Smuzhiyun static struct omap_hwmod_ocp_if dm81xx_l4_ls__spinbox = {
1185*4882a593Smuzhiyun 	.master		= &dm81xx_l4_ls_hwmod,
1186*4882a593Smuzhiyun 	.slave		= &dm81xx_spinbox_hwmod,
1187*4882a593Smuzhiyun 	.clk		= "sysclk6_ck",
1188*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
1189*4882a593Smuzhiyun };
1190*4882a593Smuzhiyun 
1191*4882a593Smuzhiyun /*
1192*4882a593Smuzhiyun  * REVISIT: Test and enable the following once clocks work:
1193*4882a593Smuzhiyun  * dm81xx_l4_ls__mailbox
1194*4882a593Smuzhiyun  *
1195*4882a593Smuzhiyun  * Also note that some devices share a single clkctrl_offs..
1196*4882a593Smuzhiyun  * For example, i2c1 and 3 share one, and i2c2 and 4 share one.
1197*4882a593Smuzhiyun  */
1198*4882a593Smuzhiyun static struct omap_hwmod_ocp_if *dm814x_hwmod_ocp_ifs[] __initdata = {
1199*4882a593Smuzhiyun 	&dm814x_mpu__alwon_l3_slow,
1200*4882a593Smuzhiyun 	&dm814x_mpu__alwon_l3_med,
1201*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__l4_ls,
1202*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__l4_hs,
1203*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart1,
1204*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart2,
1205*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart3,
1206*4882a593Smuzhiyun 	&dm81xx_l4_ls__wd_timer1,
1207*4882a593Smuzhiyun 	&dm81xx_l4_ls__i2c1,
1208*4882a593Smuzhiyun 	&dm81xx_l4_ls__i2c2,
1209*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio1,
1210*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio2,
1211*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio3,
1212*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio4,
1213*4882a593Smuzhiyun 	&dm81xx_l4_ls__elm,
1214*4882a593Smuzhiyun 	&dm81xx_l4_ls__mcspi1,
1215*4882a593Smuzhiyun 	&dm81xx_l4_ls__mcspi2,
1216*4882a593Smuzhiyun 	&dm81xx_l4_ls__mcspi3,
1217*4882a593Smuzhiyun 	&dm81xx_l4_ls__mcspi4,
1218*4882a593Smuzhiyun 	&dm814x_l4_ls__mmc1,
1219*4882a593Smuzhiyun 	&dm814x_l4_ls__mmc2,
1220*4882a593Smuzhiyun 	&ti81xx_l4_ls__rtc,
1221*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__gpmc,
1222*4882a593Smuzhiyun 	&dm814x_default_l3_slow__usbss,
1223*4882a593Smuzhiyun 	&dm814x_alwon_l3_med__mmc3,
1224*4882a593Smuzhiyun 	NULL,
1225*4882a593Smuzhiyun };
1226*4882a593Smuzhiyun 
dm814x_hwmod_init(void)1227*4882a593Smuzhiyun int __init dm814x_hwmod_init(void)
1228*4882a593Smuzhiyun {
1229*4882a593Smuzhiyun 	omap_hwmod_init();
1230*4882a593Smuzhiyun 	return omap_hwmod_register_links(dm814x_hwmod_ocp_ifs);
1231*4882a593Smuzhiyun }
1232*4882a593Smuzhiyun 
1233*4882a593Smuzhiyun static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1234*4882a593Smuzhiyun 	&dm816x_mpu__alwon_l3_slow,
1235*4882a593Smuzhiyun 	&dm816x_mpu__alwon_l3_med,
1236*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__l4_ls,
1237*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__l4_hs,
1238*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart1,
1239*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart2,
1240*4882a593Smuzhiyun 	&dm81xx_l4_ls__uart3,
1241*4882a593Smuzhiyun 	&dm81xx_l4_ls__wd_timer1,
1242*4882a593Smuzhiyun 	&dm81xx_l4_ls__i2c1,
1243*4882a593Smuzhiyun 	&dm81xx_l4_ls__i2c2,
1244*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio1,
1245*4882a593Smuzhiyun 	&dm81xx_l4_ls__gpio2,
1246*4882a593Smuzhiyun 	&dm81xx_l4_ls__elm,
1247*4882a593Smuzhiyun 	&ti81xx_l4_ls__rtc,
1248*4882a593Smuzhiyun 	&dm816x_l4_ls__mmc1,
1249*4882a593Smuzhiyun 	&dm816x_l4_ls__timer3,
1250*4882a593Smuzhiyun 	&dm816x_l4_ls__timer4,
1251*4882a593Smuzhiyun 	&dm816x_l4_ls__timer5,
1252*4882a593Smuzhiyun 	&dm816x_l4_ls__timer6,
1253*4882a593Smuzhiyun 	&dm816x_l4_ls__timer7,
1254*4882a593Smuzhiyun 	&dm81xx_l4_ls__mcspi1,
1255*4882a593Smuzhiyun 	&dm81xx_l4_ls__mailbox,
1256*4882a593Smuzhiyun 	&dm81xx_l4_ls__spinbox,
1257*4882a593Smuzhiyun 	&dm81xx_l4_hs__emac0,
1258*4882a593Smuzhiyun 	&dm81xx_emac0__mdio,
1259*4882a593Smuzhiyun 	&dm816x_l4_hs__emac1,
1260*4882a593Smuzhiyun 	&dm81xx_l4_hs__sata,
1261*4882a593Smuzhiyun 	&dm81xx_alwon_l3_slow__gpmc,
1262*4882a593Smuzhiyun 	&dm816x_default_l3_slow__usbss,
1263*4882a593Smuzhiyun 	NULL,
1264*4882a593Smuzhiyun };
1265*4882a593Smuzhiyun 
dm816x_hwmod_init(void)1266*4882a593Smuzhiyun int __init dm816x_hwmod_init(void)
1267*4882a593Smuzhiyun {
1268*4882a593Smuzhiyun 	omap_hwmod_init();
1269*4882a593Smuzhiyun 	return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1270*4882a593Smuzhiyun }
1271