2 * omap_hwmod_2430_data.c - hardware modules present on the OMAP2430 chips
4 * Copyright (C) 2009-2010 Nokia Corporation
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.
11 * XXX handle crossbar/shared link difference for L3?
12 * XXX these should be marked initdata for multi-OMAP kernels
14 #include <plat/omap_hwmod.h>
15 #include <mach/irqs.h>
18 #include <plat/serial.h>
20 #include <plat/gpio.h>
21 #include <plat/mcspi.h>
22 #include <plat/dmtimer.h>
24 #include <plat/l3_2xxx.h>
26 #include "omap_hwmod_common_data.h"
28 #include "prm-regbits-24xx.h"
29 #include "cm-regbits-24xx.h"
33 * OMAP2430 hardware module integration data
35 * ALl of the data in this section should be autogeneratable from the
36 * TI hardware database or other technical documentation. Data that
37 * is driver-specific or driver-kernel integration-specific belongs
41 static struct omap_hwmod omap2430_mpu_hwmod;
42 static struct omap_hwmod omap2430_iva_hwmod;
43 static struct omap_hwmod omap2430_l3_main_hwmod;
44 static struct omap_hwmod omap2430_l4_core_hwmod;
45 static struct omap_hwmod omap2430_dss_core_hwmod;
46 static struct omap_hwmod omap2430_dss_dispc_hwmod;
47 static struct omap_hwmod omap2430_dss_rfbi_hwmod;
48 static struct omap_hwmod omap2430_dss_venc_hwmod;
49 static struct omap_hwmod omap2430_wd_timer2_hwmod;
50 static struct omap_hwmod omap2430_gpio1_hwmod;
51 static struct omap_hwmod omap2430_gpio2_hwmod;
52 static struct omap_hwmod omap2430_gpio3_hwmod;
53 static struct omap_hwmod omap2430_gpio4_hwmod;
54 static struct omap_hwmod omap2430_gpio5_hwmod;
55 static struct omap_hwmod omap2430_dma_system_hwmod;
56 static struct omap_hwmod omap2430_mcspi1_hwmod;
57 static struct omap_hwmod omap2430_mcspi2_hwmod;
58 static struct omap_hwmod omap2430_mcspi3_hwmod;
59 static struct omap_hwmod omap2430_mmc1_hwmod;
60 static struct omap_hwmod omap2430_mmc2_hwmod;
62 /* L3 -> L4_CORE interface */
63 static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
64 .master = &omap2430_l3_main_hwmod,
65 .slave = &omap2430_l4_core_hwmod,
66 .user = OCP_USER_MPU | OCP_USER_SDMA,
69 /* MPU -> L3 interface */
70 static struct omap_hwmod_ocp_if omap2430_mpu__l3_main = {
71 .master = &omap2430_mpu_hwmod,
72 .slave = &omap2430_l3_main_hwmod,
76 /* Slave interfaces on the L3 interconnect */
77 static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
78 &omap2430_mpu__l3_main,
82 static struct omap_hwmod_ocp_if omap2430_dss__l3 = {
83 .master = &omap2430_dss_core_hwmod,
84 .slave = &omap2430_l3_main_hwmod,
87 .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS,
88 .flags = OMAP_FIREWALL_L3,
91 .user = OCP_USER_MPU | OCP_USER_SDMA,
94 /* Master interfaces on the L3 interconnect */
95 static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
96 &omap2430_l3_main__l4_core,
100 static struct omap_hwmod omap2430_l3_main_hwmod = {
102 .class = &l3_hwmod_class,
103 .masters = omap2430_l3_main_masters,
104 .masters_cnt = ARRAY_SIZE(omap2430_l3_main_masters),
105 .slaves = omap2430_l3_main_slaves,
106 .slaves_cnt = ARRAY_SIZE(omap2430_l3_main_slaves),
107 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
108 .flags = HWMOD_NO_IDLEST,
111 static struct omap_hwmod omap2430_l4_wkup_hwmod;
112 static struct omap_hwmod omap2430_uart1_hwmod;
113 static struct omap_hwmod omap2430_uart2_hwmod;
114 static struct omap_hwmod omap2430_uart3_hwmod;
115 static struct omap_hwmod omap2430_i2c1_hwmod;
116 static struct omap_hwmod omap2430_i2c2_hwmod;
118 static struct omap_hwmod omap2430_usbhsotg_hwmod;
120 /* l3_core -> usbhsotg interface */
121 static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
122 .master = &omap2430_usbhsotg_hwmod,
123 .slave = &omap2430_l3_main_hwmod,
125 .user = OCP_USER_MPU,
128 /* I2C IP block address space length (in bytes) */
129 #define OMAP2_I2C_AS_LEN 128
131 /* L4 CORE -> I2C1 interface */
132 static struct omap_hwmod_addr_space omap2430_i2c1_addr_space[] = {
134 .pa_start = 0x48070000,
135 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
136 .flags = ADDR_TYPE_RT,
140 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
141 .master = &omap2430_l4_core_hwmod,
142 .slave = &omap2430_i2c1_hwmod,
144 .addr = omap2430_i2c1_addr_space,
145 .addr_cnt = ARRAY_SIZE(omap2430_i2c1_addr_space),
146 .user = OCP_USER_MPU | OCP_USER_SDMA,
149 /* L4 CORE -> I2C2 interface */
150 static struct omap_hwmod_addr_space omap2430_i2c2_addr_space[] = {
152 .pa_start = 0x48072000,
153 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
154 .flags = ADDR_TYPE_RT,
158 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
159 .master = &omap2430_l4_core_hwmod,
160 .slave = &omap2430_i2c2_hwmod,
162 .addr = omap2430_i2c2_addr_space,
163 .addr_cnt = ARRAY_SIZE(omap2430_i2c2_addr_space),
164 .user = OCP_USER_MPU | OCP_USER_SDMA,
167 /* L4_CORE -> L4_WKUP interface */
168 static struct omap_hwmod_ocp_if omap2430_l4_core__l4_wkup = {
169 .master = &omap2430_l4_core_hwmod,
170 .slave = &omap2430_l4_wkup_hwmod,
171 .user = OCP_USER_MPU | OCP_USER_SDMA,
174 /* L4 CORE -> UART1 interface */
175 static struct omap_hwmod_addr_space omap2430_uart1_addr_space[] = {
177 .pa_start = OMAP2_UART1_BASE,
178 .pa_end = OMAP2_UART1_BASE + SZ_8K - 1,
179 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
183 static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
184 .master = &omap2430_l4_core_hwmod,
185 .slave = &omap2430_uart1_hwmod,
187 .addr = omap2430_uart1_addr_space,
188 .addr_cnt = ARRAY_SIZE(omap2430_uart1_addr_space),
189 .user = OCP_USER_MPU | OCP_USER_SDMA,
192 /* L4 CORE -> UART2 interface */
193 static struct omap_hwmod_addr_space omap2430_uart2_addr_space[] = {
195 .pa_start = OMAP2_UART2_BASE,
196 .pa_end = OMAP2_UART2_BASE + SZ_1K - 1,
197 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
201 static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
202 .master = &omap2430_l4_core_hwmod,
203 .slave = &omap2430_uart2_hwmod,
205 .addr = omap2430_uart2_addr_space,
206 .addr_cnt = ARRAY_SIZE(omap2430_uart2_addr_space),
207 .user = OCP_USER_MPU | OCP_USER_SDMA,
210 /* L4 PER -> UART3 interface */
211 static struct omap_hwmod_addr_space omap2430_uart3_addr_space[] = {
213 .pa_start = OMAP2_UART3_BASE,
214 .pa_end = OMAP2_UART3_BASE + SZ_1K - 1,
215 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
219 static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
220 .master = &omap2430_l4_core_hwmod,
221 .slave = &omap2430_uart3_hwmod,
223 .addr = omap2430_uart3_addr_space,
224 .addr_cnt = ARRAY_SIZE(omap2430_uart3_addr_space),
225 .user = OCP_USER_MPU | OCP_USER_SDMA,
229 * usbhsotg interface data
231 static struct omap_hwmod_addr_space omap2430_usbhsotg_addrs[] = {
233 .pa_start = OMAP243X_HS_BASE,
234 .pa_end = OMAP243X_HS_BASE + SZ_4K - 1,
235 .flags = ADDR_TYPE_RT
239 /* l4_core ->usbhsotg interface */
240 static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
241 .master = &omap2430_l4_core_hwmod,
242 .slave = &omap2430_usbhsotg_hwmod,
244 .addr = omap2430_usbhsotg_addrs,
245 .addr_cnt = ARRAY_SIZE(omap2430_usbhsotg_addrs),
246 .user = OCP_USER_MPU,
249 static struct omap_hwmod_ocp_if *omap2430_usbhsotg_masters[] = {
250 &omap2430_usbhsotg__l3,
253 static struct omap_hwmod_ocp_if *omap2430_usbhsotg_slaves[] = {
254 &omap2430_l4_core__usbhsotg,
257 /* L4 CORE -> MMC1 interface */
258 static struct omap_hwmod_addr_space omap2430_mmc1_addr_space[] = {
260 .pa_start = 0x4809c000,
261 .pa_end = 0x4809c1ff,
262 .flags = ADDR_TYPE_RT,
266 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc1 = {
267 .master = &omap2430_l4_core_hwmod,
268 .slave = &omap2430_mmc1_hwmod,
270 .addr = omap2430_mmc1_addr_space,
271 .addr_cnt = ARRAY_SIZE(omap2430_mmc1_addr_space),
272 .user = OCP_USER_MPU | OCP_USER_SDMA,
275 /* L4 CORE -> MMC2 interface */
276 static struct omap_hwmod_addr_space omap2430_mmc2_addr_space[] = {
278 .pa_start = 0x480b4000,
279 .pa_end = 0x480b41ff,
280 .flags = ADDR_TYPE_RT,
284 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc2 = {
285 .master = &omap2430_l4_core_hwmod,
286 .slave = &omap2430_mmc2_hwmod,
287 .addr = omap2430_mmc2_addr_space,
289 .addr_cnt = ARRAY_SIZE(omap2430_mmc2_addr_space),
290 .user = OCP_USER_MPU | OCP_USER_SDMA,
293 /* Slave interfaces on the L4_CORE interconnect */
294 static struct omap_hwmod_ocp_if *omap2430_l4_core_slaves[] = {
295 &omap2430_l3_main__l4_core,
298 /* Master interfaces on the L4_CORE interconnect */
299 static struct omap_hwmod_ocp_if *omap2430_l4_core_masters[] = {
300 &omap2430_l4_core__l4_wkup,
301 &omap2430_l4_core__mmc1,
302 &omap2430_l4_core__mmc2,
306 static struct omap_hwmod omap2430_l4_core_hwmod = {
308 .class = &l4_hwmod_class,
309 .masters = omap2430_l4_core_masters,
310 .masters_cnt = ARRAY_SIZE(omap2430_l4_core_masters),
311 .slaves = omap2430_l4_core_slaves,
312 .slaves_cnt = ARRAY_SIZE(omap2430_l4_core_slaves),
313 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
314 .flags = HWMOD_NO_IDLEST,
317 /* Slave interfaces on the L4_WKUP interconnect */
318 static struct omap_hwmod_ocp_if *omap2430_l4_wkup_slaves[] = {
319 &omap2430_l4_core__l4_wkup,
320 &omap2_l4_core__uart1,
321 &omap2_l4_core__uart2,
322 &omap2_l4_core__uart3,
325 /* Master interfaces on the L4_WKUP interconnect */
326 static struct omap_hwmod_ocp_if *omap2430_l4_wkup_masters[] = {
329 /* l4 core -> mcspi1 interface */
330 static struct omap_hwmod_addr_space omap2430_mcspi1_addr_space[] = {
332 .pa_start = 0x48098000,
333 .pa_end = 0x480980ff,
334 .flags = ADDR_TYPE_RT,
338 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi1 = {
339 .master = &omap2430_l4_core_hwmod,
340 .slave = &omap2430_mcspi1_hwmod,
342 .addr = omap2430_mcspi1_addr_space,
343 .addr_cnt = ARRAY_SIZE(omap2430_mcspi1_addr_space),
344 .user = OCP_USER_MPU | OCP_USER_SDMA,
347 /* l4 core -> mcspi2 interface */
348 static struct omap_hwmod_addr_space omap2430_mcspi2_addr_space[] = {
350 .pa_start = 0x4809a000,
351 .pa_end = 0x4809a0ff,
352 .flags = ADDR_TYPE_RT,
356 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi2 = {
357 .master = &omap2430_l4_core_hwmod,
358 .slave = &omap2430_mcspi2_hwmod,
360 .addr = omap2430_mcspi2_addr_space,
361 .addr_cnt = ARRAY_SIZE(omap2430_mcspi2_addr_space),
362 .user = OCP_USER_MPU | OCP_USER_SDMA,
365 /* l4 core -> mcspi3 interface */
366 static struct omap_hwmod_addr_space omap2430_mcspi3_addr_space[] = {
368 .pa_start = 0x480b8000,
369 .pa_end = 0x480b80ff,
370 .flags = ADDR_TYPE_RT,
374 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = {
375 .master = &omap2430_l4_core_hwmod,
376 .slave = &omap2430_mcspi3_hwmod,
378 .addr = omap2430_mcspi3_addr_space,
379 .addr_cnt = ARRAY_SIZE(omap2430_mcspi3_addr_space),
380 .user = OCP_USER_MPU | OCP_USER_SDMA,
384 static struct omap_hwmod omap2430_l4_wkup_hwmod = {
386 .class = &l4_hwmod_class,
387 .masters = omap2430_l4_wkup_masters,
388 .masters_cnt = ARRAY_SIZE(omap2430_l4_wkup_masters),
389 .slaves = omap2430_l4_wkup_slaves,
390 .slaves_cnt = ARRAY_SIZE(omap2430_l4_wkup_slaves),
391 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
392 .flags = HWMOD_NO_IDLEST,
395 /* Master interfaces on the MPU device */
396 static struct omap_hwmod_ocp_if *omap2430_mpu_masters[] = {
397 &omap2430_mpu__l3_main,
401 static struct omap_hwmod omap2430_mpu_hwmod = {
403 .class = &mpu_hwmod_class,
404 .main_clk = "mpu_ck",
405 .masters = omap2430_mpu_masters,
406 .masters_cnt = ARRAY_SIZE(omap2430_mpu_masters),
407 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
411 * IVA2_1 interface data
414 /* IVA2 <- L3 interface */
415 static struct omap_hwmod_ocp_if omap2430_l3__iva = {
416 .master = &omap2430_l3_main_hwmod,
417 .slave = &omap2430_iva_hwmod,
419 .user = OCP_USER_MPU | OCP_USER_SDMA,
422 static struct omap_hwmod_ocp_if *omap2430_iva_masters[] = {
430 static struct omap_hwmod omap2430_iva_hwmod = {
432 .class = &iva_hwmod_class,
433 .masters = omap2430_iva_masters,
434 .masters_cnt = ARRAY_SIZE(omap2430_iva_masters),
435 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
439 static struct omap_hwmod_class_sysconfig omap2430_timer_sysc = {
443 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
444 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
446 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
447 .sysc_fields = &omap_hwmod_sysc_type1,
450 static struct omap_hwmod_class omap2430_timer_hwmod_class = {
452 .sysc = &omap2430_timer_sysc,
453 .rev = OMAP_TIMER_IP_VERSION_1,
457 static struct omap_hwmod omap2430_timer1_hwmod;
458 static struct omap_hwmod_irq_info omap2430_timer1_mpu_irqs[] = {
462 static struct omap_hwmod_addr_space omap2430_timer1_addrs[] = {
464 .pa_start = 0x49018000,
465 .pa_end = 0x49018000 + SZ_1K - 1,
466 .flags = ADDR_TYPE_RT
470 /* l4_wkup -> timer1 */
471 static struct omap_hwmod_ocp_if omap2430_l4_wkup__timer1 = {
472 .master = &omap2430_l4_wkup_hwmod,
473 .slave = &omap2430_timer1_hwmod,
475 .addr = omap2430_timer1_addrs,
476 .addr_cnt = ARRAY_SIZE(omap2430_timer1_addrs),
477 .user = OCP_USER_MPU | OCP_USER_SDMA,
480 /* timer1 slave port */
481 static struct omap_hwmod_ocp_if *omap2430_timer1_slaves[] = {
482 &omap2430_l4_wkup__timer1,
486 static struct omap_hwmod omap2430_timer1_hwmod = {
488 .mpu_irqs = omap2430_timer1_mpu_irqs,
489 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer1_mpu_irqs),
490 .main_clk = "gpt1_fck",
494 .module_bit = OMAP24XX_EN_GPT1_SHIFT,
495 .module_offs = WKUP_MOD,
497 .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
500 .slaves = omap2430_timer1_slaves,
501 .slaves_cnt = ARRAY_SIZE(omap2430_timer1_slaves),
502 .class = &omap2430_timer_hwmod_class,
503 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
507 static struct omap_hwmod omap2430_timer2_hwmod;
508 static struct omap_hwmod_irq_info omap2430_timer2_mpu_irqs[] = {
512 static struct omap_hwmod_addr_space omap2430_timer2_addrs[] = {
514 .pa_start = 0x4802a000,
515 .pa_end = 0x4802a000 + SZ_1K - 1,
516 .flags = ADDR_TYPE_RT
520 /* l4_core -> timer2 */
521 static struct omap_hwmod_ocp_if omap2430_l4_core__timer2 = {
522 .master = &omap2430_l4_core_hwmod,
523 .slave = &omap2430_timer2_hwmod,
525 .addr = omap2430_timer2_addrs,
526 .addr_cnt = ARRAY_SIZE(omap2430_timer2_addrs),
527 .user = OCP_USER_MPU | OCP_USER_SDMA,
530 /* timer2 slave port */
531 static struct omap_hwmod_ocp_if *omap2430_timer2_slaves[] = {
532 &omap2430_l4_core__timer2,
536 static struct omap_hwmod omap2430_timer2_hwmod = {
538 .mpu_irqs = omap2430_timer2_mpu_irqs,
539 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer2_mpu_irqs),
540 .main_clk = "gpt2_fck",
544 .module_bit = OMAP24XX_EN_GPT2_SHIFT,
545 .module_offs = CORE_MOD,
547 .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
550 .slaves = omap2430_timer2_slaves,
551 .slaves_cnt = ARRAY_SIZE(omap2430_timer2_slaves),
552 .class = &omap2430_timer_hwmod_class,
553 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
557 static struct omap_hwmod omap2430_timer3_hwmod;
558 static struct omap_hwmod_irq_info omap2430_timer3_mpu_irqs[] = {
562 static struct omap_hwmod_addr_space omap2430_timer3_addrs[] = {
564 .pa_start = 0x48078000,
565 .pa_end = 0x48078000 + SZ_1K - 1,
566 .flags = ADDR_TYPE_RT
570 /* l4_core -> timer3 */
571 static struct omap_hwmod_ocp_if omap2430_l4_core__timer3 = {
572 .master = &omap2430_l4_core_hwmod,
573 .slave = &omap2430_timer3_hwmod,
575 .addr = omap2430_timer3_addrs,
576 .addr_cnt = ARRAY_SIZE(omap2430_timer3_addrs),
577 .user = OCP_USER_MPU | OCP_USER_SDMA,
580 /* timer3 slave port */
581 static struct omap_hwmod_ocp_if *omap2430_timer3_slaves[] = {
582 &omap2430_l4_core__timer3,
586 static struct omap_hwmod omap2430_timer3_hwmod = {
588 .mpu_irqs = omap2430_timer3_mpu_irqs,
589 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer3_mpu_irqs),
590 .main_clk = "gpt3_fck",
594 .module_bit = OMAP24XX_EN_GPT3_SHIFT,
595 .module_offs = CORE_MOD,
597 .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
600 .slaves = omap2430_timer3_slaves,
601 .slaves_cnt = ARRAY_SIZE(omap2430_timer3_slaves),
602 .class = &omap2430_timer_hwmod_class,
603 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
607 static struct omap_hwmod omap2430_timer4_hwmod;
608 static struct omap_hwmod_irq_info omap2430_timer4_mpu_irqs[] = {
612 static struct omap_hwmod_addr_space omap2430_timer4_addrs[] = {
614 .pa_start = 0x4807a000,
615 .pa_end = 0x4807a000 + SZ_1K - 1,
616 .flags = ADDR_TYPE_RT
620 /* l4_core -> timer4 */
621 static struct omap_hwmod_ocp_if omap2430_l4_core__timer4 = {
622 .master = &omap2430_l4_core_hwmod,
623 .slave = &omap2430_timer4_hwmod,
625 .addr = omap2430_timer4_addrs,
626 .addr_cnt = ARRAY_SIZE(omap2430_timer4_addrs),
627 .user = OCP_USER_MPU | OCP_USER_SDMA,
630 /* timer4 slave port */
631 static struct omap_hwmod_ocp_if *omap2430_timer4_slaves[] = {
632 &omap2430_l4_core__timer4,
636 static struct omap_hwmod omap2430_timer4_hwmod = {
638 .mpu_irqs = omap2430_timer4_mpu_irqs,
639 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer4_mpu_irqs),
640 .main_clk = "gpt4_fck",
644 .module_bit = OMAP24XX_EN_GPT4_SHIFT,
645 .module_offs = CORE_MOD,
647 .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
650 .slaves = omap2430_timer4_slaves,
651 .slaves_cnt = ARRAY_SIZE(omap2430_timer4_slaves),
652 .class = &omap2430_timer_hwmod_class,
653 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
657 static struct omap_hwmod omap2430_timer5_hwmod;
658 static struct omap_hwmod_irq_info omap2430_timer5_mpu_irqs[] = {
662 static struct omap_hwmod_addr_space omap2430_timer5_addrs[] = {
664 .pa_start = 0x4807c000,
665 .pa_end = 0x4807c000 + SZ_1K - 1,
666 .flags = ADDR_TYPE_RT
670 /* l4_core -> timer5 */
671 static struct omap_hwmod_ocp_if omap2430_l4_core__timer5 = {
672 .master = &omap2430_l4_core_hwmod,
673 .slave = &omap2430_timer5_hwmod,
675 .addr = omap2430_timer5_addrs,
676 .addr_cnt = ARRAY_SIZE(omap2430_timer5_addrs),
677 .user = OCP_USER_MPU | OCP_USER_SDMA,
680 /* timer5 slave port */
681 static struct omap_hwmod_ocp_if *omap2430_timer5_slaves[] = {
682 &omap2430_l4_core__timer5,
686 static struct omap_hwmod omap2430_timer5_hwmod = {
688 .mpu_irqs = omap2430_timer5_mpu_irqs,
689 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer5_mpu_irqs),
690 .main_clk = "gpt5_fck",
694 .module_bit = OMAP24XX_EN_GPT5_SHIFT,
695 .module_offs = CORE_MOD,
697 .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
700 .slaves = omap2430_timer5_slaves,
701 .slaves_cnt = ARRAY_SIZE(omap2430_timer5_slaves),
702 .class = &omap2430_timer_hwmod_class,
703 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
707 static struct omap_hwmod omap2430_timer6_hwmod;
708 static struct omap_hwmod_irq_info omap2430_timer6_mpu_irqs[] = {
712 static struct omap_hwmod_addr_space omap2430_timer6_addrs[] = {
714 .pa_start = 0x4807e000,
715 .pa_end = 0x4807e000 + SZ_1K - 1,
716 .flags = ADDR_TYPE_RT
720 /* l4_core -> timer6 */
721 static struct omap_hwmod_ocp_if omap2430_l4_core__timer6 = {
722 .master = &omap2430_l4_core_hwmod,
723 .slave = &omap2430_timer6_hwmod,
725 .addr = omap2430_timer6_addrs,
726 .addr_cnt = ARRAY_SIZE(omap2430_timer6_addrs),
727 .user = OCP_USER_MPU | OCP_USER_SDMA,
730 /* timer6 slave port */
731 static struct omap_hwmod_ocp_if *omap2430_timer6_slaves[] = {
732 &omap2430_l4_core__timer6,
736 static struct omap_hwmod omap2430_timer6_hwmod = {
738 .mpu_irqs = omap2430_timer6_mpu_irqs,
739 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer6_mpu_irqs),
740 .main_clk = "gpt6_fck",
744 .module_bit = OMAP24XX_EN_GPT6_SHIFT,
745 .module_offs = CORE_MOD,
747 .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
750 .slaves = omap2430_timer6_slaves,
751 .slaves_cnt = ARRAY_SIZE(omap2430_timer6_slaves),
752 .class = &omap2430_timer_hwmod_class,
753 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
757 static struct omap_hwmod omap2430_timer7_hwmod;
758 static struct omap_hwmod_irq_info omap2430_timer7_mpu_irqs[] = {
762 static struct omap_hwmod_addr_space omap2430_timer7_addrs[] = {
764 .pa_start = 0x48080000,
765 .pa_end = 0x48080000 + SZ_1K - 1,
766 .flags = ADDR_TYPE_RT
770 /* l4_core -> timer7 */
771 static struct omap_hwmod_ocp_if omap2430_l4_core__timer7 = {
772 .master = &omap2430_l4_core_hwmod,
773 .slave = &omap2430_timer7_hwmod,
775 .addr = omap2430_timer7_addrs,
776 .addr_cnt = ARRAY_SIZE(omap2430_timer7_addrs),
777 .user = OCP_USER_MPU | OCP_USER_SDMA,
780 /* timer7 slave port */
781 static struct omap_hwmod_ocp_if *omap2430_timer7_slaves[] = {
782 &omap2430_l4_core__timer7,
786 static struct omap_hwmod omap2430_timer7_hwmod = {
788 .mpu_irqs = omap2430_timer7_mpu_irqs,
789 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer7_mpu_irqs),
790 .main_clk = "gpt7_fck",
794 .module_bit = OMAP24XX_EN_GPT7_SHIFT,
795 .module_offs = CORE_MOD,
797 .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
800 .slaves = omap2430_timer7_slaves,
801 .slaves_cnt = ARRAY_SIZE(omap2430_timer7_slaves),
802 .class = &omap2430_timer_hwmod_class,
803 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
807 static struct omap_hwmod omap2430_timer8_hwmod;
808 static struct omap_hwmod_irq_info omap2430_timer8_mpu_irqs[] = {
812 static struct omap_hwmod_addr_space omap2430_timer8_addrs[] = {
814 .pa_start = 0x48082000,
815 .pa_end = 0x48082000 + SZ_1K - 1,
816 .flags = ADDR_TYPE_RT
820 /* l4_core -> timer8 */
821 static struct omap_hwmod_ocp_if omap2430_l4_core__timer8 = {
822 .master = &omap2430_l4_core_hwmod,
823 .slave = &omap2430_timer8_hwmod,
825 .addr = omap2430_timer8_addrs,
826 .addr_cnt = ARRAY_SIZE(omap2430_timer8_addrs),
827 .user = OCP_USER_MPU | OCP_USER_SDMA,
830 /* timer8 slave port */
831 static struct omap_hwmod_ocp_if *omap2430_timer8_slaves[] = {
832 &omap2430_l4_core__timer8,
836 static struct omap_hwmod omap2430_timer8_hwmod = {
838 .mpu_irqs = omap2430_timer8_mpu_irqs,
839 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer8_mpu_irqs),
840 .main_clk = "gpt8_fck",
844 .module_bit = OMAP24XX_EN_GPT8_SHIFT,
845 .module_offs = CORE_MOD,
847 .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
850 .slaves = omap2430_timer8_slaves,
851 .slaves_cnt = ARRAY_SIZE(omap2430_timer8_slaves),
852 .class = &omap2430_timer_hwmod_class,
853 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
857 static struct omap_hwmod omap2430_timer9_hwmod;
858 static struct omap_hwmod_irq_info omap2430_timer9_mpu_irqs[] = {
862 static struct omap_hwmod_addr_space omap2430_timer9_addrs[] = {
864 .pa_start = 0x48084000,
865 .pa_end = 0x48084000 + SZ_1K - 1,
866 .flags = ADDR_TYPE_RT
870 /* l4_core -> timer9 */
871 static struct omap_hwmod_ocp_if omap2430_l4_core__timer9 = {
872 .master = &omap2430_l4_core_hwmod,
873 .slave = &omap2430_timer9_hwmod,
875 .addr = omap2430_timer9_addrs,
876 .addr_cnt = ARRAY_SIZE(omap2430_timer9_addrs),
877 .user = OCP_USER_MPU | OCP_USER_SDMA,
880 /* timer9 slave port */
881 static struct omap_hwmod_ocp_if *omap2430_timer9_slaves[] = {
882 &omap2430_l4_core__timer9,
886 static struct omap_hwmod omap2430_timer9_hwmod = {
888 .mpu_irqs = omap2430_timer9_mpu_irqs,
889 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer9_mpu_irqs),
890 .main_clk = "gpt9_fck",
894 .module_bit = OMAP24XX_EN_GPT9_SHIFT,
895 .module_offs = CORE_MOD,
897 .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
900 .slaves = omap2430_timer9_slaves,
901 .slaves_cnt = ARRAY_SIZE(omap2430_timer9_slaves),
902 .class = &omap2430_timer_hwmod_class,
903 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
907 static struct omap_hwmod omap2430_timer10_hwmod;
908 static struct omap_hwmod_irq_info omap2430_timer10_mpu_irqs[] = {
912 static struct omap_hwmod_addr_space omap2430_timer10_addrs[] = {
914 .pa_start = 0x48086000,
915 .pa_end = 0x48086000 + SZ_1K - 1,
916 .flags = ADDR_TYPE_RT
920 /* l4_core -> timer10 */
921 static struct omap_hwmod_ocp_if omap2430_l4_core__timer10 = {
922 .master = &omap2430_l4_core_hwmod,
923 .slave = &omap2430_timer10_hwmod,
925 .addr = omap2430_timer10_addrs,
926 .addr_cnt = ARRAY_SIZE(omap2430_timer10_addrs),
927 .user = OCP_USER_MPU | OCP_USER_SDMA,
930 /* timer10 slave port */
931 static struct omap_hwmod_ocp_if *omap2430_timer10_slaves[] = {
932 &omap2430_l4_core__timer10,
936 static struct omap_hwmod omap2430_timer10_hwmod = {
938 .mpu_irqs = omap2430_timer10_mpu_irqs,
939 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer10_mpu_irqs),
940 .main_clk = "gpt10_fck",
944 .module_bit = OMAP24XX_EN_GPT10_SHIFT,
945 .module_offs = CORE_MOD,
947 .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
950 .slaves = omap2430_timer10_slaves,
951 .slaves_cnt = ARRAY_SIZE(omap2430_timer10_slaves),
952 .class = &omap2430_timer_hwmod_class,
953 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
957 static struct omap_hwmod omap2430_timer11_hwmod;
958 static struct omap_hwmod_irq_info omap2430_timer11_mpu_irqs[] = {
962 static struct omap_hwmod_addr_space omap2430_timer11_addrs[] = {
964 .pa_start = 0x48088000,
965 .pa_end = 0x48088000 + SZ_1K - 1,
966 .flags = ADDR_TYPE_RT
970 /* l4_core -> timer11 */
971 static struct omap_hwmod_ocp_if omap2430_l4_core__timer11 = {
972 .master = &omap2430_l4_core_hwmod,
973 .slave = &omap2430_timer11_hwmod,
975 .addr = omap2430_timer11_addrs,
976 .addr_cnt = ARRAY_SIZE(omap2430_timer11_addrs),
977 .user = OCP_USER_MPU | OCP_USER_SDMA,
980 /* timer11 slave port */
981 static struct omap_hwmod_ocp_if *omap2430_timer11_slaves[] = {
982 &omap2430_l4_core__timer11,
986 static struct omap_hwmod omap2430_timer11_hwmod = {
988 .mpu_irqs = omap2430_timer11_mpu_irqs,
989 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer11_mpu_irqs),
990 .main_clk = "gpt11_fck",
994 .module_bit = OMAP24XX_EN_GPT11_SHIFT,
995 .module_offs = CORE_MOD,
997 .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
1000 .slaves = omap2430_timer11_slaves,
1001 .slaves_cnt = ARRAY_SIZE(omap2430_timer11_slaves),
1002 .class = &omap2430_timer_hwmod_class,
1003 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
1007 static struct omap_hwmod omap2430_timer12_hwmod;
1008 static struct omap_hwmod_irq_info omap2430_timer12_mpu_irqs[] = {
1012 static struct omap_hwmod_addr_space omap2430_timer12_addrs[] = {
1014 .pa_start = 0x4808a000,
1015 .pa_end = 0x4808a000 + SZ_1K - 1,
1016 .flags = ADDR_TYPE_RT
1020 /* l4_core -> timer12 */
1021 static struct omap_hwmod_ocp_if omap2430_l4_core__timer12 = {
1022 .master = &omap2430_l4_core_hwmod,
1023 .slave = &omap2430_timer12_hwmod,
1025 .addr = omap2430_timer12_addrs,
1026 .addr_cnt = ARRAY_SIZE(omap2430_timer12_addrs),
1027 .user = OCP_USER_MPU | OCP_USER_SDMA,
1030 /* timer12 slave port */
1031 static struct omap_hwmod_ocp_if *omap2430_timer12_slaves[] = {
1032 &omap2430_l4_core__timer12,
1036 static struct omap_hwmod omap2430_timer12_hwmod = {
1038 .mpu_irqs = omap2430_timer12_mpu_irqs,
1039 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_timer12_mpu_irqs),
1040 .main_clk = "gpt12_fck",
1044 .module_bit = OMAP24XX_EN_GPT12_SHIFT,
1045 .module_offs = CORE_MOD,
1047 .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
1050 .slaves = omap2430_timer12_slaves,
1051 .slaves_cnt = ARRAY_SIZE(omap2430_timer12_slaves),
1052 .class = &omap2430_timer_hwmod_class,
1053 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
1056 /* l4_wkup -> wd_timer2 */
1057 static struct omap_hwmod_addr_space omap2430_wd_timer2_addrs[] = {
1059 .pa_start = 0x49016000,
1060 .pa_end = 0x4901607f,
1061 .flags = ADDR_TYPE_RT
1065 static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
1066 .master = &omap2430_l4_wkup_hwmod,
1067 .slave = &omap2430_wd_timer2_hwmod,
1068 .clk = "mpu_wdt_ick",
1069 .addr = omap2430_wd_timer2_addrs,
1070 .addr_cnt = ARRAY_SIZE(omap2430_wd_timer2_addrs),
1071 .user = OCP_USER_MPU | OCP_USER_SDMA,
1076 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1077 * overflow condition
1080 static struct omap_hwmod_class_sysconfig omap2430_wd_timer_sysc = {
1082 .sysc_offs = 0x0010,
1083 .syss_offs = 0x0014,
1084 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
1086 .sysc_fields = &omap_hwmod_sysc_type1,
1089 static struct omap_hwmod_class omap2430_wd_timer_hwmod_class = {
1091 .sysc = &omap2430_wd_timer_sysc,
1092 .pre_shutdown = &omap2_wd_timer_disable
1096 static struct omap_hwmod_ocp_if *omap2430_wd_timer2_slaves[] = {
1097 &omap2430_l4_wkup__wd_timer2,
1100 static struct omap_hwmod omap2430_wd_timer2_hwmod = {
1101 .name = "wd_timer2",
1102 .class = &omap2430_wd_timer_hwmod_class,
1103 .main_clk = "mpu_wdt_fck",
1107 .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1108 .module_offs = WKUP_MOD,
1110 .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
1113 .slaves = omap2430_wd_timer2_slaves,
1114 .slaves_cnt = ARRAY_SIZE(omap2430_wd_timer2_slaves),
1115 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1120 static struct omap_hwmod_class_sysconfig uart_sysc = {
1124 .sysc_flags = (SYSC_HAS_SIDLEMODE |
1125 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1127 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1128 .sysc_fields = &omap_hwmod_sysc_type1,
1131 static struct omap_hwmod_class uart_class = {
1138 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
1139 { .irq = INT_24XX_UART1_IRQ, },
1142 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
1143 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
1144 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
1147 static struct omap_hwmod_ocp_if *omap2430_uart1_slaves[] = {
1148 &omap2_l4_core__uart1,
1151 static struct omap_hwmod omap2430_uart1_hwmod = {
1153 .mpu_irqs = uart1_mpu_irqs,
1154 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
1155 .sdma_reqs = uart1_sdma_reqs,
1156 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
1157 .main_clk = "uart1_fck",
1160 .module_offs = CORE_MOD,
1162 .module_bit = OMAP24XX_EN_UART1_SHIFT,
1164 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
1167 .slaves = omap2430_uart1_slaves,
1168 .slaves_cnt = ARRAY_SIZE(omap2430_uart1_slaves),
1169 .class = &uart_class,
1170 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1175 static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
1176 { .irq = INT_24XX_UART2_IRQ, },
1179 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
1180 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
1181 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
1184 static struct omap_hwmod_ocp_if *omap2430_uart2_slaves[] = {
1185 &omap2_l4_core__uart2,
1188 static struct omap_hwmod omap2430_uart2_hwmod = {
1190 .mpu_irqs = uart2_mpu_irqs,
1191 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
1192 .sdma_reqs = uart2_sdma_reqs,
1193 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
1194 .main_clk = "uart2_fck",
1197 .module_offs = CORE_MOD,
1199 .module_bit = OMAP24XX_EN_UART2_SHIFT,
1201 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
1204 .slaves = omap2430_uart2_slaves,
1205 .slaves_cnt = ARRAY_SIZE(omap2430_uart2_slaves),
1206 .class = &uart_class,
1207 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1212 static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
1213 { .irq = INT_24XX_UART3_IRQ, },
1216 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
1217 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
1218 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
1221 static struct omap_hwmod_ocp_if *omap2430_uart3_slaves[] = {
1222 &omap2_l4_core__uart3,
1225 static struct omap_hwmod omap2430_uart3_hwmod = {
1227 .mpu_irqs = uart3_mpu_irqs,
1228 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
1229 .sdma_reqs = uart3_sdma_reqs,
1230 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
1231 .main_clk = "uart3_fck",
1234 .module_offs = CORE_MOD,
1236 .module_bit = OMAP24XX_EN_UART3_SHIFT,
1238 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
1241 .slaves = omap2430_uart3_slaves,
1242 .slaves_cnt = ARRAY_SIZE(omap2430_uart3_slaves),
1243 .class = &uart_class,
1244 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1249 * display sub-system
1252 static struct omap_hwmod_class_sysconfig omap2430_dss_sysc = {
1254 .sysc_offs = 0x0010,
1255 .syss_offs = 0x0014,
1256 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1257 .sysc_fields = &omap_hwmod_sysc_type1,
1260 static struct omap_hwmod_class omap2430_dss_hwmod_class = {
1262 .sysc = &omap2430_dss_sysc,
1266 static struct omap_hwmod_irq_info omap2430_dss_irqs[] = {
1269 static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
1270 { .name = "dispc", .dma_req = 5 },
1274 /* dss master ports */
1275 static struct omap_hwmod_ocp_if *omap2430_dss_masters[] = {
1279 static struct omap_hwmod_addr_space omap2430_dss_addrs[] = {
1281 .pa_start = 0x48050000,
1282 .pa_end = 0x480503FF,
1283 .flags = ADDR_TYPE_RT
1287 /* l4_core -> dss */
1288 static struct omap_hwmod_ocp_if omap2430_l4_core__dss = {
1289 .master = &omap2430_l4_core_hwmod,
1290 .slave = &omap2430_dss_core_hwmod,
1292 .addr = omap2430_dss_addrs,
1293 .addr_cnt = ARRAY_SIZE(omap2430_dss_addrs),
1294 .user = OCP_USER_MPU | OCP_USER_SDMA,
1297 /* dss slave ports */
1298 static struct omap_hwmod_ocp_if *omap2430_dss_slaves[] = {
1299 &omap2430_l4_core__dss,
1302 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
1303 { .role = "tv_clk", .clk = "dss_54m_fck" },
1304 { .role = "sys_clk", .clk = "dss2_fck" },
1307 static struct omap_hwmod omap2430_dss_core_hwmod = {
1309 .class = &omap2430_dss_hwmod_class,
1310 .main_clk = "dss1_fck", /* instead of dss_fck */
1311 .mpu_irqs = omap2430_dss_irqs,
1312 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dss_irqs),
1313 .sdma_reqs = omap2430_dss_sdma_chs,
1314 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs),
1318 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1319 .module_offs = CORE_MOD,
1321 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1324 .opt_clks = dss_opt_clks,
1325 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
1326 .slaves = omap2430_dss_slaves,
1327 .slaves_cnt = ARRAY_SIZE(omap2430_dss_slaves),
1328 .masters = omap2430_dss_masters,
1329 .masters_cnt = ARRAY_SIZE(omap2430_dss_masters),
1330 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1331 .flags = HWMOD_NO_IDLEST,
1336 * display controller
1339 static struct omap_hwmod_class_sysconfig omap2430_dispc_sysc = {
1341 .sysc_offs = 0x0010,
1342 .syss_offs = 0x0014,
1343 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
1344 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1345 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1346 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1347 .sysc_fields = &omap_hwmod_sysc_type1,
1350 static struct omap_hwmod_class omap2430_dispc_hwmod_class = {
1352 .sysc = &omap2430_dispc_sysc,
1355 static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = {
1357 .pa_start = 0x48050400,
1358 .pa_end = 0x480507FF,
1359 .flags = ADDR_TYPE_RT
1363 /* l4_core -> dss_dispc */
1364 static struct omap_hwmod_ocp_if omap2430_l4_core__dss_dispc = {
1365 .master = &omap2430_l4_core_hwmod,
1366 .slave = &omap2430_dss_dispc_hwmod,
1368 .addr = omap2430_dss_dispc_addrs,
1369 .addr_cnt = ARRAY_SIZE(omap2430_dss_dispc_addrs),
1370 .user = OCP_USER_MPU | OCP_USER_SDMA,
1373 /* dss_dispc slave ports */
1374 static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = {
1375 &omap2430_l4_core__dss_dispc,
1378 static struct omap_hwmod omap2430_dss_dispc_hwmod = {
1379 .name = "dss_dispc",
1380 .class = &omap2430_dispc_hwmod_class,
1381 .main_clk = "dss1_fck",
1385 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1386 .module_offs = CORE_MOD,
1388 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1391 .slaves = omap2430_dss_dispc_slaves,
1392 .slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
1393 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1394 .flags = HWMOD_NO_IDLEST,
1399 * remote frame buffer interface
1402 static struct omap_hwmod_class_sysconfig omap2430_rfbi_sysc = {
1404 .sysc_offs = 0x0010,
1405 .syss_offs = 0x0014,
1406 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1408 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1409 .sysc_fields = &omap_hwmod_sysc_type1,
1412 static struct omap_hwmod_class omap2430_rfbi_hwmod_class = {
1414 .sysc = &omap2430_rfbi_sysc,
1417 static struct omap_hwmod_addr_space omap2430_dss_rfbi_addrs[] = {
1419 .pa_start = 0x48050800,
1420 .pa_end = 0x48050BFF,
1421 .flags = ADDR_TYPE_RT
1425 /* l4_core -> dss_rfbi */
1426 static struct omap_hwmod_ocp_if omap2430_l4_core__dss_rfbi = {
1427 .master = &omap2430_l4_core_hwmod,
1428 .slave = &omap2430_dss_rfbi_hwmod,
1430 .addr = omap2430_dss_rfbi_addrs,
1431 .addr_cnt = ARRAY_SIZE(omap2430_dss_rfbi_addrs),
1432 .user = OCP_USER_MPU | OCP_USER_SDMA,
1435 /* dss_rfbi slave ports */
1436 static struct omap_hwmod_ocp_if *omap2430_dss_rfbi_slaves[] = {
1437 &omap2430_l4_core__dss_rfbi,
1440 static struct omap_hwmod omap2430_dss_rfbi_hwmod = {
1442 .class = &omap2430_rfbi_hwmod_class,
1443 .main_clk = "dss1_fck",
1447 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1448 .module_offs = CORE_MOD,
1451 .slaves = omap2430_dss_rfbi_slaves,
1452 .slaves_cnt = ARRAY_SIZE(omap2430_dss_rfbi_slaves),
1453 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1454 .flags = HWMOD_NO_IDLEST,
1462 static struct omap_hwmod_class omap2430_venc_hwmod_class = {
1467 static struct omap_hwmod_addr_space omap2430_dss_venc_addrs[] = {
1469 .pa_start = 0x48050C00,
1470 .pa_end = 0x48050FFF,
1471 .flags = ADDR_TYPE_RT
1475 /* l4_core -> dss_venc */
1476 static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
1477 .master = &omap2430_l4_core_hwmod,
1478 .slave = &omap2430_dss_venc_hwmod,
1479 .clk = "dss_54m_fck",
1480 .addr = omap2430_dss_venc_addrs,
1481 .addr_cnt = ARRAY_SIZE(omap2430_dss_venc_addrs),
1482 .user = OCP_USER_MPU | OCP_USER_SDMA,
1485 /* dss_venc slave ports */
1486 static struct omap_hwmod_ocp_if *omap2430_dss_venc_slaves[] = {
1487 &omap2430_l4_core__dss_venc,
1490 static struct omap_hwmod omap2430_dss_venc_hwmod = {
1492 .class = &omap2430_venc_hwmod_class,
1493 .main_clk = "dss1_fck",
1497 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1498 .module_offs = CORE_MOD,
1501 .slaves = omap2430_dss_venc_slaves,
1502 .slaves_cnt = ARRAY_SIZE(omap2430_dss_venc_slaves),
1503 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1504 .flags = HWMOD_NO_IDLEST,
1508 static struct omap_hwmod_class_sysconfig i2c_sysc = {
1512 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1513 .sysc_fields = &omap_hwmod_sysc_type1,
1516 static struct omap_hwmod_class i2c_class = {
1521 static struct omap_i2c_dev_attr i2c_dev_attr = {
1522 .fifo_depth = 8, /* bytes */
1527 static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
1528 { .irq = INT_24XX_I2C1_IRQ, },
1531 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1532 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1533 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1536 static struct omap_hwmod_ocp_if *omap2430_i2c1_slaves[] = {
1537 &omap2430_l4_core__i2c1,
1540 static struct omap_hwmod omap2430_i2c1_hwmod = {
1542 .mpu_irqs = i2c1_mpu_irqs,
1543 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
1544 .sdma_reqs = i2c1_sdma_reqs,
1545 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1546 .main_clk = "i2chs1_fck",
1550 * NOTE: The CM_FCLKEN* and CM_ICLKEN* for
1551 * I2CHS IP's do not follow the usual pattern.
1552 * prcm_reg_id alone cannot be used to program
1553 * the iclk and fclk. Needs to be handled using
1554 * additonal flags when clk handling is moved
1555 * to hwmod framework.
1557 .module_offs = CORE_MOD,
1559 .module_bit = OMAP2430_EN_I2CHS1_SHIFT,
1561 .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
1564 .slaves = omap2430_i2c1_slaves,
1565 .slaves_cnt = ARRAY_SIZE(omap2430_i2c1_slaves),
1566 .class = &i2c_class,
1567 .dev_attr = &i2c_dev_attr,
1568 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1573 static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
1574 { .irq = INT_24XX_I2C2_IRQ, },
1577 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1578 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1579 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1582 static struct omap_hwmod_ocp_if *omap2430_i2c2_slaves[] = {
1583 &omap2430_l4_core__i2c2,
1586 static struct omap_hwmod omap2430_i2c2_hwmod = {
1588 .mpu_irqs = i2c2_mpu_irqs,
1589 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
1590 .sdma_reqs = i2c2_sdma_reqs,
1591 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1592 .main_clk = "i2chs2_fck",
1595 .module_offs = CORE_MOD,
1597 .module_bit = OMAP2430_EN_I2CHS2_SHIFT,
1599 .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
1602 .slaves = omap2430_i2c2_slaves,
1603 .slaves_cnt = ARRAY_SIZE(omap2430_i2c2_slaves),
1604 .class = &i2c_class,
1605 .dev_attr = &i2c_dev_attr,
1606 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1609 /* l4_wkup -> gpio1 */
1610 static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
1612 .pa_start = 0x4900C000,
1613 .pa_end = 0x4900C1ff,
1614 .flags = ADDR_TYPE_RT
1618 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
1619 .master = &omap2430_l4_wkup_hwmod,
1620 .slave = &omap2430_gpio1_hwmod,
1622 .addr = omap2430_gpio1_addr_space,
1623 .addr_cnt = ARRAY_SIZE(omap2430_gpio1_addr_space),
1624 .user = OCP_USER_MPU | OCP_USER_SDMA,
1627 /* l4_wkup -> gpio2 */
1628 static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
1630 .pa_start = 0x4900E000,
1631 .pa_end = 0x4900E1ff,
1632 .flags = ADDR_TYPE_RT
1636 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
1637 .master = &omap2430_l4_wkup_hwmod,
1638 .slave = &omap2430_gpio2_hwmod,
1640 .addr = omap2430_gpio2_addr_space,
1641 .addr_cnt = ARRAY_SIZE(omap2430_gpio2_addr_space),
1642 .user = OCP_USER_MPU | OCP_USER_SDMA,
1645 /* l4_wkup -> gpio3 */
1646 static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
1648 .pa_start = 0x49010000,
1649 .pa_end = 0x490101ff,
1650 .flags = ADDR_TYPE_RT
1654 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
1655 .master = &omap2430_l4_wkup_hwmod,
1656 .slave = &omap2430_gpio3_hwmod,
1658 .addr = omap2430_gpio3_addr_space,
1659 .addr_cnt = ARRAY_SIZE(omap2430_gpio3_addr_space),
1660 .user = OCP_USER_MPU | OCP_USER_SDMA,
1663 /* l4_wkup -> gpio4 */
1664 static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
1666 .pa_start = 0x49012000,
1667 .pa_end = 0x490121ff,
1668 .flags = ADDR_TYPE_RT
1672 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
1673 .master = &omap2430_l4_wkup_hwmod,
1674 .slave = &omap2430_gpio4_hwmod,
1676 .addr = omap2430_gpio4_addr_space,
1677 .addr_cnt = ARRAY_SIZE(omap2430_gpio4_addr_space),
1678 .user = OCP_USER_MPU | OCP_USER_SDMA,
1681 /* l4_core -> gpio5 */
1682 static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
1684 .pa_start = 0x480B6000,
1685 .pa_end = 0x480B61ff,
1686 .flags = ADDR_TYPE_RT
1690 static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
1691 .master = &omap2430_l4_core_hwmod,
1692 .slave = &omap2430_gpio5_hwmod,
1694 .addr = omap2430_gpio5_addr_space,
1695 .addr_cnt = ARRAY_SIZE(omap2430_gpio5_addr_space),
1696 .user = OCP_USER_MPU | OCP_USER_SDMA,
1700 static struct omap_gpio_dev_attr gpio_dev_attr = {
1705 static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
1707 .sysc_offs = 0x0010,
1708 .syss_offs = 0x0014,
1709 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1710 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1711 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1712 .sysc_fields = &omap_hwmod_sysc_type1,
1717 * general purpose io module
1719 static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
1721 .sysc = &omap243x_gpio_sysc,
1726 static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
1727 { .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
1730 static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
1731 &omap2430_l4_wkup__gpio1,
1734 static struct omap_hwmod omap2430_gpio1_hwmod = {
1736 .mpu_irqs = omap243x_gpio1_irqs,
1737 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs),
1738 .main_clk = "gpios_fck",
1742 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1743 .module_offs = WKUP_MOD,
1745 .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
1748 .slaves = omap2430_gpio1_slaves,
1749 .slaves_cnt = ARRAY_SIZE(omap2430_gpio1_slaves),
1750 .class = &omap243x_gpio_hwmod_class,
1751 .dev_attr = &gpio_dev_attr,
1752 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1756 static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
1757 { .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
1760 static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
1761 &omap2430_l4_wkup__gpio2,
1764 static struct omap_hwmod omap2430_gpio2_hwmod = {
1766 .mpu_irqs = omap243x_gpio2_irqs,
1767 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs),
1768 .main_clk = "gpios_fck",
1772 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1773 .module_offs = WKUP_MOD,
1775 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1778 .slaves = omap2430_gpio2_slaves,
1779 .slaves_cnt = ARRAY_SIZE(omap2430_gpio2_slaves),
1780 .class = &omap243x_gpio_hwmod_class,
1781 .dev_attr = &gpio_dev_attr,
1782 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1786 static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
1787 { .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
1790 static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
1791 &omap2430_l4_wkup__gpio3,
1794 static struct omap_hwmod omap2430_gpio3_hwmod = {
1796 .mpu_irqs = omap243x_gpio3_irqs,
1797 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs),
1798 .main_clk = "gpios_fck",
1802 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1803 .module_offs = WKUP_MOD,
1805 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1808 .slaves = omap2430_gpio3_slaves,
1809 .slaves_cnt = ARRAY_SIZE(omap2430_gpio3_slaves),
1810 .class = &omap243x_gpio_hwmod_class,
1811 .dev_attr = &gpio_dev_attr,
1812 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1816 static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
1817 { .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
1820 static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
1821 &omap2430_l4_wkup__gpio4,
1824 static struct omap_hwmod omap2430_gpio4_hwmod = {
1826 .mpu_irqs = omap243x_gpio4_irqs,
1827 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs),
1828 .main_clk = "gpios_fck",
1832 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1833 .module_offs = WKUP_MOD,
1835 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1838 .slaves = omap2430_gpio4_slaves,
1839 .slaves_cnt = ARRAY_SIZE(omap2430_gpio4_slaves),
1840 .class = &omap243x_gpio_hwmod_class,
1841 .dev_attr = &gpio_dev_attr,
1842 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1846 static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
1847 { .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
1850 static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
1851 &omap2430_l4_core__gpio5,
1854 static struct omap_hwmod omap2430_gpio5_hwmod = {
1856 .mpu_irqs = omap243x_gpio5_irqs,
1857 .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs),
1858 .main_clk = "gpio5_fck",
1862 .module_bit = OMAP2430_EN_GPIO5_SHIFT,
1863 .module_offs = CORE_MOD,
1865 .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
1868 .slaves = omap2430_gpio5_slaves,
1869 .slaves_cnt = ARRAY_SIZE(omap2430_gpio5_slaves),
1870 .class = &omap243x_gpio_hwmod_class,
1871 .dev_attr = &gpio_dev_attr,
1872 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1876 static struct omap_hwmod_class_sysconfig omap2430_dma_sysc = {
1878 .sysc_offs = 0x002c,
1879 .syss_offs = 0x0028,
1880 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
1881 SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
1883 .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1884 .sysc_fields = &omap_hwmod_sysc_type1,
1887 static struct omap_hwmod_class omap2430_dma_hwmod_class = {
1889 .sysc = &omap2430_dma_sysc,
1892 /* dma attributes */
1893 static struct omap_dma_dev_attr dma_dev_attr = {
1894 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1895 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
1899 static struct omap_hwmod_irq_info omap2430_dma_system_irqs[] = {
1900 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
1901 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
1902 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
1903 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
1906 static struct omap_hwmod_addr_space omap2430_dma_system_addrs[] = {
1908 .pa_start = 0x48056000,
1909 .pa_end = 0x4a0560ff,
1910 .flags = ADDR_TYPE_RT
1914 /* dma_system -> L3 */
1915 static struct omap_hwmod_ocp_if omap2430_dma_system__l3 = {
1916 .master = &omap2430_dma_system_hwmod,
1917 .slave = &omap2430_l3_main_hwmod,
1918 .clk = "core_l3_ck",
1919 .user = OCP_USER_MPU | OCP_USER_SDMA,
1922 /* dma_system master ports */
1923 static struct omap_hwmod_ocp_if *omap2430_dma_system_masters[] = {
1924 &omap2430_dma_system__l3,
1927 /* l4_core -> dma_system */
1928 static struct omap_hwmod_ocp_if omap2430_l4_core__dma_system = {
1929 .master = &omap2430_l4_core_hwmod,
1930 .slave = &omap2430_dma_system_hwmod,
1932 .addr = omap2430_dma_system_addrs,
1933 .addr_cnt = ARRAY_SIZE(omap2430_dma_system_addrs),
1934 .user = OCP_USER_MPU | OCP_USER_SDMA,
1937 /* dma_system slave ports */
1938 static struct omap_hwmod_ocp_if *omap2430_dma_system_slaves[] = {
1939 &omap2430_l4_core__dma_system,
1942 static struct omap_hwmod omap2430_dma_system_hwmod = {
1944 .class = &omap2430_dma_hwmod_class,
1945 .mpu_irqs = omap2430_dma_system_irqs,
1946 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dma_system_irqs),
1947 .main_clk = "core_l3_ck",
1948 .slaves = omap2430_dma_system_slaves,
1949 .slaves_cnt = ARRAY_SIZE(omap2430_dma_system_slaves),
1950 .masters = omap2430_dma_system_masters,
1951 .masters_cnt = ARRAY_SIZE(omap2430_dma_system_masters),
1952 .dev_attr = &dma_dev_attr,
1953 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
1954 .flags = HWMOD_NO_IDLEST,
1959 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1963 static struct omap_hwmod_class_sysconfig omap2430_mcspi_sysc = {
1965 .sysc_offs = 0x0010,
1966 .syss_offs = 0x0014,
1967 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1968 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1969 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1970 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1971 .sysc_fields = &omap_hwmod_sysc_type1,
1974 static struct omap_hwmod_class omap2430_mcspi_class = {
1976 .sysc = &omap2430_mcspi_sysc,
1977 .rev = OMAP2_MCSPI_REV,
1981 static struct omap_hwmod_irq_info omap2430_mcspi1_mpu_irqs[] = {
1985 static struct omap_hwmod_dma_info omap2430_mcspi1_sdma_reqs[] = {
1986 { .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
1987 { .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
1988 { .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
1989 { .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
1990 { .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
1991 { .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
1992 { .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
1993 { .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
1996 static struct omap_hwmod_ocp_if *omap2430_mcspi1_slaves[] = {
1997 &omap2430_l4_core__mcspi1,
2000 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
2001 .num_chipselect = 4,
2004 static struct omap_hwmod omap2430_mcspi1_hwmod = {
2005 .name = "mcspi1_hwmod",
2006 .mpu_irqs = omap2430_mcspi1_mpu_irqs,
2007 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi1_mpu_irqs),
2008 .sdma_reqs = omap2430_mcspi1_sdma_reqs,
2009 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi1_sdma_reqs),
2010 .main_clk = "mcspi1_fck",
2013 .module_offs = CORE_MOD,
2015 .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
2017 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
2020 .slaves = omap2430_mcspi1_slaves,
2021 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi1_slaves),
2022 .class = &omap2430_mcspi_class,
2023 .dev_attr = &omap_mcspi1_dev_attr,
2024 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2028 static struct omap_hwmod_irq_info omap2430_mcspi2_mpu_irqs[] = {
2032 static struct omap_hwmod_dma_info omap2430_mcspi2_sdma_reqs[] = {
2033 { .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
2034 { .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
2035 { .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
2036 { .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
2039 static struct omap_hwmod_ocp_if *omap2430_mcspi2_slaves[] = {
2040 &omap2430_l4_core__mcspi2,
2043 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
2044 .num_chipselect = 2,
2047 static struct omap_hwmod omap2430_mcspi2_hwmod = {
2048 .name = "mcspi2_hwmod",
2049 .mpu_irqs = omap2430_mcspi2_mpu_irqs,
2050 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi2_mpu_irqs),
2051 .sdma_reqs = omap2430_mcspi2_sdma_reqs,
2052 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi2_sdma_reqs),
2053 .main_clk = "mcspi2_fck",
2056 .module_offs = CORE_MOD,
2058 .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
2060 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
2063 .slaves = omap2430_mcspi2_slaves,
2064 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi2_slaves),
2065 .class = &omap2430_mcspi_class,
2066 .dev_attr = &omap_mcspi2_dev_attr,
2067 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2071 static struct omap_hwmod_irq_info omap2430_mcspi3_mpu_irqs[] = {
2075 static struct omap_hwmod_dma_info omap2430_mcspi3_sdma_reqs[] = {
2076 { .name = "tx0", .dma_req = 15 }, /* DMA_SPI3_TX0 */
2077 { .name = "rx0", .dma_req = 16 }, /* DMA_SPI3_RX0 */
2078 { .name = "tx1", .dma_req = 23 }, /* DMA_SPI3_TX1 */
2079 { .name = "rx1", .dma_req = 24 }, /* DMA_SPI3_RX1 */
2082 static struct omap_hwmod_ocp_if *omap2430_mcspi3_slaves[] = {
2083 &omap2430_l4_core__mcspi3,
2086 static struct omap2_mcspi_dev_attr omap_mcspi3_dev_attr = {
2087 .num_chipselect = 2,
2090 static struct omap_hwmod omap2430_mcspi3_hwmod = {
2091 .name = "mcspi3_hwmod",
2092 .mpu_irqs = omap2430_mcspi3_mpu_irqs,
2093 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mcspi3_mpu_irqs),
2094 .sdma_reqs = omap2430_mcspi3_sdma_reqs,
2095 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mcspi3_sdma_reqs),
2096 .main_clk = "mcspi3_fck",
2099 .module_offs = CORE_MOD,
2101 .module_bit = OMAP2430_EN_MCSPI3_SHIFT,
2103 .idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT,
2106 .slaves = omap2430_mcspi3_slaves,
2107 .slaves_cnt = ARRAY_SIZE(omap2430_mcspi3_slaves),
2108 .class = &omap2430_mcspi_class,
2109 .dev_attr = &omap_mcspi3_dev_attr,
2110 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2116 static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
2118 .sysc_offs = 0x0404,
2119 .syss_offs = 0x0408,
2120 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
2121 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2123 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
2124 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
2125 .sysc_fields = &omap_hwmod_sysc_type1,
2128 static struct omap_hwmod_class usbotg_class = {
2130 .sysc = &omap2430_usbhsotg_sysc,
2134 static struct omap_hwmod_irq_info omap2430_usbhsotg_mpu_irqs[] = {
2136 { .name = "mc", .irq = 92 },
2137 { .name = "dma", .irq = 93 },
2140 static struct omap_hwmod omap2430_usbhsotg_hwmod = {
2141 .name = "usb_otg_hs",
2142 .mpu_irqs = omap2430_usbhsotg_mpu_irqs,
2143 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_usbhsotg_mpu_irqs),
2144 .main_clk = "usbhs_ick",
2148 .module_bit = OMAP2430_EN_USBHS_MASK,
2149 .module_offs = CORE_MOD,
2151 .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
2154 .masters = omap2430_usbhsotg_masters,
2155 .masters_cnt = ARRAY_SIZE(omap2430_usbhsotg_masters),
2156 .slaves = omap2430_usbhsotg_slaves,
2157 .slaves_cnt = ARRAY_SIZE(omap2430_usbhsotg_slaves),
2158 .class = &usbotg_class,
2160 * Erratum ID: i479 idle_req / idle_ack mechanism potentially
2161 * broken when autoidle is enabled
2162 * workaround is to disable the autoidle bit at module level.
2164 .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
2165 | HWMOD_SWSUP_MSTANDBY,
2166 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430)
2171 /* MMC/SD/SDIO common */
2173 static struct omap_hwmod_class_sysconfig omap2430_mmc_sysc = {
2177 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
2178 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
2179 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
2180 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
2181 .sysc_fields = &omap_hwmod_sysc_type1,
2184 static struct omap_hwmod_class omap2430_mmc_class = {
2186 .sysc = &omap2430_mmc_sysc,
2191 static struct omap_hwmod_irq_info omap2430_mmc1_mpu_irqs[] = {
2195 static struct omap_hwmod_dma_info omap2430_mmc1_sdma_reqs[] = {
2196 { .name = "tx", .dma_req = 61 }, /* DMA_MMC1_TX */
2197 { .name = "rx", .dma_req = 62 }, /* DMA_MMC1_RX */
2200 static struct omap_hwmod_opt_clk omap2430_mmc1_opt_clks[] = {
2201 { .role = "dbck", .clk = "mmchsdb1_fck" },
2204 static struct omap_hwmod_ocp_if *omap2430_mmc1_slaves[] = {
2205 &omap2430_l4_core__mmc1,
2208 static struct omap_mmc_dev_attr mmc1_dev_attr = {
2209 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
2212 static struct omap_hwmod omap2430_mmc1_hwmod = {
2214 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2215 .mpu_irqs = omap2430_mmc1_mpu_irqs,
2216 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mmc1_mpu_irqs),
2217 .sdma_reqs = omap2430_mmc1_sdma_reqs,
2218 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mmc1_sdma_reqs),
2219 .opt_clks = omap2430_mmc1_opt_clks,
2220 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc1_opt_clks),
2221 .main_clk = "mmchs1_fck",
2224 .module_offs = CORE_MOD,
2226 .module_bit = OMAP2430_EN_MMCHS1_SHIFT,
2228 .idlest_idle_bit = OMAP2430_ST_MMCHS1_SHIFT,
2231 .dev_attr = &mmc1_dev_attr,
2232 .slaves = omap2430_mmc1_slaves,
2233 .slaves_cnt = ARRAY_SIZE(omap2430_mmc1_slaves),
2234 .class = &omap2430_mmc_class,
2235 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2240 static struct omap_hwmod_irq_info omap2430_mmc2_mpu_irqs[] = {
2244 static struct omap_hwmod_dma_info omap2430_mmc2_sdma_reqs[] = {
2245 { .name = "tx", .dma_req = 47 }, /* DMA_MMC2_TX */
2246 { .name = "rx", .dma_req = 48 }, /* DMA_MMC2_RX */
2249 static struct omap_hwmod_opt_clk omap2430_mmc2_opt_clks[] = {
2250 { .role = "dbck", .clk = "mmchsdb2_fck" },
2253 static struct omap_hwmod_ocp_if *omap2430_mmc2_slaves[] = {
2254 &omap2430_l4_core__mmc2,
2257 static struct omap_hwmod omap2430_mmc2_hwmod = {
2259 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
2260 .mpu_irqs = omap2430_mmc2_mpu_irqs,
2261 .mpu_irqs_cnt = ARRAY_SIZE(omap2430_mmc2_mpu_irqs),
2262 .sdma_reqs = omap2430_mmc2_sdma_reqs,
2263 .sdma_reqs_cnt = ARRAY_SIZE(omap2430_mmc2_sdma_reqs),
2264 .opt_clks = omap2430_mmc2_opt_clks,
2265 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc2_opt_clks),
2266 .main_clk = "mmchs2_fck",
2269 .module_offs = CORE_MOD,
2271 .module_bit = OMAP2430_EN_MMCHS2_SHIFT,
2273 .idlest_idle_bit = OMAP2430_ST_MMCHS2_SHIFT,
2276 .slaves = omap2430_mmc2_slaves,
2277 .slaves_cnt = ARRAY_SIZE(omap2430_mmc2_slaves),
2278 .class = &omap2430_mmc_class,
2279 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
2282 static __initdata struct omap_hwmod *omap2430_hwmods[] = {
2283 &omap2430_l3_main_hwmod,
2284 &omap2430_l4_core_hwmod,
2285 &omap2430_l4_wkup_hwmod,
2286 &omap2430_mpu_hwmod,
2287 &omap2430_iva_hwmod,
2289 &omap2430_timer1_hwmod,
2290 &omap2430_timer2_hwmod,
2291 &omap2430_timer3_hwmod,
2292 &omap2430_timer4_hwmod,
2293 &omap2430_timer5_hwmod,
2294 &omap2430_timer6_hwmod,
2295 &omap2430_timer7_hwmod,
2296 &omap2430_timer8_hwmod,
2297 &omap2430_timer9_hwmod,
2298 &omap2430_timer10_hwmod,
2299 &omap2430_timer11_hwmod,
2300 &omap2430_timer12_hwmod,
2302 &omap2430_wd_timer2_hwmod,
2303 &omap2430_uart1_hwmod,
2304 &omap2430_uart2_hwmod,
2305 &omap2430_uart3_hwmod,
2307 &omap2430_dss_core_hwmod,
2308 &omap2430_dss_dispc_hwmod,
2309 &omap2430_dss_rfbi_hwmod,
2310 &omap2430_dss_venc_hwmod,
2312 &omap2430_i2c1_hwmod,
2313 &omap2430_i2c2_hwmod,
2314 &omap2430_mmc1_hwmod,
2315 &omap2430_mmc2_hwmod,
2318 &omap2430_gpio1_hwmod,
2319 &omap2430_gpio2_hwmod,
2320 &omap2430_gpio3_hwmod,
2321 &omap2430_gpio4_hwmod,
2322 &omap2430_gpio5_hwmod,
2324 /* dma_system class*/
2325 &omap2430_dma_system_hwmod,
2328 &omap2430_mcspi1_hwmod,
2329 &omap2430_mcspi2_hwmod,
2330 &omap2430_mcspi3_hwmod,
2333 &omap2430_usbhsotg_hwmod,
2338 int __init omap2430_hwmod_init(void)
2340 return omap_hwmod_register(omap2430_hwmods);