Merge tag 'mfd-for-linus-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
[pandora-kernel.git] / arch / arm / mach-omap2 / omap_hwmod_81xx_data.c
1 /*
2  * DM81xx hwmod data.
3  *
4  * Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/
5  * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation version 2.
10  *
11  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
12  * kind, whether express or implied; without even the implied warranty
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17
18 #include <linux/platform_data/gpio-omap.h>
19 #include <linux/platform_data/hsmmc-omap.h>
20 #include <linux/platform_data/spi-omap2-mcspi.h>
21 #include <plat/dmtimer.h>
22
23 #include "omap_hwmod_common_data.h"
24 #include "cm81xx.h"
25 #include "ti81xx.h"
26 #include "wd_timer.h"
27
28 /*
29  * DM816X hardware modules integration data
30  *
31  * Note: This is incomplete and at present, not generated from h/w database.
32  */
33
34 /*
35  * The alwon .clkctrl_offs field is offset from the CM_ALWON, that's
36  * TRM 18.7.17 CM_ALWON device register values minus 0x1400.
37  */
38 #define DM816X_DM_ALWON_BASE            0x1400
39 #define DM816X_CM_ALWON_MCASP0_CLKCTRL  (0x1540 - DM816X_DM_ALWON_BASE)
40 #define DM816X_CM_ALWON_MCASP1_CLKCTRL  (0x1544 - DM816X_DM_ALWON_BASE)
41 #define DM816X_CM_ALWON_MCASP2_CLKCTRL  (0x1548 - DM816X_DM_ALWON_BASE)
42 #define DM816X_CM_ALWON_MCBSP_CLKCTRL   (0x154c - DM816X_DM_ALWON_BASE)
43 #define DM816X_CM_ALWON_UART_0_CLKCTRL  (0x1550 - DM816X_DM_ALWON_BASE)
44 #define DM816X_CM_ALWON_UART_1_CLKCTRL  (0x1554 - DM816X_DM_ALWON_BASE)
45 #define DM816X_CM_ALWON_UART_2_CLKCTRL  (0x1558 - DM816X_DM_ALWON_BASE)
46 #define DM816X_CM_ALWON_GPIO_0_CLKCTRL  (0x155c - DM816X_DM_ALWON_BASE)
47 #define DM816X_CM_ALWON_GPIO_1_CLKCTRL  (0x1560 - DM816X_DM_ALWON_BASE)
48 #define DM816X_CM_ALWON_I2C_0_CLKCTRL   (0x1564 - DM816X_DM_ALWON_BASE)
49 #define DM816X_CM_ALWON_I2C_1_CLKCTRL   (0x1568 - DM816X_DM_ALWON_BASE)
50 #define DM816X_CM_ALWON_TIMER_1_CLKCTRL (0x1570 - DM816X_DM_ALWON_BASE)
51 #define DM816X_CM_ALWON_TIMER_2_CLKCTRL (0x1574 - DM816X_DM_ALWON_BASE)
52 #define DM816X_CM_ALWON_TIMER_3_CLKCTRL (0x1578 - DM816X_DM_ALWON_BASE)
53 #define DM816X_CM_ALWON_TIMER_4_CLKCTRL (0x157c - DM816X_DM_ALWON_BASE)
54 #define DM816X_CM_ALWON_TIMER_5_CLKCTRL (0x1580 - DM816X_DM_ALWON_BASE)
55 #define DM816X_CM_ALWON_TIMER_6_CLKCTRL (0x1584 - DM816X_DM_ALWON_BASE)
56 #define DM816X_CM_ALWON_TIMER_7_CLKCTRL (0x1588 - DM816X_DM_ALWON_BASE)
57 #define DM816X_CM_ALWON_WDTIMER_CLKCTRL (0x158c - DM816X_DM_ALWON_BASE)
58 #define DM816X_CM_ALWON_SPI_CLKCTRL     (0x1590 - DM816X_DM_ALWON_BASE)
59 #define DM816X_CM_ALWON_MAILBOX_CLKCTRL (0x1594 - DM816X_DM_ALWON_BASE)
60 #define DM816X_CM_ALWON_SPINBOX_CLKCTRL (0x1598 - DM816X_DM_ALWON_BASE)
61 #define DM816X_CM_ALWON_MMUDATA_CLKCTRL (0x159c - DM816X_DM_ALWON_BASE)
62 #define DM816X_CM_ALWON_MMUCFG_CLKCTRL  (0x15a8 - DM816X_DM_ALWON_BASE)
63 #define DM816X_CM_ALWON_SDIO_CLKCTRL    (0x15b0 - DM816X_DM_ALWON_BASE)
64 #define DM816X_CM_ALWON_OCMC_0_CLKCTRL  (0x15b4 - DM816X_DM_ALWON_BASE)
65 #define DM816X_CM_ALWON_OCMC_1_CLKCTRL  (0x15b8 - DM816X_DM_ALWON_BASE)
66 #define DM816X_CM_ALWON_CONTRL_CLKCTRL  (0x15c4 - DM816X_DM_ALWON_BASE)
67 #define DM816X_CM_ALWON_GPMC_CLKCTRL    (0x15d0 - DM816X_DM_ALWON_BASE)
68 #define DM816X_CM_ALWON_ETHERNET_0_CLKCTRL (0x15d4 - DM816X_DM_ALWON_BASE)
69 #define DM816X_CM_ALWON_ETHERNET_1_CLKCTRL (0x15d8 - DM816X_DM_ALWON_BASE)
70 #define DM816X_CM_ALWON_MPU_CLKCTRL     (0x15dc - DM816X_DM_ALWON_BASE)
71 #define DM816X_CM_ALWON_L3_CLKCTRL      (0x15e4 - DM816X_DM_ALWON_BASE)
72 #define DM816X_CM_ALWON_L4HS_CLKCTRL    (0x15e8 - DM816X_DM_ALWON_BASE)
73 #define DM816X_CM_ALWON_L4LS_CLKCTRL    (0x15ec - DM816X_DM_ALWON_BASE)
74 #define DM816X_CM_ALWON_RTC_CLKCTRL     (0x15f0 - DM816X_DM_ALWON_BASE)
75 #define DM816X_CM_ALWON_TPCC_CLKCTRL    (0x15f4 - DM816X_DM_ALWON_BASE)
76 #define DM816X_CM_ALWON_TPTC0_CLKCTRL   (0x15f8 - DM816X_DM_ALWON_BASE)
77 #define DM816X_CM_ALWON_TPTC1_CLKCTRL   (0x15fc - DM816X_DM_ALWON_BASE)
78 #define DM816X_CM_ALWON_TPTC2_CLKCTRL   (0x1600 - DM816X_DM_ALWON_BASE)
79 #define DM816X_CM_ALWON_TPTC3_CLKCTRL   (0x1604 - DM816X_DM_ALWON_BASE)
80 #define DM816X_CM_ALWON_SR_0_CLKCTRL    (0x1608 - DM816X_DM_ALWON_BASE)
81 #define DM816X_CM_ALWON_SR_1_CLKCTRL    (0x160c - DM816X_DM_ALWON_BASE)
82
83 /*
84  * The default .clkctrl_offs field is offset from CM_DEFAULT, that's
85  * TRM 18.7.6 CM_DEFAULT device register values minus 0x500
86  */
87 #define DM816X_CM_DEFAULT_OFFSET        0x500
88 #define DM816X_CM_DEFAULT_USB_CLKCTRL   (0x558 - DM816X_CM_DEFAULT_OFFSET)
89
90 /* L3 Interconnect entries clocked at 125, 250 and 500MHz */
91 static struct omap_hwmod dm816x_alwon_l3_slow_hwmod = {
92         .name           = "alwon_l3_slow",
93         .clkdm_name     = "alwon_l3s_clkdm",
94         .class          = &l3_hwmod_class,
95         .flags          = HWMOD_NO_IDLEST,
96 };
97
98 static struct omap_hwmod dm816x_default_l3_slow_hwmod = {
99         .name           = "default_l3_slow",
100         .clkdm_name     = "default_l3_slow_clkdm",
101         .class          = &l3_hwmod_class,
102         .flags          = HWMOD_NO_IDLEST,
103 };
104
105 static struct omap_hwmod dm816x_alwon_l3_med_hwmod = {
106         .name           = "l3_med",
107         .clkdm_name     = "alwon_l3_med_clkdm",
108         .class          = &l3_hwmod_class,
109         .flags          = HWMOD_NO_IDLEST,
110 };
111
112 static struct omap_hwmod dm816x_alwon_l3_fast_hwmod = {
113         .name           = "l3_fast",
114         .clkdm_name     = "alwon_l3_fast_clkdm",
115         .class          = &l3_hwmod_class,
116         .flags          = HWMOD_NO_IDLEST,
117 };
118
119 /*
120  * L4 standard peripherals, see TRM table 1-12 for devices using this.
121  * See TRM table 1-73 for devices using the 125MHz SYSCLK6 clock.
122  */
123 static struct omap_hwmod dm816x_l4_ls_hwmod = {
124         .name           = "l4_ls",
125         .clkdm_name     = "alwon_l3s_clkdm",
126         .class          = &l4_hwmod_class,
127 };
128
129 /*
130  * L4 high-speed peripherals. For devices using this, please see the TRM
131  * table 1-13. On dm816x, only EMAC, MDIO and SATA use this. See also TRM
132  * table 1-73 for devices using 250MHz SYSCLK5 clock.
133  */
134 static struct omap_hwmod dm816x_l4_hs_hwmod = {
135         .name           = "l4_hs",
136         .clkdm_name     = "alwon_l3_med_clkdm",
137         .class          = &l4_hwmod_class,
138 };
139
140 /* L3 slow -> L4 ls peripheral interface running at 125MHz */
141 static struct omap_hwmod_ocp_if dm816x_alwon_l3_slow__l4_ls = {
142         .master = &dm816x_alwon_l3_slow_hwmod,
143         .slave  = &dm816x_l4_ls_hwmod,
144         .user   = OCP_USER_MPU,
145 };
146
147 /* L3 med -> L4 fast peripheral interface running at 250MHz */
148 static struct omap_hwmod_ocp_if dm816x_alwon_l3_slow__l4_hs = {
149         .master = &dm816x_alwon_l3_med_hwmod,
150         .slave  = &dm816x_l4_hs_hwmod,
151         .user   = OCP_USER_MPU,
152 };
153
154 /* MPU */
155 static struct omap_hwmod dm816x_mpu_hwmod = {
156         .name           = "mpu",
157         .clkdm_name     = "alwon_mpu_clkdm",
158         .class          = &mpu_hwmod_class,
159         .flags          = HWMOD_INIT_NO_IDLE,
160         .main_clk       = "mpu_ck",
161         .prcm           = {
162                 .omap4 = {
163                         .clkctrl_offs = DM816X_CM_ALWON_MPU_CLKCTRL,
164                         .modulemode = MODULEMODE_SWCTRL,
165                 },
166         },
167 };
168
169 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_slow = {
170         .master         = &dm816x_mpu_hwmod,
171         .slave          = &dm816x_alwon_l3_slow_hwmod,
172         .user           = OCP_USER_MPU,
173 };
174
175 /* L3 med peripheral interface running at 250MHz */
176 static struct omap_hwmod_ocp_if dm816x_mpu__alwon_l3_med = {
177         .master = &dm816x_mpu_hwmod,
178         .slave  = &dm816x_alwon_l3_med_hwmod,
179         .user   = OCP_USER_MPU,
180 };
181
182 /* UART common */
183 static struct omap_hwmod_class_sysconfig uart_sysc = {
184         .rev_offs       = 0x50,
185         .sysc_offs      = 0x54,
186         .syss_offs      = 0x58,
187         .sysc_flags     = SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
188                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
189                                 SYSS_HAS_RESET_STATUS,
190         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
191                                 MSTANDBY_SMART_WKUP,
192         .sysc_fields    = &omap_hwmod_sysc_type1,
193 };
194
195 static struct omap_hwmod_class uart_class = {
196         .name = "uart",
197         .sysc = &uart_sysc,
198 };
199
200 static struct omap_hwmod dm816x_uart1_hwmod = {
201         .name           = "uart1",
202         .clkdm_name     = "alwon_l3s_clkdm",
203         .main_clk       = "sysclk10_ck",
204         .prcm           = {
205                 .omap4 = {
206                         .clkctrl_offs = DM816X_CM_ALWON_UART_0_CLKCTRL,
207                         .modulemode = MODULEMODE_SWCTRL,
208                 },
209         },
210         .class          = &uart_class,
211         .flags          = DEBUG_TI81XXUART1_FLAGS,
212 };
213
214 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart1 = {
215         .master         = &dm816x_l4_ls_hwmod,
216         .slave          = &dm816x_uart1_hwmod,
217         .clk            = "sysclk6_ck",
218         .user           = OCP_USER_MPU,
219 };
220
221 static struct omap_hwmod dm816x_uart2_hwmod = {
222         .name           = "uart2",
223         .clkdm_name     = "alwon_l3s_clkdm",
224         .main_clk       = "sysclk10_ck",
225         .prcm           = {
226                 .omap4 = {
227                         .clkctrl_offs = DM816X_CM_ALWON_UART_1_CLKCTRL,
228                         .modulemode = MODULEMODE_SWCTRL,
229                 },
230         },
231         .class          = &uart_class,
232         .flags          = DEBUG_TI81XXUART2_FLAGS,
233 };
234
235 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart2 = {
236         .master         = &dm816x_l4_ls_hwmod,
237         .slave          = &dm816x_uart2_hwmod,
238         .clk            = "sysclk6_ck",
239         .user           = OCP_USER_MPU,
240 };
241
242 static struct omap_hwmod dm816x_uart3_hwmod = {
243         .name           = "uart3",
244         .clkdm_name     = "alwon_l3s_clkdm",
245         .main_clk       = "sysclk10_ck",
246         .prcm           = {
247                 .omap4 = {
248                         .clkctrl_offs = DM816X_CM_ALWON_UART_2_CLKCTRL,
249                         .modulemode = MODULEMODE_SWCTRL,
250                 },
251         },
252         .class          = &uart_class,
253         .flags          = DEBUG_TI81XXUART3_FLAGS,
254 };
255
256 static struct omap_hwmod_ocp_if dm816x_l4_ls__uart3 = {
257         .master         = &dm816x_l4_ls_hwmod,
258         .slave          = &dm816x_uart3_hwmod,
259         .clk            = "sysclk6_ck",
260         .user           = OCP_USER_MPU,
261 };
262
263 static struct omap_hwmod_class_sysconfig wd_timer_sysc = {
264         .rev_offs       = 0x0,
265         .sysc_offs      = 0x10,
266         .syss_offs      = 0x14,
267         .sysc_flags     = SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
268                                 SYSS_HAS_RESET_STATUS,
269         .sysc_fields    = &omap_hwmod_sysc_type1,
270 };
271
272 static struct omap_hwmod_class wd_timer_class = {
273         .name           = "wd_timer",
274         .sysc           = &wd_timer_sysc,
275         .pre_shutdown   = &omap2_wd_timer_disable,
276         .reset          = &omap2_wd_timer_reset,
277 };
278
279 static struct omap_hwmod dm816x_wd_timer_hwmod = {
280         .name           = "wd_timer",
281         .clkdm_name     = "alwon_l3s_clkdm",
282         .main_clk       = "sysclk18_ck",
283         .flags          = HWMOD_NO_IDLEST,
284         .prcm           = {
285                 .omap4 = {
286                         .clkctrl_offs = DM816X_CM_ALWON_WDTIMER_CLKCTRL,
287                         .modulemode = MODULEMODE_SWCTRL,
288                 },
289         },
290         .class          = &wd_timer_class,
291 };
292
293 static struct omap_hwmod_ocp_if dm816x_l4_ls__wd_timer1 = {
294         .master         = &dm816x_l4_ls_hwmod,
295         .slave          = &dm816x_wd_timer_hwmod,
296         .clk            = "sysclk6_ck",
297         .user           = OCP_USER_MPU,
298 };
299
300 /* I2C common */
301 static struct omap_hwmod_class_sysconfig i2c_sysc = {
302         .rev_offs       = 0x0,
303         .sysc_offs      = 0x10,
304         .syss_offs      = 0x90,
305         .sysc_flags     = SYSC_HAS_SIDLEMODE |
306                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
307                                 SYSC_HAS_AUTOIDLE,
308         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
309         .sysc_fields    = &omap_hwmod_sysc_type1,
310 };
311
312 static struct omap_hwmod_class i2c_class = {
313         .name = "i2c",
314         .sysc = &i2c_sysc,
315 };
316
317 static struct omap_hwmod dm81xx_i2c1_hwmod = {
318         .name           = "i2c1",
319         .clkdm_name     = "alwon_l3s_clkdm",
320         .main_clk       = "sysclk10_ck",
321         .prcm           = {
322                 .omap4 = {
323                         .clkctrl_offs = DM816X_CM_ALWON_I2C_0_CLKCTRL,
324                         .modulemode = MODULEMODE_SWCTRL,
325                 },
326         },
327         .class          = &i2c_class,
328 };
329
330 static struct omap_hwmod_ocp_if dm816x_l4_ls__i2c1 = {
331         .master         = &dm816x_l4_ls_hwmod,
332         .slave          = &dm81xx_i2c1_hwmod,
333         .clk            = "sysclk6_ck",
334         .user           = OCP_USER_MPU,
335 };
336
337 static struct omap_hwmod dm816x_i2c2_hwmod = {
338         .name           = "i2c2",
339         .clkdm_name     = "alwon_l3s_clkdm",
340         .main_clk       = "sysclk10_ck",
341         .prcm           = {
342                 .omap4 = {
343                         .clkctrl_offs = DM816X_CM_ALWON_I2C_1_CLKCTRL,
344                         .modulemode = MODULEMODE_SWCTRL,
345                 },
346         },
347         .class          = &i2c_class,
348 };
349
350 static struct omap_hwmod_class_sysconfig dm81xx_elm_sysc = {
351         .rev_offs       = 0x0000,
352         .sysc_offs      = 0x0010,
353         .syss_offs      = 0x0014,
354         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
355                                 SYSC_HAS_SOFTRESET |
356                                 SYSS_HAS_RESET_STATUS,
357         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
358         .sysc_fields    = &omap_hwmod_sysc_type1,
359 };
360
361 static struct omap_hwmod_ocp_if dm816x_l4_ls__i2c2 = {
362         .master         = &dm816x_l4_ls_hwmod,
363         .slave          = &dm816x_i2c2_hwmod,
364         .clk            = "sysclk6_ck",
365         .user           = OCP_USER_MPU,
366 };
367
368 static struct omap_hwmod_class dm81xx_elm_hwmod_class = {
369         .name = "elm",
370         .sysc = &dm81xx_elm_sysc,
371 };
372
373 static struct omap_hwmod dm81xx_elm_hwmod = {
374         .name           = "elm",
375         .clkdm_name     = "alwon_l3s_clkdm",
376         .class          = &dm81xx_elm_hwmod_class,
377         .main_clk       = "sysclk6_ck",
378 };
379
380 static struct omap_hwmod_ocp_if dm81xx_l4_ls__elm = {
381         .master         = &dm816x_l4_ls_hwmod,
382         .slave          = &dm81xx_elm_hwmod,
383         .user           = OCP_USER_MPU,
384 };
385
386 static struct omap_hwmod_class_sysconfig dm81xx_gpio_sysc = {
387         .rev_offs       = 0x0000,
388         .sysc_offs      = 0x0010,
389         .syss_offs      = 0x0114,
390         .sysc_flags     = SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
391                                 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
392                                 SYSS_HAS_RESET_STATUS,
393         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
394                                 SIDLE_SMART_WKUP,
395         .sysc_fields    = &omap_hwmod_sysc_type1,
396 };
397
398 static struct omap_hwmod_class dm81xx_gpio_hwmod_class = {
399         .name   = "gpio",
400         .sysc   = &dm81xx_gpio_sysc,
401         .rev    = 2,
402 };
403
404 static struct omap_gpio_dev_attr gpio_dev_attr = {
405         .bank_width     = 32,
406         .dbck_flag      = true,
407 };
408
409 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
410         { .role = "dbclk", .clk = "sysclk18_ck" },
411 };
412
413 static struct omap_hwmod dm81xx_gpio1_hwmod = {
414         .name           = "gpio1",
415         .clkdm_name     = "alwon_l3s_clkdm",
416         .class          = &dm81xx_gpio_hwmod_class,
417         .main_clk       = "sysclk6_ck",
418         .prcm = {
419                 .omap4 = {
420                         .clkctrl_offs = DM816X_CM_ALWON_GPIO_0_CLKCTRL,
421                         .modulemode = MODULEMODE_SWCTRL,
422                 },
423         },
424         .opt_clks       = gpio1_opt_clks,
425         .opt_clks_cnt   = ARRAY_SIZE(gpio1_opt_clks),
426         .dev_attr       = &gpio_dev_attr,
427 };
428
429 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio1 = {
430         .master         = &dm816x_l4_ls_hwmod,
431         .slave          = &dm81xx_gpio1_hwmod,
432         .user           = OCP_USER_MPU,
433 };
434
435 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
436         { .role = "dbclk", .clk = "sysclk18_ck" },
437 };
438
439 static struct omap_hwmod dm81xx_gpio2_hwmod = {
440         .name           = "gpio2",
441         .clkdm_name     = "alwon_l3s_clkdm",
442         .class          = &dm81xx_gpio_hwmod_class,
443         .main_clk       = "sysclk6_ck",
444         .prcm = {
445                 .omap4 = {
446                         .clkctrl_offs = DM816X_CM_ALWON_GPIO_1_CLKCTRL,
447                         .modulemode = MODULEMODE_SWCTRL,
448                 },
449         },
450         .opt_clks       = gpio2_opt_clks,
451         .opt_clks_cnt   = ARRAY_SIZE(gpio2_opt_clks),
452         .dev_attr       = &gpio_dev_attr,
453 };
454
455 static struct omap_hwmod_ocp_if dm81xx_l4_ls__gpio2 = {
456         .master         = &dm816x_l4_ls_hwmod,
457         .slave          = &dm81xx_gpio2_hwmod,
458         .user           = OCP_USER_MPU,
459 };
460
461 static struct omap_hwmod_class_sysconfig dm81xx_gpmc_sysc = {
462         .rev_offs       = 0x0,
463         .sysc_offs      = 0x10,
464         .syss_offs      = 0x14,
465         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
466                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
467         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
468         .sysc_fields    = &omap_hwmod_sysc_type1,
469 };
470
471 static struct omap_hwmod_class dm81xx_gpmc_hwmod_class = {
472         .name   = "gpmc",
473         .sysc   = &dm81xx_gpmc_sysc,
474 };
475
476 static struct omap_hwmod dm81xx_gpmc_hwmod = {
477         .name           = "gpmc",
478         .clkdm_name     = "alwon_l3s_clkdm",
479         .class          = &dm81xx_gpmc_hwmod_class,
480         .main_clk       = "sysclk6_ck",
481         .prcm = {
482                 .omap4 = {
483                         .clkctrl_offs = DM816X_CM_ALWON_GPMC_CLKCTRL,
484                         .modulemode = MODULEMODE_SWCTRL,
485                 },
486         },
487 };
488
489 struct omap_hwmod_ocp_if dm81xx_alwon_l3_slow__gpmc = {
490         .master         = &dm816x_alwon_l3_slow_hwmod,
491         .slave          = &dm81xx_gpmc_hwmod,
492         .user           = OCP_USER_MPU,
493 };
494
495 static struct omap_hwmod_class_sysconfig dm81xx_usbhsotg_sysc = {
496         .rev_offs       = 0x0,
497         .sysc_offs      = 0x10,
498         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
499                                 SYSC_HAS_SOFTRESET,
500         .idlemodes      = SIDLE_SMART | MSTANDBY_FORCE | MSTANDBY_SMART,
501         .sysc_fields    = &omap_hwmod_sysc_type2,
502 };
503
504 static struct omap_hwmod_class dm81xx_usbotg_class = {
505         .name = "usbotg",
506         .sysc = &dm81xx_usbhsotg_sysc,
507 };
508
509 static struct omap_hwmod dm81xx_usbss_hwmod = {
510         .name           = "usb_otg_hs",
511         .clkdm_name     = "default_l3_slow_clkdm",
512         .main_clk       = "sysclk6_ck",
513         .prcm           = {
514                 .omap4 = {
515                         .clkctrl_offs = DM816X_CM_DEFAULT_USB_CLKCTRL,
516                         .modulemode = MODULEMODE_SWCTRL,
517                 },
518         },
519         .class          = &dm81xx_usbotg_class,
520 };
521
522 static struct omap_hwmod_ocp_if dm81xx_default_l3_slow__usbss = {
523         .master         = &dm816x_default_l3_slow_hwmod,
524         .slave          = &dm81xx_usbss_hwmod,
525         .clk            = "sysclk6_ck",
526         .user           = OCP_USER_MPU,
527 };
528
529 static struct omap_hwmod_class_sysconfig dm816x_timer_sysc = {
530         .rev_offs       = 0x0000,
531         .sysc_offs      = 0x0010,
532         .syss_offs      = 0x0014,
533         .sysc_flags     = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET,
534         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
535                                 SIDLE_SMART_WKUP,
536         .sysc_fields    = &omap_hwmod_sysc_type2,
537 };
538
539 static struct omap_hwmod_class dm816x_timer_hwmod_class = {
540         .name = "timer",
541         .sysc = &dm816x_timer_sysc,
542 };
543
544 static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
545         .timer_capability       = OMAP_TIMER_ALWON,
546 };
547
548 static struct omap_hwmod dm816x_timer1_hwmod = {
549         .name           = "timer1",
550         .clkdm_name     = "alwon_l3s_clkdm",
551         .main_clk       = "timer1_fck",
552         .prcm           = {
553                 .omap4 = {
554                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_1_CLKCTRL,
555                         .modulemode = MODULEMODE_SWCTRL,
556                 },
557         },
558         .dev_attr       = &capability_alwon_dev_attr,
559         .class          = &dm816x_timer_hwmod_class,
560 };
561
562 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer1 = {
563         .master         = &dm816x_l4_ls_hwmod,
564         .slave          = &dm816x_timer1_hwmod,
565         .clk            = "sysclk6_ck",
566         .user           = OCP_USER_MPU,
567 };
568
569 static struct omap_hwmod dm816x_timer2_hwmod = {
570         .name           = "timer2",
571         .clkdm_name     = "alwon_l3s_clkdm",
572         .main_clk       = "timer2_fck",
573         .prcm           = {
574                 .omap4 = {
575                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_2_CLKCTRL,
576                         .modulemode = MODULEMODE_SWCTRL,
577                 },
578         },
579         .dev_attr       = &capability_alwon_dev_attr,
580         .class          = &dm816x_timer_hwmod_class,
581 };
582
583 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer2 = {
584         .master         = &dm816x_l4_ls_hwmod,
585         .slave          = &dm816x_timer2_hwmod,
586         .clk            = "sysclk6_ck",
587         .user           = OCP_USER_MPU,
588 };
589
590 static struct omap_hwmod dm816x_timer3_hwmod = {
591         .name           = "timer3",
592         .clkdm_name     = "alwon_l3s_clkdm",
593         .main_clk       = "timer3_fck",
594         .prcm           = {
595                 .omap4 = {
596                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_3_CLKCTRL,
597                         .modulemode = MODULEMODE_SWCTRL,
598                 },
599         },
600         .dev_attr       = &capability_alwon_dev_attr,
601         .class          = &dm816x_timer_hwmod_class,
602 };
603
604 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer3 = {
605         .master         = &dm816x_l4_ls_hwmod,
606         .slave          = &dm816x_timer3_hwmod,
607         .clk            = "sysclk6_ck",
608         .user           = OCP_USER_MPU,
609 };
610
611 static struct omap_hwmod dm816x_timer4_hwmod = {
612         .name           = "timer4",
613         .clkdm_name     = "alwon_l3s_clkdm",
614         .main_clk       = "timer4_fck",
615         .prcm           = {
616                 .omap4 = {
617                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_4_CLKCTRL,
618                         .modulemode = MODULEMODE_SWCTRL,
619                 },
620         },
621         .dev_attr       = &capability_alwon_dev_attr,
622         .class          = &dm816x_timer_hwmod_class,
623 };
624
625 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer4 = {
626         .master         = &dm816x_l4_ls_hwmod,
627         .slave          = &dm816x_timer4_hwmod,
628         .clk            = "sysclk6_ck",
629         .user           = OCP_USER_MPU,
630 };
631
632 static struct omap_hwmod dm816x_timer5_hwmod = {
633         .name           = "timer5",
634         .clkdm_name     = "alwon_l3s_clkdm",
635         .main_clk       = "timer5_fck",
636         .prcm           = {
637                 .omap4 = {
638                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_5_CLKCTRL,
639                         .modulemode = MODULEMODE_SWCTRL,
640                 },
641         },
642         .dev_attr       = &capability_alwon_dev_attr,
643         .class          = &dm816x_timer_hwmod_class,
644 };
645
646 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer5 = {
647         .master         = &dm816x_l4_ls_hwmod,
648         .slave          = &dm816x_timer5_hwmod,
649         .clk            = "sysclk6_ck",
650         .user           = OCP_USER_MPU,
651 };
652
653 static struct omap_hwmod dm816x_timer6_hwmod = {
654         .name           = "timer6",
655         .clkdm_name     = "alwon_l3s_clkdm",
656         .main_clk       = "timer6_fck",
657         .prcm           = {
658                 .omap4 = {
659                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_6_CLKCTRL,
660                         .modulemode = MODULEMODE_SWCTRL,
661                 },
662         },
663         .dev_attr       = &capability_alwon_dev_attr,
664         .class          = &dm816x_timer_hwmod_class,
665 };
666
667 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer6 = {
668         .master         = &dm816x_l4_ls_hwmod,
669         .slave          = &dm816x_timer6_hwmod,
670         .clk            = "sysclk6_ck",
671         .user           = OCP_USER_MPU,
672 };
673
674 static struct omap_hwmod dm816x_timer7_hwmod = {
675         .name           = "timer7",
676         .clkdm_name     = "alwon_l3s_clkdm",
677         .main_clk       = "timer7_fck",
678         .prcm           = {
679                 .omap4 = {
680                         .clkctrl_offs = DM816X_CM_ALWON_TIMER_7_CLKCTRL,
681                         .modulemode = MODULEMODE_SWCTRL,
682                 },
683         },
684         .dev_attr       = &capability_alwon_dev_attr,
685         .class          = &dm816x_timer_hwmod_class,
686 };
687
688 static struct omap_hwmod_ocp_if dm816x_l4_ls__timer7 = {
689         .master         = &dm816x_l4_ls_hwmod,
690         .slave          = &dm816x_timer7_hwmod,
691         .clk            = "sysclk6_ck",
692         .user           = OCP_USER_MPU,
693 };
694
695 /* EMAC Ethernet */
696 static struct omap_hwmod_class_sysconfig dm816x_emac_sysc = {
697         .rev_offs       = 0x0,
698         .sysc_offs      = 0x4,
699         .sysc_flags     = SYSC_HAS_SOFTRESET,
700         .sysc_fields    = &omap_hwmod_sysc_type2,
701 };
702
703 static struct omap_hwmod_class dm816x_emac_hwmod_class = {
704         .name           = "emac",
705         .sysc           = &dm816x_emac_sysc,
706 };
707
708 /*
709  * On dm816x the MDIO is within EMAC0. As the MDIO driver is a separate
710  * driver probed before EMAC0, we let MDIO do the clock idling.
711  */
712 static struct omap_hwmod dm816x_emac0_hwmod = {
713         .name           = "emac0",
714         .clkdm_name     = "alwon_ethernet_clkdm",
715         .class          = &dm816x_emac_hwmod_class,
716 };
717
718 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac0 = {
719         .master         = &dm816x_l4_hs_hwmod,
720         .slave          = &dm816x_emac0_hwmod,
721         .clk            = "sysclk5_ck",
722         .user           = OCP_USER_MPU,
723 };
724
725 static struct omap_hwmod_class dm816x_mdio_hwmod_class = {
726         .name           = "davinci_mdio",
727         .sysc           = &dm816x_emac_sysc,
728 };
729
730 struct omap_hwmod dm816x_emac0_mdio_hwmod = {
731         .name           = "davinci_mdio",
732         .class          = &dm816x_mdio_hwmod_class,
733         .clkdm_name     = "alwon_ethernet_clkdm",
734         .main_clk       = "sysclk24_ck",
735         .flags          = HWMOD_NO_IDLEST,
736         /*
737          * REVISIT: This should be moved to the emac0_hwmod
738          * once we have a better way to handle device slaves.
739          */
740         .prcm           = {
741                 .omap4 = {
742                         .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_0_CLKCTRL,
743                         .modulemode = MODULEMODE_SWCTRL,
744                 },
745         },
746 };
747
748 struct omap_hwmod_ocp_if dm816x_emac0__mdio = {
749         .master         = &dm816x_l4_hs_hwmod,
750         .slave          = &dm816x_emac0_mdio_hwmod,
751         .user           = OCP_USER_MPU,
752 };
753
754 static struct omap_hwmod dm816x_emac1_hwmod = {
755         .name           = "emac1",
756         .clkdm_name     = "alwon_ethernet_clkdm",
757         .main_clk       = "sysclk24_ck",
758         .flags          = HWMOD_NO_IDLEST,
759         .prcm           = {
760                 .omap4 = {
761                         .clkctrl_offs = DM816X_CM_ALWON_ETHERNET_1_CLKCTRL,
762                         .modulemode = MODULEMODE_SWCTRL,
763                 },
764         },
765         .class          = &dm816x_emac_hwmod_class,
766 };
767
768 static struct omap_hwmod_ocp_if dm816x_l4_hs__emac1 = {
769         .master         = &dm816x_l4_hs_hwmod,
770         .slave          = &dm816x_emac1_hwmod,
771         .clk            = "sysclk5_ck",
772         .user           = OCP_USER_MPU,
773 };
774
775 static struct omap_hwmod_class_sysconfig dm816x_mmc_sysc = {
776         .rev_offs       = 0x0,
777         .sysc_offs      = 0x110,
778         .syss_offs      = 0x114,
779         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
780                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
781                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
782         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
783         .sysc_fields    = &omap_hwmod_sysc_type1,
784 };
785
786 static struct omap_hwmod_class dm816x_mmc_class = {
787         .name = "mmc",
788         .sysc = &dm816x_mmc_sysc,
789 };
790
791 static struct omap_hwmod_opt_clk dm816x_mmc1_opt_clks[] = {
792         { .role = "dbck", .clk = "sysclk18_ck", },
793 };
794
795 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
796         .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
797 };
798
799 static struct omap_hwmod dm816x_mmc1_hwmod = {
800         .name           = "mmc1",
801         .clkdm_name     = "alwon_l3s_clkdm",
802         .opt_clks       = dm816x_mmc1_opt_clks,
803         .opt_clks_cnt   = ARRAY_SIZE(dm816x_mmc1_opt_clks),
804         .main_clk       = "sysclk10_ck",
805         .prcm           = {
806                 .omap4 = {
807                         .clkctrl_offs = DM816X_CM_ALWON_SDIO_CLKCTRL,
808                         .modulemode = MODULEMODE_SWCTRL,
809                 },
810         },
811         .dev_attr       = &mmc1_dev_attr,
812         .class          = &dm816x_mmc_class,
813 };
814
815 static struct omap_hwmod_ocp_if dm816x_l4_ls__mmc1 = {
816         .master         = &dm816x_l4_ls_hwmod,
817         .slave          = &dm816x_mmc1_hwmod,
818         .clk            = "sysclk6_ck",
819         .user           = OCP_USER_MPU,
820         .flags          = OMAP_FIREWALL_L4
821 };
822
823 static struct omap_hwmod_class_sysconfig dm816x_mcspi_sysc = {
824         .rev_offs       = 0x0,
825         .sysc_offs      = 0x110,
826         .syss_offs      = 0x114,
827         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
828                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
829                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS,
830         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
831         .sysc_fields    = &omap_hwmod_sysc_type1,
832 };
833
834 static struct omap_hwmod_class dm816x_mcspi_class = {
835         .name = "mcspi",
836         .sysc = &dm816x_mcspi_sysc,
837         .rev = OMAP3_MCSPI_REV,
838 };
839
840 static struct omap2_mcspi_dev_attr dm816x_mcspi1_dev_attr = {
841         .num_chipselect = 4,
842 };
843
844 static struct omap_hwmod dm816x_mcspi1_hwmod = {
845         .name           = "mcspi1",
846         .clkdm_name     = "alwon_l3s_clkdm",
847         .main_clk       = "sysclk10_ck",
848         .prcm           = {
849                 .omap4 = {
850                         .clkctrl_offs = DM816X_CM_ALWON_SPI_CLKCTRL,
851                         .modulemode = MODULEMODE_SWCTRL,
852                 },
853         },
854         .class          = &dm816x_mcspi_class,
855         .dev_attr       = &dm816x_mcspi1_dev_attr,
856 };
857
858 static struct omap_hwmod_ocp_if dm816x_l4_ls__mcspi1 = {
859         .master         = &dm816x_l4_ls_hwmod,
860         .slave          = &dm816x_mcspi1_hwmod,
861         .clk            = "sysclk6_ck",
862         .user           = OCP_USER_MPU,
863 };
864
865 static struct omap_hwmod_class_sysconfig dm816x_mailbox_sysc = {
866         .rev_offs       = 0x000,
867         .sysc_offs      = 0x010,
868         .syss_offs      = 0x014,
869         .sysc_flags     = SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
870                                 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE,
871         .idlemodes      = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART,
872         .sysc_fields    = &omap_hwmod_sysc_type1,
873 };
874
875 static struct omap_hwmod_class dm816x_mailbox_hwmod_class = {
876         .name = "mailbox",
877         .sysc = &dm816x_mailbox_sysc,
878 };
879
880 static struct omap_hwmod dm816x_mailbox_hwmod = {
881         .name           = "mailbox",
882         .clkdm_name     = "alwon_l3s_clkdm",
883         .class          = &dm816x_mailbox_hwmod_class,
884         .main_clk       = "sysclk6_ck",
885         .prcm           = {
886                 .omap4 = {
887                         .clkctrl_offs = DM816X_CM_ALWON_MAILBOX_CLKCTRL,
888                         .modulemode = MODULEMODE_SWCTRL,
889                 },
890         },
891 };
892
893 static struct omap_hwmod_ocp_if dm816x_l4_ls__mailbox = {
894         .master         = &dm816x_l4_ls_hwmod,
895         .slave          = &dm816x_mailbox_hwmod,
896         .user           = OCP_USER_MPU,
897 };
898
899 static struct omap_hwmod_class dm816x_tpcc_hwmod_class = {
900         .name           = "tpcc",
901 };
902
903 struct omap_hwmod dm816x_tpcc_hwmod = {
904         .name           = "tpcc",
905         .class          = &dm816x_tpcc_hwmod_class,
906         .clkdm_name     = "alwon_l3s_clkdm",
907         .main_clk       = "sysclk4_ck",
908         .prcm           = {
909                 .omap4  = {
910                         .clkctrl_offs   = DM816X_CM_ALWON_TPCC_CLKCTRL,
911                         .modulemode     = MODULEMODE_SWCTRL,
912                 },
913         },
914 };
915
916 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tpcc = {
917         .master         = &dm816x_alwon_l3_fast_hwmod,
918         .slave          = &dm816x_tpcc_hwmod,
919         .clk            = "sysclk4_ck",
920         .user           = OCP_USER_MPU,
921 };
922
923 static struct omap_hwmod_addr_space dm816x_tptc0_addr_space[] = {
924         {
925                 .pa_start       = 0x49800000,
926                 .pa_end         = 0x49800000 + SZ_8K - 1,
927                 .flags          = ADDR_TYPE_RT,
928         },
929         { },
930 };
931
932 static struct omap_hwmod_class dm816x_tptc0_hwmod_class = {
933         .name           = "tptc0",
934 };
935
936 struct omap_hwmod dm816x_tptc0_hwmod = {
937         .name           = "tptc0",
938         .class          = &dm816x_tptc0_hwmod_class,
939         .clkdm_name     = "alwon_l3s_clkdm",
940         .main_clk       = "sysclk4_ck",
941         .prcm           = {
942                 .omap4  = {
943                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC0_CLKCTRL,
944                         .modulemode     = MODULEMODE_SWCTRL,
945                 },
946         },
947 };
948
949 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc0 = {
950         .master         = &dm816x_alwon_l3_fast_hwmod,
951         .slave          = &dm816x_tptc0_hwmod,
952         .clk            = "sysclk4_ck",
953         .addr           = dm816x_tptc0_addr_space,
954         .user           = OCP_USER_MPU,
955 };
956
957 struct omap_hwmod_ocp_if dm816x_tptc0__alwon_l3_fast = {
958         .master         = &dm816x_tptc0_hwmod,
959         .slave          = &dm816x_alwon_l3_fast_hwmod,
960         .clk            = "sysclk4_ck",
961         .addr           = dm816x_tptc0_addr_space,
962         .user           = OCP_USER_MPU,
963 };
964
965 static struct omap_hwmod_addr_space dm816x_tptc1_addr_space[] = {
966         {
967                 .pa_start       = 0x49900000,
968                 .pa_end         = 0x49900000 + SZ_8K - 1,
969                 .flags          = ADDR_TYPE_RT,
970         },
971         { },
972 };
973
974 static struct omap_hwmod_class dm816x_tptc1_hwmod_class = {
975         .name           = "tptc1",
976 };
977
978 struct omap_hwmod dm816x_tptc1_hwmod = {
979         .name           = "tptc1",
980         .class          = &dm816x_tptc1_hwmod_class,
981         .clkdm_name     = "alwon_l3s_clkdm",
982         .main_clk       = "sysclk4_ck",
983         .prcm           = {
984                 .omap4  = {
985                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC1_CLKCTRL,
986                         .modulemode     = MODULEMODE_SWCTRL,
987                 },
988         },
989 };
990
991 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc1 = {
992         .master         = &dm816x_alwon_l3_fast_hwmod,
993         .slave          = &dm816x_tptc1_hwmod,
994         .clk            = "sysclk4_ck",
995         .addr           = dm816x_tptc1_addr_space,
996         .user           = OCP_USER_MPU,
997 };
998
999 struct omap_hwmod_ocp_if dm816x_tptc1__alwon_l3_fast = {
1000         .master         = &dm816x_tptc1_hwmod,
1001         .slave          = &dm816x_alwon_l3_fast_hwmod,
1002         .clk            = "sysclk4_ck",
1003         .addr           = dm816x_tptc1_addr_space,
1004         .user           = OCP_USER_MPU,
1005 };
1006
1007 static struct omap_hwmod_addr_space dm816x_tptc2_addr_space[] = {
1008         {
1009                 .pa_start       = 0x49a00000,
1010                 .pa_end         = 0x49a00000 + SZ_8K - 1,
1011                 .flags          = ADDR_TYPE_RT,
1012         },
1013         { },
1014 };
1015
1016 static struct omap_hwmod_class dm816x_tptc2_hwmod_class = {
1017         .name           = "tptc2",
1018 };
1019
1020 struct omap_hwmod dm816x_tptc2_hwmod = {
1021         .name           = "tptc2",
1022         .class          = &dm816x_tptc2_hwmod_class,
1023         .clkdm_name     = "alwon_l3s_clkdm",
1024         .main_clk       = "sysclk4_ck",
1025         .prcm           = {
1026                 .omap4  = {
1027                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC2_CLKCTRL,
1028                         .modulemode     = MODULEMODE_SWCTRL,
1029                 },
1030         },
1031 };
1032
1033 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc2 = {
1034         .master         = &dm816x_alwon_l3_fast_hwmod,
1035         .slave          = &dm816x_tptc2_hwmod,
1036         .clk            = "sysclk4_ck",
1037         .addr           = dm816x_tptc2_addr_space,
1038         .user           = OCP_USER_MPU,
1039 };
1040
1041 struct omap_hwmod_ocp_if dm816x_tptc2__alwon_l3_fast = {
1042         .master         = &dm816x_tptc2_hwmod,
1043         .slave          = &dm816x_alwon_l3_fast_hwmod,
1044         .clk            = "sysclk4_ck",
1045         .addr           = dm816x_tptc2_addr_space,
1046         .user           = OCP_USER_MPU,
1047 };
1048
1049 static struct omap_hwmod_addr_space dm816x_tptc3_addr_space[] = {
1050         {
1051                 .pa_start       = 0x49b00000,
1052                 .pa_end         = 0x49b00000 + SZ_8K - 1,
1053                 .flags          = ADDR_TYPE_RT,
1054         },
1055         { },
1056 };
1057
1058 static struct omap_hwmod_class dm816x_tptc3_hwmod_class = {
1059         .name           = "tptc3",
1060 };
1061
1062 struct omap_hwmod dm816x_tptc3_hwmod = {
1063         .name           = "tptc3",
1064         .class          = &dm816x_tptc3_hwmod_class,
1065         .clkdm_name     = "alwon_l3s_clkdm",
1066         .main_clk       = "sysclk4_ck",
1067         .prcm           = {
1068                 .omap4  = {
1069                         .clkctrl_offs   = DM816X_CM_ALWON_TPTC3_CLKCTRL,
1070                         .modulemode     = MODULEMODE_SWCTRL,
1071                 },
1072         },
1073 };
1074
1075 struct omap_hwmod_ocp_if dm816x_alwon_l3_fast__tptc3 = {
1076         .master         = &dm816x_alwon_l3_fast_hwmod,
1077         .slave          = &dm816x_tptc3_hwmod,
1078         .clk            = "sysclk4_ck",
1079         .addr           = dm816x_tptc3_addr_space,
1080         .user           = OCP_USER_MPU,
1081 };
1082
1083 struct omap_hwmod_ocp_if dm816x_tptc3__alwon_l3_fast = {
1084         .master         = &dm816x_tptc3_hwmod,
1085         .slave          = &dm816x_alwon_l3_fast_hwmod,
1086         .clk            = "sysclk4_ck",
1087         .addr           = dm816x_tptc3_addr_space,
1088         .user           = OCP_USER_MPU,
1089 };
1090
1091 static struct omap_hwmod_ocp_if *dm816x_hwmod_ocp_ifs[] __initdata = {
1092         &dm816x_mpu__alwon_l3_slow,
1093         &dm816x_mpu__alwon_l3_med,
1094         &dm816x_alwon_l3_slow__l4_ls,
1095         &dm816x_alwon_l3_slow__l4_hs,
1096         &dm816x_l4_ls__uart1,
1097         &dm816x_l4_ls__uart2,
1098         &dm816x_l4_ls__uart3,
1099         &dm816x_l4_ls__wd_timer1,
1100         &dm816x_l4_ls__i2c1,
1101         &dm816x_l4_ls__i2c2,
1102         &dm81xx_l4_ls__gpio1,
1103         &dm81xx_l4_ls__gpio2,
1104         &dm81xx_l4_ls__elm,
1105         &dm816x_l4_ls__mmc1,
1106         &dm816x_l4_ls__timer1,
1107         &dm816x_l4_ls__timer2,
1108         &dm816x_l4_ls__timer3,
1109         &dm816x_l4_ls__timer4,
1110         &dm816x_l4_ls__timer5,
1111         &dm816x_l4_ls__timer6,
1112         &dm816x_l4_ls__timer7,
1113         &dm816x_l4_ls__mcspi1,
1114         &dm816x_l4_ls__mailbox,
1115         &dm816x_l4_hs__emac0,
1116         &dm816x_emac0__mdio,
1117         &dm816x_l4_hs__emac1,
1118         &dm816x_alwon_l3_fast__tpcc,
1119         &dm816x_alwon_l3_fast__tptc0,
1120         &dm816x_alwon_l3_fast__tptc1,
1121         &dm816x_alwon_l3_fast__tptc2,
1122         &dm816x_alwon_l3_fast__tptc3,
1123         &dm816x_tptc0__alwon_l3_fast,
1124         &dm816x_tptc1__alwon_l3_fast,
1125         &dm816x_tptc2__alwon_l3_fast,
1126         &dm816x_tptc3__alwon_l3_fast,
1127         &dm81xx_alwon_l3_slow__gpmc,
1128         &dm81xx_default_l3_slow__usbss,
1129         NULL,
1130 };
1131
1132 int __init ti81xx_hwmod_init(void)
1133 {
1134         omap_hwmod_init();
1135         return omap_hwmod_register_links(dm816x_hwmod_ocp_ifs);
1136 }