2 * omap_hwmod_2420_data.c - hardware modules present on the OMAP2420 chips
4 * Copyright (C) 2009-2011 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>
23 #include <plat/l3_2xxx.h>
24 #include <plat/l4_2xxx.h>
26 #include "omap_hwmod_common_data.h"
28 #include "cm-regbits-24xx.h"
29 #include "prm-regbits-24xx.h"
33 * OMAP2420 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 omap2420_mpu_hwmod;
42 static struct omap_hwmod omap2420_iva_hwmod;
43 static struct omap_hwmod omap2420_l3_main_hwmod;
44 static struct omap_hwmod omap2420_l4_core_hwmod;
45 static struct omap_hwmod omap2420_dss_core_hwmod;
46 static struct omap_hwmod omap2420_dss_dispc_hwmod;
47 static struct omap_hwmod omap2420_dss_rfbi_hwmod;
48 static struct omap_hwmod omap2420_dss_venc_hwmod;
49 static struct omap_hwmod omap2420_wd_timer2_hwmod;
50 static struct omap_hwmod omap2420_gpio1_hwmod;
51 static struct omap_hwmod omap2420_gpio2_hwmod;
52 static struct omap_hwmod omap2420_gpio3_hwmod;
53 static struct omap_hwmod omap2420_gpio4_hwmod;
54 static struct omap_hwmod omap2420_dma_system_hwmod;
55 static struct omap_hwmod omap2420_mcspi1_hwmod;
56 static struct omap_hwmod omap2420_mcspi2_hwmod;
58 /* L3 -> L4_CORE interface */
59 static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
60 .master = &omap2420_l3_main_hwmod,
61 .slave = &omap2420_l4_core_hwmod,
62 .user = OCP_USER_MPU | OCP_USER_SDMA,
65 /* MPU -> L3 interface */
66 static struct omap_hwmod_ocp_if omap2420_mpu__l3_main = {
67 .master = &omap2420_mpu_hwmod,
68 .slave = &omap2420_l3_main_hwmod,
72 /* Slave interfaces on the L3 interconnect */
73 static struct omap_hwmod_ocp_if *omap2420_l3_main_slaves[] = {
74 &omap2420_mpu__l3_main,
78 static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
79 .master = &omap2420_dss_core_hwmod,
80 .slave = &omap2420_l3_main_hwmod,
83 .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS,
84 .flags = OMAP_FIREWALL_L3,
87 .user = OCP_USER_MPU | OCP_USER_SDMA,
90 /* Master interfaces on the L3 interconnect */
91 static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = {
92 &omap2420_l3_main__l4_core,
96 static struct omap_hwmod omap2420_l3_main_hwmod = {
98 .class = &l3_hwmod_class,
99 .masters = omap2420_l3_main_masters,
100 .masters_cnt = ARRAY_SIZE(omap2420_l3_main_masters),
101 .slaves = omap2420_l3_main_slaves,
102 .slaves_cnt = ARRAY_SIZE(omap2420_l3_main_slaves),
103 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
104 .flags = HWMOD_NO_IDLEST,
107 static struct omap_hwmod omap2420_l4_wkup_hwmod;
108 static struct omap_hwmod omap2420_uart1_hwmod;
109 static struct omap_hwmod omap2420_uart2_hwmod;
110 static struct omap_hwmod omap2420_uart3_hwmod;
111 static struct omap_hwmod omap2420_i2c1_hwmod;
112 static struct omap_hwmod omap2420_i2c2_hwmod;
113 static struct omap_hwmod omap2420_mcbsp1_hwmod;
114 static struct omap_hwmod omap2420_mcbsp2_hwmod;
116 /* l4 core -> mcspi1 interface */
117 static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi1 = {
118 .master = &omap2420_l4_core_hwmod,
119 .slave = &omap2420_mcspi1_hwmod,
121 .addr = omap2_mcspi1_addr_space,
122 .user = OCP_USER_MPU | OCP_USER_SDMA,
125 /* l4 core -> mcspi2 interface */
126 static struct omap_hwmod_ocp_if omap2420_l4_core__mcspi2 = {
127 .master = &omap2420_l4_core_hwmod,
128 .slave = &omap2420_mcspi2_hwmod,
130 .addr = omap2_mcspi2_addr_space,
131 .user = OCP_USER_MPU | OCP_USER_SDMA,
134 /* L4_CORE -> L4_WKUP interface */
135 static struct omap_hwmod_ocp_if omap2420_l4_core__l4_wkup = {
136 .master = &omap2420_l4_core_hwmod,
137 .slave = &omap2420_l4_wkup_hwmod,
138 .user = OCP_USER_MPU | OCP_USER_SDMA,
141 /* L4 CORE -> UART1 interface */
142 static struct omap_hwmod_ocp_if omap2_l4_core__uart1 = {
143 .master = &omap2420_l4_core_hwmod,
144 .slave = &omap2420_uart1_hwmod,
146 .addr = omap2xxx_uart1_addr_space,
147 .user = OCP_USER_MPU | OCP_USER_SDMA,
150 /* L4 CORE -> UART2 interface */
151 static struct omap_hwmod_ocp_if omap2_l4_core__uart2 = {
152 .master = &omap2420_l4_core_hwmod,
153 .slave = &omap2420_uart2_hwmod,
155 .addr = omap2xxx_uart2_addr_space,
156 .user = OCP_USER_MPU | OCP_USER_SDMA,
159 /* L4 PER -> UART3 interface */
160 static struct omap_hwmod_ocp_if omap2_l4_core__uart3 = {
161 .master = &omap2420_l4_core_hwmod,
162 .slave = &omap2420_uart3_hwmod,
164 .addr = omap2xxx_uart3_addr_space,
165 .user = OCP_USER_MPU | OCP_USER_SDMA,
168 /* L4 CORE -> I2C1 interface */
169 static struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = {
170 .master = &omap2420_l4_core_hwmod,
171 .slave = &omap2420_i2c1_hwmod,
173 .addr = omap2_i2c1_addr_space,
174 .user = OCP_USER_MPU | OCP_USER_SDMA,
177 /* L4 CORE -> I2C2 interface */
178 static struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = {
179 .master = &omap2420_l4_core_hwmod,
180 .slave = &omap2420_i2c2_hwmod,
182 .addr = omap2_i2c2_addr_space,
183 .user = OCP_USER_MPU | OCP_USER_SDMA,
186 /* Slave interfaces on the L4_CORE interconnect */
187 static struct omap_hwmod_ocp_if *omap2420_l4_core_slaves[] = {
188 &omap2420_l3_main__l4_core,
191 /* Master interfaces on the L4_CORE interconnect */
192 static struct omap_hwmod_ocp_if *omap2420_l4_core_masters[] = {
193 &omap2420_l4_core__l4_wkup,
194 &omap2_l4_core__uart1,
195 &omap2_l4_core__uart2,
196 &omap2_l4_core__uart3,
197 &omap2420_l4_core__i2c1,
198 &omap2420_l4_core__i2c2
202 static struct omap_hwmod omap2420_l4_core_hwmod = {
204 .class = &l4_hwmod_class,
205 .masters = omap2420_l4_core_masters,
206 .masters_cnt = ARRAY_SIZE(omap2420_l4_core_masters),
207 .slaves = omap2420_l4_core_slaves,
208 .slaves_cnt = ARRAY_SIZE(omap2420_l4_core_slaves),
209 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
210 .flags = HWMOD_NO_IDLEST,
213 /* Slave interfaces on the L4_WKUP interconnect */
214 static struct omap_hwmod_ocp_if *omap2420_l4_wkup_slaves[] = {
215 &omap2420_l4_core__l4_wkup,
218 /* Master interfaces on the L4_WKUP interconnect */
219 static struct omap_hwmod_ocp_if *omap2420_l4_wkup_masters[] = {
223 static struct omap_hwmod omap2420_l4_wkup_hwmod = {
225 .class = &l4_hwmod_class,
226 .masters = omap2420_l4_wkup_masters,
227 .masters_cnt = ARRAY_SIZE(omap2420_l4_wkup_masters),
228 .slaves = omap2420_l4_wkup_slaves,
229 .slaves_cnt = ARRAY_SIZE(omap2420_l4_wkup_slaves),
230 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
231 .flags = HWMOD_NO_IDLEST,
234 /* Master interfaces on the MPU device */
235 static struct omap_hwmod_ocp_if *omap2420_mpu_masters[] = {
236 &omap2420_mpu__l3_main,
240 static struct omap_hwmod omap2420_mpu_hwmod = {
242 .class = &mpu_hwmod_class,
243 .main_clk = "mpu_ck",
244 .masters = omap2420_mpu_masters,
245 .masters_cnt = ARRAY_SIZE(omap2420_mpu_masters),
246 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
250 * IVA1 interface data
253 /* IVA <- L3 interface */
254 static struct omap_hwmod_ocp_if omap2420_l3__iva = {
255 .master = &omap2420_l3_main_hwmod,
256 .slave = &omap2420_iva_hwmod,
258 .user = OCP_USER_MPU | OCP_USER_SDMA,
261 static struct omap_hwmod_ocp_if *omap2420_iva_masters[] = {
269 static struct omap_hwmod omap2420_iva_hwmod = {
271 .class = &iva_hwmod_class,
272 .masters = omap2420_iva_masters,
273 .masters_cnt = ARRAY_SIZE(omap2420_iva_masters),
274 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
278 static struct omap_hwmod_class_sysconfig omap2420_timer_sysc = {
282 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
283 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
285 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
286 .sysc_fields = &omap_hwmod_sysc_type1,
289 static struct omap_hwmod_class omap2420_timer_hwmod_class = {
291 .sysc = &omap2420_timer_sysc,
292 .rev = OMAP_TIMER_IP_VERSION_1,
296 static struct omap_hwmod omap2420_timer1_hwmod;
298 static struct omap_hwmod_addr_space omap2420_timer1_addrs[] = {
300 .pa_start = 0x48028000,
301 .pa_end = 0x48028000 + SZ_1K - 1,
302 .flags = ADDR_TYPE_RT
307 /* l4_wkup -> timer1 */
308 static struct omap_hwmod_ocp_if omap2420_l4_wkup__timer1 = {
309 .master = &omap2420_l4_wkup_hwmod,
310 .slave = &omap2420_timer1_hwmod,
312 .addr = omap2420_timer1_addrs,
313 .user = OCP_USER_MPU | OCP_USER_SDMA,
316 /* timer1 slave port */
317 static struct omap_hwmod_ocp_if *omap2420_timer1_slaves[] = {
318 &omap2420_l4_wkup__timer1,
322 static struct omap_hwmod omap2420_timer1_hwmod = {
324 .mpu_irqs = omap2_timer1_mpu_irqs,
325 .main_clk = "gpt1_fck",
329 .module_bit = OMAP24XX_EN_GPT1_SHIFT,
330 .module_offs = WKUP_MOD,
332 .idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
335 .slaves = omap2420_timer1_slaves,
336 .slaves_cnt = ARRAY_SIZE(omap2420_timer1_slaves),
337 .class = &omap2420_timer_hwmod_class,
338 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
342 static struct omap_hwmod omap2420_timer2_hwmod;
344 /* l4_core -> timer2 */
345 static struct omap_hwmod_ocp_if omap2420_l4_core__timer2 = {
346 .master = &omap2420_l4_core_hwmod,
347 .slave = &omap2420_timer2_hwmod,
349 .addr = omap2xxx_timer2_addrs,
350 .user = OCP_USER_MPU | OCP_USER_SDMA,
353 /* timer2 slave port */
354 static struct omap_hwmod_ocp_if *omap2420_timer2_slaves[] = {
355 &omap2420_l4_core__timer2,
359 static struct omap_hwmod omap2420_timer2_hwmod = {
361 .mpu_irqs = omap2_timer2_mpu_irqs,
362 .main_clk = "gpt2_fck",
366 .module_bit = OMAP24XX_EN_GPT2_SHIFT,
367 .module_offs = CORE_MOD,
369 .idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
372 .slaves = omap2420_timer2_slaves,
373 .slaves_cnt = ARRAY_SIZE(omap2420_timer2_slaves),
374 .class = &omap2420_timer_hwmod_class,
375 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
379 static struct omap_hwmod omap2420_timer3_hwmod;
381 /* l4_core -> timer3 */
382 static struct omap_hwmod_ocp_if omap2420_l4_core__timer3 = {
383 .master = &omap2420_l4_core_hwmod,
384 .slave = &omap2420_timer3_hwmod,
386 .addr = omap2xxx_timer3_addrs,
387 .user = OCP_USER_MPU | OCP_USER_SDMA,
390 /* timer3 slave port */
391 static struct omap_hwmod_ocp_if *omap2420_timer3_slaves[] = {
392 &omap2420_l4_core__timer3,
396 static struct omap_hwmod omap2420_timer3_hwmod = {
398 .mpu_irqs = omap2_timer3_mpu_irqs,
399 .main_clk = "gpt3_fck",
403 .module_bit = OMAP24XX_EN_GPT3_SHIFT,
404 .module_offs = CORE_MOD,
406 .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
409 .slaves = omap2420_timer3_slaves,
410 .slaves_cnt = ARRAY_SIZE(omap2420_timer3_slaves),
411 .class = &omap2420_timer_hwmod_class,
412 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
416 static struct omap_hwmod omap2420_timer4_hwmod;
418 /* l4_core -> timer4 */
419 static struct omap_hwmod_ocp_if omap2420_l4_core__timer4 = {
420 .master = &omap2420_l4_core_hwmod,
421 .slave = &omap2420_timer4_hwmod,
423 .addr = omap2xxx_timer4_addrs,
424 .user = OCP_USER_MPU | OCP_USER_SDMA,
427 /* timer4 slave port */
428 static struct omap_hwmod_ocp_if *omap2420_timer4_slaves[] = {
429 &omap2420_l4_core__timer4,
433 static struct omap_hwmod omap2420_timer4_hwmod = {
435 .mpu_irqs = omap2_timer4_mpu_irqs,
436 .main_clk = "gpt4_fck",
440 .module_bit = OMAP24XX_EN_GPT4_SHIFT,
441 .module_offs = CORE_MOD,
443 .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
446 .slaves = omap2420_timer4_slaves,
447 .slaves_cnt = ARRAY_SIZE(omap2420_timer4_slaves),
448 .class = &omap2420_timer_hwmod_class,
449 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
453 static struct omap_hwmod omap2420_timer5_hwmod;
455 /* l4_core -> timer5 */
456 static struct omap_hwmod_ocp_if omap2420_l4_core__timer5 = {
457 .master = &omap2420_l4_core_hwmod,
458 .slave = &omap2420_timer5_hwmod,
460 .addr = omap2xxx_timer5_addrs,
461 .user = OCP_USER_MPU | OCP_USER_SDMA,
464 /* timer5 slave port */
465 static struct omap_hwmod_ocp_if *omap2420_timer5_slaves[] = {
466 &omap2420_l4_core__timer5,
470 static struct omap_hwmod omap2420_timer5_hwmod = {
472 .mpu_irqs = omap2_timer5_mpu_irqs,
473 .main_clk = "gpt5_fck",
477 .module_bit = OMAP24XX_EN_GPT5_SHIFT,
478 .module_offs = CORE_MOD,
480 .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
483 .slaves = omap2420_timer5_slaves,
484 .slaves_cnt = ARRAY_SIZE(omap2420_timer5_slaves),
485 .class = &omap2420_timer_hwmod_class,
486 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
491 static struct omap_hwmod omap2420_timer6_hwmod;
493 /* l4_core -> timer6 */
494 static struct omap_hwmod_ocp_if omap2420_l4_core__timer6 = {
495 .master = &omap2420_l4_core_hwmod,
496 .slave = &omap2420_timer6_hwmod,
498 .addr = omap2xxx_timer6_addrs,
499 .user = OCP_USER_MPU | OCP_USER_SDMA,
502 /* timer6 slave port */
503 static struct omap_hwmod_ocp_if *omap2420_timer6_slaves[] = {
504 &omap2420_l4_core__timer6,
508 static struct omap_hwmod omap2420_timer6_hwmod = {
510 .mpu_irqs = omap2_timer6_mpu_irqs,
511 .main_clk = "gpt6_fck",
515 .module_bit = OMAP24XX_EN_GPT6_SHIFT,
516 .module_offs = CORE_MOD,
518 .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
521 .slaves = omap2420_timer6_slaves,
522 .slaves_cnt = ARRAY_SIZE(omap2420_timer6_slaves),
523 .class = &omap2420_timer_hwmod_class,
524 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
528 static struct omap_hwmod omap2420_timer7_hwmod;
530 /* l4_core -> timer7 */
531 static struct omap_hwmod_ocp_if omap2420_l4_core__timer7 = {
532 .master = &omap2420_l4_core_hwmod,
533 .slave = &omap2420_timer7_hwmod,
535 .addr = omap2xxx_timer7_addrs,
536 .user = OCP_USER_MPU | OCP_USER_SDMA,
539 /* timer7 slave port */
540 static struct omap_hwmod_ocp_if *omap2420_timer7_slaves[] = {
541 &omap2420_l4_core__timer7,
545 static struct omap_hwmod omap2420_timer7_hwmod = {
547 .mpu_irqs = omap2_timer7_mpu_irqs,
548 .main_clk = "gpt7_fck",
552 .module_bit = OMAP24XX_EN_GPT7_SHIFT,
553 .module_offs = CORE_MOD,
555 .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
558 .slaves = omap2420_timer7_slaves,
559 .slaves_cnt = ARRAY_SIZE(omap2420_timer7_slaves),
560 .class = &omap2420_timer_hwmod_class,
561 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
565 static struct omap_hwmod omap2420_timer8_hwmod;
567 /* l4_core -> timer8 */
568 static struct omap_hwmod_ocp_if omap2420_l4_core__timer8 = {
569 .master = &omap2420_l4_core_hwmod,
570 .slave = &omap2420_timer8_hwmod,
572 .addr = omap2xxx_timer8_addrs,
573 .user = OCP_USER_MPU | OCP_USER_SDMA,
576 /* timer8 slave port */
577 static struct omap_hwmod_ocp_if *omap2420_timer8_slaves[] = {
578 &omap2420_l4_core__timer8,
582 static struct omap_hwmod omap2420_timer8_hwmod = {
584 .mpu_irqs = omap2_timer8_mpu_irqs,
585 .main_clk = "gpt8_fck",
589 .module_bit = OMAP24XX_EN_GPT8_SHIFT,
590 .module_offs = CORE_MOD,
592 .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
595 .slaves = omap2420_timer8_slaves,
596 .slaves_cnt = ARRAY_SIZE(omap2420_timer8_slaves),
597 .class = &omap2420_timer_hwmod_class,
598 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
602 static struct omap_hwmod omap2420_timer9_hwmod;
604 /* l4_core -> timer9 */
605 static struct omap_hwmod_ocp_if omap2420_l4_core__timer9 = {
606 .master = &omap2420_l4_core_hwmod,
607 .slave = &omap2420_timer9_hwmod,
609 .addr = omap2xxx_timer9_addrs,
610 .user = OCP_USER_MPU | OCP_USER_SDMA,
613 /* timer9 slave port */
614 static struct omap_hwmod_ocp_if *omap2420_timer9_slaves[] = {
615 &omap2420_l4_core__timer9,
619 static struct omap_hwmod omap2420_timer9_hwmod = {
621 .mpu_irqs = omap2_timer9_mpu_irqs,
622 .main_clk = "gpt9_fck",
626 .module_bit = OMAP24XX_EN_GPT9_SHIFT,
627 .module_offs = CORE_MOD,
629 .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
632 .slaves = omap2420_timer9_slaves,
633 .slaves_cnt = ARRAY_SIZE(omap2420_timer9_slaves),
634 .class = &omap2420_timer_hwmod_class,
635 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
639 static struct omap_hwmod omap2420_timer10_hwmod;
641 /* l4_core -> timer10 */
642 static struct omap_hwmod_ocp_if omap2420_l4_core__timer10 = {
643 .master = &omap2420_l4_core_hwmod,
644 .slave = &omap2420_timer10_hwmod,
646 .addr = omap2_timer10_addrs,
647 .user = OCP_USER_MPU | OCP_USER_SDMA,
650 /* timer10 slave port */
651 static struct omap_hwmod_ocp_if *omap2420_timer10_slaves[] = {
652 &omap2420_l4_core__timer10,
656 static struct omap_hwmod omap2420_timer10_hwmod = {
658 .mpu_irqs = omap2_timer10_mpu_irqs,
659 .main_clk = "gpt10_fck",
663 .module_bit = OMAP24XX_EN_GPT10_SHIFT,
664 .module_offs = CORE_MOD,
666 .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT,
669 .slaves = omap2420_timer10_slaves,
670 .slaves_cnt = ARRAY_SIZE(omap2420_timer10_slaves),
671 .class = &omap2420_timer_hwmod_class,
672 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
676 static struct omap_hwmod omap2420_timer11_hwmod;
678 /* l4_core -> timer11 */
679 static struct omap_hwmod_ocp_if omap2420_l4_core__timer11 = {
680 .master = &omap2420_l4_core_hwmod,
681 .slave = &omap2420_timer11_hwmod,
683 .addr = omap2_timer11_addrs,
684 .user = OCP_USER_MPU | OCP_USER_SDMA,
687 /* timer11 slave port */
688 static struct omap_hwmod_ocp_if *omap2420_timer11_slaves[] = {
689 &omap2420_l4_core__timer11,
693 static struct omap_hwmod omap2420_timer11_hwmod = {
695 .mpu_irqs = omap2_timer11_mpu_irqs,
696 .main_clk = "gpt11_fck",
700 .module_bit = OMAP24XX_EN_GPT11_SHIFT,
701 .module_offs = CORE_MOD,
703 .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT,
706 .slaves = omap2420_timer11_slaves,
707 .slaves_cnt = ARRAY_SIZE(omap2420_timer11_slaves),
708 .class = &omap2420_timer_hwmod_class,
709 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
713 static struct omap_hwmod omap2420_timer12_hwmod;
715 /* l4_core -> timer12 */
716 static struct omap_hwmod_ocp_if omap2420_l4_core__timer12 = {
717 .master = &omap2420_l4_core_hwmod,
718 .slave = &omap2420_timer12_hwmod,
720 .addr = omap2xxx_timer12_addrs,
721 .user = OCP_USER_MPU | OCP_USER_SDMA,
724 /* timer12 slave port */
725 static struct omap_hwmod_ocp_if *omap2420_timer12_slaves[] = {
726 &omap2420_l4_core__timer12,
730 static struct omap_hwmod omap2420_timer12_hwmod = {
732 .mpu_irqs = omap2xxx_timer12_mpu_irqs,
733 .main_clk = "gpt12_fck",
737 .module_bit = OMAP24XX_EN_GPT12_SHIFT,
738 .module_offs = CORE_MOD,
740 .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT,
743 .slaves = omap2420_timer12_slaves,
744 .slaves_cnt = ARRAY_SIZE(omap2420_timer12_slaves),
745 .class = &omap2420_timer_hwmod_class,
746 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420)
749 /* l4_wkup -> wd_timer2 */
750 static struct omap_hwmod_addr_space omap2420_wd_timer2_addrs[] = {
752 .pa_start = 0x48022000,
753 .pa_end = 0x4802207f,
754 .flags = ADDR_TYPE_RT
759 static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = {
760 .master = &omap2420_l4_wkup_hwmod,
761 .slave = &omap2420_wd_timer2_hwmod,
762 .clk = "mpu_wdt_ick",
763 .addr = omap2420_wd_timer2_addrs,
764 .user = OCP_USER_MPU | OCP_USER_SDMA,
769 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
773 static struct omap_hwmod_class_sysconfig omap2420_wd_timer_sysc = {
777 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET |
778 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
779 .sysc_fields = &omap_hwmod_sysc_type1,
782 static struct omap_hwmod_class omap2420_wd_timer_hwmod_class = {
784 .sysc = &omap2420_wd_timer_sysc,
785 .pre_shutdown = &omap2_wd_timer_disable
789 static struct omap_hwmod_ocp_if *omap2420_wd_timer2_slaves[] = {
790 &omap2420_l4_wkup__wd_timer2,
793 static struct omap_hwmod omap2420_wd_timer2_hwmod = {
795 .class = &omap2420_wd_timer_hwmod_class,
796 .main_clk = "mpu_wdt_fck",
800 .module_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
801 .module_offs = WKUP_MOD,
803 .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT,
806 .slaves = omap2420_wd_timer2_slaves,
807 .slaves_cnt = ARRAY_SIZE(omap2420_wd_timer2_slaves),
808 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
813 static struct omap_hwmod_class_sysconfig uart_sysc = {
817 .sysc_flags = (SYSC_HAS_SIDLEMODE |
818 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
819 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
820 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
821 .sysc_fields = &omap_hwmod_sysc_type1,
824 static struct omap_hwmod_class uart_class = {
831 static struct omap_hwmod_ocp_if *omap2420_uart1_slaves[] = {
832 &omap2_l4_core__uart1,
835 static struct omap_hwmod omap2420_uart1_hwmod = {
837 .mpu_irqs = omap2_uart1_mpu_irqs,
838 .sdma_reqs = omap2_uart1_sdma_reqs,
839 .main_clk = "uart1_fck",
842 .module_offs = CORE_MOD,
844 .module_bit = OMAP24XX_EN_UART1_SHIFT,
846 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
849 .slaves = omap2420_uart1_slaves,
850 .slaves_cnt = ARRAY_SIZE(omap2420_uart1_slaves),
851 .class = &uart_class,
852 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
857 static struct omap_hwmod_ocp_if *omap2420_uart2_slaves[] = {
858 &omap2_l4_core__uart2,
861 static struct omap_hwmod omap2420_uart2_hwmod = {
863 .mpu_irqs = omap2_uart2_mpu_irqs,
864 .sdma_reqs = omap2_uart2_sdma_reqs,
865 .main_clk = "uart2_fck",
868 .module_offs = CORE_MOD,
870 .module_bit = OMAP24XX_EN_UART2_SHIFT,
872 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
875 .slaves = omap2420_uart2_slaves,
876 .slaves_cnt = ARRAY_SIZE(omap2420_uart2_slaves),
877 .class = &uart_class,
878 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
883 static struct omap_hwmod_ocp_if *omap2420_uart3_slaves[] = {
884 &omap2_l4_core__uart3,
887 static struct omap_hwmod omap2420_uart3_hwmod = {
889 .mpu_irqs = omap2_uart3_mpu_irqs,
890 .sdma_reqs = omap2_uart3_sdma_reqs,
891 .main_clk = "uart3_fck",
894 .module_offs = CORE_MOD,
896 .module_bit = OMAP24XX_EN_UART3_SHIFT,
898 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
901 .slaves = omap2420_uart3_slaves,
902 .slaves_cnt = ARRAY_SIZE(omap2420_uart3_slaves),
903 .class = &uart_class,
904 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
912 static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
916 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
917 .sysc_fields = &omap_hwmod_sysc_type1,
920 static struct omap_hwmod_class omap2420_dss_hwmod_class = {
922 .sysc = &omap2420_dss_sysc,
926 /* dss master ports */
927 static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
932 static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
933 .master = &omap2420_l4_core_hwmod,
934 .slave = &omap2420_dss_core_hwmod,
936 .addr = omap2_dss_addrs,
939 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
940 .flags = OMAP_FIREWALL_L4,
943 .user = OCP_USER_MPU | OCP_USER_SDMA,
946 /* dss slave ports */
947 static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
948 &omap2420_l4_core__dss,
951 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
952 { .role = "tv_clk", .clk = "dss_54m_fck" },
953 { .role = "sys_clk", .clk = "dss2_fck" },
956 static struct omap_hwmod omap2420_dss_core_hwmod = {
958 .class = &omap2420_dss_hwmod_class,
959 .main_clk = "dss1_fck", /* instead of dss_fck */
960 .sdma_reqs = omap2xxx_dss_sdma_chs,
964 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
965 .module_offs = CORE_MOD,
967 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
970 .opt_clks = dss_opt_clks,
971 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
972 .slaves = omap2420_dss_slaves,
973 .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
974 .masters = omap2420_dss_masters,
975 .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
976 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
977 .flags = HWMOD_NO_IDLEST,
985 static struct omap_hwmod_class_sysconfig omap2420_dispc_sysc = {
989 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
990 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
991 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
992 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
993 .sysc_fields = &omap_hwmod_sysc_type1,
996 static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
998 .sysc = &omap2420_dispc_sysc,
1001 /* l4_core -> dss_dispc */
1002 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
1003 .master = &omap2420_l4_core_hwmod,
1004 .slave = &omap2420_dss_dispc_hwmod,
1006 .addr = omap2_dss_dispc_addrs,
1009 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
1010 .flags = OMAP_FIREWALL_L4,
1013 .user = OCP_USER_MPU | OCP_USER_SDMA,
1016 /* dss_dispc slave ports */
1017 static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
1018 &omap2420_l4_core__dss_dispc,
1021 static struct omap_hwmod omap2420_dss_dispc_hwmod = {
1022 .name = "dss_dispc",
1023 .class = &omap2420_dispc_hwmod_class,
1024 .mpu_irqs = omap2_dispc_irqs,
1025 .main_clk = "dss1_fck",
1029 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1030 .module_offs = CORE_MOD,
1032 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1035 .slaves = omap2420_dss_dispc_slaves,
1036 .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
1037 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1038 .flags = HWMOD_NO_IDLEST,
1043 * remote frame buffer interface
1046 static struct omap_hwmod_class_sysconfig omap2420_rfbi_sysc = {
1048 .sysc_offs = 0x0010,
1049 .syss_offs = 0x0014,
1050 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1052 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1053 .sysc_fields = &omap_hwmod_sysc_type1,
1056 static struct omap_hwmod_class omap2420_rfbi_hwmod_class = {
1058 .sysc = &omap2420_rfbi_sysc,
1061 /* l4_core -> dss_rfbi */
1062 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
1063 .master = &omap2420_l4_core_hwmod,
1064 .slave = &omap2420_dss_rfbi_hwmod,
1066 .addr = omap2_dss_rfbi_addrs,
1069 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
1070 .flags = OMAP_FIREWALL_L4,
1073 .user = OCP_USER_MPU | OCP_USER_SDMA,
1076 /* dss_rfbi slave ports */
1077 static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
1078 &omap2420_l4_core__dss_rfbi,
1081 static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
1083 .class = &omap2420_rfbi_hwmod_class,
1084 .main_clk = "dss1_fck",
1088 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1089 .module_offs = CORE_MOD,
1092 .slaves = omap2420_dss_rfbi_slaves,
1093 .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
1094 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1095 .flags = HWMOD_NO_IDLEST,
1103 static struct omap_hwmod_class omap2420_venc_hwmod_class = {
1107 /* l4_core -> dss_venc */
1108 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
1109 .master = &omap2420_l4_core_hwmod,
1110 .slave = &omap2420_dss_venc_hwmod,
1111 .clk = "dss_54m_fck",
1112 .addr = omap2_dss_venc_addrs,
1115 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
1116 .flags = OMAP_FIREWALL_L4,
1119 .flags = OCPIF_SWSUP_IDLE,
1120 .user = OCP_USER_MPU | OCP_USER_SDMA,
1123 /* dss_venc slave ports */
1124 static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
1125 &omap2420_l4_core__dss_venc,
1128 static struct omap_hwmod omap2420_dss_venc_hwmod = {
1130 .class = &omap2420_venc_hwmod_class,
1131 .main_clk = "dss1_fck",
1135 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1136 .module_offs = CORE_MOD,
1139 .slaves = omap2420_dss_venc_slaves,
1140 .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
1141 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1142 .flags = HWMOD_NO_IDLEST,
1146 static struct omap_hwmod_class_sysconfig i2c_sysc = {
1150 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1151 .sysc_fields = &omap_hwmod_sysc_type1,
1154 static struct omap_hwmod_class i2c_class = {
1159 static struct omap_i2c_dev_attr i2c_dev_attr;
1163 static struct omap_hwmod_ocp_if *omap2420_i2c1_slaves[] = {
1164 &omap2420_l4_core__i2c1,
1167 static struct omap_hwmod omap2420_i2c1_hwmod = {
1169 .mpu_irqs = omap2_i2c1_mpu_irqs,
1170 .sdma_reqs = omap2_i2c1_sdma_reqs,
1171 .main_clk = "i2c1_fck",
1174 .module_offs = CORE_MOD,
1176 .module_bit = OMAP2420_EN_I2C1_SHIFT,
1178 .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
1181 .slaves = omap2420_i2c1_slaves,
1182 .slaves_cnt = ARRAY_SIZE(omap2420_i2c1_slaves),
1183 .class = &i2c_class,
1184 .dev_attr = &i2c_dev_attr,
1185 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1186 .flags = HWMOD_16BIT_REG,
1191 static struct omap_hwmod_ocp_if *omap2420_i2c2_slaves[] = {
1192 &omap2420_l4_core__i2c2,
1195 static struct omap_hwmod omap2420_i2c2_hwmod = {
1197 .mpu_irqs = omap2_i2c2_mpu_irqs,
1198 .sdma_reqs = omap2_i2c2_sdma_reqs,
1199 .main_clk = "i2c2_fck",
1202 .module_offs = CORE_MOD,
1204 .module_bit = OMAP2420_EN_I2C2_SHIFT,
1206 .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
1209 .slaves = omap2420_i2c2_slaves,
1210 .slaves_cnt = ARRAY_SIZE(omap2420_i2c2_slaves),
1211 .class = &i2c_class,
1212 .dev_attr = &i2c_dev_attr,
1213 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1214 .flags = HWMOD_16BIT_REG,
1217 /* l4_wkup -> gpio1 */
1218 static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
1220 .pa_start = 0x48018000,
1221 .pa_end = 0x480181ff,
1222 .flags = ADDR_TYPE_RT
1227 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
1228 .master = &omap2420_l4_wkup_hwmod,
1229 .slave = &omap2420_gpio1_hwmod,
1231 .addr = omap2420_gpio1_addr_space,
1232 .user = OCP_USER_MPU | OCP_USER_SDMA,
1235 /* l4_wkup -> gpio2 */
1236 static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
1238 .pa_start = 0x4801a000,
1239 .pa_end = 0x4801a1ff,
1240 .flags = ADDR_TYPE_RT
1245 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
1246 .master = &omap2420_l4_wkup_hwmod,
1247 .slave = &omap2420_gpio2_hwmod,
1249 .addr = omap2420_gpio2_addr_space,
1250 .user = OCP_USER_MPU | OCP_USER_SDMA,
1253 /* l4_wkup -> gpio3 */
1254 static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
1256 .pa_start = 0x4801c000,
1257 .pa_end = 0x4801c1ff,
1258 .flags = ADDR_TYPE_RT
1263 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
1264 .master = &omap2420_l4_wkup_hwmod,
1265 .slave = &omap2420_gpio3_hwmod,
1267 .addr = omap2420_gpio3_addr_space,
1268 .user = OCP_USER_MPU | OCP_USER_SDMA,
1271 /* l4_wkup -> gpio4 */
1272 static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
1274 .pa_start = 0x4801e000,
1275 .pa_end = 0x4801e1ff,
1276 .flags = ADDR_TYPE_RT
1281 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
1282 .master = &omap2420_l4_wkup_hwmod,
1283 .slave = &omap2420_gpio4_hwmod,
1285 .addr = omap2420_gpio4_addr_space,
1286 .user = OCP_USER_MPU | OCP_USER_SDMA,
1290 static struct omap_gpio_dev_attr gpio_dev_attr = {
1295 static struct omap_hwmod_class_sysconfig omap242x_gpio_sysc = {
1297 .sysc_offs = 0x0010,
1298 .syss_offs = 0x0014,
1299 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1300 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1301 SYSS_HAS_RESET_STATUS),
1302 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1303 .sysc_fields = &omap_hwmod_sysc_type1,
1308 * general purpose io module
1310 static struct omap_hwmod_class omap242x_gpio_hwmod_class = {
1312 .sysc = &omap242x_gpio_sysc,
1317 static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
1318 &omap2420_l4_wkup__gpio1,
1321 static struct omap_hwmod omap2420_gpio1_hwmod = {
1323 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1324 .mpu_irqs = omap2_gpio1_irqs,
1325 .main_clk = "gpios_fck",
1329 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1330 .module_offs = WKUP_MOD,
1332 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1335 .slaves = omap2420_gpio1_slaves,
1336 .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
1337 .class = &omap242x_gpio_hwmod_class,
1338 .dev_attr = &gpio_dev_attr,
1339 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1343 static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
1344 &omap2420_l4_wkup__gpio2,
1347 static struct omap_hwmod omap2420_gpio2_hwmod = {
1349 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1350 .mpu_irqs = omap2_gpio2_irqs,
1351 .main_clk = "gpios_fck",
1355 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1356 .module_offs = WKUP_MOD,
1358 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1361 .slaves = omap2420_gpio2_slaves,
1362 .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
1363 .class = &omap242x_gpio_hwmod_class,
1364 .dev_attr = &gpio_dev_attr,
1365 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1369 static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
1370 &omap2420_l4_wkup__gpio3,
1373 static struct omap_hwmod omap2420_gpio3_hwmod = {
1375 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1376 .mpu_irqs = omap2_gpio3_irqs,
1377 .main_clk = "gpios_fck",
1381 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1382 .module_offs = WKUP_MOD,
1384 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1387 .slaves = omap2420_gpio3_slaves,
1388 .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
1389 .class = &omap242x_gpio_hwmod_class,
1390 .dev_attr = &gpio_dev_attr,
1391 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1395 static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
1396 &omap2420_l4_wkup__gpio4,
1399 static struct omap_hwmod omap2420_gpio4_hwmod = {
1401 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1402 .mpu_irqs = omap2_gpio4_irqs,
1403 .main_clk = "gpios_fck",
1407 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1408 .module_offs = WKUP_MOD,
1410 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1413 .slaves = omap2420_gpio4_slaves,
1414 .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
1415 .class = &omap242x_gpio_hwmod_class,
1416 .dev_attr = &gpio_dev_attr,
1417 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1421 static struct omap_hwmod_class_sysconfig omap2420_dma_sysc = {
1423 .sysc_offs = 0x002c,
1424 .syss_offs = 0x0028,
1425 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
1426 SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
1427 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1428 .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1429 .sysc_fields = &omap_hwmod_sysc_type1,
1432 static struct omap_hwmod_class omap2420_dma_hwmod_class = {
1434 .sysc = &omap2420_dma_sysc,
1437 /* dma attributes */
1438 static struct omap_dma_dev_attr dma_dev_attr = {
1439 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1440 IS_CSSA_32 | IS_CDSA_32,
1444 /* dma_system -> L3 */
1445 static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
1446 .master = &omap2420_dma_system_hwmod,
1447 .slave = &omap2420_l3_main_hwmod,
1448 .clk = "core_l3_ck",
1449 .user = OCP_USER_MPU | OCP_USER_SDMA,
1452 /* dma_system master ports */
1453 static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
1454 &omap2420_dma_system__l3,
1457 /* l4_core -> dma_system */
1458 static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
1459 .master = &omap2420_l4_core_hwmod,
1460 .slave = &omap2420_dma_system_hwmod,
1462 .addr = omap2_dma_system_addrs,
1463 .user = OCP_USER_MPU | OCP_USER_SDMA,
1466 /* dma_system slave ports */
1467 static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
1468 &omap2420_l4_core__dma_system,
1471 static struct omap_hwmod omap2420_dma_system_hwmod = {
1473 .class = &omap2420_dma_hwmod_class,
1474 .mpu_irqs = omap2_dma_system_irqs,
1475 .main_clk = "core_l3_ck",
1476 .slaves = omap2420_dma_system_slaves,
1477 .slaves_cnt = ARRAY_SIZE(omap2420_dma_system_slaves),
1478 .masters = omap2420_dma_system_masters,
1479 .masters_cnt = ARRAY_SIZE(omap2420_dma_system_masters),
1480 .dev_attr = &dma_dev_attr,
1481 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1482 .flags = HWMOD_NO_IDLEST,
1487 * mailbox module allowing communication between the on-chip processors
1488 * using a queued mailbox-interrupt mechanism.
1491 static struct omap_hwmod_class_sysconfig omap2420_mailbox_sysc = {
1495 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1496 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1497 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1498 .sysc_fields = &omap_hwmod_sysc_type1,
1501 static struct omap_hwmod_class omap2420_mailbox_hwmod_class = {
1503 .sysc = &omap2420_mailbox_sysc,
1507 static struct omap_hwmod omap2420_mailbox_hwmod;
1508 static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
1509 { .name = "dsp", .irq = 26 },
1510 { .name = "iva", .irq = 34 },
1514 /* l4_core -> mailbox */
1515 static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
1516 .master = &omap2420_l4_core_hwmod,
1517 .slave = &omap2420_mailbox_hwmod,
1518 .addr = omap2_mailbox_addrs,
1519 .user = OCP_USER_MPU | OCP_USER_SDMA,
1522 /* mailbox slave ports */
1523 static struct omap_hwmod_ocp_if *omap2420_mailbox_slaves[] = {
1524 &omap2420_l4_core__mailbox,
1527 static struct omap_hwmod omap2420_mailbox_hwmod = {
1529 .class = &omap2420_mailbox_hwmod_class,
1530 .mpu_irqs = omap2420_mailbox_irqs,
1531 .main_clk = "mailboxes_ick",
1535 .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
1536 .module_offs = CORE_MOD,
1538 .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
1541 .slaves = omap2420_mailbox_slaves,
1542 .slaves_cnt = ARRAY_SIZE(omap2420_mailbox_slaves),
1543 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1548 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1552 static struct omap_hwmod_class_sysconfig omap2420_mcspi_sysc = {
1554 .sysc_offs = 0x0010,
1555 .syss_offs = 0x0014,
1556 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1557 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1558 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1559 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1560 .sysc_fields = &omap_hwmod_sysc_type1,
1563 static struct omap_hwmod_class omap2420_mcspi_class = {
1565 .sysc = &omap2420_mcspi_sysc,
1566 .rev = OMAP2_MCSPI_REV,
1570 static struct omap_hwmod_ocp_if *omap2420_mcspi1_slaves[] = {
1571 &omap2420_l4_core__mcspi1,
1574 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1575 .num_chipselect = 4,
1578 static struct omap_hwmod omap2420_mcspi1_hwmod = {
1579 .name = "mcspi1_hwmod",
1580 .mpu_irqs = omap2_mcspi1_mpu_irqs,
1581 .sdma_reqs = omap2_mcspi1_sdma_reqs,
1582 .main_clk = "mcspi1_fck",
1585 .module_offs = CORE_MOD,
1587 .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
1589 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
1592 .slaves = omap2420_mcspi1_slaves,
1593 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi1_slaves),
1594 .class = &omap2420_mcspi_class,
1595 .dev_attr = &omap_mcspi1_dev_attr,
1596 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1600 static struct omap_hwmod_ocp_if *omap2420_mcspi2_slaves[] = {
1601 &omap2420_l4_core__mcspi2,
1604 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1605 .num_chipselect = 2,
1608 static struct omap_hwmod omap2420_mcspi2_hwmod = {
1609 .name = "mcspi2_hwmod",
1610 .mpu_irqs = omap2_mcspi2_mpu_irqs,
1611 .sdma_reqs = omap2_mcspi2_sdma_reqs,
1612 .main_clk = "mcspi2_fck",
1615 .module_offs = CORE_MOD,
1617 .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
1619 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
1622 .slaves = omap2420_mcspi2_slaves,
1623 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi2_slaves),
1624 .class = &omap2420_mcspi_class,
1625 .dev_attr = &omap_mcspi2_dev_attr,
1626 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1631 * multi channel buffered serial port controller
1634 static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
1639 static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
1640 { .name = "tx", .irq = 59 },
1641 { .name = "rx", .irq = 60 },
1645 /* l4_core -> mcbsp1 */
1646 static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
1647 .master = &omap2420_l4_core_hwmod,
1648 .slave = &omap2420_mcbsp1_hwmod,
1649 .clk = "mcbsp1_ick",
1650 .addr = omap2_mcbsp1_addrs,
1651 .user = OCP_USER_MPU | OCP_USER_SDMA,
1654 /* mcbsp1 slave ports */
1655 static struct omap_hwmod_ocp_if *omap2420_mcbsp1_slaves[] = {
1656 &omap2420_l4_core__mcbsp1,
1659 static struct omap_hwmod omap2420_mcbsp1_hwmod = {
1661 .class = &omap2420_mcbsp_hwmod_class,
1662 .mpu_irqs = omap2420_mcbsp1_irqs,
1663 .sdma_reqs = omap2_mcbsp1_sdma_reqs,
1664 .main_clk = "mcbsp1_fck",
1668 .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
1669 .module_offs = CORE_MOD,
1671 .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
1674 .slaves = omap2420_mcbsp1_slaves,
1675 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp1_slaves),
1676 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1680 static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
1681 { .name = "tx", .irq = 62 },
1682 { .name = "rx", .irq = 63 },
1686 /* l4_core -> mcbsp2 */
1687 static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
1688 .master = &omap2420_l4_core_hwmod,
1689 .slave = &omap2420_mcbsp2_hwmod,
1690 .clk = "mcbsp2_ick",
1691 .addr = omap2xxx_mcbsp2_addrs,
1692 .user = OCP_USER_MPU | OCP_USER_SDMA,
1695 /* mcbsp2 slave ports */
1696 static struct omap_hwmod_ocp_if *omap2420_mcbsp2_slaves[] = {
1697 &omap2420_l4_core__mcbsp2,
1700 static struct omap_hwmod omap2420_mcbsp2_hwmod = {
1702 .class = &omap2420_mcbsp_hwmod_class,
1703 .mpu_irqs = omap2420_mcbsp2_irqs,
1704 .sdma_reqs = omap2_mcbsp2_sdma_reqs,
1705 .main_clk = "mcbsp2_fck",
1709 .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
1710 .module_offs = CORE_MOD,
1712 .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
1715 .slaves = omap2420_mcbsp2_slaves,
1716 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp2_slaves),
1717 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1720 static __initdata struct omap_hwmod *omap2420_hwmods[] = {
1721 &omap2420_l3_main_hwmod,
1722 &omap2420_l4_core_hwmod,
1723 &omap2420_l4_wkup_hwmod,
1724 &omap2420_mpu_hwmod,
1725 &omap2420_iva_hwmod,
1727 &omap2420_timer1_hwmod,
1728 &omap2420_timer2_hwmod,
1729 &omap2420_timer3_hwmod,
1730 &omap2420_timer4_hwmod,
1731 &omap2420_timer5_hwmod,
1732 &omap2420_timer6_hwmod,
1733 &omap2420_timer7_hwmod,
1734 &omap2420_timer8_hwmod,
1735 &omap2420_timer9_hwmod,
1736 &omap2420_timer10_hwmod,
1737 &omap2420_timer11_hwmod,
1738 &omap2420_timer12_hwmod,
1740 &omap2420_wd_timer2_hwmod,
1741 &omap2420_uart1_hwmod,
1742 &omap2420_uart2_hwmod,
1743 &omap2420_uart3_hwmod,
1745 &omap2420_dss_core_hwmod,
1746 &omap2420_dss_dispc_hwmod,
1747 &omap2420_dss_rfbi_hwmod,
1748 &omap2420_dss_venc_hwmod,
1750 &omap2420_i2c1_hwmod,
1751 &omap2420_i2c2_hwmod,
1754 &omap2420_gpio1_hwmod,
1755 &omap2420_gpio2_hwmod,
1756 &omap2420_gpio3_hwmod,
1757 &omap2420_gpio4_hwmod,
1759 /* dma_system class*/
1760 &omap2420_dma_system_hwmod,
1763 &omap2420_mailbox_hwmod,
1766 &omap2420_mcbsp1_hwmod,
1767 &omap2420_mcbsp2_hwmod,
1770 &omap2420_mcspi1_hwmod,
1771 &omap2420_mcspi2_hwmod,
1775 int __init omap2420_hwmod_init(void)
1777 return omap_hwmod_register(omap2420_hwmods);