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_dma_info uart1_sdma_reqs[] = {
832 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
833 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
836 static struct omap_hwmod_ocp_if *omap2420_uart1_slaves[] = {
837 &omap2_l4_core__uart1,
840 static struct omap_hwmod omap2420_uart1_hwmod = {
842 .mpu_irqs = omap2_uart1_mpu_irqs,
843 .sdma_reqs = uart1_sdma_reqs,
844 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
845 .main_clk = "uart1_fck",
848 .module_offs = CORE_MOD,
850 .module_bit = OMAP24XX_EN_UART1_SHIFT,
852 .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT,
855 .slaves = omap2420_uart1_slaves,
856 .slaves_cnt = ARRAY_SIZE(omap2420_uart1_slaves),
857 .class = &uart_class,
858 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
863 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
864 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
865 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
868 static struct omap_hwmod_ocp_if *omap2420_uart2_slaves[] = {
869 &omap2_l4_core__uart2,
872 static struct omap_hwmod omap2420_uart2_hwmod = {
874 .mpu_irqs = omap2_uart2_mpu_irqs,
875 .sdma_reqs = uart2_sdma_reqs,
876 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
877 .main_clk = "uart2_fck",
880 .module_offs = CORE_MOD,
882 .module_bit = OMAP24XX_EN_UART2_SHIFT,
884 .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT,
887 .slaves = omap2420_uart2_slaves,
888 .slaves_cnt = ARRAY_SIZE(omap2420_uart2_slaves),
889 .class = &uart_class,
890 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
895 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
896 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
897 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
900 static struct omap_hwmod_ocp_if *omap2420_uart3_slaves[] = {
901 &omap2_l4_core__uart3,
904 static struct omap_hwmod omap2420_uart3_hwmod = {
906 .mpu_irqs = omap2_uart3_mpu_irqs,
907 .sdma_reqs = uart3_sdma_reqs,
908 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
909 .main_clk = "uart3_fck",
912 .module_offs = CORE_MOD,
914 .module_bit = OMAP24XX_EN_UART3_SHIFT,
916 .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT,
919 .slaves = omap2420_uart3_slaves,
920 .slaves_cnt = ARRAY_SIZE(omap2420_uart3_slaves),
921 .class = &uart_class,
922 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
930 static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
934 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
935 .sysc_fields = &omap_hwmod_sysc_type1,
938 static struct omap_hwmod_class omap2420_dss_hwmod_class = {
940 .sysc = &omap2420_dss_sysc,
943 static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
944 { .name = "dispc", .dma_req = 5 },
948 /* dss master ports */
949 static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
954 static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
955 .master = &omap2420_l4_core_hwmod,
956 .slave = &omap2420_dss_core_hwmod,
958 .addr = omap2_dss_addrs,
961 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
962 .flags = OMAP_FIREWALL_L4,
965 .user = OCP_USER_MPU | OCP_USER_SDMA,
968 /* dss slave ports */
969 static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
970 &omap2420_l4_core__dss,
973 static struct omap_hwmod_opt_clk dss_opt_clks[] = {
974 { .role = "tv_clk", .clk = "dss_54m_fck" },
975 { .role = "sys_clk", .clk = "dss2_fck" },
978 static struct omap_hwmod omap2420_dss_core_hwmod = {
980 .class = &omap2420_dss_hwmod_class,
981 .main_clk = "dss1_fck", /* instead of dss_fck */
982 .sdma_reqs = omap2420_dss_sdma_chs,
983 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs),
987 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
988 .module_offs = CORE_MOD,
990 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
993 .opt_clks = dss_opt_clks,
994 .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
995 .slaves = omap2420_dss_slaves,
996 .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
997 .masters = omap2420_dss_masters,
998 .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
999 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1000 .flags = HWMOD_NO_IDLEST,
1005 * display controller
1008 static struct omap_hwmod_class_sysconfig omap2420_dispc_sysc = {
1010 .sysc_offs = 0x0010,
1011 .syss_offs = 0x0014,
1012 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
1013 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1014 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1015 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1016 .sysc_fields = &omap_hwmod_sysc_type1,
1019 static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
1021 .sysc = &omap2420_dispc_sysc,
1024 /* l4_core -> dss_dispc */
1025 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
1026 .master = &omap2420_l4_core_hwmod,
1027 .slave = &omap2420_dss_dispc_hwmod,
1029 .addr = omap2_dss_dispc_addrs,
1032 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION,
1033 .flags = OMAP_FIREWALL_L4,
1036 .user = OCP_USER_MPU | OCP_USER_SDMA,
1039 /* dss_dispc slave ports */
1040 static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
1041 &omap2420_l4_core__dss_dispc,
1044 static struct omap_hwmod omap2420_dss_dispc_hwmod = {
1045 .name = "dss_dispc",
1046 .class = &omap2420_dispc_hwmod_class,
1047 .mpu_irqs = omap2_dispc_irqs,
1048 .main_clk = "dss1_fck",
1052 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1053 .module_offs = CORE_MOD,
1055 .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
1058 .slaves = omap2420_dss_dispc_slaves,
1059 .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
1060 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1061 .flags = HWMOD_NO_IDLEST,
1066 * remote frame buffer interface
1069 static struct omap_hwmod_class_sysconfig omap2420_rfbi_sysc = {
1071 .sysc_offs = 0x0010,
1072 .syss_offs = 0x0014,
1073 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1075 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1076 .sysc_fields = &omap_hwmod_sysc_type1,
1079 static struct omap_hwmod_class omap2420_rfbi_hwmod_class = {
1081 .sysc = &omap2420_rfbi_sysc,
1084 /* l4_core -> dss_rfbi */
1085 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
1086 .master = &omap2420_l4_core_hwmod,
1087 .slave = &omap2420_dss_rfbi_hwmod,
1089 .addr = omap2_dss_rfbi_addrs,
1092 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
1093 .flags = OMAP_FIREWALL_L4,
1096 .user = OCP_USER_MPU | OCP_USER_SDMA,
1099 /* dss_rfbi slave ports */
1100 static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
1101 &omap2420_l4_core__dss_rfbi,
1104 static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
1106 .class = &omap2420_rfbi_hwmod_class,
1107 .main_clk = "dss1_fck",
1111 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1112 .module_offs = CORE_MOD,
1115 .slaves = omap2420_dss_rfbi_slaves,
1116 .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
1117 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1118 .flags = HWMOD_NO_IDLEST,
1126 static struct omap_hwmod_class omap2420_venc_hwmod_class = {
1130 /* l4_core -> dss_venc */
1131 static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
1132 .master = &omap2420_l4_core_hwmod,
1133 .slave = &omap2420_dss_venc_hwmod,
1134 .clk = "dss_54m_fck",
1135 .addr = omap2_dss_venc_addrs,
1138 .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION,
1139 .flags = OMAP_FIREWALL_L4,
1142 .flags = OCPIF_SWSUP_IDLE,
1143 .user = OCP_USER_MPU | OCP_USER_SDMA,
1146 /* dss_venc slave ports */
1147 static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
1148 &omap2420_l4_core__dss_venc,
1151 static struct omap_hwmod omap2420_dss_venc_hwmod = {
1153 .class = &omap2420_venc_hwmod_class,
1154 .main_clk = "dss1_fck",
1158 .module_bit = OMAP24XX_EN_DSS1_SHIFT,
1159 .module_offs = CORE_MOD,
1162 .slaves = omap2420_dss_venc_slaves,
1163 .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
1164 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1165 .flags = HWMOD_NO_IDLEST,
1169 static struct omap_hwmod_class_sysconfig i2c_sysc = {
1173 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1174 .sysc_fields = &omap_hwmod_sysc_type1,
1177 static struct omap_hwmod_class i2c_class = {
1182 static struct omap_i2c_dev_attr i2c_dev_attr;
1186 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
1187 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
1188 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
1191 static struct omap_hwmod_ocp_if *omap2420_i2c1_slaves[] = {
1192 &omap2420_l4_core__i2c1,
1195 static struct omap_hwmod omap2420_i2c1_hwmod = {
1197 .mpu_irqs = omap2_i2c1_mpu_irqs,
1198 .sdma_reqs = i2c1_sdma_reqs,
1199 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
1200 .main_clk = "i2c1_fck",
1203 .module_offs = CORE_MOD,
1205 .module_bit = OMAP2420_EN_I2C1_SHIFT,
1207 .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT,
1210 .slaves = omap2420_i2c1_slaves,
1211 .slaves_cnt = ARRAY_SIZE(omap2420_i2c1_slaves),
1212 .class = &i2c_class,
1213 .dev_attr = &i2c_dev_attr,
1214 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1215 .flags = HWMOD_16BIT_REG,
1220 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
1221 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
1222 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
1225 static struct omap_hwmod_ocp_if *omap2420_i2c2_slaves[] = {
1226 &omap2420_l4_core__i2c2,
1229 static struct omap_hwmod omap2420_i2c2_hwmod = {
1231 .mpu_irqs = omap2_i2c2_mpu_irqs,
1232 .sdma_reqs = i2c2_sdma_reqs,
1233 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
1234 .main_clk = "i2c2_fck",
1237 .module_offs = CORE_MOD,
1239 .module_bit = OMAP2420_EN_I2C2_SHIFT,
1241 .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT,
1244 .slaves = omap2420_i2c2_slaves,
1245 .slaves_cnt = ARRAY_SIZE(omap2420_i2c2_slaves),
1246 .class = &i2c_class,
1247 .dev_attr = &i2c_dev_attr,
1248 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1249 .flags = HWMOD_16BIT_REG,
1252 /* l4_wkup -> gpio1 */
1253 static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
1255 .pa_start = 0x48018000,
1256 .pa_end = 0x480181ff,
1257 .flags = ADDR_TYPE_RT
1262 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
1263 .master = &omap2420_l4_wkup_hwmod,
1264 .slave = &omap2420_gpio1_hwmod,
1266 .addr = omap2420_gpio1_addr_space,
1267 .user = OCP_USER_MPU | OCP_USER_SDMA,
1270 /* l4_wkup -> gpio2 */
1271 static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
1273 .pa_start = 0x4801a000,
1274 .pa_end = 0x4801a1ff,
1275 .flags = ADDR_TYPE_RT
1280 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
1281 .master = &omap2420_l4_wkup_hwmod,
1282 .slave = &omap2420_gpio2_hwmod,
1284 .addr = omap2420_gpio2_addr_space,
1285 .user = OCP_USER_MPU | OCP_USER_SDMA,
1288 /* l4_wkup -> gpio3 */
1289 static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
1291 .pa_start = 0x4801c000,
1292 .pa_end = 0x4801c1ff,
1293 .flags = ADDR_TYPE_RT
1298 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
1299 .master = &omap2420_l4_wkup_hwmod,
1300 .slave = &omap2420_gpio3_hwmod,
1302 .addr = omap2420_gpio3_addr_space,
1303 .user = OCP_USER_MPU | OCP_USER_SDMA,
1306 /* l4_wkup -> gpio4 */
1307 static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
1309 .pa_start = 0x4801e000,
1310 .pa_end = 0x4801e1ff,
1311 .flags = ADDR_TYPE_RT
1316 static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
1317 .master = &omap2420_l4_wkup_hwmod,
1318 .slave = &omap2420_gpio4_hwmod,
1320 .addr = omap2420_gpio4_addr_space,
1321 .user = OCP_USER_MPU | OCP_USER_SDMA,
1325 static struct omap_gpio_dev_attr gpio_dev_attr = {
1330 static struct omap_hwmod_class_sysconfig omap242x_gpio_sysc = {
1332 .sysc_offs = 0x0010,
1333 .syss_offs = 0x0014,
1334 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
1335 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
1336 SYSS_HAS_RESET_STATUS),
1337 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1338 .sysc_fields = &omap_hwmod_sysc_type1,
1343 * general purpose io module
1345 static struct omap_hwmod_class omap242x_gpio_hwmod_class = {
1347 .sysc = &omap242x_gpio_sysc,
1352 static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
1353 &omap2420_l4_wkup__gpio1,
1356 static struct omap_hwmod omap2420_gpio1_hwmod = {
1358 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1359 .mpu_irqs = omap2_gpio1_irqs,
1360 .main_clk = "gpios_fck",
1364 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1365 .module_offs = WKUP_MOD,
1367 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1370 .slaves = omap2420_gpio1_slaves,
1371 .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
1372 .class = &omap242x_gpio_hwmod_class,
1373 .dev_attr = &gpio_dev_attr,
1374 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1378 static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
1379 &omap2420_l4_wkup__gpio2,
1382 static struct omap_hwmod omap2420_gpio2_hwmod = {
1384 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1385 .mpu_irqs = omap2_gpio2_irqs,
1386 .main_clk = "gpios_fck",
1390 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1391 .module_offs = WKUP_MOD,
1393 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1396 .slaves = omap2420_gpio2_slaves,
1397 .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
1398 .class = &omap242x_gpio_hwmod_class,
1399 .dev_attr = &gpio_dev_attr,
1400 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1404 static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
1405 &omap2420_l4_wkup__gpio3,
1408 static struct omap_hwmod omap2420_gpio3_hwmod = {
1410 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1411 .mpu_irqs = omap2_gpio3_irqs,
1412 .main_clk = "gpios_fck",
1416 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1417 .module_offs = WKUP_MOD,
1419 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1422 .slaves = omap2420_gpio3_slaves,
1423 .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
1424 .class = &omap242x_gpio_hwmod_class,
1425 .dev_attr = &gpio_dev_attr,
1426 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1430 static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
1431 &omap2420_l4_wkup__gpio4,
1434 static struct omap_hwmod omap2420_gpio4_hwmod = {
1436 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
1437 .mpu_irqs = omap2_gpio4_irqs,
1438 .main_clk = "gpios_fck",
1442 .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
1443 .module_offs = WKUP_MOD,
1445 .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
1448 .slaves = omap2420_gpio4_slaves,
1449 .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
1450 .class = &omap242x_gpio_hwmod_class,
1451 .dev_attr = &gpio_dev_attr,
1452 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1456 static struct omap_hwmod_class_sysconfig omap2420_dma_sysc = {
1458 .sysc_offs = 0x002c,
1459 .syss_offs = 0x0028,
1460 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_MIDLEMODE |
1461 SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_EMUFREE |
1462 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1463 .idlemodes = (MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1464 .sysc_fields = &omap_hwmod_sysc_type1,
1467 static struct omap_hwmod_class omap2420_dma_hwmod_class = {
1469 .sysc = &omap2420_dma_sysc,
1472 /* dma attributes */
1473 static struct omap_dma_dev_attr dma_dev_attr = {
1474 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1475 IS_CSSA_32 | IS_CDSA_32,
1479 /* dma_system -> L3 */
1480 static struct omap_hwmod_ocp_if omap2420_dma_system__l3 = {
1481 .master = &omap2420_dma_system_hwmod,
1482 .slave = &omap2420_l3_main_hwmod,
1483 .clk = "core_l3_ck",
1484 .user = OCP_USER_MPU | OCP_USER_SDMA,
1487 /* dma_system master ports */
1488 static struct omap_hwmod_ocp_if *omap2420_dma_system_masters[] = {
1489 &omap2420_dma_system__l3,
1492 /* l4_core -> dma_system */
1493 static struct omap_hwmod_ocp_if omap2420_l4_core__dma_system = {
1494 .master = &omap2420_l4_core_hwmod,
1495 .slave = &omap2420_dma_system_hwmod,
1497 .addr = omap2_dma_system_addrs,
1498 .user = OCP_USER_MPU | OCP_USER_SDMA,
1501 /* dma_system slave ports */
1502 static struct omap_hwmod_ocp_if *omap2420_dma_system_slaves[] = {
1503 &omap2420_l4_core__dma_system,
1506 static struct omap_hwmod omap2420_dma_system_hwmod = {
1508 .class = &omap2420_dma_hwmod_class,
1509 .mpu_irqs = omap2_dma_system_irqs,
1510 .main_clk = "core_l3_ck",
1511 .slaves = omap2420_dma_system_slaves,
1512 .slaves_cnt = ARRAY_SIZE(omap2420_dma_system_slaves),
1513 .masters = omap2420_dma_system_masters,
1514 .masters_cnt = ARRAY_SIZE(omap2420_dma_system_masters),
1515 .dev_attr = &dma_dev_attr,
1516 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1517 .flags = HWMOD_NO_IDLEST,
1522 * mailbox module allowing communication between the on-chip processors
1523 * using a queued mailbox-interrupt mechanism.
1526 static struct omap_hwmod_class_sysconfig omap2420_mailbox_sysc = {
1530 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1531 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
1532 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1533 .sysc_fields = &omap_hwmod_sysc_type1,
1536 static struct omap_hwmod_class omap2420_mailbox_hwmod_class = {
1538 .sysc = &omap2420_mailbox_sysc,
1542 static struct omap_hwmod omap2420_mailbox_hwmod;
1543 static struct omap_hwmod_irq_info omap2420_mailbox_irqs[] = {
1544 { .name = "dsp", .irq = 26 },
1545 { .name = "iva", .irq = 34 },
1549 /* l4_core -> mailbox */
1550 static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = {
1551 .master = &omap2420_l4_core_hwmod,
1552 .slave = &omap2420_mailbox_hwmod,
1553 .addr = omap2_mailbox_addrs,
1554 .user = OCP_USER_MPU | OCP_USER_SDMA,
1557 /* mailbox slave ports */
1558 static struct omap_hwmod_ocp_if *omap2420_mailbox_slaves[] = {
1559 &omap2420_l4_core__mailbox,
1562 static struct omap_hwmod omap2420_mailbox_hwmod = {
1564 .class = &omap2420_mailbox_hwmod_class,
1565 .mpu_irqs = omap2420_mailbox_irqs,
1566 .main_clk = "mailboxes_ick",
1570 .module_bit = OMAP24XX_EN_MAILBOXES_SHIFT,
1571 .module_offs = CORE_MOD,
1573 .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
1576 .slaves = omap2420_mailbox_slaves,
1577 .slaves_cnt = ARRAY_SIZE(omap2420_mailbox_slaves),
1578 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1583 * multichannel serial port interface (mcspi) / master/slave synchronous serial
1587 static struct omap_hwmod_class_sysconfig omap2420_mcspi_sysc = {
1589 .sysc_offs = 0x0010,
1590 .syss_offs = 0x0014,
1591 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
1592 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
1593 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
1594 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1595 .sysc_fields = &omap_hwmod_sysc_type1,
1598 static struct omap_hwmod_class omap2420_mcspi_class = {
1600 .sysc = &omap2420_mcspi_sysc,
1601 .rev = OMAP2_MCSPI_REV,
1605 static struct omap_hwmod_dma_info omap2420_mcspi1_sdma_reqs[] = {
1606 { .name = "tx0", .dma_req = 35 }, /* DMA_SPI1_TX0 */
1607 { .name = "rx0", .dma_req = 36 }, /* DMA_SPI1_RX0 */
1608 { .name = "tx1", .dma_req = 37 }, /* DMA_SPI1_TX1 */
1609 { .name = "rx1", .dma_req = 38 }, /* DMA_SPI1_RX1 */
1610 { .name = "tx2", .dma_req = 39 }, /* DMA_SPI1_TX2 */
1611 { .name = "rx2", .dma_req = 40 }, /* DMA_SPI1_RX2 */
1612 { .name = "tx3", .dma_req = 41 }, /* DMA_SPI1_TX3 */
1613 { .name = "rx3", .dma_req = 42 }, /* DMA_SPI1_RX3 */
1616 static struct omap_hwmod_ocp_if *omap2420_mcspi1_slaves[] = {
1617 &omap2420_l4_core__mcspi1,
1620 static struct omap2_mcspi_dev_attr omap_mcspi1_dev_attr = {
1621 .num_chipselect = 4,
1624 static struct omap_hwmod omap2420_mcspi1_hwmod = {
1625 .name = "mcspi1_hwmod",
1626 .mpu_irqs = omap2_mcspi1_mpu_irqs,
1627 .sdma_reqs = omap2420_mcspi1_sdma_reqs,
1628 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcspi1_sdma_reqs),
1629 .main_clk = "mcspi1_fck",
1632 .module_offs = CORE_MOD,
1634 .module_bit = OMAP24XX_EN_MCSPI1_SHIFT,
1636 .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT,
1639 .slaves = omap2420_mcspi1_slaves,
1640 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi1_slaves),
1641 .class = &omap2420_mcspi_class,
1642 .dev_attr = &omap_mcspi1_dev_attr,
1643 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1647 static struct omap_hwmod_dma_info omap2420_mcspi2_sdma_reqs[] = {
1648 { .name = "tx0", .dma_req = 43 }, /* DMA_SPI2_TX0 */
1649 { .name = "rx0", .dma_req = 44 }, /* DMA_SPI2_RX0 */
1650 { .name = "tx1", .dma_req = 45 }, /* DMA_SPI2_TX1 */
1651 { .name = "rx1", .dma_req = 46 }, /* DMA_SPI2_RX1 */
1654 static struct omap_hwmod_ocp_if *omap2420_mcspi2_slaves[] = {
1655 &omap2420_l4_core__mcspi2,
1658 static struct omap2_mcspi_dev_attr omap_mcspi2_dev_attr = {
1659 .num_chipselect = 2,
1662 static struct omap_hwmod omap2420_mcspi2_hwmod = {
1663 .name = "mcspi2_hwmod",
1664 .mpu_irqs = omap2_mcspi2_mpu_irqs,
1665 .sdma_reqs = omap2420_mcspi2_sdma_reqs,
1666 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcspi2_sdma_reqs),
1667 .main_clk = "mcspi2_fck",
1670 .module_offs = CORE_MOD,
1672 .module_bit = OMAP24XX_EN_MCSPI2_SHIFT,
1674 .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT,
1677 .slaves = omap2420_mcspi2_slaves,
1678 .slaves_cnt = ARRAY_SIZE(omap2420_mcspi2_slaves),
1679 .class = &omap2420_mcspi_class,
1680 .dev_attr = &omap_mcspi2_dev_attr,
1681 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1686 * multi channel buffered serial port controller
1689 static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {
1694 static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {
1695 { .name = "tx", .irq = 59 },
1696 { .name = "rx", .irq = 60 },
1700 static struct omap_hwmod_dma_info omap2420_mcbsp1_sdma_chs[] = {
1701 { .name = "rx", .dma_req = 32 },
1702 { .name = "tx", .dma_req = 31 },
1705 /* l4_core -> mcbsp1 */
1706 static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = {
1707 .master = &omap2420_l4_core_hwmod,
1708 .slave = &omap2420_mcbsp1_hwmod,
1709 .clk = "mcbsp1_ick",
1710 .addr = omap2_mcbsp1_addrs,
1711 .user = OCP_USER_MPU | OCP_USER_SDMA,
1714 /* mcbsp1 slave ports */
1715 static struct omap_hwmod_ocp_if *omap2420_mcbsp1_slaves[] = {
1716 &omap2420_l4_core__mcbsp1,
1719 static struct omap_hwmod omap2420_mcbsp1_hwmod = {
1721 .class = &omap2420_mcbsp_hwmod_class,
1722 .mpu_irqs = omap2420_mcbsp1_irqs,
1723 .sdma_reqs = omap2420_mcbsp1_sdma_chs,
1724 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcbsp1_sdma_chs),
1725 .main_clk = "mcbsp1_fck",
1729 .module_bit = OMAP24XX_EN_MCBSP1_SHIFT,
1730 .module_offs = CORE_MOD,
1732 .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
1735 .slaves = omap2420_mcbsp1_slaves,
1736 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp1_slaves),
1737 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1741 static struct omap_hwmod_irq_info omap2420_mcbsp2_irqs[] = {
1742 { .name = "tx", .irq = 62 },
1743 { .name = "rx", .irq = 63 },
1747 static struct omap_hwmod_dma_info omap2420_mcbsp2_sdma_chs[] = {
1748 { .name = "rx", .dma_req = 34 },
1749 { .name = "tx", .dma_req = 33 },
1752 /* l4_core -> mcbsp2 */
1753 static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = {
1754 .master = &omap2420_l4_core_hwmod,
1755 .slave = &omap2420_mcbsp2_hwmod,
1756 .clk = "mcbsp2_ick",
1757 .addr = omap2xxx_mcbsp2_addrs,
1758 .user = OCP_USER_MPU | OCP_USER_SDMA,
1761 /* mcbsp2 slave ports */
1762 static struct omap_hwmod_ocp_if *omap2420_mcbsp2_slaves[] = {
1763 &omap2420_l4_core__mcbsp2,
1766 static struct omap_hwmod omap2420_mcbsp2_hwmod = {
1768 .class = &omap2420_mcbsp_hwmod_class,
1769 .mpu_irqs = omap2420_mcbsp2_irqs,
1770 .sdma_reqs = omap2420_mcbsp2_sdma_chs,
1771 .sdma_reqs_cnt = ARRAY_SIZE(omap2420_mcbsp2_sdma_chs),
1772 .main_clk = "mcbsp2_fck",
1776 .module_bit = OMAP24XX_EN_MCBSP2_SHIFT,
1777 .module_offs = CORE_MOD,
1779 .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
1782 .slaves = omap2420_mcbsp2_slaves,
1783 .slaves_cnt = ARRAY_SIZE(omap2420_mcbsp2_slaves),
1784 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
1787 static __initdata struct omap_hwmod *omap2420_hwmods[] = {
1788 &omap2420_l3_main_hwmod,
1789 &omap2420_l4_core_hwmod,
1790 &omap2420_l4_wkup_hwmod,
1791 &omap2420_mpu_hwmod,
1792 &omap2420_iva_hwmod,
1794 &omap2420_timer1_hwmod,
1795 &omap2420_timer2_hwmod,
1796 &omap2420_timer3_hwmod,
1797 &omap2420_timer4_hwmod,
1798 &omap2420_timer5_hwmod,
1799 &omap2420_timer6_hwmod,
1800 &omap2420_timer7_hwmod,
1801 &omap2420_timer8_hwmod,
1802 &omap2420_timer9_hwmod,
1803 &omap2420_timer10_hwmod,
1804 &omap2420_timer11_hwmod,
1805 &omap2420_timer12_hwmod,
1807 &omap2420_wd_timer2_hwmod,
1808 &omap2420_uart1_hwmod,
1809 &omap2420_uart2_hwmod,
1810 &omap2420_uart3_hwmod,
1812 &omap2420_dss_core_hwmod,
1813 &omap2420_dss_dispc_hwmod,
1814 &omap2420_dss_rfbi_hwmod,
1815 &omap2420_dss_venc_hwmod,
1817 &omap2420_i2c1_hwmod,
1818 &omap2420_i2c2_hwmod,
1821 &omap2420_gpio1_hwmod,
1822 &omap2420_gpio2_hwmod,
1823 &omap2420_gpio3_hwmod,
1824 &omap2420_gpio4_hwmod,
1826 /* dma_system class*/
1827 &omap2420_dma_system_hwmod,
1830 &omap2420_mailbox_hwmod,
1833 &omap2420_mcbsp1_hwmod,
1834 &omap2420_mcbsp2_hwmod,
1837 &omap2420_mcspi1_hwmod,
1838 &omap2420_mcspi2_hwmod,
1842 int __init omap2420_hwmod_init(void)
1844 return omap_hwmod_register(omap2420_hwmods);