diff options
author | Tomeu Vizoso <tomeu.vizoso@collabora.com> | 2015-01-23 06:03:30 -0500 |
---|---|---|
committer | Michael Turquette <mturquette@linaro.org> | 2015-02-02 17:22:19 -0500 |
commit | 035a61c314eb3dab5bcc5683afaf4d412689858a (patch) | |
tree | 3c325fc76191cf1319c4a3399dfdd9f777033d6d /arch | |
parent | af0f349b2996f9f3d83e5aac1edf58fff727a0e0 (diff) |
clk: Make clk API return per-user struct clk instances
Moves clock state to struct clk_core, but takes care to change as little API as
possible.
struct clk_hw still has a pointer to a struct clk, which is the
implementation's per-user clk instance, for backwards compatibility.
The struct clk that clk_get_parent() returns isn't owned by the caller, but by
the clock implementation, so the former shouldn't call clk_put() on it.
Because some boards in mach-omap2 still register clocks statically, their clock
registration had to be updated to take into account that the clock information
is stored in struct clk_core now.
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Michael Turquette <mturquette@linaro.org>
[mturquette@linaro.org: adapted clk_has_parent to struct clk_core
applied OMAP3+ DPLL fix from Tero & Tony]
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-omap2/cclock3xxx_data.c | 111 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock.h | 11 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clock_common_data.c | 5 | ||||
-rw-r--r-- | arch/arm/mach-omap2/dpll3xxx.c | 11 |
4 files changed, 92 insertions, 46 deletions
diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 644ff3231bb8..adb4e6437204 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c | |||
@@ -82,7 +82,7 @@ DEFINE_CLK_MUX(osc_sys_ck, osc_sys_ck_parent_names, NULL, 0x0, | |||
82 | OMAP3430_PRM_CLKSEL, OMAP3430_SYS_CLKIN_SEL_SHIFT, | 82 | OMAP3430_PRM_CLKSEL, OMAP3430_SYS_CLKIN_SEL_SHIFT, |
83 | OMAP3430_SYS_CLKIN_SEL_WIDTH, 0x0, NULL); | 83 | OMAP3430_SYS_CLKIN_SEL_WIDTH, 0x0, NULL); |
84 | 84 | ||
85 | DEFINE_CLK_DIVIDER(sys_ck, "osc_sys_ck", &osc_sys_ck, 0x0, | 85 | DEFINE_CLK_DIVIDER(sys_ck, "osc_sys_ck", &osc_sys_ck_core, 0x0, |
86 | OMAP3430_PRM_CLKSRC_CTRL, OMAP_SYSCLKDIV_SHIFT, | 86 | OMAP3430_PRM_CLKSRC_CTRL, OMAP_SYSCLKDIV_SHIFT, |
87 | OMAP_SYSCLKDIV_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); | 87 | OMAP_SYSCLKDIV_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); |
88 | 88 | ||
@@ -132,7 +132,7 @@ static struct clk_hw_omap dpll3_ck_hw = { | |||
132 | 132 | ||
133 | DEFINE_STRUCT_CLK(dpll3_ck, dpll3_ck_parent_names, dpll3_ck_ops); | 133 | DEFINE_STRUCT_CLK(dpll3_ck, dpll3_ck_parent_names, dpll3_ck_ops); |
134 | 134 | ||
135 | DEFINE_CLK_DIVIDER(dpll3_m2_ck, "dpll3_ck", &dpll3_ck, 0x0, | 135 | DEFINE_CLK_DIVIDER(dpll3_m2_ck, "dpll3_ck", &dpll3_ck_core, 0x0, |
136 | OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), | 136 | OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), |
137 | OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT, | 137 | OMAP3430_CORE_DPLL_CLKOUT_DIV_SHIFT, |
138 | OMAP3430_CORE_DPLL_CLKOUT_DIV_WIDTH, | 138 | OMAP3430_CORE_DPLL_CLKOUT_DIV_WIDTH, |
@@ -149,12 +149,12 @@ static const struct clk_ops core_ck_ops = {}; | |||
149 | DEFINE_STRUCT_CLK_HW_OMAP(core_ck, NULL); | 149 | DEFINE_STRUCT_CLK_HW_OMAP(core_ck, NULL); |
150 | DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops); | 150 | DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops); |
151 | 151 | ||
152 | DEFINE_CLK_DIVIDER(l3_ick, "core_ck", &core_ck, 0x0, | 152 | DEFINE_CLK_DIVIDER(l3_ick, "core_ck", &core_ck_core, 0x0, |
153 | OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL), | 153 | OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL), |
154 | OMAP3430_CLKSEL_L3_SHIFT, OMAP3430_CLKSEL_L3_WIDTH, | 154 | OMAP3430_CLKSEL_L3_SHIFT, OMAP3430_CLKSEL_L3_WIDTH, |
155 | CLK_DIVIDER_ONE_BASED, NULL); | 155 | CLK_DIVIDER_ONE_BASED, NULL); |
156 | 156 | ||
157 | DEFINE_CLK_DIVIDER(l4_ick, "l3_ick", &l3_ick, 0x0, | 157 | DEFINE_CLK_DIVIDER(l4_ick, "l3_ick", &l3_ick_core, 0x0, |
158 | OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL), | 158 | OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL), |
159 | OMAP3430_CLKSEL_L4_SHIFT, OMAP3430_CLKSEL_L4_WIDTH, | 159 | OMAP3430_CLKSEL_L4_SHIFT, OMAP3430_CLKSEL_L4_WIDTH, |
160 | CLK_DIVIDER_ONE_BASED, NULL); | 160 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -275,9 +275,9 @@ static struct clk_hw_omap dpll1_ck_hw = { | |||
275 | 275 | ||
276 | DEFINE_STRUCT_CLK(dpll1_ck, dpll3_ck_parent_names, dpll1_ck_ops); | 276 | DEFINE_STRUCT_CLK(dpll1_ck, dpll3_ck_parent_names, dpll1_ck_ops); |
277 | 277 | ||
278 | DEFINE_CLK_FIXED_FACTOR(dpll1_x2_ck, "dpll1_ck", &dpll1_ck, 0x0, 2, 1); | 278 | DEFINE_CLK_FIXED_FACTOR(dpll1_x2_ck, "dpll1_ck", &dpll1_ck_core, 0x0, 2, 1); |
279 | 279 | ||
280 | DEFINE_CLK_DIVIDER(dpll1_x2m2_ck, "dpll1_x2_ck", &dpll1_x2_ck, 0x0, | 280 | DEFINE_CLK_DIVIDER(dpll1_x2m2_ck, "dpll1_x2_ck", &dpll1_x2_ck_core, 0x0, |
281 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL), | 281 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL), |
282 | OMAP3430_MPU_DPLL_CLKOUT_DIV_SHIFT, | 282 | OMAP3430_MPU_DPLL_CLKOUT_DIV_SHIFT, |
283 | OMAP3430_MPU_DPLL_CLKOUT_DIV_WIDTH, | 283 | OMAP3430_MPU_DPLL_CLKOUT_DIV_WIDTH, |
@@ -292,7 +292,7 @@ static const char *mpu_ck_parent_names[] = { | |||
292 | DEFINE_STRUCT_CLK_HW_OMAP(mpu_ck, "mpu_clkdm"); | 292 | DEFINE_STRUCT_CLK_HW_OMAP(mpu_ck, "mpu_clkdm"); |
293 | DEFINE_STRUCT_CLK(mpu_ck, mpu_ck_parent_names, core_l4_ick_ops); | 293 | DEFINE_STRUCT_CLK(mpu_ck, mpu_ck_parent_names, core_l4_ick_ops); |
294 | 294 | ||
295 | DEFINE_CLK_DIVIDER(arm_fck, "mpu_ck", &mpu_ck, 0x0, | 295 | DEFINE_CLK_DIVIDER(arm_fck, "mpu_ck", &mpu_ck_core, 0x0, |
296 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL), | 296 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL), |
297 | OMAP3430_ST_MPU_CLK_SHIFT, OMAP3430_ST_MPU_CLK_WIDTH, | 297 | OMAP3430_ST_MPU_CLK_SHIFT, OMAP3430_ST_MPU_CLK_WIDTH, |
298 | 0x0, NULL); | 298 | 0x0, NULL); |
@@ -424,7 +424,7 @@ static const struct clk_div_table dpll4_mx_ck_div_table[] = { | |||
424 | { .div = 0 }, | 424 | { .div = 0 }, |
425 | }; | 425 | }; |
426 | 426 | ||
427 | DEFINE_CLK_DIVIDER(dpll4_m5_ck, "dpll4_ck", &dpll4_ck, 0x0, | 427 | DEFINE_CLK_DIVIDER(dpll4_m5_ck, "dpll4_ck", &dpll4_ck_core, 0x0, |
428 | OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL), | 428 | OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL), |
429 | OMAP3430_CLKSEL_CAM_SHIFT, OMAP3630_CLKSEL_CAM_WIDTH, | 429 | OMAP3430_CLKSEL_CAM_SHIFT, OMAP3630_CLKSEL_CAM_WIDTH, |
430 | CLK_DIVIDER_ONE_BASED, NULL); | 430 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -466,7 +466,7 @@ static struct clk_hw_omap dpll4_m5x2_ck_hw = { | |||
466 | DEFINE_STRUCT_CLK_FLAGS(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, | 466 | DEFINE_STRUCT_CLK_FLAGS(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, |
467 | dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); | 467 | dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); |
468 | 468 | ||
469 | static struct clk dpll4_m5x2_ck_3630 = { | 469 | static struct clk_core dpll4_m5x2_ck_3630_core = { |
470 | .name = "dpll4_m5x2_ck", | 470 | .name = "dpll4_m5x2_ck", |
471 | .hw = &dpll4_m5x2_ck_hw.hw, | 471 | .hw = &dpll4_m5x2_ck_hw.hw, |
472 | .parent_names = dpll4_m5x2_ck_parent_names, | 472 | .parent_names = dpll4_m5x2_ck_parent_names, |
@@ -475,6 +475,10 @@ static struct clk dpll4_m5x2_ck_3630 = { | |||
475 | .flags = CLK_SET_RATE_PARENT, | 475 | .flags = CLK_SET_RATE_PARENT, |
476 | }; | 476 | }; |
477 | 477 | ||
478 | static struct clk dpll4_m5x2_ck_3630 = { | ||
479 | .core = &dpll4_m5x2_ck_3630_core, | ||
480 | }; | ||
481 | |||
478 | static struct clk cam_mclk; | 482 | static struct clk cam_mclk; |
479 | 483 | ||
480 | static const char *cam_mclk_parent_names[] = { | 484 | static const char *cam_mclk_parent_names[] = { |
@@ -490,7 +494,7 @@ static struct clk_hw_omap cam_mclk_hw = { | |||
490 | .clkdm_name = "cam_clkdm", | 494 | .clkdm_name = "cam_clkdm", |
491 | }; | 495 | }; |
492 | 496 | ||
493 | static struct clk cam_mclk = { | 497 | static struct clk_core cam_mclk_core = { |
494 | .name = "cam_mclk", | 498 | .name = "cam_mclk", |
495 | .hw = &cam_mclk_hw.hw, | 499 | .hw = &cam_mclk_hw.hw, |
496 | .parent_names = cam_mclk_parent_names, | 500 | .parent_names = cam_mclk_parent_names, |
@@ -499,6 +503,10 @@ static struct clk cam_mclk = { | |||
499 | .flags = CLK_SET_RATE_PARENT, | 503 | .flags = CLK_SET_RATE_PARENT, |
500 | }; | 504 | }; |
501 | 505 | ||
506 | static struct clk cam_mclk = { | ||
507 | .core = &cam_mclk_core, | ||
508 | }; | ||
509 | |||
502 | static const struct clksel_rate clkout2_src_core_rates[] = { | 510 | static const struct clksel_rate clkout2_src_core_rates[] = { |
503 | { .div = 1, .val = 0, .flags = RATE_IN_3XXX }, | 511 | { .div = 1, .val = 0, .flags = RATE_IN_3XXX }, |
504 | { .div = 0 } | 512 | { .div = 0 } |
@@ -514,7 +522,7 @@ static const struct clksel_rate clkout2_src_96m_rates[] = { | |||
514 | { .div = 0 } | 522 | { .div = 0 } |
515 | }; | 523 | }; |
516 | 524 | ||
517 | DEFINE_CLK_DIVIDER(dpll4_m2_ck, "dpll4_ck", &dpll4_ck, 0x0, | 525 | DEFINE_CLK_DIVIDER(dpll4_m2_ck, "dpll4_ck", &dpll4_ck_core, 0x0, |
518 | OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3), | 526 | OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3), |
519 | OMAP3430_DIV_96M_SHIFT, OMAP3630_DIV_96M_WIDTH, | 527 | OMAP3430_DIV_96M_SHIFT, OMAP3630_DIV_96M_WIDTH, |
520 | CLK_DIVIDER_ONE_BASED, NULL); | 528 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -538,7 +546,7 @@ static struct clk_hw_omap dpll4_m2x2_ck_hw = { | |||
538 | 546 | ||
539 | DEFINE_STRUCT_CLK(dpll4_m2x2_ck, dpll4_m2x2_ck_parent_names, dpll4_m5x2_ck_ops); | 547 | DEFINE_STRUCT_CLK(dpll4_m2x2_ck, dpll4_m2x2_ck_parent_names, dpll4_m5x2_ck_ops); |
540 | 548 | ||
541 | static struct clk dpll4_m2x2_ck_3630 = { | 549 | static struct clk_core dpll4_m2x2_ck_3630_core = { |
542 | .name = "dpll4_m2x2_ck", | 550 | .name = "dpll4_m2x2_ck", |
543 | .hw = &dpll4_m2x2_ck_hw.hw, | 551 | .hw = &dpll4_m2x2_ck_hw.hw, |
544 | .parent_names = dpll4_m2x2_ck_parent_names, | 552 | .parent_names = dpll4_m2x2_ck_parent_names, |
@@ -546,6 +554,10 @@ static struct clk dpll4_m2x2_ck_3630 = { | |||
546 | .ops = &dpll4_m5x2_ck_3630_ops, | 554 | .ops = &dpll4_m5x2_ck_3630_ops, |
547 | }; | 555 | }; |
548 | 556 | ||
557 | static struct clk dpll4_m2x2_ck_3630 = { | ||
558 | .core = &dpll4_m2x2_ck_3630_core, | ||
559 | }; | ||
560 | |||
549 | static struct clk omap_96m_alwon_fck; | 561 | static struct clk omap_96m_alwon_fck; |
550 | 562 | ||
551 | static const char *omap_96m_alwon_fck_parent_names[] = { | 563 | static const char *omap_96m_alwon_fck_parent_names[] = { |
@@ -570,7 +582,7 @@ static const struct clksel_rate clkout2_src_54m_rates[] = { | |||
570 | { .div = 0 } | 582 | { .div = 0 } |
571 | }; | 583 | }; |
572 | 584 | ||
573 | DEFINE_CLK_DIVIDER_TABLE(dpll4_m3_ck, "dpll4_ck", &dpll4_ck, 0x0, | 585 | DEFINE_CLK_DIVIDER_TABLE(dpll4_m3_ck, "dpll4_ck", &dpll4_ck_core, 0x0, |
574 | OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), | 586 | OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), |
575 | OMAP3430_CLKSEL_TV_SHIFT, OMAP3630_CLKSEL_TV_WIDTH, | 587 | OMAP3430_CLKSEL_TV_SHIFT, OMAP3630_CLKSEL_TV_WIDTH, |
576 | 0, dpll4_mx_ck_div_table, NULL); | 588 | 0, dpll4_mx_ck_div_table, NULL); |
@@ -594,7 +606,7 @@ static struct clk_hw_omap dpll4_m3x2_ck_hw = { | |||
594 | 606 | ||
595 | DEFINE_STRUCT_CLK(dpll4_m3x2_ck, dpll4_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); | 607 | DEFINE_STRUCT_CLK(dpll4_m3x2_ck, dpll4_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); |
596 | 608 | ||
597 | static struct clk dpll4_m3x2_ck_3630 = { | 609 | static struct clk_core dpll4_m3x2_ck_3630_core = { |
598 | .name = "dpll4_m3x2_ck", | 610 | .name = "dpll4_m3x2_ck", |
599 | .hw = &dpll4_m3x2_ck_hw.hw, | 611 | .hw = &dpll4_m3x2_ck_hw.hw, |
600 | .parent_names = dpll4_m3x2_ck_parent_names, | 612 | .parent_names = dpll4_m3x2_ck_parent_names, |
@@ -602,6 +614,10 @@ static struct clk dpll4_m3x2_ck_3630 = { | |||
602 | .ops = &dpll4_m5x2_ck_3630_ops, | 614 | .ops = &dpll4_m5x2_ck_3630_ops, |
603 | }; | 615 | }; |
604 | 616 | ||
617 | static struct clk dpll4_m3x2_ck_3630 = { | ||
618 | .core = &dpll4_m3x2_ck_3630_core, | ||
619 | }; | ||
620 | |||
605 | static const char *omap_54m_fck_parent_names[] = { | 621 | static const char *omap_54m_fck_parent_names[] = { |
606 | "dpll4_m3x2_ck", "sys_altclk", | 622 | "dpll4_m3x2_ck", "sys_altclk", |
607 | }; | 623 | }; |
@@ -677,7 +693,8 @@ static struct clk_hw_omap omap_48m_fck_hw = { | |||
677 | 693 | ||
678 | DEFINE_STRUCT_CLK(omap_48m_fck, omap_48m_fck_parent_names, omap_48m_fck_ops); | 694 | DEFINE_STRUCT_CLK(omap_48m_fck, omap_48m_fck_parent_names, omap_48m_fck_ops); |
679 | 695 | ||
680 | DEFINE_CLK_FIXED_FACTOR(omap_12m_fck, "omap_48m_fck", &omap_48m_fck, 0x0, 1, 4); | 696 | DEFINE_CLK_FIXED_FACTOR(omap_12m_fck, "omap_48m_fck", &omap_48m_fck_core, 0x0, |
697 | 1, 4); | ||
681 | 698 | ||
682 | static struct clk core_12m_fck; | 699 | static struct clk core_12m_fck; |
683 | 700 | ||
@@ -723,7 +740,8 @@ static const char *core_l3_ick_parent_names[] = { | |||
723 | DEFINE_STRUCT_CLK_HW_OMAP(core_l3_ick, "core_l3_clkdm"); | 740 | DEFINE_STRUCT_CLK_HW_OMAP(core_l3_ick, "core_l3_clkdm"); |
724 | DEFINE_STRUCT_CLK(core_l3_ick, core_l3_ick_parent_names, core_l4_ick_ops); | 741 | DEFINE_STRUCT_CLK(core_l3_ick, core_l3_ick_parent_names, core_l4_ick_ops); |
725 | 742 | ||
726 | DEFINE_CLK_FIXED_FACTOR(dpll3_m2x2_ck, "dpll3_m2_ck", &dpll3_m2_ck, 0x0, 2, 1); | 743 | DEFINE_CLK_FIXED_FACTOR(dpll3_m2x2_ck, "dpll3_m2_ck", &dpll3_m2_ck_core, 0x0, |
744 | 2, 1); | ||
727 | 745 | ||
728 | static struct clk corex2_fck; | 746 | static struct clk corex2_fck; |
729 | 747 | ||
@@ -809,7 +827,7 @@ static struct clk_hw_omap des2_ick_hw = { | |||
809 | 827 | ||
810 | DEFINE_STRUCT_CLK(des2_ick, aes2_ick_parent_names, aes2_ick_ops); | 828 | DEFINE_STRUCT_CLK(des2_ick, aes2_ick_parent_names, aes2_ick_ops); |
811 | 829 | ||
812 | DEFINE_CLK_DIVIDER(dpll1_fck, "core_ck", &core_ck, 0x0, | 830 | DEFINE_CLK_DIVIDER(dpll1_fck, "core_ck", &core_ck_core, 0x0, |
813 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL), | 831 | OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL), |
814 | OMAP3430_MPU_CLK_SRC_SHIFT, OMAP3430_MPU_CLK_SRC_WIDTH, | 832 | OMAP3430_MPU_CLK_SRC_SHIFT, OMAP3430_MPU_CLK_SRC_WIDTH, |
815 | CLK_DIVIDER_ONE_BASED, NULL); | 833 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -852,18 +870,18 @@ static struct clk_hw_omap dpll2_ck_hw = { | |||
852 | 870 | ||
853 | DEFINE_STRUCT_CLK(dpll2_ck, dpll3_ck_parent_names, dpll1_ck_ops); | 871 | DEFINE_STRUCT_CLK(dpll2_ck, dpll3_ck_parent_names, dpll1_ck_ops); |
854 | 872 | ||
855 | DEFINE_CLK_DIVIDER(dpll2_fck, "core_ck", &core_ck, 0x0, | 873 | DEFINE_CLK_DIVIDER(dpll2_fck, "core_ck", &core_ck_core, 0x0, |
856 | OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL), | 874 | OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL), |
857 | OMAP3430_IVA2_CLK_SRC_SHIFT, OMAP3430_IVA2_CLK_SRC_WIDTH, | 875 | OMAP3430_IVA2_CLK_SRC_SHIFT, OMAP3430_IVA2_CLK_SRC_WIDTH, |
858 | CLK_DIVIDER_ONE_BASED, NULL); | 876 | CLK_DIVIDER_ONE_BASED, NULL); |
859 | 877 | ||
860 | DEFINE_CLK_DIVIDER(dpll2_m2_ck, "dpll2_ck", &dpll2_ck, 0x0, | 878 | DEFINE_CLK_DIVIDER(dpll2_m2_ck, "dpll2_ck", &dpll2_ck_core, 0x0, |
861 | OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL2_PLL), | 879 | OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL2_PLL), |
862 | OMAP3430_IVA2_DPLL_CLKOUT_DIV_SHIFT, | 880 | OMAP3430_IVA2_DPLL_CLKOUT_DIV_SHIFT, |
863 | OMAP3430_IVA2_DPLL_CLKOUT_DIV_WIDTH, | 881 | OMAP3430_IVA2_DPLL_CLKOUT_DIV_WIDTH, |
864 | CLK_DIVIDER_ONE_BASED, NULL); | 882 | CLK_DIVIDER_ONE_BASED, NULL); |
865 | 883 | ||
866 | DEFINE_CLK_DIVIDER(dpll3_m3_ck, "dpll3_ck", &dpll3_ck, 0x0, | 884 | DEFINE_CLK_DIVIDER(dpll3_m3_ck, "dpll3_ck", &dpll3_ck_core, 0x0, |
867 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 885 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
868 | OMAP3430_DIV_DPLL3_SHIFT, OMAP3430_DIV_DPLL3_WIDTH, | 886 | OMAP3430_DIV_DPLL3_SHIFT, OMAP3430_DIV_DPLL3_WIDTH, |
869 | CLK_DIVIDER_ONE_BASED, NULL); | 887 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -887,7 +905,7 @@ static struct clk_hw_omap dpll3_m3x2_ck_hw = { | |||
887 | 905 | ||
888 | DEFINE_STRUCT_CLK(dpll3_m3x2_ck, dpll3_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); | 906 | DEFINE_STRUCT_CLK(dpll3_m3x2_ck, dpll3_m3x2_ck_parent_names, dpll4_m5x2_ck_ops); |
889 | 907 | ||
890 | static struct clk dpll3_m3x2_ck_3630 = { | 908 | static struct clk_core dpll3_m3x2_ck_3630_core = { |
891 | .name = "dpll3_m3x2_ck", | 909 | .name = "dpll3_m3x2_ck", |
892 | .hw = &dpll3_m3x2_ck_hw.hw, | 910 | .hw = &dpll3_m3x2_ck_hw.hw, |
893 | .parent_names = dpll3_m3x2_ck_parent_names, | 911 | .parent_names = dpll3_m3x2_ck_parent_names, |
@@ -895,9 +913,13 @@ static struct clk dpll3_m3x2_ck_3630 = { | |||
895 | .ops = &dpll4_m5x2_ck_3630_ops, | 913 | .ops = &dpll4_m5x2_ck_3630_ops, |
896 | }; | 914 | }; |
897 | 915 | ||
898 | DEFINE_CLK_FIXED_FACTOR(dpll3_x2_ck, "dpll3_ck", &dpll3_ck, 0x0, 2, 1); | 916 | static struct clk dpll3_m3x2_ck_3630 = { |
917 | .core = &dpll3_m3x2_ck_3630_core, | ||
918 | }; | ||
919 | |||
920 | DEFINE_CLK_FIXED_FACTOR(dpll3_x2_ck, "dpll3_ck", &dpll3_ck_core, 0x0, 2, 1); | ||
899 | 921 | ||
900 | DEFINE_CLK_DIVIDER_TABLE(dpll4_m4_ck, "dpll4_ck", &dpll4_ck, 0x0, | 922 | DEFINE_CLK_DIVIDER_TABLE(dpll4_m4_ck, "dpll4_ck", &dpll4_ck_core, 0x0, |
901 | OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), | 923 | OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), |
902 | OMAP3430_CLKSEL_DSS1_SHIFT, OMAP3630_CLKSEL_DSS1_WIDTH, | 924 | OMAP3430_CLKSEL_DSS1_SHIFT, OMAP3630_CLKSEL_DSS1_WIDTH, |
903 | 0, dpll4_mx_ck_div_table, NULL); | 925 | 0, dpll4_mx_ck_div_table, NULL); |
@@ -922,7 +944,7 @@ static struct clk_hw_omap dpll4_m4x2_ck_hw = { | |||
922 | DEFINE_STRUCT_CLK_FLAGS(dpll4_m4x2_ck, dpll4_m4x2_ck_parent_names, | 944 | DEFINE_STRUCT_CLK_FLAGS(dpll4_m4x2_ck, dpll4_m4x2_ck_parent_names, |
923 | dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); | 945 | dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT); |
924 | 946 | ||
925 | static struct clk dpll4_m4x2_ck_3630 = { | 947 | static struct clk_core dpll4_m4x2_ck_3630_core = { |
926 | .name = "dpll4_m4x2_ck", | 948 | .name = "dpll4_m4x2_ck", |
927 | .hw = &dpll4_m4x2_ck_hw.hw, | 949 | .hw = &dpll4_m4x2_ck_hw.hw, |
928 | .parent_names = dpll4_m4x2_ck_parent_names, | 950 | .parent_names = dpll4_m4x2_ck_parent_names, |
@@ -931,7 +953,11 @@ static struct clk dpll4_m4x2_ck_3630 = { | |||
931 | .flags = CLK_SET_RATE_PARENT, | 953 | .flags = CLK_SET_RATE_PARENT, |
932 | }; | 954 | }; |
933 | 955 | ||
934 | DEFINE_CLK_DIVIDER(dpll4_m6_ck, "dpll4_ck", &dpll4_ck, 0x0, | 956 | static struct clk dpll4_m4x2_ck_3630 = { |
957 | .core = &dpll4_m4x2_ck_3630_core, | ||
958 | }; | ||
959 | |||
960 | DEFINE_CLK_DIVIDER(dpll4_m6_ck, "dpll4_ck", &dpll4_ck_core, 0x0, | ||
935 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 961 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
936 | OMAP3430_DIV_DPLL4_SHIFT, OMAP3630_DIV_DPLL4_WIDTH, | 962 | OMAP3430_DIV_DPLL4_SHIFT, OMAP3630_DIV_DPLL4_WIDTH, |
937 | CLK_DIVIDER_ONE_BASED, NULL); | 963 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -955,7 +981,7 @@ static struct clk_hw_omap dpll4_m6x2_ck_hw = { | |||
955 | 981 | ||
956 | DEFINE_STRUCT_CLK(dpll4_m6x2_ck, dpll4_m6x2_ck_parent_names, dpll4_m5x2_ck_ops); | 982 | DEFINE_STRUCT_CLK(dpll4_m6x2_ck, dpll4_m6x2_ck_parent_names, dpll4_m5x2_ck_ops); |
957 | 983 | ||
958 | static struct clk dpll4_m6x2_ck_3630 = { | 984 | static struct clk_core dpll4_m6x2_ck_3630_core = { |
959 | .name = "dpll4_m6x2_ck", | 985 | .name = "dpll4_m6x2_ck", |
960 | .hw = &dpll4_m6x2_ck_hw.hw, | 986 | .hw = &dpll4_m6x2_ck_hw.hw, |
961 | .parent_names = dpll4_m6x2_ck_parent_names, | 987 | .parent_names = dpll4_m6x2_ck_parent_names, |
@@ -963,7 +989,11 @@ static struct clk dpll4_m6x2_ck_3630 = { | |||
963 | .ops = &dpll4_m5x2_ck_3630_ops, | 989 | .ops = &dpll4_m5x2_ck_3630_ops, |
964 | }; | 990 | }; |
965 | 991 | ||
966 | DEFINE_CLK_FIXED_FACTOR(dpll4_x2_ck, "dpll4_ck", &dpll4_ck, 0x0, 2, 1); | 992 | static struct clk dpll4_m6x2_ck_3630 = { |
993 | .core = &dpll4_m6x2_ck_3630_core, | ||
994 | }; | ||
995 | |||
996 | DEFINE_CLK_FIXED_FACTOR(dpll4_x2_ck, "dpll4_ck", &dpll4_ck_core, 0x0, 2, 1); | ||
967 | 997 | ||
968 | static struct dpll_data dpll5_dd = { | 998 | static struct dpll_data dpll5_dd = { |
969 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4), | 999 | .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4), |
@@ -1000,7 +1030,7 @@ static struct clk_hw_omap dpll5_ck_hw = { | |||
1000 | 1030 | ||
1001 | DEFINE_STRUCT_CLK(dpll5_ck, dpll3_ck_parent_names, dpll1_ck_ops); | 1031 | DEFINE_STRUCT_CLK(dpll5_ck, dpll3_ck_parent_names, dpll1_ck_ops); |
1002 | 1032 | ||
1003 | DEFINE_CLK_DIVIDER(dpll5_m2_ck, "dpll5_ck", &dpll5_ck, 0x0, | 1033 | DEFINE_CLK_DIVIDER(dpll5_m2_ck, "dpll5_ck", &dpll5_ck_core, 0x0, |
1004 | OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL5), | 1034 | OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL5), |
1005 | OMAP3430ES2_DIV_120M_SHIFT, OMAP3430ES2_DIV_120M_WIDTH, | 1035 | OMAP3430ES2_DIV_120M_SHIFT, OMAP3430ES2_DIV_120M_WIDTH, |
1006 | CLK_DIVIDER_ONE_BASED, NULL); | 1036 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -1247,7 +1277,7 @@ static struct clk_hw_omap emu_src_ck_hw = { | |||
1247 | 1277 | ||
1248 | DEFINE_STRUCT_CLK(emu_src_ck, emu_src_ck_parent_names, emu_src_ck_ops); | 1278 | DEFINE_STRUCT_CLK(emu_src_ck, emu_src_ck_parent_names, emu_src_ck_ops); |
1249 | 1279 | ||
1250 | DEFINE_CLK_DIVIDER(atclk_fck, "emu_src_ck", &emu_src_ck, 0x0, | 1280 | DEFINE_CLK_DIVIDER(atclk_fck, "emu_src_ck", &emu_src_ck_core, 0x0, |
1251 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 1281 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
1252 | OMAP3430_CLKSEL_ATCLK_SHIFT, OMAP3430_CLKSEL_ATCLK_WIDTH, | 1282 | OMAP3430_CLKSEL_ATCLK_SHIFT, OMAP3430_CLKSEL_ATCLK_WIDTH, |
1253 | CLK_DIVIDER_ONE_BASED, NULL); | 1283 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -1298,7 +1328,7 @@ static struct clk_hw_omap gfx_l3_ck_hw = { | |||
1298 | 1328 | ||
1299 | DEFINE_STRUCT_CLK(gfx_l3_ck, core_l3_ick_parent_names, aes1_ick_ops); | 1329 | DEFINE_STRUCT_CLK(gfx_l3_ck, core_l3_ick_parent_names, aes1_ick_ops); |
1300 | 1330 | ||
1301 | DEFINE_CLK_DIVIDER(gfx_l3_fck, "l3_ick", &l3_ick, 0x0, | 1331 | DEFINE_CLK_DIVIDER(gfx_l3_fck, "l3_ick", &l3_ick_core, 0x0, |
1302 | OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL), | 1332 | OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL), |
1303 | OMAP_CLKSEL_GFX_SHIFT, OMAP_CLKSEL_GFX_WIDTH, | 1333 | OMAP_CLKSEL_GFX_SHIFT, OMAP_CLKSEL_GFX_WIDTH, |
1304 | CLK_DIVIDER_ONE_BASED, NULL); | 1334 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -2498,7 +2528,7 @@ static struct clk_hw_omap omap_96m_alwon_fck_3630_hw = { | |||
2498 | .clksel_mask = OMAP3630_CLKSEL_96M_MASK, | 2528 | .clksel_mask = OMAP3630_CLKSEL_96M_MASK, |
2499 | }; | 2529 | }; |
2500 | 2530 | ||
2501 | static struct clk omap_96m_alwon_fck_3630 = { | 2531 | static struct clk_core omap_96m_alwon_fck_3630_core = { |
2502 | .name = "omap_96m_alwon_fck", | 2532 | .name = "omap_96m_alwon_fck", |
2503 | .hw = &omap_96m_alwon_fck_3630_hw.hw, | 2533 | .hw = &omap_96m_alwon_fck_3630_hw.hw, |
2504 | .parent_names = omap_96m_alwon_fck_3630_parent_names, | 2534 | .parent_names = omap_96m_alwon_fck_3630_parent_names, |
@@ -2506,6 +2536,10 @@ static struct clk omap_96m_alwon_fck_3630 = { | |||
2506 | .ops = &omap_96m_alwon_fck_3630_ops, | 2536 | .ops = &omap_96m_alwon_fck_3630_ops, |
2507 | }; | 2537 | }; |
2508 | 2538 | ||
2539 | static struct clk omap_96m_alwon_fck_3630 = { | ||
2540 | .core = &omap_96m_alwon_fck_3630_core, | ||
2541 | }; | ||
2542 | |||
2509 | static struct clk omapctrl_ick; | 2543 | static struct clk omapctrl_ick; |
2510 | 2544 | ||
2511 | static struct clk_hw_omap omapctrl_ick_hw = { | 2545 | static struct clk_hw_omap omapctrl_ick_hw = { |
@@ -2521,12 +2555,12 @@ static struct clk_hw_omap omapctrl_ick_hw = { | |||
2521 | 2555 | ||
2522 | DEFINE_STRUCT_CLK(omapctrl_ick, aes2_ick_parent_names, aes2_ick_ops); | 2556 | DEFINE_STRUCT_CLK(omapctrl_ick, aes2_ick_parent_names, aes2_ick_ops); |
2523 | 2557 | ||
2524 | DEFINE_CLK_DIVIDER(pclk_fck, "emu_src_ck", &emu_src_ck, 0x0, | 2558 | DEFINE_CLK_DIVIDER(pclk_fck, "emu_src_ck", &emu_src_ck_core, 0x0, |
2525 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 2559 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
2526 | OMAP3430_CLKSEL_PCLK_SHIFT, OMAP3430_CLKSEL_PCLK_WIDTH, | 2560 | OMAP3430_CLKSEL_PCLK_SHIFT, OMAP3430_CLKSEL_PCLK_WIDTH, |
2527 | CLK_DIVIDER_ONE_BASED, NULL); | 2561 | CLK_DIVIDER_ONE_BASED, NULL); |
2528 | 2562 | ||
2529 | DEFINE_CLK_DIVIDER(pclkx2_fck, "emu_src_ck", &emu_src_ck, 0x0, | 2563 | DEFINE_CLK_DIVIDER(pclkx2_fck, "emu_src_ck", &emu_src_ck_core, 0x0, |
2530 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 2564 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
2531 | OMAP3430_CLKSEL_PCLKX2_SHIFT, OMAP3430_CLKSEL_PCLKX2_WIDTH, | 2565 | OMAP3430_CLKSEL_PCLKX2_SHIFT, OMAP3430_CLKSEL_PCLKX2_WIDTH, |
2532 | CLK_DIVIDER_ONE_BASED, NULL); | 2566 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -2558,7 +2592,7 @@ static struct clk_hw_omap pka_ick_hw = { | |||
2558 | 2592 | ||
2559 | DEFINE_STRUCT_CLK(pka_ick, pka_ick_parent_names, aes1_ick_ops); | 2593 | DEFINE_STRUCT_CLK(pka_ick, pka_ick_parent_names, aes1_ick_ops); |
2560 | 2594 | ||
2561 | DEFINE_CLK_DIVIDER(rm_ick, "l4_ick", &l4_ick, 0x0, | 2595 | DEFINE_CLK_DIVIDER(rm_ick, "l4_ick", &l4_ick_core, 0x0, |
2562 | OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL), | 2596 | OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL), |
2563 | OMAP3430_CLKSEL_RM_SHIFT, OMAP3430_CLKSEL_RM_WIDTH, | 2597 | OMAP3430_CLKSEL_RM_SHIFT, OMAP3430_CLKSEL_RM_WIDTH, |
2564 | CLK_DIVIDER_ONE_BASED, NULL); | 2598 | CLK_DIVIDER_ONE_BASED, NULL); |
@@ -2819,10 +2853,10 @@ DEFINE_CLK_OMAP_MUX_GATE(ssi_ssr_fck_3430es2, "core_l4_clkdm", | |||
2819 | ssi_ssr_fck_3430es1_ops); | 2853 | ssi_ssr_fck_3430es1_ops); |
2820 | 2854 | ||
2821 | DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es1, "ssi_ssr_fck_3430es1", | 2855 | DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es1, "ssi_ssr_fck_3430es1", |
2822 | &ssi_ssr_fck_3430es1, 0x0, 1, 2); | 2856 | &ssi_ssr_fck_3430es1_core, 0x0, 1, 2); |
2823 | 2857 | ||
2824 | DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es2, "ssi_ssr_fck_3430es2", | 2858 | DEFINE_CLK_FIXED_FACTOR(ssi_sst_fck_3430es2, "ssi_ssr_fck_3430es2", |
2825 | &ssi_ssr_fck_3430es2, 0x0, 1, 2); | 2859 | &ssi_ssr_fck_3430es2_core, 0x0, 1, 2); |
2826 | 2860 | ||
2827 | static struct clk sys_clkout1; | 2861 | static struct clk sys_clkout1; |
2828 | 2862 | ||
@@ -2840,7 +2874,7 @@ static struct clk_hw_omap sys_clkout1_hw = { | |||
2840 | 2874 | ||
2841 | DEFINE_STRUCT_CLK(sys_clkout1, sys_clkout1_parent_names, aes1_ick_ops); | 2875 | DEFINE_STRUCT_CLK(sys_clkout1, sys_clkout1_parent_names, aes1_ick_ops); |
2842 | 2876 | ||
2843 | DEFINE_CLK_DIVIDER(sys_clkout2, "clkout2_src_ck", &clkout2_src_ck, 0x0, | 2877 | DEFINE_CLK_DIVIDER(sys_clkout2, "clkout2_src_ck", &clkout2_src_ck_core, 0x0, |
2844 | OMAP3430_CM_CLKOUT_CTRL, OMAP3430_CLKOUT2_DIV_SHIFT, | 2878 | OMAP3430_CM_CLKOUT_CTRL, OMAP3430_CLKOUT2_DIV_SHIFT, |
2845 | OMAP3430_CLKOUT2_DIV_WIDTH, CLK_DIVIDER_POWER_OF_TWO, NULL); | 2879 | OMAP3430_CLKOUT2_DIV_WIDTH, CLK_DIVIDER_POWER_OF_TWO, NULL); |
2846 | 2880 | ||
@@ -2849,7 +2883,8 @@ DEFINE_CLK_MUX(traceclk_src_fck, emu_src_ck_parent_names, NULL, 0x0, | |||
2849 | OMAP3430_TRACE_MUX_CTRL_SHIFT, OMAP3430_TRACE_MUX_CTRL_WIDTH, | 2883 | OMAP3430_TRACE_MUX_CTRL_SHIFT, OMAP3430_TRACE_MUX_CTRL_WIDTH, |
2850 | 0x0, NULL); | 2884 | 0x0, NULL); |
2851 | 2885 | ||
2852 | DEFINE_CLK_DIVIDER(traceclk_fck, "traceclk_src_fck", &traceclk_src_fck, 0x0, | 2886 | DEFINE_CLK_DIVIDER(traceclk_fck, "traceclk_src_fck", &traceclk_src_fck_core, |
2887 | 0x0, | ||
2853 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), | 2888 | OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), |
2854 | OMAP3430_CLKSEL_TRACECLK_SHIFT, | 2889 | OMAP3430_CLKSEL_TRACECLK_SHIFT, |
2855 | OMAP3430_CLKSEL_TRACECLK_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); | 2890 | OMAP3430_CLKSEL_TRACECLK_WIDTH, CLK_DIVIDER_ONE_BASED, NULL); |
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index a4282e79143e..c5b3a7f3e41d 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h | |||
@@ -40,23 +40,29 @@ struct omap_clk { | |||
40 | struct clockdomain; | 40 | struct clockdomain; |
41 | 41 | ||
42 | #define DEFINE_STRUCT_CLK(_name, _parent_array_name, _clkops_name) \ | 42 | #define DEFINE_STRUCT_CLK(_name, _parent_array_name, _clkops_name) \ |
43 | static struct clk _name = { \ | 43 | static struct clk_core _name##_core = { \ |
44 | .name = #_name, \ | 44 | .name = #_name, \ |
45 | .hw = &_name##_hw.hw, \ | 45 | .hw = &_name##_hw.hw, \ |
46 | .parent_names = _parent_array_name, \ | 46 | .parent_names = _parent_array_name, \ |
47 | .num_parents = ARRAY_SIZE(_parent_array_name), \ | 47 | .num_parents = ARRAY_SIZE(_parent_array_name), \ |
48 | .ops = &_clkops_name, \ | 48 | .ops = &_clkops_name, \ |
49 | }; \ | ||
50 | static struct clk _name = { \ | ||
51 | .core = &_name##_core, \ | ||
49 | }; | 52 | }; |
50 | 53 | ||
51 | #define DEFINE_STRUCT_CLK_FLAGS(_name, _parent_array_name, \ | 54 | #define DEFINE_STRUCT_CLK_FLAGS(_name, _parent_array_name, \ |
52 | _clkops_name, _flags) \ | 55 | _clkops_name, _flags) \ |
53 | static struct clk _name = { \ | 56 | static struct clk_core _name##_core = { \ |
54 | .name = #_name, \ | 57 | .name = #_name, \ |
55 | .hw = &_name##_hw.hw, \ | 58 | .hw = &_name##_hw.hw, \ |
56 | .parent_names = _parent_array_name, \ | 59 | .parent_names = _parent_array_name, \ |
57 | .num_parents = ARRAY_SIZE(_parent_array_name), \ | 60 | .num_parents = ARRAY_SIZE(_parent_array_name), \ |
58 | .ops = &_clkops_name, \ | 61 | .ops = &_clkops_name, \ |
59 | .flags = _flags, \ | 62 | .flags = _flags, \ |
63 | }; \ | ||
64 | static struct clk _name = { \ | ||
65 | .core = &_name##_core, \ | ||
60 | }; | 66 | }; |
61 | 67 | ||
62 | #define DEFINE_STRUCT_CLK_HW_OMAP(_name, _clkdm_name) \ | 68 | #define DEFINE_STRUCT_CLK_HW_OMAP(_name, _clkdm_name) \ |
@@ -248,6 +254,7 @@ extern const struct clksel_rate gpt_32k_rates[]; | |||
248 | extern const struct clksel_rate gpt_sys_rates[]; | 254 | extern const struct clksel_rate gpt_sys_rates[]; |
249 | extern const struct clksel_rate gfx_l3_rates[]; | 255 | extern const struct clksel_rate gfx_l3_rates[]; |
250 | extern const struct clksel_rate dsp_ick_rates[]; | 256 | extern const struct clksel_rate dsp_ick_rates[]; |
257 | extern struct clk_core dummy_ck_core; | ||
251 | extern struct clk dummy_ck; | 258 | extern struct clk dummy_ck; |
252 | 259 | ||
253 | extern const struct clk_hw_omap_ops clkhwops_iclk_wait; | 260 | extern const struct clk_hw_omap_ops clkhwops_iclk_wait; |
diff --git a/arch/arm/mach-omap2/clock_common_data.c b/arch/arm/mach-omap2/clock_common_data.c index ef4d21bfb964..febd0a279224 100644 --- a/arch/arm/mach-omap2/clock_common_data.c +++ b/arch/arm/mach-omap2/clock_common_data.c | |||
@@ -119,8 +119,11 @@ const struct clksel_rate div31_1to31_rates[] = { | |||
119 | 119 | ||
120 | static struct clk_ops dummy_ck_ops = {}; | 120 | static struct clk_ops dummy_ck_ops = {}; |
121 | 121 | ||
122 | struct clk dummy_ck = { | 122 | struct clk_core dummy_ck_core = { |
123 | .name = "dummy_clk", | 123 | .name = "dummy_clk", |
124 | .ops = &dummy_ck_ops, | 124 | .ops = &dummy_ck_ops, |
125 | .flags = CLK_IS_BASIC, | 125 | .flags = CLK_IS_BASIC, |
126 | }; | 126 | }; |
127 | struct clk dummy_ck = { | ||
128 | .core = &dummy_ck_core, | ||
129 | }; | ||
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index c2da2a0fe5ad..49752d77f5bc 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c | |||
@@ -410,7 +410,7 @@ int omap3_noncore_dpll_enable(struct clk_hw *hw) | |||
410 | struct clk_hw_omap *clk = to_clk_hw_omap(hw); | 410 | struct clk_hw_omap *clk = to_clk_hw_omap(hw); |
411 | int r; | 411 | int r; |
412 | struct dpll_data *dd; | 412 | struct dpll_data *dd; |
413 | struct clk *parent; | 413 | struct clk_hw *parent; |
414 | 414 | ||
415 | dd = clk->dpll_data; | 415 | dd = clk->dpll_data; |
416 | if (!dd) | 416 | if (!dd) |
@@ -427,13 +427,13 @@ int omap3_noncore_dpll_enable(struct clk_hw *hw) | |||
427 | } | 427 | } |
428 | } | 428 | } |
429 | 429 | ||
430 | parent = __clk_get_parent(hw->clk); | 430 | parent = __clk_get_hw(__clk_get_parent(hw->clk)); |
431 | 431 | ||
432 | if (__clk_get_rate(hw->clk) == __clk_get_rate(dd->clk_bypass)) { | 432 | if (__clk_get_rate(hw->clk) == __clk_get_rate(dd->clk_bypass)) { |
433 | WARN_ON(parent != dd->clk_bypass); | 433 | WARN_ON(parent != __clk_get_hw(dd->clk_bypass)); |
434 | r = _omap3_noncore_dpll_bypass(clk); | 434 | r = _omap3_noncore_dpll_bypass(clk); |
435 | } else { | 435 | } else { |
436 | WARN_ON(parent != dd->clk_ref); | 436 | WARN_ON(parent != __clk_get_hw(dd->clk_ref)); |
437 | r = _omap3_noncore_dpll_lock(clk); | 437 | r = _omap3_noncore_dpll_lock(clk); |
438 | } | 438 | } |
439 | 439 | ||
@@ -549,7 +549,8 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate, | |||
549 | if (!dd) | 549 | if (!dd) |
550 | return -EINVAL; | 550 | return -EINVAL; |
551 | 551 | ||
552 | if (__clk_get_parent(hw->clk) != dd->clk_ref) | 552 | if (__clk_get_hw(__clk_get_parent(hw->clk)) != |
553 | __clk_get_hw(dd->clk_ref)) | ||
553 | return -EINVAL; | 554 | return -EINVAL; |
554 | 555 | ||
555 | if (dd->last_rounded_rate == 0) | 556 | if (dd->last_rounded_rate == 0) |