aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock34xx.h
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2009-02-19 08:29:22 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-02-19 12:28:30 -0500
commitc0bf31320dea2cbcbab1f53ee15a8520f762409b (patch)
tree1b4fbb4396da448eb116f2bee8b58030b63cfe3b /arch/arm/mach-omap2/clock34xx.h
parent8b9dbc16d4f5786c6c930ab028722e3ed7e4285b (diff)
[ARM] omap: add support for bypassing DPLLs
This roughly corresponds with OMAP commits: 7d06c48, 3241b19, 88b5d9b, 18a5500, 9c909ac, 5c6497b, 8b1f0bd, 2ac1da8. For both OMAP2 and OMAP3, we note the reference and bypass clocks in the DPLL data structure. Whenever we modify the DPLL rate, we first ensure that both the reference and bypass clocks are enabled. Then, we decide whether to use the reference and DPLL, or the bypass clock if the desired rate is identical to the bypass rate, and program the DPLL appropriately. Finally, we update the clock's parent, and then disable the unused clocks. This keeps the parents correctly balanced, and more importantly ensures that the bypass clock is running whenever we reprogram the DPLL. This is especially important because the procedure for reprogramming the DPLL involves switching to the bypass clock. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-omap2/clock34xx.h')
-rw-r--r--arch/arm/mach-omap2/clock34xx.h177
1 files changed, 28 insertions, 149 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.h b/arch/arm/mach-omap2/clock34xx.h
index 764c7cd9fd84..70ec10deb654 100644
--- a/arch/arm/mach-omap2/clock34xx.h
+++ b/arch/arm/mach-omap2/clock34xx.h
@@ -48,6 +48,10 @@ static int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate);
48 * DPLL5 supplies other peripheral clocks (USBHOST, USIM). 48 * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
49 */ 49 */
50 50
51/* Forward declarations for DPLL bypass clocks */
52static struct clk dpll1_fck;
53static struct clk dpll2_fck;
54
51/* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */ 55/* CM_CLKEN_PLL*.EN* bit values - not all are available for every DPLL */
52#define DPLL_LOW_POWER_STOP 0x1 56#define DPLL_LOW_POWER_STOP 0x1
53#define DPLL_LOW_POWER_BYPASS 0x5 57#define DPLL_LOW_POWER_BYPASS 0x5
@@ -217,16 +221,6 @@ static struct clk sys_clkout1 = {
217 221
218/* CM CLOCKS */ 222/* CM CLOCKS */
219 223
220static const struct clksel_rate dpll_bypass_rates[] = {
221 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
222 { .div = 0 }
223};
224
225static const struct clksel_rate dpll_locked_rates[] = {
226 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
227 { .div = 0 }
228};
229
230static const struct clksel_rate div16_dpll_rates[] = { 224static const struct clksel_rate div16_dpll_rates[] = {
231 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE }, 225 { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
232 { .div = 2, .val = 2, .flags = RATE_IN_343X }, 226 { .div = 2, .val = 2, .flags = RATE_IN_343X },
@@ -254,6 +248,8 @@ static struct dpll_data dpll1_dd = {
254 .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL), 248 .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
255 .mult_mask = OMAP3430_MPU_DPLL_MULT_MASK, 249 .mult_mask = OMAP3430_MPU_DPLL_MULT_MASK,
256 .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK, 250 .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK,
251 .clk_bypass = &dpll1_fck,
252 .clk_ref = &sys_ck,
257 .freqsel_mask = OMAP3430_MPU_DPLL_FREQSEL_MASK, 253 .freqsel_mask = OMAP3430_MPU_DPLL_FREQSEL_MASK,
258 .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL), 254 .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
259 .enable_mask = OMAP3430_EN_MPU_DPLL_MASK, 255 .enable_mask = OMAP3430_EN_MPU_DPLL_MASK,
@@ -324,6 +320,8 @@ static struct dpll_data dpll2_dd = {
324 .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL), 320 .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
325 .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK, 321 .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK,
326 .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK, 322 .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK,
323 .clk_bypass = &dpll2_fck,
324 .clk_ref = &sys_ck,
327 .freqsel_mask = OMAP3430_IVA2_DPLL_FREQSEL_MASK, 325 .freqsel_mask = OMAP3430_IVA2_DPLL_FREQSEL_MASK,
328 .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL), 326 .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
329 .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK, 327 .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK,
@@ -384,6 +382,8 @@ static struct dpll_data dpll3_dd = {
384 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), 382 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
385 .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK, 383 .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK,
386 .div1_mask = OMAP3430_CORE_DPLL_DIV_MASK, 384 .div1_mask = OMAP3430_CORE_DPLL_DIV_MASK,
385 .clk_bypass = &sys_ck,
386 .clk_ref = &sys_ck,
387 .freqsel_mask = OMAP3430_CORE_DPLL_FREQSEL_MASK, 387 .freqsel_mask = OMAP3430_CORE_DPLL_FREQSEL_MASK,
388 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), 388 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
389 .enable_mask = OMAP3430_EN_CORE_DPLL_MASK, 389 .enable_mask = OMAP3430_EN_CORE_DPLL_MASK,
@@ -477,37 +477,19 @@ static struct clk dpll3_m2_ck = {
477 .recalc = &omap2_clksel_recalc, 477 .recalc = &omap2_clksel_recalc,
478}; 478};
479 479
480static const struct clksel core_ck_clksel[] = {
481 { .parent = &sys_ck, .rates = dpll_bypass_rates },
482 { .parent = &dpll3_m2_ck, .rates = dpll_locked_rates },
483 { .parent = NULL }
484};
485
486static struct clk core_ck = { 480static struct clk core_ck = {
487 .name = "core_ck", 481 .name = "core_ck",
488 .ops = &clkops_null, 482 .ops = &clkops_null,
489 .init = &omap2_init_clksel_parent, 483 .parent = &dpll3_m2_ck,
490 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST), 484 .recalc = &followparent_recalc,
491 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
492 .clksel = core_ck_clksel,
493 .recalc = &omap2_clksel_recalc,
494};
495
496static const struct clksel dpll3_m2x2_ck_clksel[] = {
497 { .parent = &sys_ck, .rates = dpll_bypass_rates },
498 { .parent = &dpll3_x2_ck, .rates = dpll_locked_rates },
499 { .parent = NULL }
500}; 485};
501 486
502static struct clk dpll3_m2x2_ck = { 487static struct clk dpll3_m2x2_ck = {
503 .name = "dpll3_m2x2_ck", 488 .name = "dpll3_m2x2_ck",
504 .ops = &clkops_null, 489 .ops = &clkops_null,
505 .init = &omap2_init_clksel_parent, 490 .parent = &dpll3_x2_ck,
506 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
507 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
508 .clksel = dpll3_m2x2_ck_clksel,
509 .clkdm_name = "dpll3_clkdm", 491 .clkdm_name = "dpll3_clkdm",
510 .recalc = &omap2_clksel_recalc, 492 .recalc = &followparent_recalc,
511}; 493};
512 494
513/* The PWRDN bit is apparently only available on 3430ES2 and above */ 495/* The PWRDN bit is apparently only available on 3430ES2 and above */
@@ -541,22 +523,12 @@ static struct clk dpll3_m3x2_ck = {
541 .recalc = &omap3_clkoutx2_recalc, 523 .recalc = &omap3_clkoutx2_recalc,
542}; 524};
543 525
544static const struct clksel emu_core_alwon_ck_clksel[] = {
545 { .parent = &sys_ck, .rates = dpll_bypass_rates },
546 { .parent = &dpll3_m3x2_ck, .rates = dpll_locked_rates },
547 { .parent = NULL }
548};
549
550static struct clk emu_core_alwon_ck = { 526static struct clk emu_core_alwon_ck = {
551 .name = "emu_core_alwon_ck", 527 .name = "emu_core_alwon_ck",
552 .ops = &clkops_null, 528 .ops = &clkops_null,
553 .parent = &dpll3_m3x2_ck, 529 .parent = &dpll3_m3x2_ck,
554 .init = &omap2_init_clksel_parent,
555 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
556 .clksel_mask = OMAP3430_ST_CORE_CLK_MASK,
557 .clksel = emu_core_alwon_ck_clksel,
558 .clkdm_name = "dpll3_clkdm", 530 .clkdm_name = "dpll3_clkdm",
559 .recalc = &omap2_clksel_recalc, 531 .recalc = &followparent_recalc,
560}; 532};
561 533
562/* DPLL4 */ 534/* DPLL4 */
@@ -566,6 +538,8 @@ static struct dpll_data dpll4_dd = {
566 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL2), 538 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL2),
567 .mult_mask = OMAP3430_PERIPH_DPLL_MULT_MASK, 539 .mult_mask = OMAP3430_PERIPH_DPLL_MULT_MASK,
568 .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK, 540 .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK,
541 .clk_bypass = &sys_ck,
542 .clk_ref = &sys_ck,
569 .freqsel_mask = OMAP3430_PERIPH_DPLL_FREQSEL_MASK, 543 .freqsel_mask = OMAP3430_PERIPH_DPLL_FREQSEL_MASK,
570 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN), 544 .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
571 .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK, 545 .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK,
@@ -637,12 +611,6 @@ static struct clk dpll4_m2x2_ck = {
637 .recalc = &omap3_clkoutx2_recalc, 611 .recalc = &omap3_clkoutx2_recalc,
638}; 612};
639 613
640static const struct clksel omap_96m_alwon_fck_clksel[] = {
641 { .parent = &sys_ck, .rates = dpll_bypass_rates },
642 { .parent = &dpll4_m2x2_ck, .rates = dpll_locked_rates },
643 { .parent = NULL }
644};
645
646/* 614/*
647 * DPLL4 generates DPLL4_M2X2_CLK which is then routed into the PRM as 615 * DPLL4 generates DPLL4_M2X2_CLK which is then routed into the PRM as
648 * PRM_96M_ALWON_(F)CLK. Two clocks then emerge from the PRM: 616 * PRM_96M_ALWON_(F)CLK. Two clocks then emerge from the PRM:
@@ -653,11 +621,7 @@ static struct clk omap_96m_alwon_fck = {
653 .name = "omap_96m_alwon_fck", 621 .name = "omap_96m_alwon_fck",
654 .ops = &clkops_null, 622 .ops = &clkops_null,
655 .parent = &dpll4_m2x2_ck, 623 .parent = &dpll4_m2x2_ck,
656 .init = &omap2_init_clksel_parent, 624 .recalc = &followparent_recalc,
657 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
658 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
659 .clksel = omap_96m_alwon_fck_clksel,
660 .recalc = &omap2_clksel_recalc,
661}; 625};
662 626
663static struct clk cm_96m_fck = { 627static struct clk cm_96m_fck = {
@@ -720,23 +684,6 @@ static struct clk dpll4_m3x2_ck = {
720 .recalc = &omap3_clkoutx2_recalc, 684 .recalc = &omap3_clkoutx2_recalc,
721}; 685};
722 686
723static const struct clksel virt_omap_54m_fck_clksel[] = {
724 { .parent = &sys_ck, .rates = dpll_bypass_rates },
725 { .parent = &dpll4_m3x2_ck, .rates = dpll_locked_rates },
726 { .parent = NULL }
727};
728
729static struct clk virt_omap_54m_fck = {
730 .name = "virt_omap_54m_fck",
731 .ops = &clkops_null,
732 .parent = &dpll4_m3x2_ck,
733 .init = &omap2_init_clksel_parent,
734 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
735 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
736 .clksel = virt_omap_54m_fck_clksel,
737 .recalc = &omap2_clksel_recalc,
738};
739
740static const struct clksel_rate omap_54m_d4m3x2_rates[] = { 687static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
741 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE }, 688 { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
742 { .div = 0 } 689 { .div = 0 }
@@ -748,7 +695,7 @@ static const struct clksel_rate omap_54m_alt_rates[] = {
748}; 695};
749 696
750static const struct clksel omap_54m_clksel[] = { 697static const struct clksel omap_54m_clksel[] = {
751 { .parent = &virt_omap_54m_fck, .rates = omap_54m_d4m3x2_rates }, 698 { .parent = &dpll4_m3x2_ck, .rates = omap_54m_d4m3x2_rates },
752 { .parent = &sys_altclk, .rates = omap_54m_alt_rates }, 699 { .parent = &sys_altclk, .rates = omap_54m_alt_rates },
753 { .parent = NULL } 700 { .parent = NULL }
754}; 701};
@@ -891,6 +838,8 @@ static struct dpll_data dpll5_dd = {
891 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4), 838 .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4),
892 .mult_mask = OMAP3430ES2_PERIPH2_DPLL_MULT_MASK, 839 .mult_mask = OMAP3430ES2_PERIPH2_DPLL_MULT_MASK,
893 .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK, 840 .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK,
841 .clk_bypass = &sys_ck,
842 .clk_ref = &sys_ck,
894 .freqsel_mask = OMAP3430ES2_PERIPH2_DPLL_FREQSEL_MASK, 843 .freqsel_mask = OMAP3430ES2_PERIPH2_DPLL_FREQSEL_MASK,
895 .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2), 844 .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2),
896 .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK, 845 .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK,
@@ -936,23 +885,6 @@ static struct clk dpll5_m2_ck = {
936 .recalc = &omap2_clksel_recalc, 885 .recalc = &omap2_clksel_recalc,
937}; 886};
938 887
939static const struct clksel omap_120m_fck_clksel[] = {
940 { .parent = &sys_ck, .rates = dpll_bypass_rates },
941 { .parent = &dpll5_m2_ck, .rates = dpll_locked_rates },
942 { .parent = NULL }
943};
944
945static struct clk omap_120m_fck = {
946 .name = "omap_120m_fck",
947 .ops = &clkops_null,
948 .parent = &dpll5_m2_ck,
949 .init = &omap2_init_clksel_parent,
950 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2),
951 .clksel_mask = OMAP3430ES2_ST_PERIPH2_CLK_MASK,
952 .clksel = omap_120m_fck_clksel,
953 .recalc = &omap2_clksel_recalc,
954};
955
956/* CM EXTERNAL CLOCK OUTPUTS */ 888/* CM EXTERNAL CLOCK OUTPUTS */
957 889
958static const struct clksel_rate clkout2_src_core_rates[] = { 890static const struct clksel_rate clkout2_src_core_rates[] = {
@@ -1058,28 +990,12 @@ static struct clk dpll1_fck = {
1058 .recalc = &omap2_clksel_recalc, 990 .recalc = &omap2_clksel_recalc,
1059}; 991};
1060 992
1061/*
1062 * MPU clksel:
1063 * If DPLL1 is locked, mpu_ck derives from DPLL1; otherwise, mpu_ck
1064 * derives from the high-frequency bypass clock originating from DPLL3,
1065 * called 'dpll1_fck'
1066 */
1067static const struct clksel mpu_clksel[] = {
1068 { .parent = &dpll1_fck, .rates = dpll_bypass_rates },
1069 { .parent = &dpll1_x2m2_ck, .rates = dpll_locked_rates },
1070 { .parent = NULL }
1071};
1072
1073static struct clk mpu_ck = { 993static struct clk mpu_ck = {
1074 .name = "mpu_ck", 994 .name = "mpu_ck",
1075 .ops = &clkops_null, 995 .ops = &clkops_null,
1076 .parent = &dpll1_x2m2_ck, 996 .parent = &dpll1_x2m2_ck,
1077 .init = &omap2_init_clksel_parent,
1078 .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
1079 .clksel_mask = OMAP3430_ST_MPU_CLK_MASK,
1080 .clksel = mpu_clksel,
1081 .clkdm_name = "mpu_clkdm", 997 .clkdm_name = "mpu_clkdm",
1082 .recalc = &omap2_clksel_recalc, 998 .recalc = &followparent_recalc,
1083}; 999};
1084 1000
1085/* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */ 1001/* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */
@@ -1129,19 +1045,6 @@ static struct clk dpll2_fck = {
1129 .recalc = &omap2_clksel_recalc, 1045 .recalc = &omap2_clksel_recalc,
1130}; 1046};
1131 1047
1132/*
1133 * IVA2 clksel:
1134 * If DPLL2 is locked, iva2_ck derives from DPLL2; otherwise, iva2_ck
1135 * derives from the high-frequency bypass clock originating from DPLL3,
1136 * called 'dpll2_fck'
1137 */
1138
1139static const struct clksel iva2_clksel[] = {
1140 { .parent = &dpll2_fck, .rates = dpll_bypass_rates },
1141 { .parent = &dpll2_m2_ck, .rates = dpll_locked_rates },
1142 { .parent = NULL }
1143};
1144
1145static struct clk iva2_ck = { 1048static struct clk iva2_ck = {
1146 .name = "iva2_ck", 1049 .name = "iva2_ck",
1147 .ops = &clkops_omap2_dflt_wait, 1050 .ops = &clkops_omap2_dflt_wait,
@@ -1149,12 +1052,8 @@ static struct clk iva2_ck = {
1149 .init = &omap2_init_clksel_parent, 1052 .init = &omap2_init_clksel_parent,
1150 .enable_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, CM_FCLKEN), 1053 .enable_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, CM_FCLKEN),
1151 .enable_bit = OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT, 1054 .enable_bit = OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT,
1152 .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
1153 OMAP3430_CM_IDLEST_PLL),
1154 .clksel_mask = OMAP3430_ST_IVA2_CLK_MASK,
1155 .clksel = iva2_clksel,
1156 .clkdm_name = "iva2_clkdm", 1055 .clkdm_name = "iva2_clkdm",
1157 .recalc = &omap2_clksel_recalc, 1056 .recalc = &followparent_recalc,
1158}; 1057};
1159 1058
1160/* Common interface clocks */ 1059/* Common interface clocks */
@@ -1384,7 +1283,7 @@ static struct clk ts_fck = {
1384static struct clk usbtll_fck = { 1283static struct clk usbtll_fck = {
1385 .name = "usbtll_fck", 1284 .name = "usbtll_fck",
1386 .ops = &clkops_omap2_dflt, 1285 .ops = &clkops_omap2_dflt,
1387 .parent = &omap_120m_fck, 1286 .parent = &dpll5_m2_ck,
1388 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3), 1287 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
1389 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT, 1288 .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
1390 .recalc = &followparent_recalc, 1289 .recalc = &followparent_recalc,
@@ -2094,24 +1993,14 @@ static struct clk des1_ick = {
2094}; 1993};
2095 1994
2096/* DSS */ 1995/* DSS */
2097static const struct clksel dss1_alwon_fck_clksel[] = {
2098 { .parent = &sys_ck, .rates = dpll_bypass_rates },
2099 { .parent = &dpll4_m4x2_ck, .rates = dpll_locked_rates },
2100 { .parent = NULL }
2101};
2102
2103static struct clk dss1_alwon_fck = { 1996static struct clk dss1_alwon_fck = {
2104 .name = "dss1_alwon_fck", 1997 .name = "dss1_alwon_fck",
2105 .ops = &clkops_omap2_dflt, 1998 .ops = &clkops_omap2_dflt,
2106 .parent = &dpll4_m4x2_ck, 1999 .parent = &dpll4_m4x2_ck,
2107 .init = &omap2_init_clksel_parent,
2108 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN), 2000 .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
2109 .enable_bit = OMAP3430_EN_DSS1_SHIFT, 2001 .enable_bit = OMAP3430_EN_DSS1_SHIFT,
2110 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
2111 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
2112 .clksel = dss1_alwon_fck_clksel,
2113 .clkdm_name = "dss_clkdm", 2002 .clkdm_name = "dss_clkdm",
2114 .recalc = &omap2_clksel_recalc, 2003 .recalc = &followparent_recalc,
2115}; 2004};
2116 2005
2117static struct clk dss_tv_fck = { 2006static struct clk dss_tv_fck = {
@@ -2161,24 +2050,14 @@ static struct clk dss_ick = {
2161 2050
2162/* CAM */ 2051/* CAM */
2163 2052
2164static const struct clksel cam_mclk_clksel[] = {
2165 { .parent = &sys_ck, .rates = dpll_bypass_rates },
2166 { .parent = &dpll4_m5x2_ck, .rates = dpll_locked_rates },
2167 { .parent = NULL }
2168};
2169
2170static struct clk cam_mclk = { 2053static struct clk cam_mclk = {
2171 .name = "cam_mclk", 2054 .name = "cam_mclk",
2172 .ops = &clkops_omap2_dflt_wait, 2055 .ops = &clkops_omap2_dflt_wait,
2173 .parent = &dpll4_m5x2_ck, 2056 .parent = &dpll4_m5x2_ck,
2174 .init = &omap2_init_clksel_parent,
2175 .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
2176 .clksel_mask = OMAP3430_ST_PERIPH_CLK_MASK,
2177 .clksel = cam_mclk_clksel,
2178 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN), 2057 .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
2179 .enable_bit = OMAP3430_EN_CAM_SHIFT, 2058 .enable_bit = OMAP3430_EN_CAM_SHIFT,
2180 .clkdm_name = "cam_clkdm", 2059 .clkdm_name = "cam_clkdm",
2181 .recalc = &omap2_clksel_recalc, 2060 .recalc = &followparent_recalc,
2182}; 2061};
2183 2062
2184static struct clk cam_ick = { 2063static struct clk cam_ick = {
@@ -2209,7 +2088,7 @@ static struct clk csi2_96m_fck = {
2209static struct clk usbhost_120m_fck = { 2088static struct clk usbhost_120m_fck = {
2210 .name = "usbhost_120m_fck", 2089 .name = "usbhost_120m_fck",
2211 .ops = &clkops_omap2_dflt_wait, 2090 .ops = &clkops_omap2_dflt_wait,
2212 .parent = &omap_120m_fck, 2091 .parent = &dpll5_m2_ck,
2213 .init = &omap2_init_clk_clkdm, 2092 .init = &omap2_init_clk_clkdm,
2214 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN), 2093 .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
2215 .enable_bit = OMAP3430ES2_EN_USBHOST2_SHIFT, 2094 .enable_bit = OMAP3430ES2_EN_USBHOST2_SHIFT,
@@ -2260,7 +2139,7 @@ static const struct clksel_rate usim_120m_rates[] = {
2260 2139
2261static const struct clksel usim_clksel[] = { 2140static const struct clksel usim_clksel[] = {
2262 { .parent = &omap_96m_fck, .rates = usim_96m_rates }, 2141 { .parent = &omap_96m_fck, .rates = usim_96m_rates },
2263 { .parent = &omap_120m_fck, .rates = usim_120m_rates }, 2142 { .parent = &dpll5_m2_ck, .rates = usim_120m_rates },
2264 { .parent = &sys_ck, .rates = div2_rates }, 2143 { .parent = &sys_ck, .rates = div2_rates },
2265 { .parent = NULL }, 2144 { .parent = NULL },
2266}; 2145};