2 * Hardware modules present on the OMAP54xx chips
4 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
9 * This file is automatically generated from the OMAP hardware databases.
10 * We respectfully ask that any modifications to this file be coordinated
11 * with the public linux-omap@vger.kernel.org mailing list and the
12 * authors above to ensure that the autogeneration scripts are kept
13 * up-to-date with the file contents.
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License version 2 as
17 * published by the Free Software Foundation.
21 #include <linux/platform_data/gpio-omap.h>
22 #include <linux/power/smartreflex.h>
23 #include <linux/i2c-omap.h>
25 #include <linux/omap-dma.h>
26 #include <linux/platform_data/spi-omap2-mcspi.h>
27 #include <linux/platform_data/asoc-ti-mcbsp.h>
28 #include <plat/dmtimer.h>
30 #include "omap_hwmod.h"
31 #include "omap_hwmod_common_data.h"
35 #include "prm-regbits-54xx.h"
40 /* Base offset for all OMAP5 interrupts external to MPUSS */
41 #define OMAP54XX_IRQ_GIC_START 32
43 /* Base offset for all OMAP5 dma requests */
44 #define OMAP54XX_DMA_REQ_START 1
55 static struct omap_hwmod_class omap54xx_dmm_hwmod_class = {
60 static struct omap_hwmod omap54xx_dmm_hwmod = {
62 .class = &omap54xx_dmm_hwmod_class,
63 .clkdm_name = "emif_clkdm",
66 .clkctrl_offs = OMAP54XX_CM_EMIF_DMM_CLKCTRL_OFFSET,
67 .context_offs = OMAP54XX_RM_EMIF_DMM_CONTEXT_OFFSET,
74 * instance(s): l3_instr, l3_main_1, l3_main_2, l3_main_3
76 static struct omap_hwmod_class omap54xx_l3_hwmod_class = {
81 static struct omap_hwmod omap54xx_l3_instr_hwmod = {
83 .class = &omap54xx_l3_hwmod_class,
84 .clkdm_name = "l3instr_clkdm",
87 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_INSTR_CLKCTRL_OFFSET,
88 .context_offs = OMAP54XX_RM_L3INSTR_L3_INSTR_CONTEXT_OFFSET,
89 .modulemode = MODULEMODE_HWCTRL,
95 static struct omap_hwmod omap54xx_l3_main_1_hwmod = {
97 .class = &omap54xx_l3_hwmod_class,
98 .clkdm_name = "l3main1_clkdm",
101 .clkctrl_offs = OMAP54XX_CM_L3MAIN1_L3_MAIN_1_CLKCTRL_OFFSET,
102 .context_offs = OMAP54XX_RM_L3MAIN1_L3_MAIN_1_CONTEXT_OFFSET,
108 static struct omap_hwmod omap54xx_l3_main_2_hwmod = {
110 .class = &omap54xx_l3_hwmod_class,
111 .clkdm_name = "l3main2_clkdm",
114 .clkctrl_offs = OMAP54XX_CM_L3MAIN2_L3_MAIN_2_CLKCTRL_OFFSET,
115 .context_offs = OMAP54XX_RM_L3MAIN2_L3_MAIN_2_CONTEXT_OFFSET,
121 static struct omap_hwmod omap54xx_l3_main_3_hwmod = {
123 .class = &omap54xx_l3_hwmod_class,
124 .clkdm_name = "l3instr_clkdm",
127 .clkctrl_offs = OMAP54XX_CM_L3INSTR_L3_MAIN_3_CLKCTRL_OFFSET,
128 .context_offs = OMAP54XX_RM_L3INSTR_L3_MAIN_3_CONTEXT_OFFSET,
129 .modulemode = MODULEMODE_HWCTRL,
136 * instance(s): l4_abe, l4_cfg, l4_per, l4_wkup
138 static struct omap_hwmod_class omap54xx_l4_hwmod_class = {
143 static struct omap_hwmod omap54xx_l4_abe_hwmod = {
145 .class = &omap54xx_l4_hwmod_class,
146 .clkdm_name = "abe_clkdm",
149 .clkctrl_offs = OMAP54XX_CM_ABE_L4_ABE_CLKCTRL_OFFSET,
150 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
156 static struct omap_hwmod omap54xx_l4_cfg_hwmod = {
158 .class = &omap54xx_l4_hwmod_class,
159 .clkdm_name = "l4cfg_clkdm",
162 .clkctrl_offs = OMAP54XX_CM_L4CFG_L4_CFG_CLKCTRL_OFFSET,
163 .context_offs = OMAP54XX_RM_L4CFG_L4_CFG_CONTEXT_OFFSET,
169 static struct omap_hwmod omap54xx_l4_per_hwmod = {
171 .class = &omap54xx_l4_hwmod_class,
172 .clkdm_name = "l4per_clkdm",
175 .clkctrl_offs = OMAP54XX_CM_L4PER_L4_PER_CLKCTRL_OFFSET,
176 .context_offs = OMAP54XX_RM_L4PER_L4_PER_CONTEXT_OFFSET,
182 static struct omap_hwmod omap54xx_l4_wkup_hwmod = {
184 .class = &omap54xx_l4_hwmod_class,
185 .clkdm_name = "wkupaon_clkdm",
188 .clkctrl_offs = OMAP54XX_CM_WKUPAON_L4_WKUP_CLKCTRL_OFFSET,
189 .context_offs = OMAP54XX_RM_WKUPAON_L4_WKUP_CONTEXT_OFFSET,
196 * instance(s): mpu_private
198 static struct omap_hwmod_class omap54xx_mpu_bus_hwmod_class = {
203 static struct omap_hwmod omap54xx_mpu_private_hwmod = {
204 .name = "mpu_private",
205 .class = &omap54xx_mpu_bus_hwmod_class,
206 .clkdm_name = "mpu_clkdm",
209 .flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
216 * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
219 static struct omap_hwmod_class_sysconfig omap54xx_counter_sysc = {
222 .sysc_flags = SYSC_HAS_SIDLEMODE,
223 .idlemodes = (SIDLE_FORCE | SIDLE_NO),
224 .sysc_fields = &omap_hwmod_sysc_type1,
227 static struct omap_hwmod_class omap54xx_counter_hwmod_class = {
229 .sysc = &omap54xx_counter_sysc,
233 static struct omap_hwmod omap54xx_counter_32k_hwmod = {
234 .name = "counter_32k",
235 .class = &omap54xx_counter_hwmod_class,
236 .clkdm_name = "wkupaon_clkdm",
237 .flags = HWMOD_SWSUP_SIDLE,
238 .main_clk = "wkupaon_iclk_mux",
241 .clkctrl_offs = OMAP54XX_CM_WKUPAON_COUNTER_32K_CLKCTRL_OFFSET,
242 .context_offs = OMAP54XX_RM_WKUPAON_COUNTER_32K_CONTEXT_OFFSET,
249 * dma controller for data exchange between memory to memory (i.e. internal or
250 * external memory) and gp peripherals to memory or memory to gp peripherals
253 static struct omap_hwmod_class_sysconfig omap54xx_dma_sysc = {
257 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
258 SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
259 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
260 SYSS_HAS_RESET_STATUS),
261 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
262 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
263 .sysc_fields = &omap_hwmod_sysc_type1,
266 static struct omap_hwmod_class omap54xx_dma_hwmod_class = {
268 .sysc = &omap54xx_dma_sysc,
272 static struct omap_dma_dev_attr dma_dev_attr = {
273 .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY |
274 IS_CSSA_32 | IS_CDSA_32 | IS_RW_PRIORITY,
279 static struct omap_hwmod_irq_info omap54xx_dma_system_irqs[] = {
280 { .name = "0", .irq = 12 + OMAP54XX_IRQ_GIC_START },
281 { .name = "1", .irq = 13 + OMAP54XX_IRQ_GIC_START },
282 { .name = "2", .irq = 14 + OMAP54XX_IRQ_GIC_START },
283 { .name = "3", .irq = 15 + OMAP54XX_IRQ_GIC_START },
287 static struct omap_hwmod omap54xx_dma_system_hwmod = {
288 .name = "dma_system",
289 .class = &omap54xx_dma_hwmod_class,
290 .clkdm_name = "dma_clkdm",
291 .mpu_irqs = omap54xx_dma_system_irqs,
292 .main_clk = "l3_iclk_div",
295 .clkctrl_offs = OMAP54XX_CM_DMA_DMA_SYSTEM_CLKCTRL_OFFSET,
296 .context_offs = OMAP54XX_RM_DMA_DMA_SYSTEM_CONTEXT_OFFSET,
299 .dev_attr = &dma_dev_attr,
304 * digital microphone controller
307 static struct omap_hwmod_class_sysconfig omap54xx_dmic_sysc = {
310 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
311 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
312 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
314 .sysc_fields = &omap_hwmod_sysc_type2,
317 static struct omap_hwmod_class omap54xx_dmic_hwmod_class = {
319 .sysc = &omap54xx_dmic_sysc,
323 static struct omap_hwmod omap54xx_dmic_hwmod = {
325 .class = &omap54xx_dmic_hwmod_class,
326 .clkdm_name = "abe_clkdm",
327 .main_clk = "dmic_gfclk",
330 .clkctrl_offs = OMAP54XX_CM_ABE_DMIC_CLKCTRL_OFFSET,
331 .context_offs = OMAP54XX_RM_ABE_DMIC_CONTEXT_OFFSET,
332 .modulemode = MODULEMODE_SWCTRL,
339 * external memory interface no1 (wrapper)
342 static struct omap_hwmod_class_sysconfig omap54xx_emif_sysc = {
346 static struct omap_hwmod_class omap54xx_emif_hwmod_class = {
348 .sysc = &omap54xx_emif_sysc,
352 static struct omap_hwmod omap54xx_emif1_hwmod = {
354 .class = &omap54xx_emif_hwmod_class,
355 .clkdm_name = "emif_clkdm",
356 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
357 .main_clk = "dpll_core_h11x2_ck",
360 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF1_CLKCTRL_OFFSET,
361 .context_offs = OMAP54XX_RM_EMIF_EMIF1_CONTEXT_OFFSET,
362 .modulemode = MODULEMODE_HWCTRL,
368 static struct omap_hwmod omap54xx_emif2_hwmod = {
370 .class = &omap54xx_emif_hwmod_class,
371 .clkdm_name = "emif_clkdm",
372 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
373 .main_clk = "dpll_core_h11x2_ck",
376 .clkctrl_offs = OMAP54XX_CM_EMIF_EMIF2_CLKCTRL_OFFSET,
377 .context_offs = OMAP54XX_RM_EMIF_EMIF2_CONTEXT_OFFSET,
378 .modulemode = MODULEMODE_HWCTRL,
385 * general purpose io module
388 static struct omap_hwmod_class_sysconfig omap54xx_gpio_sysc = {
392 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
393 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
394 SYSS_HAS_RESET_STATUS),
395 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
397 .sysc_fields = &omap_hwmod_sysc_type1,
400 static struct omap_hwmod_class omap54xx_gpio_hwmod_class = {
402 .sysc = &omap54xx_gpio_sysc,
407 static struct omap_gpio_dev_attr gpio_dev_attr = {
413 static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
414 { .role = "dbclk", .clk = "gpio1_dbclk" },
417 static struct omap_hwmod omap54xx_gpio1_hwmod = {
419 .class = &omap54xx_gpio_hwmod_class,
420 .clkdm_name = "wkupaon_clkdm",
421 .main_clk = "wkupaon_iclk_mux",
424 .clkctrl_offs = OMAP54XX_CM_WKUPAON_GPIO1_CLKCTRL_OFFSET,
425 .context_offs = OMAP54XX_RM_WKUPAON_GPIO1_CONTEXT_OFFSET,
426 .modulemode = MODULEMODE_HWCTRL,
429 .opt_clks = gpio1_opt_clks,
430 .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
431 .dev_attr = &gpio_dev_attr,
435 static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
436 { .role = "dbclk", .clk = "gpio2_dbclk" },
439 static struct omap_hwmod omap54xx_gpio2_hwmod = {
441 .class = &omap54xx_gpio_hwmod_class,
442 .clkdm_name = "l4per_clkdm",
443 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
444 .main_clk = "l4_root_clk_div",
447 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO2_CLKCTRL_OFFSET,
448 .context_offs = OMAP54XX_RM_L4PER_GPIO2_CONTEXT_OFFSET,
449 .modulemode = MODULEMODE_HWCTRL,
452 .opt_clks = gpio2_opt_clks,
453 .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
454 .dev_attr = &gpio_dev_attr,
458 static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
459 { .role = "dbclk", .clk = "gpio3_dbclk" },
462 static struct omap_hwmod omap54xx_gpio3_hwmod = {
464 .class = &omap54xx_gpio_hwmod_class,
465 .clkdm_name = "l4per_clkdm",
466 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
467 .main_clk = "l4_root_clk_div",
470 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO3_CLKCTRL_OFFSET,
471 .context_offs = OMAP54XX_RM_L4PER_GPIO3_CONTEXT_OFFSET,
472 .modulemode = MODULEMODE_HWCTRL,
475 .opt_clks = gpio3_opt_clks,
476 .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
477 .dev_attr = &gpio_dev_attr,
481 static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
482 { .role = "dbclk", .clk = "gpio4_dbclk" },
485 static struct omap_hwmod omap54xx_gpio4_hwmod = {
487 .class = &omap54xx_gpio_hwmod_class,
488 .clkdm_name = "l4per_clkdm",
489 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
490 .main_clk = "l4_root_clk_div",
493 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO4_CLKCTRL_OFFSET,
494 .context_offs = OMAP54XX_RM_L4PER_GPIO4_CONTEXT_OFFSET,
495 .modulemode = MODULEMODE_HWCTRL,
498 .opt_clks = gpio4_opt_clks,
499 .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
500 .dev_attr = &gpio_dev_attr,
504 static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
505 { .role = "dbclk", .clk = "gpio5_dbclk" },
508 static struct omap_hwmod omap54xx_gpio5_hwmod = {
510 .class = &omap54xx_gpio_hwmod_class,
511 .clkdm_name = "l4per_clkdm",
512 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
513 .main_clk = "l4_root_clk_div",
516 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO5_CLKCTRL_OFFSET,
517 .context_offs = OMAP54XX_RM_L4PER_GPIO5_CONTEXT_OFFSET,
518 .modulemode = MODULEMODE_HWCTRL,
521 .opt_clks = gpio5_opt_clks,
522 .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
523 .dev_attr = &gpio_dev_attr,
527 static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
528 { .role = "dbclk", .clk = "gpio6_dbclk" },
531 static struct omap_hwmod omap54xx_gpio6_hwmod = {
533 .class = &omap54xx_gpio_hwmod_class,
534 .clkdm_name = "l4per_clkdm",
535 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
536 .main_clk = "l4_root_clk_div",
539 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO6_CLKCTRL_OFFSET,
540 .context_offs = OMAP54XX_RM_L4PER_GPIO6_CONTEXT_OFFSET,
541 .modulemode = MODULEMODE_HWCTRL,
544 .opt_clks = gpio6_opt_clks,
545 .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
546 .dev_attr = &gpio_dev_attr,
550 static struct omap_hwmod_opt_clk gpio7_opt_clks[] = {
551 { .role = "dbclk", .clk = "gpio7_dbclk" },
554 static struct omap_hwmod omap54xx_gpio7_hwmod = {
556 .class = &omap54xx_gpio_hwmod_class,
557 .clkdm_name = "l4per_clkdm",
558 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
559 .main_clk = "l4_root_clk_div",
562 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO7_CLKCTRL_OFFSET,
563 .context_offs = OMAP54XX_RM_L4PER_GPIO7_CONTEXT_OFFSET,
564 .modulemode = MODULEMODE_HWCTRL,
567 .opt_clks = gpio7_opt_clks,
568 .opt_clks_cnt = ARRAY_SIZE(gpio7_opt_clks),
569 .dev_attr = &gpio_dev_attr,
573 static struct omap_hwmod_opt_clk gpio8_opt_clks[] = {
574 { .role = "dbclk", .clk = "gpio8_dbclk" },
577 static struct omap_hwmod omap54xx_gpio8_hwmod = {
579 .class = &omap54xx_gpio_hwmod_class,
580 .clkdm_name = "l4per_clkdm",
581 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
582 .main_clk = "l4_root_clk_div",
585 .clkctrl_offs = OMAP54XX_CM_L4PER_GPIO8_CLKCTRL_OFFSET,
586 .context_offs = OMAP54XX_RM_L4PER_GPIO8_CONTEXT_OFFSET,
587 .modulemode = MODULEMODE_HWCTRL,
590 .opt_clks = gpio8_opt_clks,
591 .opt_clks_cnt = ARRAY_SIZE(gpio8_opt_clks),
592 .dev_attr = &gpio_dev_attr,
597 * multimaster high-speed i2c controller
600 static struct omap_hwmod_class_sysconfig omap54xx_i2c_sysc = {
603 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
604 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
605 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
606 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
608 .clockact = CLOCKACT_TEST_ICLK,
609 .sysc_fields = &omap_hwmod_sysc_type1,
612 static struct omap_hwmod_class omap54xx_i2c_hwmod_class = {
614 .sysc = &omap54xx_i2c_sysc,
615 .reset = &omap_i2c_reset,
616 .rev = OMAP_I2C_IP_VERSION_2,
620 static struct omap_i2c_dev_attr i2c_dev_attr = {
621 .flags = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
625 static struct omap_hwmod omap54xx_i2c1_hwmod = {
627 .class = &omap54xx_i2c_hwmod_class,
628 .clkdm_name = "l4per_clkdm",
629 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
630 .main_clk = "func_96m_fclk",
633 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C1_CLKCTRL_OFFSET,
634 .context_offs = OMAP54XX_RM_L4PER_I2C1_CONTEXT_OFFSET,
635 .modulemode = MODULEMODE_SWCTRL,
638 .dev_attr = &i2c_dev_attr,
642 static struct omap_hwmod omap54xx_i2c2_hwmod = {
644 .class = &omap54xx_i2c_hwmod_class,
645 .clkdm_name = "l4per_clkdm",
646 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
647 .main_clk = "func_96m_fclk",
650 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C2_CLKCTRL_OFFSET,
651 .context_offs = OMAP54XX_RM_L4PER_I2C2_CONTEXT_OFFSET,
652 .modulemode = MODULEMODE_SWCTRL,
655 .dev_attr = &i2c_dev_attr,
659 static struct omap_hwmod omap54xx_i2c3_hwmod = {
661 .class = &omap54xx_i2c_hwmod_class,
662 .clkdm_name = "l4per_clkdm",
663 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
664 .main_clk = "func_96m_fclk",
667 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C3_CLKCTRL_OFFSET,
668 .context_offs = OMAP54XX_RM_L4PER_I2C3_CONTEXT_OFFSET,
669 .modulemode = MODULEMODE_SWCTRL,
672 .dev_attr = &i2c_dev_attr,
676 static struct omap_hwmod omap54xx_i2c4_hwmod = {
678 .class = &omap54xx_i2c_hwmod_class,
679 .clkdm_name = "l4per_clkdm",
680 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
681 .main_clk = "func_96m_fclk",
684 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C4_CLKCTRL_OFFSET,
685 .context_offs = OMAP54XX_RM_L4PER_I2C4_CONTEXT_OFFSET,
686 .modulemode = MODULEMODE_SWCTRL,
689 .dev_attr = &i2c_dev_attr,
693 static struct omap_hwmod omap54xx_i2c5_hwmod = {
695 .class = &omap54xx_i2c_hwmod_class,
696 .clkdm_name = "l4per_clkdm",
697 .flags = HWMOD_16BIT_REG | HWMOD_SET_DEFAULT_CLOCKACT,
698 .main_clk = "func_96m_fclk",
701 .clkctrl_offs = OMAP54XX_CM_L4PER_I2C5_CLKCTRL_OFFSET,
702 .context_offs = OMAP54XX_RM_L4PER_I2C5_CONTEXT_OFFSET,
703 .modulemode = MODULEMODE_SWCTRL,
706 .dev_attr = &i2c_dev_attr,
711 * keyboard controller
714 static struct omap_hwmod_class_sysconfig omap54xx_kbd_sysc = {
717 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
719 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
720 .sysc_fields = &omap_hwmod_sysc_type1,
723 static struct omap_hwmod_class omap54xx_kbd_hwmod_class = {
725 .sysc = &omap54xx_kbd_sysc,
729 static struct omap_hwmod omap54xx_kbd_hwmod = {
731 .class = &omap54xx_kbd_hwmod_class,
732 .clkdm_name = "wkupaon_clkdm",
733 .main_clk = "sys_32k_ck",
736 .clkctrl_offs = OMAP54XX_CM_WKUPAON_KBD_CLKCTRL_OFFSET,
737 .context_offs = OMAP54XX_RM_WKUPAON_KBD_CONTEXT_OFFSET,
738 .modulemode = MODULEMODE_SWCTRL,
745 * mailbox module allowing communication between the on-chip processors using a
746 * queued mailbox-interrupt mechanism.
749 static struct omap_hwmod_class_sysconfig omap54xx_mailbox_sysc = {
752 .sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
754 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
755 .sysc_fields = &omap_hwmod_sysc_type2,
758 static struct omap_hwmod_class omap54xx_mailbox_hwmod_class = {
760 .sysc = &omap54xx_mailbox_sysc,
764 static struct omap_hwmod omap54xx_mailbox_hwmod = {
766 .class = &omap54xx_mailbox_hwmod_class,
767 .clkdm_name = "l4cfg_clkdm",
770 .clkctrl_offs = OMAP54XX_CM_L4CFG_MAILBOX_CLKCTRL_OFFSET,
771 .context_offs = OMAP54XX_RM_L4CFG_MAILBOX_CONTEXT_OFFSET,
778 * multi channel buffered serial port controller
781 static struct omap_hwmod_class_sysconfig omap54xx_mcbsp_sysc = {
783 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_ENAWAKEUP |
784 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
785 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
786 .sysc_fields = &omap_hwmod_sysc_type1,
789 static struct omap_hwmod_class omap54xx_mcbsp_hwmod_class = {
791 .sysc = &omap54xx_mcbsp_sysc,
792 .rev = MCBSP_CONFIG_TYPE4,
796 static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
797 { .role = "pad_fck", .clk = "pad_clks_ck" },
798 { .role = "prcm_fck", .clk = "mcbsp1_sync_mux_ck" },
801 static struct omap_hwmod omap54xx_mcbsp1_hwmod = {
803 .class = &omap54xx_mcbsp_hwmod_class,
804 .clkdm_name = "abe_clkdm",
805 .main_clk = "mcbsp1_gfclk",
808 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP1_CLKCTRL_OFFSET,
809 .context_offs = OMAP54XX_RM_ABE_MCBSP1_CONTEXT_OFFSET,
810 .modulemode = MODULEMODE_SWCTRL,
813 .opt_clks = mcbsp1_opt_clks,
814 .opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
818 static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
819 { .role = "pad_fck", .clk = "pad_clks_ck" },
820 { .role = "prcm_fck", .clk = "mcbsp2_sync_mux_ck" },
823 static struct omap_hwmod omap54xx_mcbsp2_hwmod = {
825 .class = &omap54xx_mcbsp_hwmod_class,
826 .clkdm_name = "abe_clkdm",
827 .main_clk = "mcbsp2_gfclk",
830 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP2_CLKCTRL_OFFSET,
831 .context_offs = OMAP54XX_RM_ABE_MCBSP2_CONTEXT_OFFSET,
832 .modulemode = MODULEMODE_SWCTRL,
835 .opt_clks = mcbsp2_opt_clks,
836 .opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
840 static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
841 { .role = "pad_fck", .clk = "pad_clks_ck" },
842 { .role = "prcm_fck", .clk = "mcbsp3_sync_mux_ck" },
845 static struct omap_hwmod omap54xx_mcbsp3_hwmod = {
847 .class = &omap54xx_mcbsp_hwmod_class,
848 .clkdm_name = "abe_clkdm",
849 .main_clk = "mcbsp3_gfclk",
852 .clkctrl_offs = OMAP54XX_CM_ABE_MCBSP3_CLKCTRL_OFFSET,
853 .context_offs = OMAP54XX_RM_ABE_MCBSP3_CONTEXT_OFFSET,
854 .modulemode = MODULEMODE_SWCTRL,
857 .opt_clks = mcbsp3_opt_clks,
858 .opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
863 * multi channel pdm controller (proprietary interface with phoenix power
867 static struct omap_hwmod_class_sysconfig omap54xx_mcpdm_sysc = {
870 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
871 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
872 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
874 .sysc_fields = &omap_hwmod_sysc_type2,
877 static struct omap_hwmod_class omap54xx_mcpdm_hwmod_class = {
879 .sysc = &omap54xx_mcpdm_sysc,
883 static struct omap_hwmod omap54xx_mcpdm_hwmod = {
885 .class = &omap54xx_mcpdm_hwmod_class,
886 .clkdm_name = "abe_clkdm",
888 * It's suspected that the McPDM requires an off-chip main
889 * functional clock, controlled via I2C. This IP block is
890 * currently reset very early during boot, before I2C is
891 * available, so it doesn't seem that we have any choice in
892 * the kernel other than to avoid resetting it. XXX This is
893 * really a hardware issue workaround: every IP block should
894 * be able to source its main functional clock from either
895 * on-chip or off-chip sources. McPDM seems to be the only
899 .flags = HWMOD_EXT_OPT_MAIN_CLK,
900 .main_clk = "pad_clks_ck",
903 .clkctrl_offs = OMAP54XX_CM_ABE_MCPDM_CLKCTRL_OFFSET,
904 .context_offs = OMAP54XX_RM_ABE_MCPDM_CONTEXT_OFFSET,
905 .modulemode = MODULEMODE_SWCTRL,
912 * multichannel serial port interface (mcspi) / master/slave synchronous serial
916 static struct omap_hwmod_class_sysconfig omap54xx_mcspi_sysc = {
919 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
920 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
921 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
923 .sysc_fields = &omap_hwmod_sysc_type2,
926 static struct omap_hwmod_class omap54xx_mcspi_hwmod_class = {
928 .sysc = &omap54xx_mcspi_sysc,
929 .rev = OMAP4_MCSPI_REV,
933 /* mcspi1 dev_attr */
934 static struct omap2_mcspi_dev_attr mcspi1_dev_attr = {
938 static struct omap_hwmod omap54xx_mcspi1_hwmod = {
940 .class = &omap54xx_mcspi_hwmod_class,
941 .clkdm_name = "l4per_clkdm",
942 .main_clk = "func_48m_fclk",
945 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI1_CLKCTRL_OFFSET,
946 .context_offs = OMAP54XX_RM_L4PER_MCSPI1_CONTEXT_OFFSET,
947 .modulemode = MODULEMODE_SWCTRL,
950 .dev_attr = &mcspi1_dev_attr,
954 /* mcspi2 dev_attr */
955 static struct omap2_mcspi_dev_attr mcspi2_dev_attr = {
959 static struct omap_hwmod omap54xx_mcspi2_hwmod = {
961 .class = &omap54xx_mcspi_hwmod_class,
962 .clkdm_name = "l4per_clkdm",
963 .main_clk = "func_48m_fclk",
966 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI2_CLKCTRL_OFFSET,
967 .context_offs = OMAP54XX_RM_L4PER_MCSPI2_CONTEXT_OFFSET,
968 .modulemode = MODULEMODE_SWCTRL,
971 .dev_attr = &mcspi2_dev_attr,
975 /* mcspi3 dev_attr */
976 static struct omap2_mcspi_dev_attr mcspi3_dev_attr = {
980 static struct omap_hwmod omap54xx_mcspi3_hwmod = {
982 .class = &omap54xx_mcspi_hwmod_class,
983 .clkdm_name = "l4per_clkdm",
984 .main_clk = "func_48m_fclk",
987 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI3_CLKCTRL_OFFSET,
988 .context_offs = OMAP54XX_RM_L4PER_MCSPI3_CONTEXT_OFFSET,
989 .modulemode = MODULEMODE_SWCTRL,
992 .dev_attr = &mcspi3_dev_attr,
996 /* mcspi4 dev_attr */
997 static struct omap2_mcspi_dev_attr mcspi4_dev_attr = {
1001 static struct omap_hwmod omap54xx_mcspi4_hwmod = {
1003 .class = &omap54xx_mcspi_hwmod_class,
1004 .clkdm_name = "l4per_clkdm",
1005 .main_clk = "func_48m_fclk",
1008 .clkctrl_offs = OMAP54XX_CM_L4PER_MCSPI4_CLKCTRL_OFFSET,
1009 .context_offs = OMAP54XX_RM_L4PER_MCSPI4_CONTEXT_OFFSET,
1010 .modulemode = MODULEMODE_SWCTRL,
1013 .dev_attr = &mcspi4_dev_attr,
1018 * multimedia card high-speed/sd/sdio (mmc/sd/sdio) host controller
1021 static struct omap_hwmod_class_sysconfig omap54xx_mmc_sysc = {
1023 .sysc_offs = 0x0010,
1024 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_MIDLEMODE |
1025 SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
1026 SYSC_HAS_SOFTRESET),
1027 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1028 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1029 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1030 .sysc_fields = &omap_hwmod_sysc_type2,
1033 static struct omap_hwmod_class omap54xx_mmc_hwmod_class = {
1035 .sysc = &omap54xx_mmc_sysc,
1039 static struct omap_hwmod_opt_clk mmc1_opt_clks[] = {
1040 { .role = "32khz_clk", .clk = "mmc1_32khz_clk" },
1044 static struct omap_mmc_dev_attr mmc1_dev_attr = {
1045 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
1048 static struct omap_hwmod omap54xx_mmc1_hwmod = {
1050 .class = &omap54xx_mmc_hwmod_class,
1051 .clkdm_name = "l3init_clkdm",
1052 .main_clk = "mmc1_fclk",
1055 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC1_CLKCTRL_OFFSET,
1056 .context_offs = OMAP54XX_RM_L3INIT_MMC1_CONTEXT_OFFSET,
1057 .modulemode = MODULEMODE_SWCTRL,
1060 .opt_clks = mmc1_opt_clks,
1061 .opt_clks_cnt = ARRAY_SIZE(mmc1_opt_clks),
1062 .dev_attr = &mmc1_dev_attr,
1066 static struct omap_hwmod omap54xx_mmc2_hwmod = {
1068 .class = &omap54xx_mmc_hwmod_class,
1069 .clkdm_name = "l3init_clkdm",
1070 .main_clk = "mmc2_fclk",
1073 .clkctrl_offs = OMAP54XX_CM_L3INIT_MMC2_CLKCTRL_OFFSET,
1074 .context_offs = OMAP54XX_RM_L3INIT_MMC2_CONTEXT_OFFSET,
1075 .modulemode = MODULEMODE_SWCTRL,
1081 static struct omap_hwmod omap54xx_mmc3_hwmod = {
1083 .class = &omap54xx_mmc_hwmod_class,
1084 .clkdm_name = "l4per_clkdm",
1085 .main_clk = "func_48m_fclk",
1088 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC3_CLKCTRL_OFFSET,
1089 .context_offs = OMAP54XX_RM_L4PER_MMC3_CONTEXT_OFFSET,
1090 .modulemode = MODULEMODE_SWCTRL,
1096 static struct omap_hwmod omap54xx_mmc4_hwmod = {
1098 .class = &omap54xx_mmc_hwmod_class,
1099 .clkdm_name = "l4per_clkdm",
1100 .main_clk = "func_48m_fclk",
1103 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC4_CLKCTRL_OFFSET,
1104 .context_offs = OMAP54XX_RM_L4PER_MMC4_CONTEXT_OFFSET,
1105 .modulemode = MODULEMODE_SWCTRL,
1111 static struct omap_hwmod omap54xx_mmc5_hwmod = {
1113 .class = &omap54xx_mmc_hwmod_class,
1114 .clkdm_name = "l4per_clkdm",
1115 .main_clk = "func_96m_fclk",
1118 .clkctrl_offs = OMAP54XX_CM_L4PER_MMC5_CLKCTRL_OFFSET,
1119 .context_offs = OMAP54XX_RM_L4PER_MMC5_CONTEXT_OFFSET,
1120 .modulemode = MODULEMODE_SWCTRL,
1130 static struct omap_hwmod_class omap54xx_mpu_hwmod_class = {
1135 static struct omap_hwmod omap54xx_mpu_hwmod = {
1137 .class = &omap54xx_mpu_hwmod_class,
1138 .clkdm_name = "mpu_clkdm",
1139 .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET,
1140 .main_clk = "dpll_mpu_m2_ck",
1143 .clkctrl_offs = OMAP54XX_CM_MPU_MPU_CLKCTRL_OFFSET,
1144 .context_offs = OMAP54XX_RM_MPU_MPU_CONTEXT_OFFSET,
1151 * general purpose timer module with accurate 1ms tick
1152 * This class contains several variants: ['timer_1ms', 'timer']
1155 static struct omap_hwmod_class_sysconfig omap54xx_timer_1ms_sysc = {
1157 .sysc_offs = 0x0010,
1158 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1159 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1160 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1162 .sysc_fields = &omap_hwmod_sysc_type2,
1163 .clockact = CLOCKACT_TEST_ICLK,
1166 static struct omap_hwmod_class omap54xx_timer_1ms_hwmod_class = {
1168 .sysc = &omap54xx_timer_1ms_sysc,
1171 static struct omap_hwmod_class_sysconfig omap54xx_timer_sysc = {
1173 .sysc_offs = 0x0010,
1174 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_RESET_STATUS |
1175 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
1176 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1178 .sysc_fields = &omap_hwmod_sysc_type2,
1181 static struct omap_hwmod_class omap54xx_timer_hwmod_class = {
1183 .sysc = &omap54xx_timer_sysc,
1187 static struct omap_hwmod omap54xx_timer1_hwmod = {
1189 .class = &omap54xx_timer_1ms_hwmod_class,
1190 .clkdm_name = "wkupaon_clkdm",
1191 .main_clk = "timer1_gfclk_mux",
1192 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1195 .clkctrl_offs = OMAP54XX_CM_WKUPAON_TIMER1_CLKCTRL_OFFSET,
1196 .context_offs = OMAP54XX_RM_WKUPAON_TIMER1_CONTEXT_OFFSET,
1197 .modulemode = MODULEMODE_SWCTRL,
1203 static struct omap_hwmod omap54xx_timer2_hwmod = {
1205 .class = &omap54xx_timer_1ms_hwmod_class,
1206 .clkdm_name = "l4per_clkdm",
1207 .main_clk = "timer2_gfclk_mux",
1208 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1211 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER2_CLKCTRL_OFFSET,
1212 .context_offs = OMAP54XX_RM_L4PER_TIMER2_CONTEXT_OFFSET,
1213 .modulemode = MODULEMODE_SWCTRL,
1219 static struct omap_hwmod omap54xx_timer3_hwmod = {
1221 .class = &omap54xx_timer_hwmod_class,
1222 .clkdm_name = "l4per_clkdm",
1223 .main_clk = "timer3_gfclk_mux",
1226 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER3_CLKCTRL_OFFSET,
1227 .context_offs = OMAP54XX_RM_L4PER_TIMER3_CONTEXT_OFFSET,
1228 .modulemode = MODULEMODE_SWCTRL,
1234 static struct omap_hwmod omap54xx_timer4_hwmod = {
1236 .class = &omap54xx_timer_hwmod_class,
1237 .clkdm_name = "l4per_clkdm",
1238 .main_clk = "timer4_gfclk_mux",
1241 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER4_CLKCTRL_OFFSET,
1242 .context_offs = OMAP54XX_RM_L4PER_TIMER4_CONTEXT_OFFSET,
1243 .modulemode = MODULEMODE_SWCTRL,
1249 static struct omap_hwmod omap54xx_timer5_hwmod = {
1251 .class = &omap54xx_timer_hwmod_class,
1252 .clkdm_name = "abe_clkdm",
1253 .main_clk = "timer5_gfclk_mux",
1256 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER5_CLKCTRL_OFFSET,
1257 .context_offs = OMAP54XX_RM_ABE_TIMER5_CONTEXT_OFFSET,
1258 .modulemode = MODULEMODE_SWCTRL,
1264 static struct omap_hwmod omap54xx_timer6_hwmod = {
1266 .class = &omap54xx_timer_hwmod_class,
1267 .clkdm_name = "abe_clkdm",
1268 .main_clk = "timer6_gfclk_mux",
1271 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER6_CLKCTRL_OFFSET,
1272 .context_offs = OMAP54XX_RM_ABE_TIMER6_CONTEXT_OFFSET,
1273 .modulemode = MODULEMODE_SWCTRL,
1279 static struct omap_hwmod omap54xx_timer7_hwmod = {
1281 .class = &omap54xx_timer_hwmod_class,
1282 .clkdm_name = "abe_clkdm",
1283 .main_clk = "timer7_gfclk_mux",
1286 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER7_CLKCTRL_OFFSET,
1287 .context_offs = OMAP54XX_RM_ABE_TIMER7_CONTEXT_OFFSET,
1288 .modulemode = MODULEMODE_SWCTRL,
1294 static struct omap_hwmod omap54xx_timer8_hwmod = {
1296 .class = &omap54xx_timer_hwmod_class,
1297 .clkdm_name = "abe_clkdm",
1298 .main_clk = "timer8_gfclk_mux",
1301 .clkctrl_offs = OMAP54XX_CM_ABE_TIMER8_CLKCTRL_OFFSET,
1302 .context_offs = OMAP54XX_RM_ABE_TIMER8_CONTEXT_OFFSET,
1303 .modulemode = MODULEMODE_SWCTRL,
1309 static struct omap_hwmod omap54xx_timer9_hwmod = {
1311 .class = &omap54xx_timer_hwmod_class,
1312 .clkdm_name = "l4per_clkdm",
1313 .main_clk = "timer9_gfclk_mux",
1316 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER9_CLKCTRL_OFFSET,
1317 .context_offs = OMAP54XX_RM_L4PER_TIMER9_CONTEXT_OFFSET,
1318 .modulemode = MODULEMODE_SWCTRL,
1324 static struct omap_hwmod omap54xx_timer10_hwmod = {
1326 .class = &omap54xx_timer_1ms_hwmod_class,
1327 .clkdm_name = "l4per_clkdm",
1328 .main_clk = "timer10_gfclk_mux",
1329 .flags = HWMOD_SET_DEFAULT_CLOCKACT,
1332 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER10_CLKCTRL_OFFSET,
1333 .context_offs = OMAP54XX_RM_L4PER_TIMER10_CONTEXT_OFFSET,
1334 .modulemode = MODULEMODE_SWCTRL,
1340 static struct omap_hwmod omap54xx_timer11_hwmod = {
1342 .class = &omap54xx_timer_hwmod_class,
1343 .clkdm_name = "l4per_clkdm",
1344 .main_clk = "timer11_gfclk_mux",
1347 .clkctrl_offs = OMAP54XX_CM_L4PER_TIMER11_CLKCTRL_OFFSET,
1348 .context_offs = OMAP54XX_RM_L4PER_TIMER11_CONTEXT_OFFSET,
1349 .modulemode = MODULEMODE_SWCTRL,
1356 * universal asynchronous receiver/transmitter (uart)
1359 static struct omap_hwmod_class_sysconfig omap54xx_uart_sysc = {
1361 .sysc_offs = 0x0054,
1362 .syss_offs = 0x0058,
1363 .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_ENAWAKEUP |
1364 SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
1365 SYSS_HAS_RESET_STATUS),
1366 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1368 .sysc_fields = &omap_hwmod_sysc_type1,
1371 static struct omap_hwmod_class omap54xx_uart_hwmod_class = {
1373 .sysc = &omap54xx_uart_sysc,
1377 static struct omap_hwmod omap54xx_uart1_hwmod = {
1379 .class = &omap54xx_uart_hwmod_class,
1380 .clkdm_name = "l4per_clkdm",
1381 .main_clk = "func_48m_fclk",
1384 .clkctrl_offs = OMAP54XX_CM_L4PER_UART1_CLKCTRL_OFFSET,
1385 .context_offs = OMAP54XX_RM_L4PER_UART1_CONTEXT_OFFSET,
1386 .modulemode = MODULEMODE_SWCTRL,
1392 static struct omap_hwmod omap54xx_uart2_hwmod = {
1394 .class = &omap54xx_uart_hwmod_class,
1395 .clkdm_name = "l4per_clkdm",
1396 .main_clk = "func_48m_fclk",
1399 .clkctrl_offs = OMAP54XX_CM_L4PER_UART2_CLKCTRL_OFFSET,
1400 .context_offs = OMAP54XX_RM_L4PER_UART2_CONTEXT_OFFSET,
1401 .modulemode = MODULEMODE_SWCTRL,
1407 static struct omap_hwmod omap54xx_uart3_hwmod = {
1409 .class = &omap54xx_uart_hwmod_class,
1410 .clkdm_name = "l4per_clkdm",
1411 .flags = DEBUG_OMAP4UART3_FLAGS,
1412 .main_clk = "func_48m_fclk",
1415 .clkctrl_offs = OMAP54XX_CM_L4PER_UART3_CLKCTRL_OFFSET,
1416 .context_offs = OMAP54XX_RM_L4PER_UART3_CONTEXT_OFFSET,
1417 .modulemode = MODULEMODE_SWCTRL,
1423 static struct omap_hwmod omap54xx_uart4_hwmod = {
1425 .class = &omap54xx_uart_hwmod_class,
1426 .clkdm_name = "l4per_clkdm",
1427 .flags = DEBUG_OMAP4UART4_FLAGS,
1428 .main_clk = "func_48m_fclk",
1431 .clkctrl_offs = OMAP54XX_CM_L4PER_UART4_CLKCTRL_OFFSET,
1432 .context_offs = OMAP54XX_RM_L4PER_UART4_CONTEXT_OFFSET,
1433 .modulemode = MODULEMODE_SWCTRL,
1439 static struct omap_hwmod omap54xx_uart5_hwmod = {
1441 .class = &omap54xx_uart_hwmod_class,
1442 .clkdm_name = "l4per_clkdm",
1443 .main_clk = "func_48m_fclk",
1446 .clkctrl_offs = OMAP54XX_CM_L4PER_UART5_CLKCTRL_OFFSET,
1447 .context_offs = OMAP54XX_RM_L4PER_UART5_CONTEXT_OFFSET,
1448 .modulemode = MODULEMODE_SWCTRL,
1454 static struct omap_hwmod omap54xx_uart6_hwmod = {
1456 .class = &omap54xx_uart_hwmod_class,
1457 .clkdm_name = "l4per_clkdm",
1458 .main_clk = "func_48m_fclk",
1461 .clkctrl_offs = OMAP54XX_CM_L4PER_UART6_CLKCTRL_OFFSET,
1462 .context_offs = OMAP54XX_RM_L4PER_UART6_CONTEXT_OFFSET,
1463 .modulemode = MODULEMODE_SWCTRL,
1469 * 'usb_otg_ss' class
1470 * 2.0 super speed (usb_otg_ss) controller
1473 static struct omap_hwmod_class_sysconfig omap54xx_usb_otg_ss_sysc = {
1475 .sysc_offs = 0x0010,
1476 .sysc_flags = (SYSC_HAS_DMADISABLE | SYSC_HAS_MIDLEMODE |
1477 SYSC_HAS_SIDLEMODE),
1478 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1479 SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
1480 MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
1481 .sysc_fields = &omap_hwmod_sysc_type2,
1484 static struct omap_hwmod_class omap54xx_usb_otg_ss_hwmod_class = {
1485 .name = "usb_otg_ss",
1486 .sysc = &omap54xx_usb_otg_ss_sysc,
1490 static struct omap_hwmod_opt_clk usb_otg_ss_opt_clks[] = {
1491 { .role = "refclk960m", .clk = "usb_otg_ss_refclk960m" },
1494 static struct omap_hwmod omap54xx_usb_otg_ss_hwmod = {
1495 .name = "usb_otg_ss",
1496 .class = &omap54xx_usb_otg_ss_hwmod_class,
1497 .clkdm_name = "l3init_clkdm",
1498 .flags = HWMOD_SWSUP_SIDLE,
1499 .main_clk = "dpll_core_h13x2_ck",
1502 .clkctrl_offs = OMAP54XX_CM_L3INIT_USB_OTG_SS_CLKCTRL_OFFSET,
1503 .context_offs = OMAP54XX_RM_L3INIT_USB_OTG_SS_CONTEXT_OFFSET,
1504 .modulemode = MODULEMODE_HWCTRL,
1507 .opt_clks = usb_otg_ss_opt_clks,
1508 .opt_clks_cnt = ARRAY_SIZE(usb_otg_ss_opt_clks),
1513 * 32-bit watchdog upward counter that generates a pulse on the reset pin on
1514 * overflow condition
1517 static struct omap_hwmod_class_sysconfig omap54xx_wd_timer_sysc = {
1519 .sysc_offs = 0x0010,
1520 .syss_offs = 0x0014,
1521 .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SIDLEMODE |
1522 SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
1523 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
1525 .sysc_fields = &omap_hwmod_sysc_type1,
1528 static struct omap_hwmod_class omap54xx_wd_timer_hwmod_class = {
1530 .sysc = &omap54xx_wd_timer_sysc,
1531 .pre_shutdown = &omap2_wd_timer_disable,
1535 static struct omap_hwmod omap54xx_wd_timer2_hwmod = {
1536 .name = "wd_timer2",
1537 .class = &omap54xx_wd_timer_hwmod_class,
1538 .clkdm_name = "wkupaon_clkdm",
1539 .main_clk = "sys_32k_ck",
1542 .clkctrl_offs = OMAP54XX_CM_WKUPAON_WD_TIMER2_CLKCTRL_OFFSET,
1543 .context_offs = OMAP54XX_RM_WKUPAON_WD_TIMER2_CONTEXT_OFFSET,
1544 .modulemode = MODULEMODE_SWCTRL,
1554 /* l3_main_1 -> dmm */
1555 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__dmm = {
1556 .master = &omap54xx_l3_main_1_hwmod,
1557 .slave = &omap54xx_dmm_hwmod,
1558 .clk = "l3_iclk_div",
1559 .user = OCP_USER_SDMA,
1562 /* l3_main_3 -> l3_instr */
1563 static struct omap_hwmod_ocp_if omap54xx_l3_main_3__l3_instr = {
1564 .master = &omap54xx_l3_main_3_hwmod,
1565 .slave = &omap54xx_l3_instr_hwmod,
1566 .clk = "l3_iclk_div",
1567 .user = OCP_USER_MPU | OCP_USER_SDMA,
1570 /* l3_main_2 -> l3_main_1 */
1571 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_1 = {
1572 .master = &omap54xx_l3_main_2_hwmod,
1573 .slave = &omap54xx_l3_main_1_hwmod,
1574 .clk = "l3_iclk_div",
1575 .user = OCP_USER_MPU | OCP_USER_SDMA,
1578 /* l4_cfg -> l3_main_1 */
1579 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_1 = {
1580 .master = &omap54xx_l4_cfg_hwmod,
1581 .slave = &omap54xx_l3_main_1_hwmod,
1582 .clk = "l3_iclk_div",
1583 .user = OCP_USER_MPU | OCP_USER_SDMA,
1586 /* mpu -> l3_main_1 */
1587 static struct omap_hwmod_ocp_if omap54xx_mpu__l3_main_1 = {
1588 .master = &omap54xx_mpu_hwmod,
1589 .slave = &omap54xx_l3_main_1_hwmod,
1590 .clk = "l3_iclk_div",
1591 .user = OCP_USER_MPU,
1594 /* l3_main_1 -> l3_main_2 */
1595 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_2 = {
1596 .master = &omap54xx_l3_main_1_hwmod,
1597 .slave = &omap54xx_l3_main_2_hwmod,
1598 .clk = "l3_iclk_div",
1599 .user = OCP_USER_MPU,
1602 /* l4_cfg -> l3_main_2 */
1603 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_2 = {
1604 .master = &omap54xx_l4_cfg_hwmod,
1605 .slave = &omap54xx_l3_main_2_hwmod,
1606 .clk = "l3_iclk_div",
1607 .user = OCP_USER_MPU | OCP_USER_SDMA,
1610 /* l3_main_1 -> l3_main_3 */
1611 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l3_main_3 = {
1612 .master = &omap54xx_l3_main_1_hwmod,
1613 .slave = &omap54xx_l3_main_3_hwmod,
1614 .clk = "l3_iclk_div",
1615 .user = OCP_USER_MPU,
1618 /* l3_main_2 -> l3_main_3 */
1619 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l3_main_3 = {
1620 .master = &omap54xx_l3_main_2_hwmod,
1621 .slave = &omap54xx_l3_main_3_hwmod,
1622 .clk = "l3_iclk_div",
1623 .user = OCP_USER_MPU | OCP_USER_SDMA,
1626 /* l4_cfg -> l3_main_3 */
1627 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__l3_main_3 = {
1628 .master = &omap54xx_l4_cfg_hwmod,
1629 .slave = &omap54xx_l3_main_3_hwmod,
1630 .clk = "l3_iclk_div",
1631 .user = OCP_USER_MPU | OCP_USER_SDMA,
1634 /* l3_main_1 -> l4_abe */
1635 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_abe = {
1636 .master = &omap54xx_l3_main_1_hwmod,
1637 .slave = &omap54xx_l4_abe_hwmod,
1639 .user = OCP_USER_MPU | OCP_USER_SDMA,
1643 static struct omap_hwmod_ocp_if omap54xx_mpu__l4_abe = {
1644 .master = &omap54xx_mpu_hwmod,
1645 .slave = &omap54xx_l4_abe_hwmod,
1647 .user = OCP_USER_MPU | OCP_USER_SDMA,
1650 /* l3_main_1 -> l4_cfg */
1651 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_cfg = {
1652 .master = &omap54xx_l3_main_1_hwmod,
1653 .slave = &omap54xx_l4_cfg_hwmod,
1654 .clk = "l4_root_clk_div",
1655 .user = OCP_USER_MPU | OCP_USER_SDMA,
1658 /* l3_main_2 -> l4_per */
1659 static struct omap_hwmod_ocp_if omap54xx_l3_main_2__l4_per = {
1660 .master = &omap54xx_l3_main_2_hwmod,
1661 .slave = &omap54xx_l4_per_hwmod,
1662 .clk = "l4_root_clk_div",
1663 .user = OCP_USER_MPU | OCP_USER_SDMA,
1666 /* l3_main_1 -> l4_wkup */
1667 static struct omap_hwmod_ocp_if omap54xx_l3_main_1__l4_wkup = {
1668 .master = &omap54xx_l3_main_1_hwmod,
1669 .slave = &omap54xx_l4_wkup_hwmod,
1670 .clk = "wkupaon_iclk_mux",
1671 .user = OCP_USER_MPU | OCP_USER_SDMA,
1674 /* mpu -> mpu_private */
1675 static struct omap_hwmod_ocp_if omap54xx_mpu__mpu_private = {
1676 .master = &omap54xx_mpu_hwmod,
1677 .slave = &omap54xx_mpu_private_hwmod,
1678 .clk = "l3_iclk_div",
1679 .user = OCP_USER_MPU | OCP_USER_SDMA,
1682 /* l4_wkup -> counter_32k */
1683 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__counter_32k = {
1684 .master = &omap54xx_l4_wkup_hwmod,
1685 .slave = &omap54xx_counter_32k_hwmod,
1686 .clk = "wkupaon_iclk_mux",
1687 .user = OCP_USER_MPU | OCP_USER_SDMA,
1690 static struct omap_hwmod_addr_space omap54xx_dma_system_addrs[] = {
1692 .pa_start = 0x4a056000,
1693 .pa_end = 0x4a056fff,
1694 .flags = ADDR_TYPE_RT
1699 /* l4_cfg -> dma_system */
1700 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__dma_system = {
1701 .master = &omap54xx_l4_cfg_hwmod,
1702 .slave = &omap54xx_dma_system_hwmod,
1703 .clk = "l4_root_clk_div",
1704 .addr = omap54xx_dma_system_addrs,
1705 .user = OCP_USER_MPU | OCP_USER_SDMA,
1708 /* l4_abe -> dmic */
1709 static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {
1710 .master = &omap54xx_l4_abe_hwmod,
1711 .slave = &omap54xx_dmic_hwmod,
1713 .user = OCP_USER_MPU,
1717 static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
1718 .master = &omap54xx_mpu_hwmod,
1719 .slave = &omap54xx_emif1_hwmod,
1720 .clk = "dpll_core_h11x2_ck",
1721 .user = OCP_USER_MPU | OCP_USER_SDMA,
1725 static struct omap_hwmod_ocp_if omap54xx_mpu__emif2 = {
1726 .master = &omap54xx_mpu_hwmod,
1727 .slave = &omap54xx_emif2_hwmod,
1728 .clk = "dpll_core_h11x2_ck",
1729 .user = OCP_USER_MPU | OCP_USER_SDMA,
1732 /* l4_wkup -> gpio1 */
1733 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__gpio1 = {
1734 .master = &omap54xx_l4_wkup_hwmod,
1735 .slave = &omap54xx_gpio1_hwmod,
1736 .clk = "wkupaon_iclk_mux",
1737 .user = OCP_USER_MPU | OCP_USER_SDMA,
1740 /* l4_per -> gpio2 */
1741 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio2 = {
1742 .master = &omap54xx_l4_per_hwmod,
1743 .slave = &omap54xx_gpio2_hwmod,
1744 .clk = "l4_root_clk_div",
1745 .user = OCP_USER_MPU | OCP_USER_SDMA,
1748 /* l4_per -> gpio3 */
1749 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio3 = {
1750 .master = &omap54xx_l4_per_hwmod,
1751 .slave = &omap54xx_gpio3_hwmod,
1752 .clk = "l4_root_clk_div",
1753 .user = OCP_USER_MPU | OCP_USER_SDMA,
1756 /* l4_per -> gpio4 */
1757 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio4 = {
1758 .master = &omap54xx_l4_per_hwmod,
1759 .slave = &omap54xx_gpio4_hwmod,
1760 .clk = "l4_root_clk_div",
1761 .user = OCP_USER_MPU | OCP_USER_SDMA,
1764 /* l4_per -> gpio5 */
1765 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio5 = {
1766 .master = &omap54xx_l4_per_hwmod,
1767 .slave = &omap54xx_gpio5_hwmod,
1768 .clk = "l4_root_clk_div",
1769 .user = OCP_USER_MPU | OCP_USER_SDMA,
1772 /* l4_per -> gpio6 */
1773 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio6 = {
1774 .master = &omap54xx_l4_per_hwmod,
1775 .slave = &omap54xx_gpio6_hwmod,
1776 .clk = "l4_root_clk_div",
1777 .user = OCP_USER_MPU | OCP_USER_SDMA,
1780 /* l4_per -> gpio7 */
1781 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio7 = {
1782 .master = &omap54xx_l4_per_hwmod,
1783 .slave = &omap54xx_gpio7_hwmod,
1784 .clk = "l4_root_clk_div",
1785 .user = OCP_USER_MPU | OCP_USER_SDMA,
1788 /* l4_per -> gpio8 */
1789 static struct omap_hwmod_ocp_if omap54xx_l4_per__gpio8 = {
1790 .master = &omap54xx_l4_per_hwmod,
1791 .slave = &omap54xx_gpio8_hwmod,
1792 .clk = "l4_root_clk_div",
1793 .user = OCP_USER_MPU | OCP_USER_SDMA,
1796 /* l4_per -> i2c1 */
1797 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c1 = {
1798 .master = &omap54xx_l4_per_hwmod,
1799 .slave = &omap54xx_i2c1_hwmod,
1800 .clk = "l4_root_clk_div",
1801 .user = OCP_USER_MPU | OCP_USER_SDMA,
1804 /* l4_per -> i2c2 */
1805 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c2 = {
1806 .master = &omap54xx_l4_per_hwmod,
1807 .slave = &omap54xx_i2c2_hwmod,
1808 .clk = "l4_root_clk_div",
1809 .user = OCP_USER_MPU | OCP_USER_SDMA,
1812 /* l4_per -> i2c3 */
1813 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c3 = {
1814 .master = &omap54xx_l4_per_hwmod,
1815 .slave = &omap54xx_i2c3_hwmod,
1816 .clk = "l4_root_clk_div",
1817 .user = OCP_USER_MPU | OCP_USER_SDMA,
1820 /* l4_per -> i2c4 */
1821 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c4 = {
1822 .master = &omap54xx_l4_per_hwmod,
1823 .slave = &omap54xx_i2c4_hwmod,
1824 .clk = "l4_root_clk_div",
1825 .user = OCP_USER_MPU | OCP_USER_SDMA,
1828 /* l4_per -> i2c5 */
1829 static struct omap_hwmod_ocp_if omap54xx_l4_per__i2c5 = {
1830 .master = &omap54xx_l4_per_hwmod,
1831 .slave = &omap54xx_i2c5_hwmod,
1832 .clk = "l4_root_clk_div",
1833 .user = OCP_USER_MPU | OCP_USER_SDMA,
1836 /* l4_wkup -> kbd */
1837 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__kbd = {
1838 .master = &omap54xx_l4_wkup_hwmod,
1839 .slave = &omap54xx_kbd_hwmod,
1840 .clk = "wkupaon_iclk_mux",
1841 .user = OCP_USER_MPU | OCP_USER_SDMA,
1844 /* l4_cfg -> mailbox */
1845 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mailbox = {
1846 .master = &omap54xx_l4_cfg_hwmod,
1847 .slave = &omap54xx_mailbox_hwmod,
1848 .clk = "l4_root_clk_div",
1849 .user = OCP_USER_MPU | OCP_USER_SDMA,
1852 /* l4_abe -> mcbsp1 */
1853 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp1 = {
1854 .master = &omap54xx_l4_abe_hwmod,
1855 .slave = &omap54xx_mcbsp1_hwmod,
1857 .user = OCP_USER_MPU,
1860 /* l4_abe -> mcbsp2 */
1861 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp2 = {
1862 .master = &omap54xx_l4_abe_hwmod,
1863 .slave = &omap54xx_mcbsp2_hwmod,
1865 .user = OCP_USER_MPU,
1868 /* l4_abe -> mcbsp3 */
1869 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcbsp3 = {
1870 .master = &omap54xx_l4_abe_hwmod,
1871 .slave = &omap54xx_mcbsp3_hwmod,
1873 .user = OCP_USER_MPU,
1876 /* l4_abe -> mcpdm */
1877 static struct omap_hwmod_ocp_if omap54xx_l4_abe__mcpdm = {
1878 .master = &omap54xx_l4_abe_hwmod,
1879 .slave = &omap54xx_mcpdm_hwmod,
1881 .user = OCP_USER_MPU,
1884 /* l4_per -> mcspi1 */
1885 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi1 = {
1886 .master = &omap54xx_l4_per_hwmod,
1887 .slave = &omap54xx_mcspi1_hwmod,
1888 .clk = "l4_root_clk_div",
1889 .user = OCP_USER_MPU | OCP_USER_SDMA,
1892 /* l4_per -> mcspi2 */
1893 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi2 = {
1894 .master = &omap54xx_l4_per_hwmod,
1895 .slave = &omap54xx_mcspi2_hwmod,
1896 .clk = "l4_root_clk_div",
1897 .user = OCP_USER_MPU | OCP_USER_SDMA,
1900 /* l4_per -> mcspi3 */
1901 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi3 = {
1902 .master = &omap54xx_l4_per_hwmod,
1903 .slave = &omap54xx_mcspi3_hwmod,
1904 .clk = "l4_root_clk_div",
1905 .user = OCP_USER_MPU | OCP_USER_SDMA,
1908 /* l4_per -> mcspi4 */
1909 static struct omap_hwmod_ocp_if omap54xx_l4_per__mcspi4 = {
1910 .master = &omap54xx_l4_per_hwmod,
1911 .slave = &omap54xx_mcspi4_hwmod,
1912 .clk = "l4_root_clk_div",
1913 .user = OCP_USER_MPU | OCP_USER_SDMA,
1916 /* l4_per -> mmc1 */
1917 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc1 = {
1918 .master = &omap54xx_l4_per_hwmod,
1919 .slave = &omap54xx_mmc1_hwmod,
1920 .clk = "l3_iclk_div",
1921 .user = OCP_USER_MPU | OCP_USER_SDMA,
1924 /* l4_per -> mmc2 */
1925 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc2 = {
1926 .master = &omap54xx_l4_per_hwmod,
1927 .slave = &omap54xx_mmc2_hwmod,
1928 .clk = "l3_iclk_div",
1929 .user = OCP_USER_MPU | OCP_USER_SDMA,
1932 /* l4_per -> mmc3 */
1933 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc3 = {
1934 .master = &omap54xx_l4_per_hwmod,
1935 .slave = &omap54xx_mmc3_hwmod,
1936 .clk = "l4_root_clk_div",
1937 .user = OCP_USER_MPU | OCP_USER_SDMA,
1940 /* l4_per -> mmc4 */
1941 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc4 = {
1942 .master = &omap54xx_l4_per_hwmod,
1943 .slave = &omap54xx_mmc4_hwmod,
1944 .clk = "l4_root_clk_div",
1945 .user = OCP_USER_MPU | OCP_USER_SDMA,
1948 /* l4_per -> mmc5 */
1949 static struct omap_hwmod_ocp_if omap54xx_l4_per__mmc5 = {
1950 .master = &omap54xx_l4_per_hwmod,
1951 .slave = &omap54xx_mmc5_hwmod,
1952 .clk = "l4_root_clk_div",
1953 .user = OCP_USER_MPU | OCP_USER_SDMA,
1957 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__mpu = {
1958 .master = &omap54xx_l4_cfg_hwmod,
1959 .slave = &omap54xx_mpu_hwmod,
1960 .clk = "l4_root_clk_div",
1961 .user = OCP_USER_MPU | OCP_USER_SDMA,
1964 /* l4_wkup -> timer1 */
1965 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__timer1 = {
1966 .master = &omap54xx_l4_wkup_hwmod,
1967 .slave = &omap54xx_timer1_hwmod,
1968 .clk = "wkupaon_iclk_mux",
1969 .user = OCP_USER_MPU | OCP_USER_SDMA,
1972 /* l4_per -> timer2 */
1973 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer2 = {
1974 .master = &omap54xx_l4_per_hwmod,
1975 .slave = &omap54xx_timer2_hwmod,
1976 .clk = "l4_root_clk_div",
1977 .user = OCP_USER_MPU | OCP_USER_SDMA,
1980 /* l4_per -> timer3 */
1981 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer3 = {
1982 .master = &omap54xx_l4_per_hwmod,
1983 .slave = &omap54xx_timer3_hwmod,
1984 .clk = "l4_root_clk_div",
1985 .user = OCP_USER_MPU | OCP_USER_SDMA,
1988 /* l4_per -> timer4 */
1989 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer4 = {
1990 .master = &omap54xx_l4_per_hwmod,
1991 .slave = &omap54xx_timer4_hwmod,
1992 .clk = "l4_root_clk_div",
1993 .user = OCP_USER_MPU | OCP_USER_SDMA,
1996 /* l4_abe -> timer5 */
1997 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer5 = {
1998 .master = &omap54xx_l4_abe_hwmod,
1999 .slave = &omap54xx_timer5_hwmod,
2001 .user = OCP_USER_MPU,
2004 /* l4_abe -> timer6 */
2005 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer6 = {
2006 .master = &omap54xx_l4_abe_hwmod,
2007 .slave = &omap54xx_timer6_hwmod,
2009 .user = OCP_USER_MPU,
2012 /* l4_abe -> timer7 */
2013 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer7 = {
2014 .master = &omap54xx_l4_abe_hwmod,
2015 .slave = &omap54xx_timer7_hwmod,
2017 .user = OCP_USER_MPU,
2020 /* l4_abe -> timer8 */
2021 static struct omap_hwmod_ocp_if omap54xx_l4_abe__timer8 = {
2022 .master = &omap54xx_l4_abe_hwmod,
2023 .slave = &omap54xx_timer8_hwmod,
2025 .user = OCP_USER_MPU,
2028 /* l4_per -> timer9 */
2029 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer9 = {
2030 .master = &omap54xx_l4_per_hwmod,
2031 .slave = &omap54xx_timer9_hwmod,
2032 .clk = "l4_root_clk_div",
2033 .user = OCP_USER_MPU | OCP_USER_SDMA,
2036 /* l4_per -> timer10 */
2037 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer10 = {
2038 .master = &omap54xx_l4_per_hwmod,
2039 .slave = &omap54xx_timer10_hwmod,
2040 .clk = "l4_root_clk_div",
2041 .user = OCP_USER_MPU | OCP_USER_SDMA,
2044 /* l4_per -> timer11 */
2045 static struct omap_hwmod_ocp_if omap54xx_l4_per__timer11 = {
2046 .master = &omap54xx_l4_per_hwmod,
2047 .slave = &omap54xx_timer11_hwmod,
2048 .clk = "l4_root_clk_div",
2049 .user = OCP_USER_MPU | OCP_USER_SDMA,
2052 /* l4_per -> uart1 */
2053 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart1 = {
2054 .master = &omap54xx_l4_per_hwmod,
2055 .slave = &omap54xx_uart1_hwmod,
2056 .clk = "l4_root_clk_div",
2057 .user = OCP_USER_MPU | OCP_USER_SDMA,
2060 /* l4_per -> uart2 */
2061 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart2 = {
2062 .master = &omap54xx_l4_per_hwmod,
2063 .slave = &omap54xx_uart2_hwmod,
2064 .clk = "l4_root_clk_div",
2065 .user = OCP_USER_MPU | OCP_USER_SDMA,
2068 /* l4_per -> uart3 */
2069 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart3 = {
2070 .master = &omap54xx_l4_per_hwmod,
2071 .slave = &omap54xx_uart3_hwmod,
2072 .clk = "l4_root_clk_div",
2073 .user = OCP_USER_MPU | OCP_USER_SDMA,
2076 /* l4_per -> uart4 */
2077 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart4 = {
2078 .master = &omap54xx_l4_per_hwmod,
2079 .slave = &omap54xx_uart4_hwmod,
2080 .clk = "l4_root_clk_div",
2081 .user = OCP_USER_MPU | OCP_USER_SDMA,
2084 /* l4_per -> uart5 */
2085 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart5 = {
2086 .master = &omap54xx_l4_per_hwmod,
2087 .slave = &omap54xx_uart5_hwmod,
2088 .clk = "l4_root_clk_div",
2089 .user = OCP_USER_MPU | OCP_USER_SDMA,
2092 /* l4_per -> uart6 */
2093 static struct omap_hwmod_ocp_if omap54xx_l4_per__uart6 = {
2094 .master = &omap54xx_l4_per_hwmod,
2095 .slave = &omap54xx_uart6_hwmod,
2096 .clk = "l4_root_clk_div",
2097 .user = OCP_USER_MPU | OCP_USER_SDMA,
2100 /* l4_cfg -> usb_otg_ss */
2101 static struct omap_hwmod_ocp_if omap54xx_l4_cfg__usb_otg_ss = {
2102 .master = &omap54xx_l4_cfg_hwmod,
2103 .slave = &omap54xx_usb_otg_ss_hwmod,
2104 .clk = "dpll_core_h13x2_ck",
2105 .user = OCP_USER_MPU | OCP_USER_SDMA,
2108 /* l4_wkup -> wd_timer2 */
2109 static struct omap_hwmod_ocp_if omap54xx_l4_wkup__wd_timer2 = {
2110 .master = &omap54xx_l4_wkup_hwmod,
2111 .slave = &omap54xx_wd_timer2_hwmod,
2112 .clk = "wkupaon_iclk_mux",
2113 .user = OCP_USER_MPU | OCP_USER_SDMA,
2116 static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
2117 &omap54xx_l3_main_1__dmm,
2118 &omap54xx_l3_main_3__l3_instr,
2119 &omap54xx_l3_main_2__l3_main_1,
2120 &omap54xx_l4_cfg__l3_main_1,
2121 &omap54xx_mpu__l3_main_1,
2122 &omap54xx_l3_main_1__l3_main_2,
2123 &omap54xx_l4_cfg__l3_main_2,
2124 &omap54xx_l3_main_1__l3_main_3,
2125 &omap54xx_l3_main_2__l3_main_3,
2126 &omap54xx_l4_cfg__l3_main_3,
2127 &omap54xx_l3_main_1__l4_abe,
2128 &omap54xx_mpu__l4_abe,
2129 &omap54xx_l3_main_1__l4_cfg,
2130 &omap54xx_l3_main_2__l4_per,
2131 &omap54xx_l3_main_1__l4_wkup,
2132 &omap54xx_mpu__mpu_private,
2133 &omap54xx_l4_wkup__counter_32k,
2134 &omap54xx_l4_cfg__dma_system,
2135 &omap54xx_l4_abe__dmic,
2136 &omap54xx_mpu__emif1,
2137 &omap54xx_mpu__emif2,
2138 &omap54xx_l4_wkup__gpio1,
2139 &omap54xx_l4_per__gpio2,
2140 &omap54xx_l4_per__gpio3,
2141 &omap54xx_l4_per__gpio4,
2142 &omap54xx_l4_per__gpio5,
2143 &omap54xx_l4_per__gpio6,
2144 &omap54xx_l4_per__gpio7,
2145 &omap54xx_l4_per__gpio8,
2146 &omap54xx_l4_per__i2c1,
2147 &omap54xx_l4_per__i2c2,
2148 &omap54xx_l4_per__i2c3,
2149 &omap54xx_l4_per__i2c4,
2150 &omap54xx_l4_per__i2c5,
2151 &omap54xx_l4_wkup__kbd,
2152 &omap54xx_l4_cfg__mailbox,
2153 &omap54xx_l4_abe__mcbsp1,
2154 &omap54xx_l4_abe__mcbsp2,
2155 &omap54xx_l4_abe__mcbsp3,
2156 &omap54xx_l4_abe__mcpdm,
2157 &omap54xx_l4_per__mcspi1,
2158 &omap54xx_l4_per__mcspi2,
2159 &omap54xx_l4_per__mcspi3,
2160 &omap54xx_l4_per__mcspi4,
2161 &omap54xx_l4_per__mmc1,
2162 &omap54xx_l4_per__mmc2,
2163 &omap54xx_l4_per__mmc3,
2164 &omap54xx_l4_per__mmc4,
2165 &omap54xx_l4_per__mmc5,
2166 &omap54xx_l4_cfg__mpu,
2167 &omap54xx_l4_wkup__timer1,
2168 &omap54xx_l4_per__timer2,
2169 &omap54xx_l4_per__timer3,
2170 &omap54xx_l4_per__timer4,
2171 &omap54xx_l4_abe__timer5,
2172 &omap54xx_l4_abe__timer6,
2173 &omap54xx_l4_abe__timer7,
2174 &omap54xx_l4_abe__timer8,
2175 &omap54xx_l4_per__timer9,
2176 &omap54xx_l4_per__timer10,
2177 &omap54xx_l4_per__timer11,
2178 &omap54xx_l4_per__uart1,
2179 &omap54xx_l4_per__uart2,
2180 &omap54xx_l4_per__uart3,
2181 &omap54xx_l4_per__uart4,
2182 &omap54xx_l4_per__uart5,
2183 &omap54xx_l4_per__uart6,
2184 &omap54xx_l4_cfg__usb_otg_ss,
2185 &omap54xx_l4_wkup__wd_timer2,
2189 int __init omap54xx_hwmod_init(void)
2192 return omap_hwmod_register_links(omap54xx_hwmod_ocp_ifs);