]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/arm/mach-omap2/omap_hwmod_2430_data.c
Merge branch 'for-tony' of git://gitorious.org/usb/usb into omap-for-linus
[karo-tx-linux.git] / arch / arm / mach-omap2 / omap_hwmod_2430_data.c
1 /*
2  * omap_hwmod_2430_data.c - hardware modules present on the OMAP2430 chips
3  *
4  * Copyright (C) 2009-2010 Nokia Corporation
5  * Paul Walmsley
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * XXX handle crossbar/shared link difference for L3?
12  * XXX these should be marked initdata for multi-OMAP kernels
13  */
14 #include <plat/omap_hwmod.h>
15 #include <mach/irqs.h>
16 #include <plat/cpu.h>
17 #include <plat/dma.h>
18 #include <plat/serial.h>
19 #include <plat/i2c.h>
20 #include <plat/gpio.h>
21 #include <plat/mcspi.h>
22
23 #include "omap_hwmod_common_data.h"
24
25 #include "prm-regbits-24xx.h"
26 #include "cm-regbits-24xx.h"
27 #include "wd_timer.h"
28
29 /*
30  * OMAP2430 hardware module integration data
31  *
32  * ALl of the data in this section should be autogeneratable from the
33  * TI hardware database or other technical documentation.  Data that
34  * is driver-specific or driver-kernel integration-specific belongs
35  * elsewhere.
36  */
37
38 static struct omap_hwmod omap2430_mpu_hwmod;
39 static struct omap_hwmod omap2430_iva_hwmod;
40 static struct omap_hwmod omap2430_l3_main_hwmod;
41 static struct omap_hwmod omap2430_l4_core_hwmod;
42 static struct omap_hwmod omap2430_wd_timer2_hwmod;
43 static struct omap_hwmod omap2430_gpio1_hwmod;
44 static struct omap_hwmod omap2430_gpio2_hwmod;
45 static struct omap_hwmod omap2430_gpio3_hwmod;
46 static struct omap_hwmod omap2430_gpio4_hwmod;
47 static struct omap_hwmod omap2430_gpio5_hwmod;
48 static struct omap_hwmod omap2430_dma_system_hwmod;
49 static struct omap_hwmod omap2430_mcspi1_hwmod;
50 static struct omap_hwmod omap2430_mcspi2_hwmod;
51 static struct omap_hwmod omap2430_mcspi3_hwmod;
52
53 /* L3 -> L4_CORE interface */
54 static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
55         .master = &omap2430_l3_main_hwmod,
56         .slave  = &omap2430_l4_core_hwmod,
57         .user   = OCP_USER_MPU | OCP_USER_SDMA,
58 };
59
60 /* MPU -> L3 interface */
61 static struct omap_hwmod_ocp_if omap2430_mpu__l3_main = {
62         .master = &omap2430_mpu_hwmod,
63         .slave  = &omap2430_l3_main_hwmod,
64         .user   = OCP_USER_MPU,
65 };
66
67 /* Slave interfaces on the L3 interconnect */
68 static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
69         &omap2430_mpu__l3_main,
70 };
71
72 /* Master interfaces on the L3 interconnect */
73 static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
74         &omap2430_l3_main__l4_core,
75 };
76
77 /* L3 */
78 static struct omap_hwmod omap2430_l3_main_hwmod = {
79         .name           = "l3_main",
80         .class          = &l3_hwmod_class,
81         .masters        = omap2430_l3_main_masters,
82         .masters_cnt    = ARRAY_SIZE(omap2430_l3_main_masters),
83         .slaves         = omap2430_l3_main_slaves,
84         .slaves_cnt     = ARRAY_SIZE(omap2430_l3_main_slaves),
85         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
86         .flags          = HWMOD_NO_IDLEST,
87 };
88
89 static struct omap_hwmod omap2430_l4_wkup_hwmod;
90 static struct omap_hwmod omap2430_uart1_hwmod;
91 static struct omap_hwmod omap2430_uart2_hwmod;
92 static struct omap_hwmod omap2430_uart3_hwmod;
93 static struct omap_hwmod omap2430_i2c1_hwmod;
94 static struct omap_hwmod omap2430_i2c2_hwmod;
95
96 static struct omap_hwmod omap2430_usbhsotg_hwmod;
97
98 /* l3_core -> usbhsotg  interface */
99 static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
100         .master         = &omap2430_usbhsotg_hwmod,
101         .slave          = &omap2430_l3_main_hwmod,
102         .clk            = "core_l3_ck",
103         .user           = OCP_USER_MPU,
104 };
105
106 /* I2C IP block address space length (in bytes) */
107 #define OMAP2_I2C_AS_LEN                128
108
109 /* L4 CORE -> I2C1 interface */
110 static struct omap_hwmod_addr_space omap2430_i2c1_addr_space[] = {
111         {
112                 .pa_start       = 0x48070000,
113                 .pa_end         = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
114                 .flags          = ADDR_TYPE_RT,
115         },
116 };
117
118 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
119         .master         = &omap2430_l4_core_hwmod,
120         .slave          = &omap2430_i2c1_hwmod,
121         .clk            = "i2c1_ick",
122         .addr           = omap2430_i2c1_addr_space,
123         .addr_cnt       = ARRAY_SIZE(omap2430_i2c1_addr_space),
124         .user           = OCP_USER_MPU | OCP_USER_SDMA,
125 };
126
127 /* L4 CORE -> I2C2 interface */
128 static struct omap_hwmod_addr_space omap2430_i2c2_addr_space[] = {
129         {
130                 .pa_start       = 0x48072000,
131                 .pa_end         = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
132                 .flags          = ADDR_TYPE_RT,
133         },
134 };
135
136 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
137         .master         = &omap2430_l4_core_hwmod,
138         .slave          = &omap2430_i2c2_hwmod,
139         .clk            = "i2c2_ick",
140         .addr           = omap2430_i2c2_addr_space,
141         .addr_cnt       = ARRAY_SIZE(omap2430_i2c2_addr_space),
142         .user           = OCP_USER_MPU | OCP_USER_SDMA,
143 };
144
145 /* L4_CORE -> L4_WKUP interface */
146 static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
147         .master = &omap2430_l4_core_hwmod,
148         .slave  = &omap2430_l4_wkup_hwmod,
149         .user   = OCP_USER_MPU | OCP_USER_SDMA,
150 };
151
152 /* L4 CORE -> UART1 interface */
153 static struct omap_hwmod_addr_space omap2430_uart1_addr_space[] = {
154         {
155                 .pa_start       = OMAP2_UART1_BASE,
156                 .pa_end         = OMAP2_UART1_BASE + SZ_8K - 1,
157                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
158         },
159 };
160
161 static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
162         .master         = &omap2430_l4_core_hwmod,
163         .slave          = &omap2430_uart1_hwmod,
164         .clk            = "uart1_ick",
165         .addr           = omap2430_uart1_addr_space,
166         .addr_cnt       = ARRAY_SIZE(omap2430_uart1_addr_space),
167         .user           = OCP_USER_MPU | OCP_USER_SDMA,
168 };
169
170 /* L4 CORE -> UART2 interface */
171 static struct omap_hwmod_addr_space omap2430_uart2_addr_space[] = {
172         {
173                 .pa_start       = OMAP2_UART2_BASE,
174                 .pa_end         = OMAP2_UART2_BASE + SZ_1K - 1,
175                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
176         },
177 };
178
179 static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
180         .master         = &omap2430_l4_core_hwmod,
181         .slave          = &omap2430_uart2_hwmod,
182         .clk            = "uart2_ick",
183         .addr           = omap2430_uart2_addr_space,
184         .addr_cnt       = ARRAY_SIZE(omap2430_uart2_addr_space),
185         .user           = OCP_USER_MPU | OCP_USER_SDMA,
186 };
187
188 /* L4 PER -> UART3 interface */
189 static struct omap_hwmod_addr_space omap2430_uart3_addr_space[] = {
190         {
191                 .pa_start       = OMAP2_UART3_BASE,
192                 .pa_end         = OMAP2_UART3_BASE + SZ_1K - 1,
193                 .flags          = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
194         },
195 };
196
197 static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
198         .master         = &omap2430_l4_core_hwmod,
199         .slave          = &omap2430_uart3_hwmod,
200         .clk            = "uart3_ick",
201         .addr           = omap2430_uart3_addr_space,
202         .addr_cnt       = ARRAY_SIZE(omap2430_uart3_addr_space),
203         .user           = OCP_USER_MPU | OCP_USER_SDMA,
204 };
205
206 /*
207 * usbhsotg interface data
208 */
209 static struct omap_hwmod_addr_space omap2430_usbhsotg_addrs[] = {
210         {
211                 .pa_start       = OMAP243X_HS_BASE,
212                 .pa_end         = OMAP243X_HS_BASE + SZ_4K - 1,
213                 .flags          = ADDR_TYPE_RT
214         },
215 };
216
217 /*  l4_core ->usbhsotg  interface */
218 static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
219         .master         = &omap2430_l4_core_hwmod,
220         .slave          = &omap2430_usbhsotg_hwmod,
221         .clk            = "usb_l4_ick",
222         .addr           = omap2430_usbhsotg_addrs,
223         .addr_cnt       = ARRAY_SIZE(omap2430_usbhsotg_addrs),
224         .user           = OCP_USER_MPU,
225 };
226
227 static struct omap_hwmod_ocp_if *omap2430_usbhsotg_masters[] = {
228         &omap2430_usbhsotg__l3,
229 };
230
231 static struct omap_hwmod_ocp_if *omap2430_usbhsotg_slaves[] = {
232         &omap2430_l4_core__usbhsotg,
233 };
234
235 /* Slave interfaces on the L4_CORE interconnect */
236 static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = {
237         &omap2430_l3_main__l4_core,
238 };
239
240 /* Master interfaces on the L4_CORE interconnect */
241 static struct omap_hwmod_ocp_if *omap2430_l4_core_masters[] = {
242         &omap2430_l4_core__l4_wkup,
243 };
244
245 /* L4 CORE */
246 static struct omap_hwmod omap2430_l4_core_hwmod = {
247         .name           = "l4_core",
248         .class          = &l4_hwmod_class,
249         .masters        = omap2430_l4_core_masters,
250         .masters_cnt    = ARRAY_SIZE(omap2430_l4_core_masters),
251         .slaves         = omap2430_l4_core_slaves,
252         .slaves_cnt     = ARRAY_SIZE(omap2430_l4_core_slaves),
253         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
254         .flags          = HWMOD_NO_IDLEST,
255 };
256
257 /* Slave interfaces on the L4_WKUP interconnect */
258 static struct omap_hwmod_ocp_if *omap2430_l4_wkup_slaves[] = {
259         &omap2430_l4_core__l4_wkup,
260         &omap2_l4_core__uart1,
261         &omap2_l4_core__uart2,
262         &omap2_l4_core__uart3,
263 };
264
265 /* Master interfaces on the L4_WKUP interconnect */
266 static struct omap_hwmod_ocp_if *omap2430_l4_wkup_masters[] = {
267 };
268
269 /* l4 core -> mcspi1 interface */
270 static struct omap_hwmod_addr_space omap2430_mcspi1_addr_space[] = {
271         {
272                 .pa_start       = 0x48098000,
273                 .pa_end         = 0x480980ff,
274                 .flags          = ADDR_TYPE_RT,
275         },
276 };
277
278 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi1 = {
279         .master         = &omap2430_l4_core_hwmod,
280         .slave          = &omap2430_mcspi1_hwmod,
281         .clk            = "mcspi1_ick",
282         .addr           = omap2430_mcspi1_addr_space,
283         .addr_cnt       = ARRAY_SIZE(omap2430_mcspi1_addr_space),
284         .user           = OCP_USER_MPU | OCP_USER_SDMA,
285 };
286
287 /* l4 core -> mcspi2 interface */
288 static struct omap_hwmod_addr_space omap2430_mcspi2_addr_space[] = {
289         {
290                 .pa_start       = 0x4809a000,
291                 .pa_end         = 0x4809a0ff,
292                 .flags          = ADDR_TYPE_RT,
293         },
294 };
295
296 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi2 = {
297         .master         = &omap2430_l4_core_hwmod,
298         .slave          = &omap2430_mcspi2_hwmod,
299         .clk            = "mcspi2_ick",
300         .addr           = omap2430_mcspi2_addr_space,
301         .addr_cnt       = ARRAY_SIZE(omap2430_mcspi2_addr_space),
302         .user           = OCP_USER_MPU | OCP_USER_SDMA,
303 };
304
305 /* l4 core -> mcspi3 interface */
306 static struct omap_hwmod_addr_space omap2430_mcspi3_addr_space[] = {
307         {
308                 .pa_start       = 0x480b8000,
309                 .pa_end         = 0x480b80ff,
310                 .flags          = ADDR_TYPE_RT,
311         },
312 };
313
314 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = {
315         .master         = &omap2430_l4_core_hwmod,
316         .slave          = &omap2430_mcspi3_hwmod,
317         .clk            = "mcspi3_ick",
318         .addr           = omap2430_mcspi3_addr_space,
319         .addr_cnt       = ARRAY_SIZE(omap2430_mcspi3_addr_space),
320         .user           = OCP_USER_MPU | OCP_USER_SDMA,
321 };
322
323 /* L4 WKUP */
324 static struct omap_hwmod omap2430_l4_wkup_hwmod = {
325         .name           = "l4_wkup",
326         .class          = &l4_hwmod_class,
327         .masters        = omap2430_l4_wkup_masters,
328         .masters_cnt    = ARRAY_SIZE(omap2430_l4_wkup_masters),
329         .slaves         = omap2430_l4_wkup_slaves,
330         .slaves_cnt     = ARRAY_SIZE(omap2430_l4_wkup_slaves),
331         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
332         .flags          = HWMOD_NO_IDLEST,
333 };
334
335 /* Master interfaces on the MPU device */
336 static struct omap_hwmod_ocp_if *omap2430_mpu_masters[] = {
337         &omap2430_mpu__l3_main,
338 };
339
340 /* MPU */
341 static struct omap_hwmod omap2430_mpu_hwmod = {
342         .name           = "mpu",
343         .class          = &mpu_hwmod_class,
344         .main_clk       = "mpu_ck",
345         .masters        = omap2430_mpu_masters,
346         .masters_cnt    = ARRAY_SIZE(omap2430_mpu_masters),
347         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
348 };
349
350 /*
351  * IVA2_1 interface data
352  */
353
354 /* IVA2 <- L3 interface */
355 static struct omap_hwmod_ocp_if omap2430_l3__iva = {
356         .master         = &omap2430_l3_main_hwmod,
357         .slave          = &omap2430_iva_hwmod,
358         .clk            = "dsp_fck",
359         .user           = OCP_USER_MPU | OCP_USER_SDMA,
360 };
361
362 static struct omap_hwmod_ocp_if *omap2430_iva_masters[] = {
363         &omap2430_l3__iva,
364 };
365
366 /*
367  * IVA2 (IVA2)
368  */
369
370 static struct omap_hwmod omap2430_iva_hwmod = {
371         .name           = "iva",
372         .class          = &iva_hwmod_class,
373         .masters        = omap2430_iva_masters,
374         .masters_cnt    = ARRAY_SIZE(omap2430_iva_masters),
375         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
376 };
377
378 /* l4_wkup -> wd_timer2 */
379 static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = {
380         {
381                 .pa_start       = 0x49016000,
382                 .pa_end         = 0x4901607f,
383                 .flags          = ADDR_TYPE_RT
384         },
385 };
386
387 static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
388         .master         = &omap2430_l4_wkup_hwmod,
389         .slave          = &omap2430_wd_timer2_hwmod,
390         .clk            = "mpu_wdt_ick",
391         .addr           = omap2430_wd_timer2_addrs,
392         .addr_cnt       = ARRAY_SIZE(omap2430_wd_timer2_addrs),
393         .user           = OCP_USER_MPU | OCP_USER_SDMA,
394 };
395
396 /*
397  * 'wd_timer' class
398  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
399  * overflow condition
400  */
401
402 static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
403         .rev_offs       = 0x0,
404         .sysc_offs      = 0x0010,
405         .syss_offs      = 0x0014,
406         .sysc_flags     = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
407                            SYSC_HAS_AUTOIDLE),
408         .sysc_fields    = &omap_hwmod_sysc_type1,
409 };
410
411 static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
412         .name           = "wd_timer",
413         .sysc           = &omap2430_wd_timer_sysc,
414         .pre_shutdown   = &omap2_wd_timer_disable
415 };
416
417 /* wd_timer2 */
418 static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
419         &omap2430_l4_wkup__wd_timer2,
420 };
421
422 static struct omap_hwmod omap2430_wd_timer2_hwmod = {
423         .name           = "wd_timer2",
424         .class          = &omap2430_wd_timer_hwmod_class,
425         .main_clk       = "mpu_wdt_fck",
426         .prcm           = {
427                 .omap2 = {
428                         .prcm_reg_id = 1,
429                         .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
430                         .module_offs = WKUP_MOD,
431                         .idlest_reg_id = 1,
432                         .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
433                 },
434         },
435         .slaves         = omap2430_wd_timer2_slaves,
436         .slaves_cnt     = ARRAY_SIZE(omap2430_wd_timer2_slaves),
437         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
438 };
439
440 /* UART */
441
442 static struct omap_hwmod_class_sysconfig uart_sysc = {
443         .rev_offs       = 0x50,
444         .sysc_offs      = 0x54,
445         .syss_offs      = 0x58,
446         .sysc_flags     = (SYSC_HAS_SIDLEMODE |
447                            SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
448                            SYSC_HAS_AUTOIDLE),
449         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
450         .sysc_fields    = &omap_hwmod_sysc_type1,
451 };
452
453 static struct omap_hwmod_class uart_class = {
454         .name = "uart",
455         .sysc = &uart_sysc,
456 };
457
458 /* UART1 */
459
460 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
461         { .irq = INT_24XX_UART1_IRQ, },
462 };
463
464 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
465         { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
466         { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
467 };
468
469 static struct omap_hwmod_ocp_if *omap2430_uart1_slaves[] = {
470         &omap2_l4_core__uart1,
471 };
472
473 static struct omap_hwmod omap2430_uart1_hwmod = {
474         .name           = "uart1",
475         .mpu_irqs       = uart1_mpu_irqs,
476         .mpu_irqs_cnt   = ARRAY_SIZE(uart1_mpu_irqs),
477         .sdma_reqs      = uart1_sdma_reqs,
478         .sdma_reqs_cnt  = ARRAY_SIZE(uart1_sdma_reqs),
479         .main_clk       = "uart1_fck",
480         .prcm           = {
481                 .omap2 = {
482                         .module_offs = CORE_MOD,
483                         .prcm_reg_id = 1,
484                         .module_bit = OMAP24XX_EN_UART1_SHIFT,
485                         .idlest_reg_id = 1,
486                         .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
487                 },
488         },
489         .slaves         = omap2430_uart1_slaves,
490         .slaves_cnt     = ARRAY_SIZE(omap2430_uart1_slaves),
491         .class          = &uart_class,
492         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
493 };
494
495 /* UART2 */
496
497 static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
498         { .irq = INT_24XX_UART2_IRQ, },
499 };
500
501 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
502         { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
503         { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
504 };
505
506 static struct omap_hwmod_ocp_if *omap2430_uart2_slaves[] = {
507         &omap2_l4_core__uart2,
508 };
509
510 static struct omap_hwmod omap2430_uart2_hwmod = {
511         .name           = "uart2",
512         .mpu_irqs       = uart2_mpu_irqs,
513         .mpu_irqs_cnt   = ARRAY_SIZE(uart2_mpu_irqs),
514         .sdma_reqs      = uart2_sdma_reqs,
515         .sdma_reqs_cnt  = ARRAY_SIZE(uart2_sdma_reqs),
516         .main_clk       = "uart2_fck",
517         .prcm           = {
518                 .omap2 = {
519                         .module_offs = CORE_MOD,
520                         .prcm_reg_id = 1,
521                         .module_bit = OMAP24XX_EN_UART2_SHIFT,
522                         .idlest_reg_id = 1,
523                         .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
524                 },
525         },
526         .slaves         = omap2430_uart2_slaves,
527         .slaves_cnt     = ARRAY_SIZE(omap2430_uart2_slaves),
528         .class          = &uart_class,
529         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
530 };
531
532 /* UART3 */
533
534 static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
535         { .irq = INT_24XX_UART3_IRQ, },
536 };
537
538 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
539         { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
540         { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
541 };
542
543 static struct omap_hwmod_ocp_if *omap2430_uart3_slaves[] = {
544         &omap2_l4_core__uart3,
545 };
546
547 static struct omap_hwmod omap2430_uart3_hwmod = {
548         .name           = "uart3",
549         .mpu_irqs       = uart3_mpu_irqs,
550         .mpu_irqs_cnt   = ARRAY_SIZE(uart3_mpu_irqs),
551         .sdma_reqs      = uart3_sdma_reqs,
552         .sdma_reqs_cnt  = ARRAY_SIZE(uart3_sdma_reqs),
553         .main_clk       = "uart3_fck",
554         .prcm           = {
555                 .omap2 = {
556                         .module_offs = CORE_MOD,
557                         .prcm_reg_id = 2,
558                         .module_bit = OMAP24XX_EN_UART3_SHIFT,
559                         .idlest_reg_id = 2,
560                         .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
561                 },
562         },
563         .slaves         = omap2430_uart3_slaves,
564         .slaves_cnt     = ARRAY_SIZE(omap2430_uart3_slaves),
565         .class          = &uart_class,
566         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
567 };
568
569 /* I2C common */
570 static struct omap_hwmod_class_sysconfig i2c_sysc = {
571         .rev_offs       = 0x00,
572         .sysc_offs      = 0x20,
573         .syss_offs      = 0x10,
574         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
575         .sysc_fields    = &omap_hwmod_sysc_type1,
576 };
577
578 static struct omap_hwmod_class i2c_class = {
579         .name           = "i2c",
580         .sysc           = &i2c_sysc,
581 };
582
583 static struct omap_i2c_dev_attr i2c_dev_attr = {
584         .fifo_depth     = 8, /* bytes */
585 };
586
587 /* I2C1 */
588
589 static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
590         { .irq = INT_24XX_I2C1_IRQ, },
591 };
592
593 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
594         { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
595         { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
596 };
597
598 static struct omap_hwmod_ocp_if *omap2430_i2c1_slaves[] = {
599         &omap2430_l4_core__i2c1,
600 };
601
602 static struct omap_hwmod omap2430_i2c1_hwmod = {
603         .name           = "i2c1",
604         .mpu_irqs       = i2c1_mpu_irqs,
605         .mpu_irqs_cnt   = ARRAY_SIZE(i2c1_mpu_irqs),
606         .sdma_reqs      = i2c1_sdma_reqs,
607         .sdma_reqs_cnt  = ARRAY_SIZE(i2c1_sdma_reqs),
608         .main_clk       = "i2chs1_fck",
609         .prcm           = {
610                 .omap2 = {
611                         /*
612                          * NOTE: The CM_FCLKEN* and CM_ICLKEN* for
613                          * I2CHS IP's do not follow the usual pattern.
614                          * prcm_reg_id alone cannot be used to program
615                          * the iclk and fclk. Needs to be handled using
616                          * additonal flags when clk handling is moved
617                          * to hwmod framework.
618                          */
619                         .module_offs = CORE_MOD,
620                         .prcm_reg_id = 1,
621                         .module_bit = OMAP2430_EN_I2CHS1_SHIFT,
622                         .idlest_reg_id = 1,
623                         .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
624                 },
625         },
626         .slaves         = omap2430_i2c1_slaves,
627         .slaves_cnt     = ARRAY_SIZE(omap2430_i2c1_slaves),
628         .class          = &i2c_class,
629         .dev_attr       = &i2c_dev_attr,
630         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
631 };
632
633 /* I2C2 */
634
635 static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
636         { .irq = INT_24XX_I2C2_IRQ, },
637 };
638
639 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
640         { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
641         { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
642 };
643
644 static struct omap_hwmod_ocp_if *omap2430_i2c2_slaves[] = {
645         &omap2430_l4_core__i2c2,
646 };
647
648 static struct omap_hwmod omap2430_i2c2_hwmod = {
649         .name           = "i2c2",
650         .mpu_irqs       = i2c2_mpu_irqs,
651         .mpu_irqs_cnt   = ARRAY_SIZE(i2c2_mpu_irqs),
652         .sdma_reqs      = i2c2_sdma_reqs,
653         .sdma_reqs_cnt  = ARRAY_SIZE(i2c2_sdma_reqs),
654         .main_clk       = "i2chs2_fck",
655         .prcm           = {
656                 .omap2 = {
657                         .module_offs = CORE_MOD,
658                         .prcm_reg_id = 1,
659                         .module_bit = OMAP2430_EN_I2CHS2_SHIFT,
660                         .idlest_reg_id = 1,
661                         .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
662                 },
663         },
664         .slaves         = omap2430_i2c2_slaves,
665         .slaves_cnt     = ARRAY_SIZE(omap2430_i2c2_slaves),
666         .class          = &i2c_class,
667         .dev_attr       = &i2c_dev_attr,
668         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
669 };
670
671 /* l4_wkup -> gpio1 */
672 static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
673         {
674                 .pa_start       = 0x4900C000,
675                 .pa_end         = 0x4900C1ff,
676                 .flags          = ADDR_TYPE_RT
677         },
678 };
679
680 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
681         .master         = &omap2430_l4_wkup_hwmod,
682         .slave          = &omap2430_gpio1_hwmod,
683         .clk            = "gpios_ick",
684         .addr           = omap2430_gpio1_addr_space,
685         .addr_cnt       = ARRAY_SIZE(omap2430_gpio1_addr_space),
686         .user           = OCP_USER_MPU | OCP_USER_SDMA,
687 };
688
689 /* l4_wkup -> gpio2 */
690 static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
691         {
692                 .pa_start       = 0x4900E000,
693                 .pa_end         = 0x4900E1ff,
694                 .flags          = ADDR_TYPE_RT
695         },
696 };
697
698 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
699         .master         = &omap2430_l4_wkup_hwmod,
700         .slave          = &omap2430_gpio2_hwmod,
701         .clk            = "gpios_ick",
702         .addr           = omap2430_gpio2_addr_space,
703         .addr_cnt       = ARRAY_SIZE(omap2430_gpio2_addr_space),
704         .user           = OCP_USER_MPU | OCP_USER_SDMA,
705 };
706
707 /* l4_wkup -> gpio3 */
708 static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
709         {
710                 .pa_start       = 0x49010000,
711                 .pa_end         = 0x490101ff,
712                 .flags          = ADDR_TYPE_RT
713         },
714 };
715
716 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
717         .master         = &omap2430_l4_wkup_hwmod,
718         .slave          = &omap2430_gpio3_hwmod,
719         .clk            = "gpios_ick",
720         .addr           = omap2430_gpio3_addr_space,
721         .addr_cnt       = ARRAY_SIZE(omap2430_gpio3_addr_space),
722         .user           = OCP_USER_MPU | OCP_USER_SDMA,
723 };
724
725 /* l4_wkup -> gpio4 */
726 static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
727         {
728                 .pa_start       = 0x49012000,
729                 .pa_end         = 0x490121ff,
730                 .flags          = ADDR_TYPE_RT
731         },
732 };
733
734 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
735         .master         = &omap2430_l4_wkup_hwmod,
736         .slave          = &omap2430_gpio4_hwmod,
737         .clk            = "gpios_ick",
738         .addr           = omap2430_gpio4_addr_space,
739         .addr_cnt       = ARRAY_SIZE(omap2430_gpio4_addr_space),
740         .user           = OCP_USER_MPU | OCP_USER_SDMA,
741 };
742
743 /* l4_core -> gpio5 */
744 static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
745         {
746                 .pa_start       = 0x480B6000,
747                 .pa_end         = 0x480B61ff,
748                 .flags          = ADDR_TYPE_RT
749         },
750 };
751
752 static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
753         .master         = &omap2430_l4_core_hwmod,
754         .slave          = &omap2430_gpio5_hwmod,
755         .clk            = "gpio5_ick",
756         .addr           = omap2430_gpio5_addr_space,
757         .addr_cnt       = ARRAY_SIZE(omap2430_gpio5_addr_space),
758         .user           = OCP_USER_MPU | OCP_USER_SDMA,
759 };
760
761 /* gpio dev_attr */
762 static struct omap_gpio_dev_attr gpio_dev_attr = {
763         .bank_width = 32,
764         .dbck_flag = false,
765 };
766
767 static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
768         .rev_offs       = 0x0000,
769         .sysc_offs      = 0x0010,
770         .syss_offs      = 0x0014,
771         .sysc_flags     = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
772                            SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
773         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
774         .sysc_fields    = &omap_hwmod_sysc_type1,
775 };
776
777 /*
778  * 'gpio' class
779  * general purpose io module
780  */
781 static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
782         .name = "gpio",
783         .sysc = &omap243x_gpio_sysc,
784         .rev = 0,
785 };
786
787 /* gpio1 */
788 static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
789         { .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
790 };
791
792 static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
793         &omap2430_l4_wkup__gpio1,
794 };
795
796 static struct omap_hwmod omap2430_gpio1_hwmod = {
797         .name           = "gpio1",
798         .mpu_irqs       = omap243x_gpio1_irqs,
799         .mpu_irqs_cnt   = ARRAY_SIZE(omap243x_gpio1_irqs),
800         .main_clk       = "gpios_fck",
801         .prcm           = {
802                 .omap2 = {
803                         .prcm_reg_id = 1,
804                         .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
805                         .module_offs = WKUP_MOD,
806                         .idlest_reg_id = 1,
807                         .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
808                 },
809         },
810         .slaves         = omap2430_gpio1_slaves,
811         .slaves_cnt     = ARRAY_SIZE(omap2430_gpio1_slaves),
812         .class          = &omap243x_gpio_hwmod_class,
813         .dev_attr       = &gpio_dev_attr,
814         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
815 };
816
817 /* gpio2 */
818 static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
819         { .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
820 };
821
822 static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
823         &omap2430_l4_wkup__gpio2,
824 };
825
826 static struct omap_hwmod omap2430_gpio2_hwmod = {
827         .name           = "gpio2",
828         .mpu_irqs       = omap243x_gpio2_irqs,
829         .mpu_irqs_cnt   = ARRAY_SIZE(omap243x_gpio2_irqs),
830         .main_clk       = "gpios_fck",
831         .prcm           = {
832                 .omap2 = {
833                         .prcm_reg_id = 1,
834                         .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
835                         .module_offs = WKUP_MOD,
836                         .idlest_reg_id = 1,
837                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
838                 },
839         },
840         .slaves         = omap2430_gpio2_slaves,
841         .slaves_cnt     = ARRAY_SIZE(omap2430_gpio2_slaves),
842         .class          = &omap243x_gpio_hwmod_class,
843         .dev_attr       = &gpio_dev_attr,
844         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
845 };
846
847 /* gpio3 */
848 static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
849         { .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
850 };
851
852 static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
853         &omap2430_l4_wkup__gpio3,
854 };
855
856 static struct omap_hwmod omap2430_gpio3_hwmod = {
857         .name           = "gpio3",
858         .mpu_irqs       = omap243x_gpio3_irqs,
859         .mpu_irqs_cnt   = ARRAY_SIZE(omap243x_gpio3_irqs),
860         .main_clk       = "gpios_fck",
861         .prcm           = {
862                 .omap2 = {
863                         .prcm_reg_id = 1,
864                         .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
865                         .module_offs = WKUP_MOD,
866                         .idlest_reg_id = 1,
867                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
868                 },
869         },
870         .slaves         = omap2430_gpio3_slaves,
871         .slaves_cnt     = ARRAY_SIZE(omap2430_gpio3_slaves),
872         .class          = &omap243x_gpio_hwmod_class,
873         .dev_attr       = &gpio_dev_attr,
874         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
875 };
876
877 /* gpio4 */
878 static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
879         { .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
880 };
881
882 static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
883         &omap2430_l4_wkup__gpio4,
884 };
885
886 static struct omap_hwmod omap2430_gpio4_hwmod = {
887         .name           = "gpio4",
888         .mpu_irqs       = omap243x_gpio4_irqs,
889         .mpu_irqs_cnt   = ARRAY_SIZE(omap243x_gpio4_irqs),
890         .main_clk       = "gpios_fck",
891         .prcm           = {
892                 .omap2 = {
893                         .prcm_reg_id = 1,
894                         .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
895                         .module_offs = WKUP_MOD,
896                         .idlest_reg_id = 1,
897                         .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
898                 },
899         },
900         .slaves         = omap2430_gpio4_slaves,
901         .slaves_cnt     = ARRAY_SIZE(omap2430_gpio4_slaves),
902         .class          = &omap243x_gpio_hwmod_class,
903         .dev_attr       = &gpio_dev_attr,
904         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
905 };
906
907 /* gpio5 */
908 static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
909         { .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
910 };
911
912 static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
913         &omap2430_l4_core__gpio5,
914 };
915
916 static struct omap_hwmod omap2430_gpio5_hwmod = {
917         .name           = "gpio5",
918         .mpu_irqs       = omap243x_gpio5_irqs,
919         .mpu_irqs_cnt   = ARRAY_SIZE(omap243x_gpio5_irqs),
920         .main_clk       = "gpio5_fck",
921         .prcm           = {
922                 .omap2 = {
923                         .prcm_reg_id = 2,
924                         .module_bit = OMAP2430_EN_GPIO5_SHIFT,
925                         .module_offs = CORE_MOD,
926                         .idlest_reg_id = 2,
927                         .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
928                 },
929         },
930         .slaves         = omap2430_gpio5_slaves,
931         .slaves_cnt     = ARRAY_SIZE(omap2430_gpio5_slaves),
932         .class          = &omap243x_gpio_hwmod_class,
933         .dev_attr       = &gpio_dev_attr,
934         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
935 };
936
937 /* dma_system */
938 static struct omap_hwmod_class_sysconfig omap2430_dma_sysc = {
939         .rev_offs       = 0x0000,
940         .sysc_offs      = 0x002c,
941         .syss_offs      = 0x0028,
942         .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
943                            SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
944                            SYSC_HAS_AUTOIDLE),
945         .idlemodes      = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
946         .sysc_fields    = &omap_hwmod_sysc_type1,
947 };
948
949 static struct omap_hwmod_class omap2430_dma_hwmod_class = {
950         .name = "dma",
951         .sysc = &omap2430_dma_sysc,
952 };
953
954 /* dma attributes */
955 static struct omap_dma_dev_attr dma_dev_attr = {
956         .dev_caps  = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
957                                 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
958         .lch_count = 32,
959 };
960
961 static struct omap_hwmod_irq_info omap2430_dma_system_irqs[] = {
962         { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
963         { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
964         { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
965         { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
966 };
967
968 static struct omap_hwmod_addr_space omap2430_dma_system_addrs[] = {
969         {
970                 .pa_start       = 0x48056000,
971                 .pa_end         = 0x4a0560ff,
972                 .flags          = ADDR_TYPE_RT
973         },
974 };
975
976 /* dma_system -> L3 */
977 static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
978         .master         = &omap2430_dma_system_hwmod,
979         .slave          = &omap2430_l3_main_hwmod,
980         .clk            = "core_l3_ck",
981         .user           = OCP_USER_MPU | OCP_USER_SDMA,
982 };
983
984 /* dma_system master ports */
985 static struct omap_hwmod_ocp_if *omap2430_dma_system_masters[] = {
986         &omap2430_dma_system__l3,
987 };
988
989 /* l4_core -> dma_system */
990 static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
991         .master         = &omap2430_l4_core_hwmod,
992         .slave          = &omap2430_dma_system_hwmod,
993         .clk            = "sdma_ick",
994         .addr           = omap2430_dma_system_addrs,
995         .addr_cnt       = ARRAY_SIZE(omap2430_dma_system_addrs),
996         .user           = OCP_USER_MPU | OCP_USER_SDMA,
997 };
998
999 /* dma_system slave ports */
1000 static struct omap_hwmod_ocp_if *omap2430_dma_system_slaves[] = {
1001         &omap2430_l4_core__dma_system,
1002 };
1003
1004 static struct omap_hwmod omap2430_dma_system_hwmod = {
1005         .name           = "dma",
1006         .class          = &omap2430_dma_hwmod_class,
1007         .mpu_irqs       = omap2430_dma_system_irqs,
1008         .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_dma_system_irqs),
1009         .main_clk       = "core_l3_ck",
1010         .slaves         = omap2430_dma_system_slaves,
1011         .slaves_cnt     = ARRAY_SIZE(omap2430_dma_system_slaves),
1012         .masters        = omap2430_dma_system_masters,
1013         .masters_cnt    = ARRAY_SIZE(omap2430_dma_system_masters),
1014         .dev_attr       = &dma_dev_attr,
1015         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1016         .flags          = HWMOD_NO_IDLEST,
1017 };
1018
1019 /*
1020  * 'mcspi' class
1021  * multichannel serial port interface (mcspi) / master/slave synchronous serial
1022  * bus
1023  */
1024
1025 static struct omap_hwmod_class_sysconfig omap2430_mcspi_sysc = {
1026         .rev_offs       = 0x0000,
1027         .sysc_offs      = 0x0010,
1028         .syss_offs      = 0x0014,
1029         .sysc_flags     = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1030                                 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1031                                 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1032         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1033         .sysc_fields    = &omap_hwmod_sysc_type1,
1034 };
1035
1036 static struct omap_hwmod_class omap2430_mcspi_class = {
1037         .name = "mcspi",
1038         .sysc = &omap2430_mcspi_sysc,
1039         .rev = OMAP2_MCSPI_REV,
1040 };
1041
1042 /* mcspi1 */
1043 static struct omap_hwmod_irq_info omap2430_mcspi1_mpu_irqs[] = {
1044         { .irq = 65 },
1045 };
1046
1047 static struct omap_hwmod_dma_info omap2430_mcspi1_sdma_reqs[] = {
1048         { .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
1049         { .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
1050         { .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
1051         { .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
1052         { .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
1053         { .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
1054         { .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
1055         { .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
1056 };
1057
1058 static struct omap_hwmod_ocp_if *omap2430_mcspi1_slaves[] = {
1059         &omap2430_l4_core__mcspi1,
1060 };
1061
1062 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1063         .num_chipselect = 4,
1064 };
1065
1066 static struct omap_hwmod omap2430_mcspi1_hwmod = {
1067         .name           = "mcspi1_hwmod",
1068         .mpu_irqs       = omap2430_mcspi1_mpu_irqs,
1069         .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_mcspi1_mpu_irqs),
1070         .sdma_reqs      = omap2430_mcspi1_sdma_reqs,
1071         .sdma_reqs_cnt  = ARRAY_SIZE(omap2430_mcspi1_sdma_reqs),
1072         .main_clk       = "mcspi1_fck",
1073         .prcm           = {
1074                 .omap2 = {
1075                         .module_offs = CORE_MOD,
1076                         .prcm_reg_id = 1,
1077                         .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
1078                         .idlest_reg_id = 1,
1079                         .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
1080                 },
1081         },
1082         .slaves         = omap2430_mcspi1_slaves,
1083         .slaves_cnt     = ARRAY_SIZE(omap2430_mcspi1_slaves),
1084         .class          = &omap2430_mcspi_class,
1085         .dev_attr       = &omap_mcspi1_dev_attr,
1086         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1087 };
1088
1089 /* mcspi2 */
1090 static struct omap_hwmod_irq_info omap2430_mcspi2_mpu_irqs[] = {
1091         { .irq = 66 },
1092 };
1093
1094 static struct omap_hwmod_dma_info omap2430_mcspi2_sdma_reqs[] = {
1095         { .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
1096         { .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
1097         { .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
1098         { .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
1099 };
1100
1101 static struct omap_hwmod_ocp_if *omap2430_mcspi2_slaves[] = {
1102         &omap2430_l4_core__mcspi2,
1103 };
1104
1105 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1106         .num_chipselect = 2,
1107 };
1108
1109 static struct omap_hwmod omap2430_mcspi2_hwmod = {
1110         .name           = "mcspi2_hwmod",
1111         .mpu_irqs       = omap2430_mcspi2_mpu_irqs,
1112         .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_mcspi2_mpu_irqs),
1113         .sdma_reqs      = omap2430_mcspi2_sdma_reqs,
1114         .sdma_reqs_cnt  = ARRAY_SIZE(omap2430_mcspi2_sdma_reqs),
1115         .main_clk       = "mcspi2_fck",
1116         .prcm           = {
1117                 .omap2 = {
1118                         .module_offs = CORE_MOD,
1119                         .prcm_reg_id = 1,
1120                         .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
1121                         .idlest_reg_id = 1,
1122                         .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
1123                 },
1124         },
1125         .slaves         = omap2430_mcspi2_slaves,
1126         .slaves_cnt     = ARRAY_SIZE(omap2430_mcspi2_slaves),
1127         .class          = &omap2430_mcspi_class,
1128         .dev_attr       = &omap_mcspi2_dev_attr,
1129         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1130 };
1131
1132 /* mcspi3 */
1133 static struct omap_hwmod_irq_info omap2430_mcspi3_mpu_irqs[] = {
1134         { .irq = 91 },
1135 };
1136
1137 static struct omap_hwmod_dma_info omap2430_mcspi3_sdma_reqs[] = {
1138         { .name = "tx0", .dma_req = 15 }, /* DMA_SPI3_TX0 */
1139         { .name = "rx0", .dma_req = 16 }, /* DMA_SPI3_RX0 */
1140         { .name = "tx1", .dma_req = 23 }, /* DMA_SPI3_TX1 */
1141         { .name = "rx1", .dma_req = 24 }, /* DMA_SPI3_RX1 */
1142 };
1143
1144 static struct omap_hwmod_ocp_if *omap2430_mcspi3_slaves[] = {
1145         &omap2430_l4_core__mcspi3,
1146 };
1147
1148 static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
1149         .num_chipselect = 2,
1150 };
1151
1152 static struct omap_hwmod omap2430_mcspi3_hwmod = {
1153         .name           = "mcspi3_hwmod",
1154         .mpu_irqs       = omap2430_mcspi3_mpu_irqs,
1155         .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_mcspi3_mpu_irqs),
1156         .sdma_reqs      = omap2430_mcspi3_sdma_reqs,
1157         .sdma_reqs_cnt  = ARRAY_SIZE(omap2430_mcspi3_sdma_reqs),
1158         .main_clk       = "mcspi3_fck",
1159         .prcm           = {
1160                 .omap2 = {
1161                         .module_offs = CORE_MOD,
1162                         .prcm_reg_id = 2,
1163                         .module_bit = OMAP2430_EN_MCSPI3_SHIFT,
1164                         .idlest_reg_id = 2,
1165                         .idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT,
1166                 },
1167         },
1168         .slaves         = omap2430_mcspi3_slaves,
1169         .slaves_cnt     = ARRAY_SIZE(omap2430_mcspi3_slaves),
1170         .class          = &omap2430_mcspi_class,
1171         .dev_attr       = &omap_mcspi3_dev_attr,
1172         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1173 };
1174
1175 /*
1176  * usbhsotg
1177  */
1178 static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
1179         .rev_offs       = 0x0400,
1180         .sysc_offs      = 0x0404,
1181         .syss_offs      = 0x0408,
1182         .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
1183                           SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1184                           SYSC_HAS_AUTOIDLE),
1185         .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1186                           MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1187         .sysc_fields    = &omap_hwmod_sysc_type1,
1188 };
1189
1190 static struct omap_hwmod_class usbotg_class = {
1191         .name = "usbotg",
1192         .sysc = &omap2430_usbhsotg_sysc,
1193 };
1194
1195 /* usb_otg_hs */
1196 static struct omap_hwmod_irq_info omap2430_usbhsotg_mpu_irqs[] = {
1197
1198         { .name = "mc", .irq = 92 },
1199         { .name = "dma", .irq = 93 },
1200 };
1201
1202 static struct omap_hwmod omap2430_usbhsotg_hwmod = {
1203         .name           = "usb_otg_hs",
1204         .mpu_irqs       = omap2430_usbhsotg_mpu_irqs,
1205         .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_usbhsotg_mpu_irqs),
1206         .main_clk       = "usbhs_ick",
1207         .prcm           = {
1208                 .omap2 = {
1209                         .prcm_reg_id = 1,
1210                         .module_bit = OMAP2430_EN_USBHS_MASK,
1211                         .module_offs = CORE_MOD,
1212                         .idlest_reg_id = 1,
1213                         .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
1214                 },
1215         },
1216         .masters        = omap2430_usbhsotg_masters,
1217         .masters_cnt    = ARRAY_SIZE(omap2430_usbhsotg_masters),
1218         .slaves         = omap2430_usbhsotg_slaves,
1219         .slaves_cnt     = ARRAY_SIZE(omap2430_usbhsotg_slaves),
1220         .class          = &usbotg_class,
1221         /*
1222          * Erratum ID: i479  idle_req / idle_ack mechanism potentially
1223          * broken when autoidle is enabled
1224          * workaround is to disable the autoidle bit at module level.
1225          */
1226         .flags          = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
1227                                 | HWMOD_SWSUP_MSTANDBY,
1228         .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
1229 };
1230
1231
1232
1233 static __initdata struct omap_hwmod *omap2430_hwmods[] = {
1234         &omap2430_l3_main_hwmod,
1235         &omap2430_l4_core_hwmod,
1236         &omap2430_l4_wkup_hwmod,
1237         &omap2430_mpu_hwmod,
1238         &omap2430_iva_hwmod,
1239         &omap2430_wd_timer2_hwmod,
1240         &omap2430_uart1_hwmod,
1241         &omap2430_uart2_hwmod,
1242         &omap2430_uart3_hwmod,
1243         &omap2430_i2c1_hwmod,
1244         &omap2430_i2c2_hwmod,
1245
1246         /* gpio class */
1247         &omap2430_gpio1_hwmod,
1248         &omap2430_gpio2_hwmod,
1249         &omap2430_gpio3_hwmod,
1250         &omap2430_gpio4_hwmod,
1251         &omap2430_gpio5_hwmod,
1252
1253         /* dma_system class*/
1254         &omap2430_dma_system_hwmod,
1255
1256         /* mcspi class */
1257         &omap2430_mcspi1_hwmod,
1258         &omap2430_mcspi2_hwmod,
1259         &omap2430_mcspi3_hwmod,
1260
1261         /* usbotg class*/
1262         &omap2430_usbhsotg_hwmod,
1263
1264         NULL,
1265 };
1266
1267 int __init omap2430_hwmod_init(void)
1268 {
1269         return omap_hwmod_init(omap2430_hwmods);
1270 }