0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <linux/platform_data/i2c-omap.h>
0014 #include <linux/platform_data/hsmmc-omap.h>
0015
0016 #include "omap_hwmod.h"
0017 #include "l3_2xxx.h"
0018
0019 #include "soc.h"
0020 #include "omap_hwmod_common_data.h"
0021 #include "prm-regbits-24xx.h"
0022 #include "cm-regbits-24xx.h"
0023 #include "i2c.h"
0024 #include "wd_timer.h"
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 static struct omap_hwmod_rst_info omap2430_iva_resets[] = {
0041 { .name = "logic", .rst_shift = 0 },
0042 { .name = "mmu", .rst_shift = 1 },
0043 };
0044
0045 static struct omap_hwmod omap2430_iva_hwmod = {
0046 .name = "iva",
0047 .class = &iva_hwmod_class,
0048 .clkdm_name = "dsp_clkdm",
0049 .rst_lines = omap2430_iva_resets,
0050 .rst_lines_cnt = ARRAY_SIZE(omap2430_iva_resets),
0051 .main_clk = "dsp_fck",
0052 };
0053
0054
0055 static struct omap_hwmod_class_sysconfig i2c_sysc = {
0056 .rev_offs = 0x00,
0057 .sysc_offs = 0x20,
0058 .syss_offs = 0x10,
0059 .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
0060 SYSS_HAS_RESET_STATUS),
0061 .sysc_fields = &omap_hwmod_sysc_type1,
0062 };
0063
0064 static struct omap_hwmod_class i2c_class = {
0065 .name = "i2c",
0066 .sysc = &i2c_sysc,
0067 .reset = &omap_i2c_reset,
0068 };
0069
0070
0071 static struct omap_hwmod omap2430_i2c1_hwmod = {
0072 .name = "i2c1",
0073 .flags = HWMOD_16BIT_REG,
0074 .main_clk = "i2chs1_fck",
0075 .prcm = {
0076 .omap2 = {
0077
0078
0079
0080
0081
0082
0083
0084
0085 .module_offs = CORE_MOD,
0086 .idlest_reg_id = 1,
0087 .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT,
0088 },
0089 },
0090 .class = &i2c_class,
0091 };
0092
0093
0094 static struct omap_hwmod omap2430_i2c2_hwmod = {
0095 .name = "i2c2",
0096 .flags = HWMOD_16BIT_REG,
0097 .main_clk = "i2chs2_fck",
0098 .prcm = {
0099 .omap2 = {
0100 .module_offs = CORE_MOD,
0101 .idlest_reg_id = 1,
0102 .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT,
0103 },
0104 },
0105 .class = &i2c_class,
0106 };
0107
0108
0109 static struct omap_hwmod omap2430_gpio5_hwmod = {
0110 .name = "gpio5",
0111 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0112 .main_clk = "gpio5_fck",
0113 .prcm = {
0114 .omap2 = {
0115 .module_offs = CORE_MOD,
0116 .idlest_reg_id = 2,
0117 .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
0118 },
0119 },
0120 .class = &omap2xxx_gpio_hwmod_class,
0121 };
0122
0123
0124 static struct omap_hwmod omap2430_mailbox_hwmod = {
0125 .name = "mailbox",
0126 .class = &omap2xxx_mailbox_hwmod_class,
0127 .main_clk = "mailboxes_ick",
0128 .prcm = {
0129 .omap2 = {
0130 .module_offs = CORE_MOD,
0131 .idlest_reg_id = 1,
0132 .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT,
0133 },
0134 },
0135 };
0136
0137
0138 static struct omap_hwmod omap2430_mcspi3_hwmod = {
0139 .name = "mcspi3",
0140 .main_clk = "mcspi3_fck",
0141 .prcm = {
0142 .omap2 = {
0143 .module_offs = CORE_MOD,
0144 .idlest_reg_id = 2,
0145 .idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT,
0146 },
0147 },
0148 .class = &omap2xxx_mcspi_class,
0149 };
0150
0151
0152 static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = {
0153 .rev_offs = 0x0400,
0154 .sysc_offs = 0x0404,
0155 .syss_offs = 0x0408,
0156 .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE|
0157 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0158 SYSC_HAS_AUTOIDLE),
0159 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
0160 MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
0161 .sysc_fields = &omap_hwmod_sysc_type1,
0162 };
0163
0164 static struct omap_hwmod_class usbotg_class = {
0165 .name = "usbotg",
0166 .sysc = &omap2430_usbhsotg_sysc,
0167 };
0168
0169
0170 static struct omap_hwmod omap2430_usbhsotg_hwmod = {
0171 .name = "usb_otg_hs",
0172 .main_clk = "usbhs_ick",
0173 .prcm = {
0174 .omap2 = {
0175 .module_offs = CORE_MOD,
0176 .idlest_reg_id = 1,
0177 .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT,
0178 },
0179 },
0180 .class = &usbotg_class,
0181
0182
0183
0184
0185
0186 .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE
0187 | HWMOD_SWSUP_MSTANDBY,
0188 };
0189
0190
0191
0192
0193
0194
0195 static struct omap_hwmod_class_sysconfig omap2430_mcbsp_sysc = {
0196 .rev_offs = 0x007C,
0197 .sysc_offs = 0x008C,
0198 .sysc_flags = (SYSC_HAS_SOFTRESET),
0199 .sysc_fields = &omap_hwmod_sysc_type1,
0200 };
0201
0202 static struct omap_hwmod_class omap2430_mcbsp_hwmod_class = {
0203 .name = "mcbsp",
0204 .sysc = &omap2430_mcbsp_sysc,
0205 };
0206
0207 static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = {
0208 { .role = "pad_fck", .clk = "mcbsp_clks" },
0209 { .role = "prcm_fck", .clk = "func_96m_ck" },
0210 };
0211
0212
0213 static struct omap_hwmod omap2430_mcbsp1_hwmod = {
0214 .name = "mcbsp1",
0215 .class = &omap2430_mcbsp_hwmod_class,
0216 .main_clk = "mcbsp1_fck",
0217 .prcm = {
0218 .omap2 = {
0219 .module_offs = CORE_MOD,
0220 .idlest_reg_id = 1,
0221 .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,
0222 },
0223 },
0224 .opt_clks = mcbsp_opt_clks,
0225 .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks),
0226 };
0227
0228
0229 static struct omap_hwmod omap2430_mcbsp2_hwmod = {
0230 .name = "mcbsp2",
0231 .class = &omap2430_mcbsp_hwmod_class,
0232 .main_clk = "mcbsp2_fck",
0233 .prcm = {
0234 .omap2 = {
0235 .module_offs = CORE_MOD,
0236 .idlest_reg_id = 1,
0237 .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,
0238 },
0239 },
0240 .opt_clks = mcbsp_opt_clks,
0241 .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks),
0242 };
0243
0244
0245 static struct omap_hwmod omap2430_mcbsp3_hwmod = {
0246 .name = "mcbsp3",
0247 .class = &omap2430_mcbsp_hwmod_class,
0248 .main_clk = "mcbsp3_fck",
0249 .prcm = {
0250 .omap2 = {
0251 .module_offs = CORE_MOD,
0252 .idlest_reg_id = 2,
0253 .idlest_idle_bit = OMAP2430_ST_MCBSP3_SHIFT,
0254 },
0255 },
0256 .opt_clks = mcbsp_opt_clks,
0257 .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks),
0258 };
0259
0260
0261 static struct omap_hwmod omap2430_mcbsp4_hwmod = {
0262 .name = "mcbsp4",
0263 .class = &omap2430_mcbsp_hwmod_class,
0264 .main_clk = "mcbsp4_fck",
0265 .prcm = {
0266 .omap2 = {
0267 .module_offs = CORE_MOD,
0268 .idlest_reg_id = 2,
0269 .idlest_idle_bit = OMAP2430_ST_MCBSP4_SHIFT,
0270 },
0271 },
0272 .opt_clks = mcbsp_opt_clks,
0273 .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks),
0274 };
0275
0276
0277 static struct omap_hwmod omap2430_mcbsp5_hwmod = {
0278 .name = "mcbsp5",
0279 .class = &omap2430_mcbsp_hwmod_class,
0280 .main_clk = "mcbsp5_fck",
0281 .prcm = {
0282 .omap2 = {
0283 .module_offs = CORE_MOD,
0284 .idlest_reg_id = 2,
0285 .idlest_idle_bit = OMAP2430_ST_MCBSP5_SHIFT,
0286 },
0287 },
0288 .opt_clks = mcbsp_opt_clks,
0289 .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks),
0290 };
0291
0292
0293 static struct omap_hwmod_class_sysconfig omap2430_mmc_sysc = {
0294 .rev_offs = 0x1fc,
0295 .sysc_offs = 0x10,
0296 .syss_offs = 0x14,
0297 .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE |
0298 SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET |
0299 SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
0300 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
0301 .sysc_fields = &omap_hwmod_sysc_type1,
0302 };
0303
0304 static struct omap_hwmod_class omap2430_mmc_class = {
0305 .name = "mmc",
0306 .sysc = &omap2430_mmc_sysc,
0307 };
0308
0309
0310 static struct omap_hwmod_opt_clk omap2430_mmc1_opt_clks[] = {
0311 { .role = "dbck", .clk = "mmchsdb1_fck" },
0312 };
0313
0314 static struct omap_hsmmc_dev_attr mmc1_dev_attr = {
0315 .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT,
0316 };
0317
0318 static struct omap_hwmod omap2430_mmc1_hwmod = {
0319 .name = "mmc1",
0320 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0321 .opt_clks = omap2430_mmc1_opt_clks,
0322 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc1_opt_clks),
0323 .main_clk = "mmchs1_fck",
0324 .prcm = {
0325 .omap2 = {
0326 .module_offs = CORE_MOD,
0327 .idlest_reg_id = 2,
0328 .idlest_idle_bit = OMAP2430_ST_MMCHS1_SHIFT,
0329 },
0330 },
0331 .dev_attr = &mmc1_dev_attr,
0332 .class = &omap2430_mmc_class,
0333 };
0334
0335
0336 static struct omap_hwmod_opt_clk omap2430_mmc2_opt_clks[] = {
0337 { .role = "dbck", .clk = "mmchsdb2_fck" },
0338 };
0339
0340 static struct omap_hwmod omap2430_mmc2_hwmod = {
0341 .name = "mmc2",
0342 .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
0343 .opt_clks = omap2430_mmc2_opt_clks,
0344 .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc2_opt_clks),
0345 .main_clk = "mmchs2_fck",
0346 .prcm = {
0347 .omap2 = {
0348 .module_offs = CORE_MOD,
0349 .idlest_reg_id = 2,
0350 .idlest_idle_bit = OMAP2430_ST_MMCHS2_SHIFT,
0351 },
0352 },
0353 .class = &omap2430_mmc_class,
0354 };
0355
0356
0357 static struct omap_hwmod omap2430_hdq1w_hwmod = {
0358 .name = "hdq1w",
0359 .main_clk = "hdq_fck",
0360 .prcm = {
0361 .omap2 = {
0362 .module_offs = CORE_MOD,
0363 .idlest_reg_id = 1,
0364 .idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT,
0365 },
0366 },
0367 .class = &omap2_hdq1w_class,
0368 };
0369
0370
0371
0372
0373
0374
0375
0376 static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = {
0377 .master = &omap2430_usbhsotg_hwmod,
0378 .slave = &omap2xxx_l3_main_hwmod,
0379 .clk = "core_l3_ck",
0380 .user = OCP_USER_MPU,
0381 };
0382
0383
0384 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = {
0385 .master = &omap2xxx_l4_core_hwmod,
0386 .slave = &omap2430_i2c1_hwmod,
0387 .clk = "i2c1_ick",
0388 .user = OCP_USER_MPU | OCP_USER_SDMA,
0389 };
0390
0391
0392 static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = {
0393 .master = &omap2xxx_l4_core_hwmod,
0394 .slave = &omap2430_i2c2_hwmod,
0395 .clk = "i2c2_ick",
0396 .user = OCP_USER_MPU | OCP_USER_SDMA,
0397 };
0398
0399
0400 static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = {
0401 .master = &omap2xxx_l4_core_hwmod,
0402 .slave = &omap2430_usbhsotg_hwmod,
0403 .clk = "usb_l4_ick",
0404 .user = OCP_USER_MPU,
0405 };
0406
0407
0408 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc1 = {
0409 .master = &omap2xxx_l4_core_hwmod,
0410 .slave = &omap2430_mmc1_hwmod,
0411 .clk = "mmchs1_ick",
0412 .user = OCP_USER_MPU | OCP_USER_SDMA,
0413 };
0414
0415
0416 static struct omap_hwmod_ocp_if omap2430_l4_core__mmc2 = {
0417 .master = &omap2xxx_l4_core_hwmod,
0418 .slave = &omap2430_mmc2_hwmod,
0419 .clk = "mmchs2_ick",
0420 .user = OCP_USER_MPU | OCP_USER_SDMA,
0421 };
0422
0423
0424 static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = {
0425 .master = &omap2xxx_l4_core_hwmod,
0426 .slave = &omap2430_mcspi3_hwmod,
0427 .clk = "mcspi3_ick",
0428 .user = OCP_USER_MPU | OCP_USER_SDMA,
0429 };
0430
0431
0432 static struct omap_hwmod_ocp_if omap2430_l3__iva = {
0433 .master = &omap2xxx_l3_main_hwmod,
0434 .slave = &omap2430_iva_hwmod,
0435 .clk = "core_l3_ck",
0436 .user = OCP_USER_MPU | OCP_USER_SDMA,
0437 };
0438
0439
0440 static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = {
0441 .master = &omap2xxx_l4_wkup_hwmod,
0442 .slave = &omap2xxx_wd_timer2_hwmod,
0443 .clk = "mpu_wdt_ick",
0444 .user = OCP_USER_MPU | OCP_USER_SDMA,
0445 };
0446
0447
0448 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
0449 .master = &omap2xxx_l4_wkup_hwmod,
0450 .slave = &omap2xxx_gpio1_hwmod,
0451 .clk = "gpios_ick",
0452 .user = OCP_USER_MPU | OCP_USER_SDMA,
0453 };
0454
0455
0456 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
0457 .master = &omap2xxx_l4_wkup_hwmod,
0458 .slave = &omap2xxx_gpio2_hwmod,
0459 .clk = "gpios_ick",
0460 .user = OCP_USER_MPU | OCP_USER_SDMA,
0461 };
0462
0463
0464 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
0465 .master = &omap2xxx_l4_wkup_hwmod,
0466 .slave = &omap2xxx_gpio3_hwmod,
0467 .clk = "gpios_ick",
0468 .user = OCP_USER_MPU | OCP_USER_SDMA,
0469 };
0470
0471
0472 static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
0473 .master = &omap2xxx_l4_wkup_hwmod,
0474 .slave = &omap2xxx_gpio4_hwmod,
0475 .clk = "gpios_ick",
0476 .user = OCP_USER_MPU | OCP_USER_SDMA,
0477 };
0478
0479
0480 static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
0481 .master = &omap2xxx_l4_core_hwmod,
0482 .slave = &omap2430_gpio5_hwmod,
0483 .clk = "gpio5_ick",
0484 .user = OCP_USER_MPU | OCP_USER_SDMA,
0485 };
0486
0487
0488 static struct omap_hwmod_ocp_if omap2430_l4_core__mailbox = {
0489 .master = &omap2xxx_l4_core_hwmod,
0490 .slave = &omap2430_mailbox_hwmod,
0491 .user = OCP_USER_MPU | OCP_USER_SDMA,
0492 };
0493
0494
0495 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp1 = {
0496 .master = &omap2xxx_l4_core_hwmod,
0497 .slave = &omap2430_mcbsp1_hwmod,
0498 .clk = "mcbsp1_ick",
0499 .user = OCP_USER_MPU | OCP_USER_SDMA,
0500 };
0501
0502
0503 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp2 = {
0504 .master = &omap2xxx_l4_core_hwmod,
0505 .slave = &omap2430_mcbsp2_hwmod,
0506 .clk = "mcbsp2_ick",
0507 .user = OCP_USER_MPU | OCP_USER_SDMA,
0508 };
0509
0510
0511 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp3 = {
0512 .master = &omap2xxx_l4_core_hwmod,
0513 .slave = &omap2430_mcbsp3_hwmod,
0514 .clk = "mcbsp3_ick",
0515 .user = OCP_USER_MPU | OCP_USER_SDMA,
0516 };
0517
0518
0519 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp4 = {
0520 .master = &omap2xxx_l4_core_hwmod,
0521 .slave = &omap2430_mcbsp4_hwmod,
0522 .clk = "mcbsp4_ick",
0523 .user = OCP_USER_MPU | OCP_USER_SDMA,
0524 };
0525
0526
0527 static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp5 = {
0528 .master = &omap2xxx_l4_core_hwmod,
0529 .slave = &omap2430_mcbsp5_hwmod,
0530 .clk = "mcbsp5_ick",
0531 .user = OCP_USER_MPU | OCP_USER_SDMA,
0532 };
0533
0534
0535 static struct omap_hwmod_ocp_if omap2430_l4_core__hdq1w = {
0536 .master = &omap2xxx_l4_core_hwmod,
0537 .slave = &omap2430_hdq1w_hwmod,
0538 .clk = "hdq_ick",
0539 .user = OCP_USER_MPU | OCP_USER_SDMA,
0540 .flags = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
0541 };
0542
0543 static struct omap_hwmod_ocp_if omap2430_l3__gpmc = {
0544 .master = &omap2xxx_l3_main_hwmod,
0545 .slave = &omap2xxx_gpmc_hwmod,
0546 .clk = "core_l3_ck",
0547 .user = OCP_USER_MPU | OCP_USER_SDMA,
0548 };
0549
0550 static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {
0551 &omap2xxx_l3_main__l4_core,
0552 &omap2xxx_mpu__l3_main,
0553 &omap2xxx_dss__l3,
0554 &omap2430_usbhsotg__l3,
0555 &omap2430_l4_core__i2c1,
0556 &omap2430_l4_core__i2c2,
0557 &omap2xxx_l4_core__l4_wkup,
0558 &omap2_l4_core__uart1,
0559 &omap2_l4_core__uart2,
0560 &omap2_l4_core__uart3,
0561 &omap2430_l4_core__usbhsotg,
0562 &omap2430_l4_core__mmc1,
0563 &omap2430_l4_core__mmc2,
0564 &omap2xxx_l4_core__mcspi1,
0565 &omap2xxx_l4_core__mcspi2,
0566 &omap2430_l4_core__mcspi3,
0567 &omap2430_l3__iva,
0568 &omap2xxx_l4_core__timer3,
0569 &omap2xxx_l4_core__timer4,
0570 &omap2xxx_l4_core__timer5,
0571 &omap2xxx_l4_core__timer6,
0572 &omap2xxx_l4_core__timer7,
0573 &omap2xxx_l4_core__timer8,
0574 &omap2xxx_l4_core__timer9,
0575 &omap2xxx_l4_core__timer10,
0576 &omap2xxx_l4_core__timer11,
0577 &omap2xxx_l4_core__timer12,
0578 &omap2430_l4_wkup__wd_timer2,
0579 &omap2xxx_l4_core__dss,
0580 &omap2xxx_l4_core__dss_dispc,
0581 &omap2xxx_l4_core__dss_rfbi,
0582 &omap2xxx_l4_core__dss_venc,
0583 &omap2430_l4_wkup__gpio1,
0584 &omap2430_l4_wkup__gpio2,
0585 &omap2430_l4_wkup__gpio3,
0586 &omap2430_l4_wkup__gpio4,
0587 &omap2430_l4_core__gpio5,
0588 &omap2430_l4_core__mailbox,
0589 &omap2430_l4_core__mcbsp1,
0590 &omap2430_l4_core__mcbsp2,
0591 &omap2430_l4_core__mcbsp3,
0592 &omap2430_l4_core__mcbsp4,
0593 &omap2430_l4_core__mcbsp5,
0594 &omap2430_l4_core__hdq1w,
0595 &omap2xxx_l4_core__rng,
0596 &omap2xxx_l4_core__sham,
0597 &omap2xxx_l4_core__aes,
0598 &omap2430_l3__gpmc,
0599 NULL,
0600 };
0601
0602 int __init omap2430_hwmod_init(void)
0603 {
0604 omap_hwmod_init();
0605 return omap_hwmod_register_links(omap2430_hwmod_ocp_ifs);
0606 }