OMAP3: PM: Adding smartreflex hwmod data
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / arm / mach-omap2 / omap_hwmod_3xxx_data.c
blob8d8181334f862d9b7e79f64328e7dcaf29e8d699
1 /*
2 * omap_hwmod_3xxx_data.c - hardware modules present on the OMAP3xxx chips
4 * Copyright (C) 2009-2010 Nokia Corporation
5 * Paul Walmsley
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 * The data in this file should be completely autogeneratable from
12 * the TI hardware database or other technical documentation.
14 * XXX these should be marked initdata for multi-OMAP kernels
16 #include <plat/omap_hwmod.h>
17 #include <mach/irqs.h>
18 #include <plat/cpu.h>
19 #include <plat/dma.h>
20 #include <plat/serial.h>
21 #include <plat/l4_3xxx.h>
22 #include <plat/i2c.h>
23 #include <plat/gpio.h>
24 #include <plat/smartreflex.h>
26 #include "omap_hwmod_common_data.h"
28 #include "prm-regbits-34xx.h"
29 #include "cm-regbits-34xx.h"
30 #include "wd_timer.h"
33 * OMAP3xxx 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
38 * elsewhere.
41 static struct omap_hwmod omap3xxx_mpu_hwmod;
42 static struct omap_hwmod omap3xxx_iva_hwmod;
43 static struct omap_hwmod omap3xxx_l3_main_hwmod;
44 static struct omap_hwmod omap3xxx_l4_core_hwmod;
45 static struct omap_hwmod omap3xxx_l4_per_hwmod;
46 static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
47 static struct omap_hwmod omap3xxx_i2c1_hwmod;
48 static struct omap_hwmod omap3xxx_i2c2_hwmod;
49 static struct omap_hwmod omap3xxx_i2c3_hwmod;
50 static struct omap_hwmod omap3xxx_gpio1_hwmod;
51 static struct omap_hwmod omap3xxx_gpio2_hwmod;
52 static struct omap_hwmod omap3xxx_gpio3_hwmod;
53 static struct omap_hwmod omap3xxx_gpio4_hwmod;
54 static struct omap_hwmod omap3xxx_gpio5_hwmod;
55 static struct omap_hwmod omap3xxx_gpio6_hwmod;
56 static struct omap_hwmod omap34xx_sr1_hwmod;
57 static struct omap_hwmod omap34xx_sr2_hwmod;
59 static struct omap_hwmod omap3xxx_dma_system_hwmod;
61 /* L3 -> L4_CORE interface */
62 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
63 .master = &omap3xxx_l3_main_hwmod,
64 .slave = &omap3xxx_l4_core_hwmod,
65 .user = OCP_USER_MPU | OCP_USER_SDMA,
68 /* L3 -> L4_PER interface */
69 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_per = {
70 .master = &omap3xxx_l3_main_hwmod,
71 .slave = &omap3xxx_l4_per_hwmod,
72 .user = OCP_USER_MPU | OCP_USER_SDMA,
75 /* MPU -> L3 interface */
76 static struct omap_hwmod_ocp_if omap3xxx_mpu__l3_main = {
77 .master = &omap3xxx_mpu_hwmod,
78 .slave = &omap3xxx_l3_main_hwmod,
79 .user = OCP_USER_MPU,
82 /* Slave interfaces on the L3 interconnect */
83 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
84 &omap3xxx_mpu__l3_main,
87 /* Master interfaces on the L3 interconnect */
88 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
89 &omap3xxx_l3_main__l4_core,
90 &omap3xxx_l3_main__l4_per,
93 /* L3 */
94 static struct omap_hwmod omap3xxx_l3_main_hwmod = {
95 .name = "l3_main",
96 .class = &l3_hwmod_class,
97 .masters = omap3xxx_l3_main_masters,
98 .masters_cnt = ARRAY_SIZE(omap3xxx_l3_main_masters),
99 .slaves = omap3xxx_l3_main_slaves,
100 .slaves_cnt = ARRAY_SIZE(omap3xxx_l3_main_slaves),
101 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
102 .flags = HWMOD_NO_IDLEST,
105 static struct omap_hwmod omap3xxx_l4_wkup_hwmod;
106 static struct omap_hwmod omap3xxx_uart1_hwmod;
107 static struct omap_hwmod omap3xxx_uart2_hwmod;
108 static struct omap_hwmod omap3xxx_uart3_hwmod;
109 static struct omap_hwmod omap3xxx_uart4_hwmod;
111 /* L4_CORE -> L4_WKUP interface */
112 static struct omap_hwmod_ocp_if omap3xxx_l4_core__l4_wkup = {
113 .master = &omap3xxx_l4_core_hwmod,
114 .slave = &omap3xxx_l4_wkup_hwmod,
115 .user = OCP_USER_MPU | OCP_USER_SDMA,
118 /* L4 CORE -> UART1 interface */
119 static struct omap_hwmod_addr_space omap3xxx_uart1_addr_space[] = {
121 .pa_start = OMAP3_UART1_BASE,
122 .pa_end = OMAP3_UART1_BASE + SZ_8K - 1,
123 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
127 static struct omap_hwmod_ocp_if omap3_l4_core__uart1 = {
128 .master = &omap3xxx_l4_core_hwmod,
129 .slave = &omap3xxx_uart1_hwmod,
130 .clk = "uart1_ick",
131 .addr = omap3xxx_uart1_addr_space,
132 .addr_cnt = ARRAY_SIZE(omap3xxx_uart1_addr_space),
133 .user = OCP_USER_MPU | OCP_USER_SDMA,
136 /* L4 CORE -> UART2 interface */
137 static struct omap_hwmod_addr_space omap3xxx_uart2_addr_space[] = {
139 .pa_start = OMAP3_UART2_BASE,
140 .pa_end = OMAP3_UART2_BASE + SZ_1K - 1,
141 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
145 static struct omap_hwmod_ocp_if omap3_l4_core__uart2 = {
146 .master = &omap3xxx_l4_core_hwmod,
147 .slave = &omap3xxx_uart2_hwmod,
148 .clk = "uart2_ick",
149 .addr = omap3xxx_uart2_addr_space,
150 .addr_cnt = ARRAY_SIZE(omap3xxx_uart2_addr_space),
151 .user = OCP_USER_MPU | OCP_USER_SDMA,
154 /* L4 PER -> UART3 interface */
155 static struct omap_hwmod_addr_space omap3xxx_uart3_addr_space[] = {
157 .pa_start = OMAP3_UART3_BASE,
158 .pa_end = OMAP3_UART3_BASE + SZ_1K - 1,
159 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
163 static struct omap_hwmod_ocp_if omap3_l4_per__uart3 = {
164 .master = &omap3xxx_l4_per_hwmod,
165 .slave = &omap3xxx_uart3_hwmod,
166 .clk = "uart3_ick",
167 .addr = omap3xxx_uart3_addr_space,
168 .addr_cnt = ARRAY_SIZE(omap3xxx_uart3_addr_space),
169 .user = OCP_USER_MPU | OCP_USER_SDMA,
172 /* L4 PER -> UART4 interface */
173 static struct omap_hwmod_addr_space omap3xxx_uart4_addr_space[] = {
175 .pa_start = OMAP3_UART4_BASE,
176 .pa_end = OMAP3_UART4_BASE + SZ_1K - 1,
177 .flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,
181 static struct omap_hwmod_ocp_if omap3_l4_per__uart4 = {
182 .master = &omap3xxx_l4_per_hwmod,
183 .slave = &omap3xxx_uart4_hwmod,
184 .clk = "uart4_ick",
185 .addr = omap3xxx_uart4_addr_space,
186 .addr_cnt = ARRAY_SIZE(omap3xxx_uart4_addr_space),
187 .user = OCP_USER_MPU | OCP_USER_SDMA,
190 /* I2C IP block address space length (in bytes) */
191 #define OMAP2_I2C_AS_LEN 128
193 /* L4 CORE -> I2C1 interface */
194 static struct omap_hwmod_addr_space omap3xxx_i2c1_addr_space[] = {
196 .pa_start = 0x48070000,
197 .pa_end = 0x48070000 + OMAP2_I2C_AS_LEN - 1,
198 .flags = ADDR_TYPE_RT,
202 static struct omap_hwmod_ocp_if omap3_l4_core__i2c1 = {
203 .master = &omap3xxx_l4_core_hwmod,
204 .slave = &omap3xxx_i2c1_hwmod,
205 .clk = "i2c1_ick",
206 .addr = omap3xxx_i2c1_addr_space,
207 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c1_addr_space),
208 .fw = {
209 .omap2 = {
210 .l4_fw_region = OMAP3_L4_CORE_FW_I2C1_REGION,
211 .l4_prot_group = 7,
212 .flags = OMAP_FIREWALL_L4,
215 .user = OCP_USER_MPU | OCP_USER_SDMA,
218 /* L4 CORE -> I2C2 interface */
219 static struct omap_hwmod_addr_space omap3xxx_i2c2_addr_space[] = {
221 .pa_start = 0x48072000,
222 .pa_end = 0x48072000 + OMAP2_I2C_AS_LEN - 1,
223 .flags = ADDR_TYPE_RT,
227 static struct omap_hwmod_ocp_if omap3_l4_core__i2c2 = {
228 .master = &omap3xxx_l4_core_hwmod,
229 .slave = &omap3xxx_i2c2_hwmod,
230 .clk = "i2c2_ick",
231 .addr = omap3xxx_i2c2_addr_space,
232 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c2_addr_space),
233 .fw = {
234 .omap2 = {
235 .l4_fw_region = OMAP3_L4_CORE_FW_I2C2_REGION,
236 .l4_prot_group = 7,
237 .flags = OMAP_FIREWALL_L4,
240 .user = OCP_USER_MPU | OCP_USER_SDMA,
243 /* L4 CORE -> I2C3 interface */
244 static struct omap_hwmod_addr_space omap3xxx_i2c3_addr_space[] = {
246 .pa_start = 0x48060000,
247 .pa_end = 0x48060000 + OMAP2_I2C_AS_LEN - 1,
248 .flags = ADDR_TYPE_RT,
252 static struct omap_hwmod_ocp_if omap3_l4_core__i2c3 = {
253 .master = &omap3xxx_l4_core_hwmod,
254 .slave = &omap3xxx_i2c3_hwmod,
255 .clk = "i2c3_ick",
256 .addr = omap3xxx_i2c3_addr_space,
257 .addr_cnt = ARRAY_SIZE(omap3xxx_i2c3_addr_space),
258 .fw = {
259 .omap2 = {
260 .l4_fw_region = OMAP3_L4_CORE_FW_I2C3_REGION,
261 .l4_prot_group = 7,
262 .flags = OMAP_FIREWALL_L4,
265 .user = OCP_USER_MPU | OCP_USER_SDMA,
268 /* L4 CORE -> SR1 interface */
269 static struct omap_hwmod_addr_space omap3_sr1_addr_space[] = {
271 .pa_start = OMAP34XX_SR1_BASE,
272 .pa_end = OMAP34XX_SR1_BASE + SZ_1K - 1,
273 .flags = ADDR_TYPE_RT,
277 static struct omap_hwmod_ocp_if omap3_l4_core__sr1 = {
278 .master = &omap3xxx_l4_core_hwmod,
279 .slave = &omap34xx_sr1_hwmod,
280 .clk = "sr_l4_ick",
281 .addr = omap3_sr1_addr_space,
282 .addr_cnt = ARRAY_SIZE(omap3_sr1_addr_space),
283 .user = OCP_USER_MPU,
286 /* L4 CORE -> SR1 interface */
287 static struct omap_hwmod_addr_space omap3_sr2_addr_space[] = {
289 .pa_start = OMAP34XX_SR2_BASE,
290 .pa_end = OMAP34XX_SR2_BASE + SZ_1K - 1,
291 .flags = ADDR_TYPE_RT,
295 static struct omap_hwmod_ocp_if omap3_l4_core__sr2 = {
296 .master = &omap3xxx_l4_core_hwmod,
297 .slave = &omap34xx_sr2_hwmod,
298 .clk = "sr_l4_ick",
299 .addr = omap3_sr2_addr_space,
300 .addr_cnt = ARRAY_SIZE(omap3_sr2_addr_space),
301 .user = OCP_USER_MPU,
304 /* Slave interfaces on the L4_CORE interconnect */
305 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_slaves[] = {
306 &omap3xxx_l3_main__l4_core,
307 &omap3_l4_core__sr1,
308 &omap3_l4_core__sr2,
311 /* Master interfaces on the L4_CORE interconnect */
312 static struct omap_hwmod_ocp_if *omap3xxx_l4_core_masters[] = {
313 &omap3xxx_l4_core__l4_wkup,
314 &omap3_l4_core__uart1,
315 &omap3_l4_core__uart2,
316 &omap3_l4_core__i2c1,
317 &omap3_l4_core__i2c2,
318 &omap3_l4_core__i2c3,
321 /* L4 CORE */
322 static struct omap_hwmod omap3xxx_l4_core_hwmod = {
323 .name = "l4_core",
324 .class = &l4_hwmod_class,
325 .masters = omap3xxx_l4_core_masters,
326 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_core_masters),
327 .slaves = omap3xxx_l4_core_slaves,
328 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_core_slaves),
329 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
330 .flags = HWMOD_NO_IDLEST,
333 /* Slave interfaces on the L4_PER interconnect */
334 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_slaves[] = {
335 &omap3xxx_l3_main__l4_per,
338 /* Master interfaces on the L4_PER interconnect */
339 static struct omap_hwmod_ocp_if *omap3xxx_l4_per_masters[] = {
340 &omap3_l4_per__uart3,
341 &omap3_l4_per__uart4,
344 /* L4 PER */
345 static struct omap_hwmod omap3xxx_l4_per_hwmod = {
346 .name = "l4_per",
347 .class = &l4_hwmod_class,
348 .masters = omap3xxx_l4_per_masters,
349 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_per_masters),
350 .slaves = omap3xxx_l4_per_slaves,
351 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_per_slaves),
352 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
353 .flags = HWMOD_NO_IDLEST,
356 /* Slave interfaces on the L4_WKUP interconnect */
357 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_slaves[] = {
358 &omap3xxx_l4_core__l4_wkup,
361 /* Master interfaces on the L4_WKUP interconnect */
362 static struct omap_hwmod_ocp_if *omap3xxx_l4_wkup_masters[] = {
365 /* L4 WKUP */
366 static struct omap_hwmod omap3xxx_l4_wkup_hwmod = {
367 .name = "l4_wkup",
368 .class = &l4_hwmod_class,
369 .masters = omap3xxx_l4_wkup_masters,
370 .masters_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_masters),
371 .slaves = omap3xxx_l4_wkup_slaves,
372 .slaves_cnt = ARRAY_SIZE(omap3xxx_l4_wkup_slaves),
373 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
374 .flags = HWMOD_NO_IDLEST,
377 /* Master interfaces on the MPU device */
378 static struct omap_hwmod_ocp_if *omap3xxx_mpu_masters[] = {
379 &omap3xxx_mpu__l3_main,
382 /* MPU */
383 static struct omap_hwmod omap3xxx_mpu_hwmod = {
384 .name = "mpu",
385 .class = &mpu_hwmod_class,
386 .main_clk = "arm_fck",
387 .masters = omap3xxx_mpu_masters,
388 .masters_cnt = ARRAY_SIZE(omap3xxx_mpu_masters),
389 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
393 * IVA2_2 interface data
396 /* IVA2 <- L3 interface */
397 static struct omap_hwmod_ocp_if omap3xxx_l3__iva = {
398 .master = &omap3xxx_l3_main_hwmod,
399 .slave = &omap3xxx_iva_hwmod,
400 .clk = "iva2_ck",
401 .user = OCP_USER_MPU | OCP_USER_SDMA,
404 static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
405 &omap3xxx_l3__iva,
409 * IVA2 (IVA2)
412 static struct omap_hwmod omap3xxx_iva_hwmod = {
413 .name = "iva",
414 .class = &iva_hwmod_class,
415 .masters = omap3xxx_iva_masters,
416 .masters_cnt = ARRAY_SIZE(omap3xxx_iva_masters),
417 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
420 /* l4_wkup -> wd_timer2 */
421 static struct omap_hwmod_addr_space omap3xxx_wd_timer2_addrs[] = {
423 .pa_start = 0x48314000,
424 .pa_end = 0x4831407f,
425 .flags = ADDR_TYPE_RT
429 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
430 .master = &omap3xxx_l4_wkup_hwmod,
431 .slave = &omap3xxx_wd_timer2_hwmod,
432 .clk = "wdt2_ick",
433 .addr = omap3xxx_wd_timer2_addrs,
434 .addr_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_addrs),
435 .user = OCP_USER_MPU | OCP_USER_SDMA,
439 * 'wd_timer' class
440 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
441 * overflow condition
444 static struct omap_hwmod_class_sysconfig omap3xxx_wd_timer_sysc = {
445 .rev_offs = 0x0000,
446 .sysc_offs = 0x0010,
447 .syss_offs = 0x0014,
448 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_EMUFREE |
449 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
450 SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY),
451 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
452 .sysc_fields = &omap_hwmod_sysc_type1,
455 /* I2C common */
456 static struct omap_hwmod_class_sysconfig i2c_sysc = {
457 .rev_offs = 0x00,
458 .sysc_offs = 0x20,
459 .syss_offs = 0x10,
460 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
461 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
462 SYSC_HAS_AUTOIDLE),
463 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
464 .sysc_fields = &omap_hwmod_sysc_type1,
467 static struct omap_hwmod_class omap3xxx_wd_timer_hwmod_class = {
468 .name = "wd_timer",
469 .sysc = &omap3xxx_wd_timer_sysc,
470 .pre_shutdown = &omap2_wd_timer_disable
473 /* wd_timer2 */
474 static struct omap_hwmod_ocp_if *omap3xxx_wd_timer2_slaves[] = {
475 &omap3xxx_l4_wkup__wd_timer2,
478 static struct omap_hwmod omap3xxx_wd_timer2_hwmod = {
479 .name = "wd_timer2",
480 .class = &omap3xxx_wd_timer_hwmod_class,
481 .main_clk = "wdt2_fck",
482 .prcm = {
483 .omap2 = {
484 .prcm_reg_id = 1,
485 .module_bit = OMAP3430_EN_WDT2_SHIFT,
486 .module_offs = WKUP_MOD,
487 .idlest_reg_id = 1,
488 .idlest_idle_bit = OMAP3430_ST_WDT2_SHIFT,
491 .slaves = omap3xxx_wd_timer2_slaves,
492 .slaves_cnt = ARRAY_SIZE(omap3xxx_wd_timer2_slaves),
493 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
496 /* UART common */
498 static struct omap_hwmod_class_sysconfig uart_sysc = {
499 .rev_offs = 0x50,
500 .sysc_offs = 0x54,
501 .syss_offs = 0x58,
502 .sysc_flags = (SYSC_HAS_SIDLEMODE |
503 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
504 SYSC_HAS_AUTOIDLE),
505 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
506 .sysc_fields = &omap_hwmod_sysc_type1,
509 static struct omap_hwmod_class uart_class = {
510 .name = "uart",
511 .sysc = &uart_sysc,
514 /* UART1 */
516 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
517 { .irq = INT_24XX_UART1_IRQ, },
520 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
521 { .name = "tx", .dma_req = OMAP24XX_DMA_UART1_TX, },
522 { .name = "rx", .dma_req = OMAP24XX_DMA_UART1_RX, },
525 static struct omap_hwmod_ocp_if *omap3xxx_uart1_slaves[] = {
526 &omap3_l4_core__uart1,
529 static struct omap_hwmod omap3xxx_uart1_hwmod = {
530 .name = "uart1",
531 .mpu_irqs = uart1_mpu_irqs,
532 .mpu_irqs_cnt = ARRAY_SIZE(uart1_mpu_irqs),
533 .sdma_reqs = uart1_sdma_reqs,
534 .sdma_reqs_cnt = ARRAY_SIZE(uart1_sdma_reqs),
535 .main_clk = "uart1_fck",
536 .prcm = {
537 .omap2 = {
538 .module_offs = CORE_MOD,
539 .prcm_reg_id = 1,
540 .module_bit = OMAP3430_EN_UART1_SHIFT,
541 .idlest_reg_id = 1,
542 .idlest_idle_bit = OMAP3430_EN_UART1_SHIFT,
545 .slaves = omap3xxx_uart1_slaves,
546 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart1_slaves),
547 .class = &uart_class,
548 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
551 /* UART2 */
553 static struct omap_hwmod_irq_info uart2_mpu_irqs[] = {
554 { .irq = INT_24XX_UART2_IRQ, },
557 static struct omap_hwmod_dma_info uart2_sdma_reqs[] = {
558 { .name = "tx", .dma_req = OMAP24XX_DMA_UART2_TX, },
559 { .name = "rx", .dma_req = OMAP24XX_DMA_UART2_RX, },
562 static struct omap_hwmod_ocp_if *omap3xxx_uart2_slaves[] = {
563 &omap3_l4_core__uart2,
566 static struct omap_hwmod omap3xxx_uart2_hwmod = {
567 .name = "uart2",
568 .mpu_irqs = uart2_mpu_irqs,
569 .mpu_irqs_cnt = ARRAY_SIZE(uart2_mpu_irqs),
570 .sdma_reqs = uart2_sdma_reqs,
571 .sdma_reqs_cnt = ARRAY_SIZE(uart2_sdma_reqs),
572 .main_clk = "uart2_fck",
573 .prcm = {
574 .omap2 = {
575 .module_offs = CORE_MOD,
576 .prcm_reg_id = 1,
577 .module_bit = OMAP3430_EN_UART2_SHIFT,
578 .idlest_reg_id = 1,
579 .idlest_idle_bit = OMAP3430_EN_UART2_SHIFT,
582 .slaves = omap3xxx_uart2_slaves,
583 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart2_slaves),
584 .class = &uart_class,
585 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
588 /* UART3 */
590 static struct omap_hwmod_irq_info uart3_mpu_irqs[] = {
591 { .irq = INT_24XX_UART3_IRQ, },
594 static struct omap_hwmod_dma_info uart3_sdma_reqs[] = {
595 { .name = "tx", .dma_req = OMAP24XX_DMA_UART3_TX, },
596 { .name = "rx", .dma_req = OMAP24XX_DMA_UART3_RX, },
599 static struct omap_hwmod_ocp_if *omap3xxx_uart3_slaves[] = {
600 &omap3_l4_per__uart3,
603 static struct omap_hwmod omap3xxx_uart3_hwmod = {
604 .name = "uart3",
605 .mpu_irqs = uart3_mpu_irqs,
606 .mpu_irqs_cnt = ARRAY_SIZE(uart3_mpu_irqs),
607 .sdma_reqs = uart3_sdma_reqs,
608 .sdma_reqs_cnt = ARRAY_SIZE(uart3_sdma_reqs),
609 .main_clk = "uart3_fck",
610 .prcm = {
611 .omap2 = {
612 .module_offs = OMAP3430_PER_MOD,
613 .prcm_reg_id = 1,
614 .module_bit = OMAP3430_EN_UART3_SHIFT,
615 .idlest_reg_id = 1,
616 .idlest_idle_bit = OMAP3430_EN_UART3_SHIFT,
619 .slaves = omap3xxx_uart3_slaves,
620 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart3_slaves),
621 .class = &uart_class,
622 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
625 /* UART4 */
627 static struct omap_hwmod_irq_info uart4_mpu_irqs[] = {
628 { .irq = INT_36XX_UART4_IRQ, },
631 static struct omap_hwmod_dma_info uart4_sdma_reqs[] = {
632 { .name = "rx", .dma_req = OMAP36XX_DMA_UART4_RX, },
633 { .name = "tx", .dma_req = OMAP36XX_DMA_UART4_TX, },
636 static struct omap_hwmod_ocp_if *omap3xxx_uart4_slaves[] = {
637 &omap3_l4_per__uart4,
640 static struct omap_hwmod omap3xxx_uart4_hwmod = {
641 .name = "uart4",
642 .mpu_irqs = uart4_mpu_irqs,
643 .mpu_irqs_cnt = ARRAY_SIZE(uart4_mpu_irqs),
644 .sdma_reqs = uart4_sdma_reqs,
645 .sdma_reqs_cnt = ARRAY_SIZE(uart4_sdma_reqs),
646 .main_clk = "uart4_fck",
647 .prcm = {
648 .omap2 = {
649 .module_offs = OMAP3430_PER_MOD,
650 .prcm_reg_id = 1,
651 .module_bit = OMAP3630_EN_UART4_SHIFT,
652 .idlest_reg_id = 1,
653 .idlest_idle_bit = OMAP3630_EN_UART4_SHIFT,
656 .slaves = omap3xxx_uart4_slaves,
657 .slaves_cnt = ARRAY_SIZE(omap3xxx_uart4_slaves),
658 .class = &uart_class,
659 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
662 static struct omap_hwmod_class i2c_class = {
663 .name = "i2c",
664 .sysc = &i2c_sysc,
667 /* I2C1 */
669 static struct omap_i2c_dev_attr i2c1_dev_attr = {
670 .fifo_depth = 8, /* bytes */
673 static struct omap_hwmod_irq_info i2c1_mpu_irqs[] = {
674 { .irq = INT_24XX_I2C1_IRQ, },
677 static struct omap_hwmod_dma_info i2c1_sdma_reqs[] = {
678 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C1_TX },
679 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C1_RX },
682 static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
683 &omap3_l4_core__i2c1,
686 static struct omap_hwmod omap3xxx_i2c1_hwmod = {
687 .name = "i2c1",
688 .mpu_irqs = i2c1_mpu_irqs,
689 .mpu_irqs_cnt = ARRAY_SIZE(i2c1_mpu_irqs),
690 .sdma_reqs = i2c1_sdma_reqs,
691 .sdma_reqs_cnt = ARRAY_SIZE(i2c1_sdma_reqs),
692 .main_clk = "i2c1_fck",
693 .prcm = {
694 .omap2 = {
695 .module_offs = CORE_MOD,
696 .prcm_reg_id = 1,
697 .module_bit = OMAP3430_EN_I2C1_SHIFT,
698 .idlest_reg_id = 1,
699 .idlest_idle_bit = OMAP3430_ST_I2C1_SHIFT,
702 .slaves = omap3xxx_i2c1_slaves,
703 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c1_slaves),
704 .class = &i2c_class,
705 .dev_attr = &i2c1_dev_attr,
706 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
709 /* I2C2 */
711 static struct omap_i2c_dev_attr i2c2_dev_attr = {
712 .fifo_depth = 8, /* bytes */
715 static struct omap_hwmod_irq_info i2c2_mpu_irqs[] = {
716 { .irq = INT_24XX_I2C2_IRQ, },
719 static struct omap_hwmod_dma_info i2c2_sdma_reqs[] = {
720 { .name = "tx", .dma_req = OMAP24XX_DMA_I2C2_TX },
721 { .name = "rx", .dma_req = OMAP24XX_DMA_I2C2_RX },
724 static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
725 &omap3_l4_core__i2c2,
728 static struct omap_hwmod omap3xxx_i2c2_hwmod = {
729 .name = "i2c2",
730 .mpu_irqs = i2c2_mpu_irqs,
731 .mpu_irqs_cnt = ARRAY_SIZE(i2c2_mpu_irqs),
732 .sdma_reqs = i2c2_sdma_reqs,
733 .sdma_reqs_cnt = ARRAY_SIZE(i2c2_sdma_reqs),
734 .main_clk = "i2c2_fck",
735 .prcm = {
736 .omap2 = {
737 .module_offs = CORE_MOD,
738 .prcm_reg_id = 1,
739 .module_bit = OMAP3430_EN_I2C2_SHIFT,
740 .idlest_reg_id = 1,
741 .idlest_idle_bit = OMAP3430_ST_I2C2_SHIFT,
744 .slaves = omap3xxx_i2c2_slaves,
745 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c2_slaves),
746 .class = &i2c_class,
747 .dev_attr = &i2c2_dev_attr,
748 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
751 /* I2C3 */
753 static struct omap_i2c_dev_attr i2c3_dev_attr = {
754 .fifo_depth = 64, /* bytes */
757 static struct omap_hwmod_irq_info i2c3_mpu_irqs[] = {
758 { .irq = INT_34XX_I2C3_IRQ, },
761 static struct omap_hwmod_dma_info i2c3_sdma_reqs[] = {
762 { .name = "tx", .dma_req = OMAP34XX_DMA_I2C3_TX },
763 { .name = "rx", .dma_req = OMAP34XX_DMA_I2C3_RX },
766 static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
767 &omap3_l4_core__i2c3,
770 static struct omap_hwmod omap3xxx_i2c3_hwmod = {
771 .name = "i2c3",
772 .mpu_irqs = i2c3_mpu_irqs,
773 .mpu_irqs_cnt = ARRAY_SIZE(i2c3_mpu_irqs),
774 .sdma_reqs = i2c3_sdma_reqs,
775 .sdma_reqs_cnt = ARRAY_SIZE(i2c3_sdma_reqs),
776 .main_clk = "i2c3_fck",
777 .prcm = {
778 .omap2 = {
779 .module_offs = CORE_MOD,
780 .prcm_reg_id = 1,
781 .module_bit = OMAP3430_EN_I2C3_SHIFT,
782 .idlest_reg_id = 1,
783 .idlest_idle_bit = OMAP3430_ST_I2C3_SHIFT,
786 .slaves = omap3xxx_i2c3_slaves,
787 .slaves_cnt = ARRAY_SIZE(omap3xxx_i2c3_slaves),
788 .class = &i2c_class,
789 .dev_attr = &i2c3_dev_attr,
790 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
793 /* l4_wkup -> gpio1 */
794 static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
796 .pa_start = 0x48310000,
797 .pa_end = 0x483101ff,
798 .flags = ADDR_TYPE_RT
802 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
803 .master = &omap3xxx_l4_wkup_hwmod,
804 .slave = &omap3xxx_gpio1_hwmod,
805 .addr = omap3xxx_gpio1_addrs,
806 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio1_addrs),
807 .user = OCP_USER_MPU | OCP_USER_SDMA,
810 /* l4_per -> gpio2 */
811 static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
813 .pa_start = 0x49050000,
814 .pa_end = 0x490501ff,
815 .flags = ADDR_TYPE_RT
819 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
820 .master = &omap3xxx_l4_per_hwmod,
821 .slave = &omap3xxx_gpio2_hwmod,
822 .addr = omap3xxx_gpio2_addrs,
823 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio2_addrs),
824 .user = OCP_USER_MPU | OCP_USER_SDMA,
827 /* l4_per -> gpio3 */
828 static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
830 .pa_start = 0x49052000,
831 .pa_end = 0x490521ff,
832 .flags = ADDR_TYPE_RT
836 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
837 .master = &omap3xxx_l4_per_hwmod,
838 .slave = &omap3xxx_gpio3_hwmod,
839 .addr = omap3xxx_gpio3_addrs,
840 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio3_addrs),
841 .user = OCP_USER_MPU | OCP_USER_SDMA,
844 /* l4_per -> gpio4 */
845 static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
847 .pa_start = 0x49054000,
848 .pa_end = 0x490541ff,
849 .flags = ADDR_TYPE_RT
853 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
854 .master = &omap3xxx_l4_per_hwmod,
855 .slave = &omap3xxx_gpio4_hwmod,
856 .addr = omap3xxx_gpio4_addrs,
857 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio4_addrs),
858 .user = OCP_USER_MPU | OCP_USER_SDMA,
861 /* l4_per -> gpio5 */
862 static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
864 .pa_start = 0x49056000,
865 .pa_end = 0x490561ff,
866 .flags = ADDR_TYPE_RT
870 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
871 .master = &omap3xxx_l4_per_hwmod,
872 .slave = &omap3xxx_gpio5_hwmod,
873 .addr = omap3xxx_gpio5_addrs,
874 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio5_addrs),
875 .user = OCP_USER_MPU | OCP_USER_SDMA,
878 /* l4_per -> gpio6 */
879 static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
881 .pa_start = 0x49058000,
882 .pa_end = 0x490581ff,
883 .flags = ADDR_TYPE_RT
887 static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
888 .master = &omap3xxx_l4_per_hwmod,
889 .slave = &omap3xxx_gpio6_hwmod,
890 .addr = omap3xxx_gpio6_addrs,
891 .addr_cnt = ARRAY_SIZE(omap3xxx_gpio6_addrs),
892 .user = OCP_USER_MPU | OCP_USER_SDMA,
896 * 'gpio' class
897 * general purpose io module
900 static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
901 .rev_offs = 0x0000,
902 .sysc_offs = 0x0010,
903 .syss_offs = 0x0014,
904 .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
905 SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
906 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
907 .sysc_fields = &omap_hwmod_sysc_type1,
910 static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
911 .name = "gpio",
912 .sysc = &omap3xxx_gpio_sysc,
913 .rev = 1,
916 /* gpio_dev_attr*/
917 static struct omap_gpio_dev_attr gpio_dev_attr = {
918 .bank_width = 32,
919 .dbck_flag = true,
922 /* gpio1 */
923 static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
924 { .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
927 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
928 { .role = "dbclk", .clk = "gpio1_dbck", },
931 static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
932 &omap3xxx_l4_wkup__gpio1,
935 static struct omap_hwmod omap3xxx_gpio1_hwmod = {
936 .name = "gpio1",
937 .mpu_irqs = omap3xxx_gpio1_irqs,
938 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio1_irqs),
939 .main_clk = "gpio1_ick",
940 .opt_clks = gpio1_opt_clks,
941 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
942 .prcm = {
943 .omap2 = {
944 .prcm_reg_id = 1,
945 .module_bit = OMAP3430_EN_GPIO1_SHIFT,
946 .module_offs = WKUP_MOD,
947 .idlest_reg_id = 1,
948 .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
951 .slaves = omap3xxx_gpio1_slaves,
952 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio1_slaves),
953 .class = &omap3xxx_gpio_hwmod_class,
954 .dev_attr = &gpio_dev_attr,
955 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
958 /* gpio2 */
959 static struct omap_hwmod_irq_info omap3xxx_gpio2_irqs[] = {
960 { .irq = 30 }, /* INT_34XX_GPIO_BANK2 */
963 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
964 { .role = "dbclk", .clk = "gpio2_dbck", },
967 static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
968 &omap3xxx_l4_per__gpio2,
971 static struct omap_hwmod omap3xxx_gpio2_hwmod = {
972 .name = "gpio2",
973 .mpu_irqs = omap3xxx_gpio2_irqs,
974 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio2_irqs),
975 .main_clk = "gpio2_ick",
976 .opt_clks = gpio2_opt_clks,
977 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
978 .prcm = {
979 .omap2 = {
980 .prcm_reg_id = 1,
981 .module_bit = OMAP3430_EN_GPIO2_SHIFT,
982 .module_offs = OMAP3430_PER_MOD,
983 .idlest_reg_id = 1,
984 .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
987 .slaves = omap3xxx_gpio2_slaves,
988 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio2_slaves),
989 .class = &omap3xxx_gpio_hwmod_class,
990 .dev_attr = &gpio_dev_attr,
991 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
994 /* gpio3 */
995 static struct omap_hwmod_irq_info omap3xxx_gpio3_irqs[] = {
996 { .irq = 31 }, /* INT_34XX_GPIO_BANK3 */
999 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
1000 { .role = "dbclk", .clk = "gpio3_dbck", },
1003 static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
1004 &omap3xxx_l4_per__gpio3,
1007 static struct omap_hwmod omap3xxx_gpio3_hwmod = {
1008 .name = "gpio3",
1009 .mpu_irqs = omap3xxx_gpio3_irqs,
1010 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio3_irqs),
1011 .main_clk = "gpio3_ick",
1012 .opt_clks = gpio3_opt_clks,
1013 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
1014 .prcm = {
1015 .omap2 = {
1016 .prcm_reg_id = 1,
1017 .module_bit = OMAP3430_EN_GPIO3_SHIFT,
1018 .module_offs = OMAP3430_PER_MOD,
1019 .idlest_reg_id = 1,
1020 .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
1023 .slaves = omap3xxx_gpio3_slaves,
1024 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio3_slaves),
1025 .class = &omap3xxx_gpio_hwmod_class,
1026 .dev_attr = &gpio_dev_attr,
1027 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1030 /* gpio4 */
1031 static struct omap_hwmod_irq_info omap3xxx_gpio4_irqs[] = {
1032 { .irq = 32 }, /* INT_34XX_GPIO_BANK4 */
1035 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
1036 { .role = "dbclk", .clk = "gpio4_dbck", },
1039 static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
1040 &omap3xxx_l4_per__gpio4,
1043 static struct omap_hwmod omap3xxx_gpio4_hwmod = {
1044 .name = "gpio4",
1045 .mpu_irqs = omap3xxx_gpio4_irqs,
1046 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio4_irqs),
1047 .main_clk = "gpio4_ick",
1048 .opt_clks = gpio4_opt_clks,
1049 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
1050 .prcm = {
1051 .omap2 = {
1052 .prcm_reg_id = 1,
1053 .module_bit = OMAP3430_EN_GPIO4_SHIFT,
1054 .module_offs = OMAP3430_PER_MOD,
1055 .idlest_reg_id = 1,
1056 .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
1059 .slaves = omap3xxx_gpio4_slaves,
1060 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio4_slaves),
1061 .class = &omap3xxx_gpio_hwmod_class,
1062 .dev_attr = &gpio_dev_attr,
1063 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1066 /* gpio5 */
1067 static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
1068 { .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
1071 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
1072 { .role = "dbclk", .clk = "gpio5_dbck", },
1075 static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
1076 &omap3xxx_l4_per__gpio5,
1079 static struct omap_hwmod omap3xxx_gpio5_hwmod = {
1080 .name = "gpio5",
1081 .mpu_irqs = omap3xxx_gpio5_irqs,
1082 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio5_irqs),
1083 .main_clk = "gpio5_ick",
1084 .opt_clks = gpio5_opt_clks,
1085 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
1086 .prcm = {
1087 .omap2 = {
1088 .prcm_reg_id = 1,
1089 .module_bit = OMAP3430_EN_GPIO5_SHIFT,
1090 .module_offs = OMAP3430_PER_MOD,
1091 .idlest_reg_id = 1,
1092 .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
1095 .slaves = omap3xxx_gpio5_slaves,
1096 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio5_slaves),
1097 .class = &omap3xxx_gpio_hwmod_class,
1098 .dev_attr = &gpio_dev_attr,
1099 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1102 /* gpio6 */
1103 static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
1104 { .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
1107 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
1108 { .role = "dbclk", .clk = "gpio6_dbck", },
1111 static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
1112 &omap3xxx_l4_per__gpio6,
1115 static struct omap_hwmod omap3xxx_gpio6_hwmod = {
1116 .name = "gpio6",
1117 .mpu_irqs = omap3xxx_gpio6_irqs,
1118 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio6_irqs),
1119 .main_clk = "gpio6_ick",
1120 .opt_clks = gpio6_opt_clks,
1121 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
1122 .prcm = {
1123 .omap2 = {
1124 .prcm_reg_id = 1,
1125 .module_bit = OMAP3430_EN_GPIO6_SHIFT,
1126 .module_offs = OMAP3430_PER_MOD,
1127 .idlest_reg_id = 1,
1128 .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
1131 .slaves = omap3xxx_gpio6_slaves,
1132 .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio6_slaves),
1133 .class = &omap3xxx_gpio_hwmod_class,
1134 .dev_attr = &gpio_dev_attr,
1135 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1138 /* dma_system -> L3 */
1139 static struct omap_hwmod_ocp_if omap3xxx_dma_system__l3 = {
1140 .master = &omap3xxx_dma_system_hwmod,
1141 .slave = &omap3xxx_l3_main_hwmod,
1142 .clk = "core_l3_ick",
1143 .user = OCP_USER_MPU | OCP_USER_SDMA,
1146 /* dma attributes */
1147 static struct omap_dma_dev_attr dma_dev_attr = {
1148 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
1149 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
1150 .lch_count = 32,
1153 static struct omap_hwmod_class_sysconfig omap3xxx_dma_sysc = {
1154 .rev_offs = 0x0000,
1155 .sysc_offs = 0x002c,
1156 .syss_offs = 0x0028,
1157 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1158 SYSC_HAS_MIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
1159 SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE),
1160 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1161 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
1162 .sysc_fields = &omap_hwmod_sysc_type1,
1165 static struct omap_hwmod_class omap3xxx_dma_hwmod_class = {
1166 .name = "dma",
1167 .sysc = &omap3xxx_dma_sysc,
1170 /* dma_system */
1171 static struct omap_hwmod_irq_info omap3xxx_dma_system_irqs[] = {
1172 { .name = "0", .irq = 12 }, /* INT_24XX_SDMA_IRQ0 */
1173 { .name = "1", .irq = 13 }, /* INT_24XX_SDMA_IRQ1 */
1174 { .name = "2", .irq = 14 }, /* INT_24XX_SDMA_IRQ2 */
1175 { .name = "3", .irq = 15 }, /* INT_24XX_SDMA_IRQ3 */
1178 static struct omap_hwmod_addr_space omap3xxx_dma_system_addrs[] = {
1180 .pa_start = 0x48056000,
1181 .pa_end = 0x4a0560ff,
1182 .flags = ADDR_TYPE_RT
1186 /* dma_system master ports */
1187 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_masters[] = {
1188 &omap3xxx_dma_system__l3,
1191 /* l4_cfg -> dma_system */
1192 static struct omap_hwmod_ocp_if omap3xxx_l4_core__dma_system = {
1193 .master = &omap3xxx_l4_core_hwmod,
1194 .slave = &omap3xxx_dma_system_hwmod,
1195 .clk = "core_l4_ick",
1196 .addr = omap3xxx_dma_system_addrs,
1197 .addr_cnt = ARRAY_SIZE(omap3xxx_dma_system_addrs),
1198 .user = OCP_USER_MPU | OCP_USER_SDMA,
1201 /* dma_system slave ports */
1202 static struct omap_hwmod_ocp_if *omap3xxx_dma_system_slaves[] = {
1203 &omap3xxx_l4_core__dma_system,
1206 static struct omap_hwmod omap3xxx_dma_system_hwmod = {
1207 .name = "dma",
1208 .class = &omap3xxx_dma_hwmod_class,
1209 .mpu_irqs = omap3xxx_dma_system_irqs,
1210 .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dma_system_irqs),
1211 .main_clk = "core_l3_ick",
1212 .prcm = {
1213 .omap2 = {
1214 .module_offs = CORE_MOD,
1215 .prcm_reg_id = 1,
1216 .module_bit = OMAP3430_ST_SDMA_SHIFT,
1217 .idlest_reg_id = 1,
1218 .idlest_idle_bit = OMAP3430_ST_SDMA_SHIFT,
1221 .slaves = omap3xxx_dma_system_slaves,
1222 .slaves_cnt = ARRAY_SIZE(omap3xxx_dma_system_slaves),
1223 .masters = omap3xxx_dma_system_masters,
1224 .masters_cnt = ARRAY_SIZE(omap3xxx_dma_system_masters),
1225 .dev_attr = &dma_dev_attr,
1226 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
1227 .flags = HWMOD_NO_IDLEST,
1230 /* SR common */
1231 static struct omap_hwmod_sysc_fields omap34xx_sr_sysc_fields = {
1232 .clkact_shift = 20,
1235 static struct omap_hwmod_class_sysconfig omap34xx_sr_sysc = {
1236 .sysc_offs = 0x24,
1237 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_NO_CACHE),
1238 .clockact = CLOCKACT_TEST_ICLK,
1239 .sysc_fields = &omap34xx_sr_sysc_fields,
1242 static struct omap_hwmod_class omap34xx_smartreflex_hwmod_class = {
1243 .name = "smartreflex",
1244 .sysc = &omap34xx_sr_sysc,
1245 .rev = 1,
1248 static struct omap_hwmod_sysc_fields omap36xx_sr_sysc_fields = {
1249 .sidle_shift = 24,
1250 .enwkup_shift = 26
1253 static struct omap_hwmod_class_sysconfig omap36xx_sr_sysc = {
1254 .sysc_offs = 0x38,
1255 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
1256 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP |
1257 SYSC_NO_CACHE),
1258 .sysc_fields = &omap36xx_sr_sysc_fields,
1261 static struct omap_hwmod_class omap36xx_smartreflex_hwmod_class = {
1262 .name = "smartreflex",
1263 .sysc = &omap36xx_sr_sysc,
1264 .rev = 2,
1267 /* SR1 */
1268 static struct omap_hwmod_ocp_if *omap3_sr1_slaves[] = {
1269 &omap3_l4_core__sr1,
1272 static struct omap_hwmod omap34xx_sr1_hwmod = {
1273 .name = "sr1_hwmod",
1274 .class = &omap34xx_smartreflex_hwmod_class,
1275 .main_clk = "sr1_fck",
1276 .vdd_name = "mpu",
1277 .prcm = {
1278 .omap2 = {
1279 .prcm_reg_id = 1,
1280 .module_bit = OMAP3430_EN_SR1_SHIFT,
1281 .module_offs = WKUP_MOD,
1282 .idlest_reg_id = 1,
1283 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1286 .slaves = omap3_sr1_slaves,
1287 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
1288 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
1289 CHIP_IS_OMAP3430ES3_0 |
1290 CHIP_IS_OMAP3430ES3_1),
1291 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1294 static struct omap_hwmod omap36xx_sr1_hwmod = {
1295 .name = "sr1_hwmod",
1296 .class = &omap36xx_smartreflex_hwmod_class,
1297 .main_clk = "sr1_fck",
1298 .vdd_name = "mpu",
1299 .prcm = {
1300 .omap2 = {
1301 .prcm_reg_id = 1,
1302 .module_bit = OMAP3430_EN_SR1_SHIFT,
1303 .module_offs = WKUP_MOD,
1304 .idlest_reg_id = 1,
1305 .idlest_idle_bit = OMAP3430_EN_SR1_SHIFT,
1308 .slaves = omap3_sr1_slaves,
1309 .slaves_cnt = ARRAY_SIZE(omap3_sr1_slaves),
1310 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1313 /* SR2 */
1314 static struct omap_hwmod_ocp_if *omap3_sr2_slaves[] = {
1315 &omap3_l4_core__sr2,
1318 static struct omap_hwmod omap34xx_sr2_hwmod = {
1319 .name = "sr2_hwmod",
1320 .class = &omap34xx_smartreflex_hwmod_class,
1321 .main_clk = "sr2_fck",
1322 .vdd_name = "core",
1323 .prcm = {
1324 .omap2 = {
1325 .prcm_reg_id = 1,
1326 .module_bit = OMAP3430_EN_SR2_SHIFT,
1327 .module_offs = WKUP_MOD,
1328 .idlest_reg_id = 1,
1329 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1332 .slaves = omap3_sr2_slaves,
1333 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
1334 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430ES2 |
1335 CHIP_IS_OMAP3430ES3_0 |
1336 CHIP_IS_OMAP3430ES3_1),
1337 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1340 static struct omap_hwmod omap36xx_sr2_hwmod = {
1341 .name = "sr2_hwmod",
1342 .class = &omap36xx_smartreflex_hwmod_class,
1343 .main_clk = "sr2_fck",
1344 .vdd_name = "core",
1345 .prcm = {
1346 .omap2 = {
1347 .prcm_reg_id = 1,
1348 .module_bit = OMAP3430_EN_SR2_SHIFT,
1349 .module_offs = WKUP_MOD,
1350 .idlest_reg_id = 1,
1351 .idlest_idle_bit = OMAP3430_EN_SR2_SHIFT,
1354 .slaves = omap3_sr2_slaves,
1355 .slaves_cnt = ARRAY_SIZE(omap3_sr2_slaves),
1356 .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3630ES1),
1359 static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
1360 &omap3xxx_l3_main_hwmod,
1361 &omap3xxx_l4_core_hwmod,
1362 &omap3xxx_l4_per_hwmod,
1363 &omap3xxx_l4_wkup_hwmod,
1364 &omap3xxx_mpu_hwmod,
1365 &omap3xxx_iva_hwmod,
1366 &omap3xxx_wd_timer2_hwmod,
1367 &omap3xxx_uart1_hwmod,
1368 &omap3xxx_uart2_hwmod,
1369 &omap3xxx_uart3_hwmod,
1370 &omap3xxx_uart4_hwmod,
1371 &omap3xxx_i2c1_hwmod,
1372 &omap3xxx_i2c2_hwmod,
1373 &omap3xxx_i2c3_hwmod,
1374 &omap34xx_sr1_hwmod,
1375 &omap34xx_sr2_hwmod,
1376 &omap36xx_sr1_hwmod,
1377 &omap36xx_sr2_hwmod,
1380 /* gpio class */
1381 &omap3xxx_gpio1_hwmod,
1382 &omap3xxx_gpio2_hwmod,
1383 &omap3xxx_gpio3_hwmod,
1384 &omap3xxx_gpio4_hwmod,
1385 &omap3xxx_gpio5_hwmod,
1386 &omap3xxx_gpio6_hwmod,
1388 /* dma_system class*/
1389 &omap3xxx_dma_system_hwmod,
1390 NULL,
1393 int __init omap3xxx_hwmod_init(void)
1395 return omap_hwmod_init(omap3xxx_hwmods);