diff options
Diffstat (limited to 'arch/arm/mach-omap2/clock2420_data.c')
-rw-r--r-- | arch/arm/mach-omap2/clock2420_data.c | 287 |
1 files changed, 173 insertions, 114 deletions
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index 37d65d62ed8f..2926d028b6e9 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c | |||
@@ -1,12 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-omap2/clock2420_data.c | 2 | * OMAP2420 clock data |
3 | * | 3 | * |
4 | * Copyright (C) 2005-2009 Texas Instruments, Inc. | 4 | * Copyright (C) 2005-2009 Texas Instruments, Inc. |
5 | * Copyright (C) 2004-2010 Nokia Corporation | 5 | * Copyright (C) 2004-2011 Nokia Corporation |
6 | * | 6 | * |
7 | * Contacts: | 7 | * Contacts: |
8 | * Richard Woodruff <r-woodruff2@ti.com> | 8 | * Richard Woodruff <r-woodruff2@ti.com> |
9 | * Paul Walmsley | 9 | * Paul Walmsley |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License version 2 as | 12 | * it under the terms of the GNU General Public License version 2 as |
@@ -22,29 +22,27 @@ | |||
22 | #include "clock.h" | 22 | #include "clock.h" |
23 | #include "clock2xxx.h" | 23 | #include "clock2xxx.h" |
24 | #include "opp2xxx.h" | 24 | #include "opp2xxx.h" |
25 | #include "prm.h" | 25 | #include "cm2xxx_3xxx.h" |
26 | #include "cm.h" | 26 | #include "prm2xxx_3xxx.h" |
27 | #include "prm-regbits-24xx.h" | 27 | #include "prm-regbits-24xx.h" |
28 | #include "cm-regbits-24xx.h" | 28 | #include "cm-regbits-24xx.h" |
29 | #include "sdrc.h" | 29 | #include "sdrc.h" |
30 | #include "control.h" | ||
30 | 31 | ||
31 | #define OMAP_CM_REGADDR OMAP2420_CM_REGADDR | 32 | #define OMAP_CM_REGADDR OMAP2420_CM_REGADDR |
32 | 33 | ||
33 | /* | 34 | /* |
34 | * 2420 clock tree. | 35 | * 2420 clock tree. |
35 | * | 36 | * |
36 | * NOTE:In many cases here we are assigning a 'default' parent. In many | 37 | * NOTE:In many cases here we are assigning a 'default' parent. In |
37 | * cases the parent is selectable. The get/set parent calls will also | 38 | * many cases the parent is selectable. The set parent calls will |
38 | * switch sources. | 39 | * also switch sources. |
39 | * | ||
40 | * Many some clocks say always_enabled, but they can be auto idled for | ||
41 | * power savings. They will always be available upon clock request. | ||
42 | * | 40 | * |
43 | * Several sources are given initial rates which may be wrong, this will | 41 | * Several sources are given initial rates which may be wrong, this will |
44 | * be fixed up in the init func. | 42 | * be fixed up in the init func. |
45 | * | 43 | * |
46 | * Things are broadly separated below by clock domains. It is | 44 | * Things are broadly separated below by clock domains. It is |
47 | * noteworthy that most periferals have dependencies on multiple clock | 45 | * noteworthy that most peripherals have dependencies on multiple clock |
48 | * domains. Many get their interface clocks from the L4 domain, but get | 46 | * domains. Many get their interface clocks from the L4 domain, but get |
49 | * functional clocks from fixed sources or other core domain derived | 47 | * functional clocks from fixed sources or other core domain derived |
50 | * clocks. | 48 | * clocks. |
@@ -54,7 +52,7 @@ | |||
54 | static struct clk func_32k_ck = { | 52 | static struct clk func_32k_ck = { |
55 | .name = "func_32k_ck", | 53 | .name = "func_32k_ck", |
56 | .ops = &clkops_null, | 54 | .ops = &clkops_null, |
57 | .rate = 32000, | 55 | .rate = 32768, |
58 | .clkdm_name = "wkup_clkdm", | 56 | .clkdm_name = "wkup_clkdm", |
59 | }; | 57 | }; |
60 | 58 | ||
@@ -89,6 +87,12 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */ | |||
89 | .clkdm_name = "wkup_clkdm", | 87 | .clkdm_name = "wkup_clkdm", |
90 | }; | 88 | }; |
91 | 89 | ||
90 | /* Optional external clock input for McBSP CLKS */ | ||
91 | static struct clk mcbsp_clks = { | ||
92 | .name = "mcbsp_clks", | ||
93 | .ops = &clkops_null, | ||
94 | }; | ||
95 | |||
92 | /* | 96 | /* |
93 | * Analog domain root source clocks | 97 | * Analog domain root source clocks |
94 | */ | 98 | */ |
@@ -109,7 +113,6 @@ static struct dpll_data dpll_dd = { | |||
109 | .max_multiplier = 1023, | 113 | .max_multiplier = 1023, |
110 | .min_divider = 1, | 114 | .min_divider = 1, |
111 | .max_divider = 16, | 115 | .max_divider = 16, |
112 | .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE | ||
113 | }; | 116 | }; |
114 | 117 | ||
115 | /* | 118 | /* |
@@ -118,7 +121,7 @@ static struct dpll_data dpll_dd = { | |||
118 | */ | 121 | */ |
119 | static struct clk dpll_ck = { | 122 | static struct clk dpll_ck = { |
120 | .name = "dpll_ck", | 123 | .name = "dpll_ck", |
121 | .ops = &clkops_null, | 124 | .ops = &clkops_omap2xxx_dpll_ops, |
122 | .parent = &sys_ck, /* Can be func_32k also */ | 125 | .parent = &sys_ck, /* Can be func_32k also */ |
123 | .dpll_data = &dpll_dd, | 126 | .dpll_data = &dpll_dd, |
124 | .clkdm_name = "wkup_clkdm", | 127 | .clkdm_name = "wkup_clkdm", |
@@ -448,36 +451,22 @@ static struct clk dsp_fck = { | |||
448 | .recalc = &omap2_clksel_recalc, | 451 | .recalc = &omap2_clksel_recalc, |
449 | }; | 452 | }; |
450 | 453 | ||
451 | /* DSP interface clock */ | 454 | static const struct clksel dsp_ick_clksel[] = { |
452 | static const struct clksel_rate dsp_irate_ick_rates[] = { | 455 | { .parent = &dsp_fck, .rates = dsp_ick_rates }, |
453 | { .div = 1, .val = 1, .flags = RATE_IN_24XX }, | ||
454 | { .div = 2, .val = 2, .flags = RATE_IN_24XX }, | ||
455 | { .div = 0 }, | ||
456 | }; | ||
457 | |||
458 | static const struct clksel dsp_irate_ick_clksel[] = { | ||
459 | { .parent = &dsp_fck, .rates = dsp_irate_ick_rates }, | ||
460 | { .parent = NULL } | 456 | { .parent = NULL } |
461 | }; | 457 | }; |
462 | 458 | ||
463 | /* This clock does not exist as such in the TRM. */ | ||
464 | static struct clk dsp_irate_ick = { | ||
465 | .name = "dsp_irate_ick", | ||
466 | .ops = &clkops_null, | ||
467 | .parent = &dsp_fck, | ||
468 | .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL), | ||
469 | .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK, | ||
470 | .clksel = dsp_irate_ick_clksel, | ||
471 | .recalc = &omap2_clksel_recalc, | ||
472 | }; | ||
473 | |||
474 | /* 2420 only */ | ||
475 | static struct clk dsp_ick = { | 459 | static struct clk dsp_ick = { |
476 | .name = "dsp_ick", /* apparently ipi and isp */ | 460 | .name = "dsp_ick", /* apparently ipi and isp */ |
477 | .ops = &clkops_omap2_dflt_wait, | 461 | .ops = &clkops_omap2_iclk_dflt_wait, |
478 | .parent = &dsp_irate_ick, | 462 | .parent = &dsp_fck, |
463 | .clkdm_name = "dsp_clkdm", | ||
479 | .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN), | 464 | .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN), |
480 | .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */ | 465 | .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */ |
466 | .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL), | ||
467 | .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK, | ||
468 | .clksel = dsp_ick_clksel, | ||
469 | .recalc = &omap2_clksel_recalc, | ||
481 | }; | 470 | }; |
482 | 471 | ||
483 | /* | 472 | /* |
@@ -572,7 +561,7 @@ static const struct clksel usb_l4_ick_clksel[] = { | |||
572 | /* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ | 561 | /* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ |
573 | static struct clk usb_l4_ick = { /* FS-USB interface clock */ | 562 | static struct clk usb_l4_ick = { /* FS-USB interface clock */ |
574 | .name = "usb_l4_ick", | 563 | .name = "usb_l4_ick", |
575 | .ops = &clkops_omap2_dflt_wait, | 564 | .ops = &clkops_omap2_iclk_dflt_wait, |
576 | .parent = &core_l3_ck, | 565 | .parent = &core_l3_ck, |
577 | .clkdm_name = "core_l4_clkdm", | 566 | .clkdm_name = "core_l4_clkdm", |
578 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), | 567 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), |
@@ -654,7 +643,7 @@ static struct clk ssi_ssr_sst_fck = { | |||
654 | */ | 643 | */ |
655 | static struct clk ssi_l4_ick = { | 644 | static struct clk ssi_l4_ick = { |
656 | .name = "ssi_l4_ick", | 645 | .name = "ssi_l4_ick", |
657 | .ops = &clkops_omap2_dflt_wait, | 646 | .ops = &clkops_omap2_iclk_dflt_wait, |
658 | .parent = &l4_ck, | 647 | .parent = &l4_ck, |
659 | .clkdm_name = "core_l4_clkdm", | 648 | .clkdm_name = "core_l4_clkdm", |
660 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), | 649 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), |
@@ -709,6 +698,7 @@ static struct clk gfx_2d_fck = { | |||
709 | .recalc = &omap2_clksel_recalc, | 698 | .recalc = &omap2_clksel_recalc, |
710 | }; | 699 | }; |
711 | 700 | ||
701 | /* This interface clock does not have a CM_AUTOIDLE bit */ | ||
712 | static struct clk gfx_ick = { | 702 | static struct clk gfx_ick = { |
713 | .name = "gfx_ick", /* From l3 */ | 703 | .name = "gfx_ick", /* From l3 */ |
714 | .ops = &clkops_omap2_dflt_wait, | 704 | .ops = &clkops_omap2_dflt_wait, |
@@ -756,7 +746,7 @@ static const struct clksel dss1_fck_clksel[] = { | |||
756 | 746 | ||
757 | static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ | 747 | static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ |
758 | .name = "dss_ick", | 748 | .name = "dss_ick", |
759 | .ops = &clkops_omap2_dflt, | 749 | .ops = &clkops_omap2_iclk_dflt, |
760 | .parent = &l4_ck, /* really both l3 and l4 */ | 750 | .parent = &l4_ck, /* really both l3 and l4 */ |
761 | .clkdm_name = "dss_clkdm", | 751 | .clkdm_name = "dss_clkdm", |
762 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 752 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -805,7 +795,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */ | |||
805 | .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), | 795 | .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), |
806 | .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK, | 796 | .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK, |
807 | .clksel = dss2_fck_clksel, | 797 | .clksel = dss2_fck_clksel, |
808 | .recalc = &followparent_recalc, | 798 | .recalc = &omap2_clksel_recalc, |
809 | }; | 799 | }; |
810 | 800 | ||
811 | static struct clk dss_54m_fck = { /* Alt clk used in power management */ | 801 | static struct clk dss_54m_fck = { /* Alt clk used in power management */ |
@@ -818,6 +808,14 @@ static struct clk dss_54m_fck = { /* Alt clk used in power management */ | |||
818 | .recalc = &followparent_recalc, | 808 | .recalc = &followparent_recalc, |
819 | }; | 809 | }; |
820 | 810 | ||
811 | static struct clk wu_l4_ick = { | ||
812 | .name = "wu_l4_ick", | ||
813 | .ops = &clkops_null, | ||
814 | .parent = &sys_ck, | ||
815 | .clkdm_name = "wkup_clkdm", | ||
816 | .recalc = &followparent_recalc, | ||
817 | }; | ||
818 | |||
821 | /* | 819 | /* |
822 | * CORE power domain ICLK & FCLK defines. | 820 | * CORE power domain ICLK & FCLK defines. |
823 | * Many of the these can have more than one possible parent. Entries | 821 | * Many of the these can have more than one possible parent. Entries |
@@ -838,9 +836,9 @@ static const struct clksel omap24xx_gpt_clksel[] = { | |||
838 | 836 | ||
839 | static struct clk gpt1_ick = { | 837 | static struct clk gpt1_ick = { |
840 | .name = "gpt1_ick", | 838 | .name = "gpt1_ick", |
841 | .ops = &clkops_omap2_dflt_wait, | 839 | .ops = &clkops_omap2_iclk_dflt_wait, |
842 | .parent = &l4_ck, | 840 | .parent = &wu_l4_ick, |
843 | .clkdm_name = "core_l4_clkdm", | 841 | .clkdm_name = "wkup_clkdm", |
844 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 842 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
845 | .enable_bit = OMAP24XX_EN_GPT1_SHIFT, | 843 | .enable_bit = OMAP24XX_EN_GPT1_SHIFT, |
846 | .recalc = &followparent_recalc, | 844 | .recalc = &followparent_recalc, |
@@ -864,7 +862,7 @@ static struct clk gpt1_fck = { | |||
864 | 862 | ||
865 | static struct clk gpt2_ick = { | 863 | static struct clk gpt2_ick = { |
866 | .name = "gpt2_ick", | 864 | .name = "gpt2_ick", |
867 | .ops = &clkops_omap2_dflt_wait, | 865 | .ops = &clkops_omap2_iclk_dflt_wait, |
868 | .parent = &l4_ck, | 866 | .parent = &l4_ck, |
869 | .clkdm_name = "core_l4_clkdm", | 867 | .clkdm_name = "core_l4_clkdm", |
870 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 868 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -888,7 +886,7 @@ static struct clk gpt2_fck = { | |||
888 | 886 | ||
889 | static struct clk gpt3_ick = { | 887 | static struct clk gpt3_ick = { |
890 | .name = "gpt3_ick", | 888 | .name = "gpt3_ick", |
891 | .ops = &clkops_omap2_dflt_wait, | 889 | .ops = &clkops_omap2_iclk_dflt_wait, |
892 | .parent = &l4_ck, | 890 | .parent = &l4_ck, |
893 | .clkdm_name = "core_l4_clkdm", | 891 | .clkdm_name = "core_l4_clkdm", |
894 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 892 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -912,7 +910,7 @@ static struct clk gpt3_fck = { | |||
912 | 910 | ||
913 | static struct clk gpt4_ick = { | 911 | static struct clk gpt4_ick = { |
914 | .name = "gpt4_ick", | 912 | .name = "gpt4_ick", |
915 | .ops = &clkops_omap2_dflt_wait, | 913 | .ops = &clkops_omap2_iclk_dflt_wait, |
916 | .parent = &l4_ck, | 914 | .parent = &l4_ck, |
917 | .clkdm_name = "core_l4_clkdm", | 915 | .clkdm_name = "core_l4_clkdm", |
918 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 916 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -936,7 +934,7 @@ static struct clk gpt4_fck = { | |||
936 | 934 | ||
937 | static struct clk gpt5_ick = { | 935 | static struct clk gpt5_ick = { |
938 | .name = "gpt5_ick", | 936 | .name = "gpt5_ick", |
939 | .ops = &clkops_omap2_dflt_wait, | 937 | .ops = &clkops_omap2_iclk_dflt_wait, |
940 | .parent = &l4_ck, | 938 | .parent = &l4_ck, |
941 | .clkdm_name = "core_l4_clkdm", | 939 | .clkdm_name = "core_l4_clkdm", |
942 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 940 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -960,7 +958,7 @@ static struct clk gpt5_fck = { | |||
960 | 958 | ||
961 | static struct clk gpt6_ick = { | 959 | static struct clk gpt6_ick = { |
962 | .name = "gpt6_ick", | 960 | .name = "gpt6_ick", |
963 | .ops = &clkops_omap2_dflt_wait, | 961 | .ops = &clkops_omap2_iclk_dflt_wait, |
964 | .parent = &l4_ck, | 962 | .parent = &l4_ck, |
965 | .clkdm_name = "core_l4_clkdm", | 963 | .clkdm_name = "core_l4_clkdm", |
966 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 964 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -984,8 +982,9 @@ static struct clk gpt6_fck = { | |||
984 | 982 | ||
985 | static struct clk gpt7_ick = { | 983 | static struct clk gpt7_ick = { |
986 | .name = "gpt7_ick", | 984 | .name = "gpt7_ick", |
987 | .ops = &clkops_omap2_dflt_wait, | 985 | .ops = &clkops_omap2_iclk_dflt_wait, |
988 | .parent = &l4_ck, | 986 | .parent = &l4_ck, |
987 | .clkdm_name = "core_l4_clkdm", | ||
989 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 988 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
990 | .enable_bit = OMAP24XX_EN_GPT7_SHIFT, | 989 | .enable_bit = OMAP24XX_EN_GPT7_SHIFT, |
991 | .recalc = &followparent_recalc, | 990 | .recalc = &followparent_recalc, |
@@ -1007,7 +1006,7 @@ static struct clk gpt7_fck = { | |||
1007 | 1006 | ||
1008 | static struct clk gpt8_ick = { | 1007 | static struct clk gpt8_ick = { |
1009 | .name = "gpt8_ick", | 1008 | .name = "gpt8_ick", |
1010 | .ops = &clkops_omap2_dflt_wait, | 1009 | .ops = &clkops_omap2_iclk_dflt_wait, |
1011 | .parent = &l4_ck, | 1010 | .parent = &l4_ck, |
1012 | .clkdm_name = "core_l4_clkdm", | 1011 | .clkdm_name = "core_l4_clkdm", |
1013 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1012 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1031,7 +1030,7 @@ static struct clk gpt8_fck = { | |||
1031 | 1030 | ||
1032 | static struct clk gpt9_ick = { | 1031 | static struct clk gpt9_ick = { |
1033 | .name = "gpt9_ick", | 1032 | .name = "gpt9_ick", |
1034 | .ops = &clkops_omap2_dflt_wait, | 1033 | .ops = &clkops_omap2_iclk_dflt_wait, |
1035 | .parent = &l4_ck, | 1034 | .parent = &l4_ck, |
1036 | .clkdm_name = "core_l4_clkdm", | 1035 | .clkdm_name = "core_l4_clkdm", |
1037 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1036 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1055,7 +1054,7 @@ static struct clk gpt9_fck = { | |||
1055 | 1054 | ||
1056 | static struct clk gpt10_ick = { | 1055 | static struct clk gpt10_ick = { |
1057 | .name = "gpt10_ick", | 1056 | .name = "gpt10_ick", |
1058 | .ops = &clkops_omap2_dflt_wait, | 1057 | .ops = &clkops_omap2_iclk_dflt_wait, |
1059 | .parent = &l4_ck, | 1058 | .parent = &l4_ck, |
1060 | .clkdm_name = "core_l4_clkdm", | 1059 | .clkdm_name = "core_l4_clkdm", |
1061 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1060 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1079,7 +1078,7 @@ static struct clk gpt10_fck = { | |||
1079 | 1078 | ||
1080 | static struct clk gpt11_ick = { | 1079 | static struct clk gpt11_ick = { |
1081 | .name = "gpt11_ick", | 1080 | .name = "gpt11_ick", |
1082 | .ops = &clkops_omap2_dflt_wait, | 1081 | .ops = &clkops_omap2_iclk_dflt_wait, |
1083 | .parent = &l4_ck, | 1082 | .parent = &l4_ck, |
1084 | .clkdm_name = "core_l4_clkdm", | 1083 | .clkdm_name = "core_l4_clkdm", |
1085 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1084 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1103,7 +1102,7 @@ static struct clk gpt11_fck = { | |||
1103 | 1102 | ||
1104 | static struct clk gpt12_ick = { | 1103 | static struct clk gpt12_ick = { |
1105 | .name = "gpt12_ick", | 1104 | .name = "gpt12_ick", |
1106 | .ops = &clkops_omap2_dflt_wait, | 1105 | .ops = &clkops_omap2_iclk_dflt_wait, |
1107 | .parent = &l4_ck, | 1106 | .parent = &l4_ck, |
1108 | .clkdm_name = "core_l4_clkdm", | 1107 | .clkdm_name = "core_l4_clkdm", |
1109 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1108 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1127,7 +1126,7 @@ static struct clk gpt12_fck = { | |||
1127 | 1126 | ||
1128 | static struct clk mcbsp1_ick = { | 1127 | static struct clk mcbsp1_ick = { |
1129 | .name = "mcbsp1_ick", | 1128 | .name = "mcbsp1_ick", |
1130 | .ops = &clkops_omap2_dflt_wait, | 1129 | .ops = &clkops_omap2_iclk_dflt_wait, |
1131 | .parent = &l4_ck, | 1130 | .parent = &l4_ck, |
1132 | .clkdm_name = "core_l4_clkdm", | 1131 | .clkdm_name = "core_l4_clkdm", |
1133 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1132 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1135,19 +1134,39 @@ static struct clk mcbsp1_ick = { | |||
1135 | .recalc = &followparent_recalc, | 1134 | .recalc = &followparent_recalc, |
1136 | }; | 1135 | }; |
1137 | 1136 | ||
1137 | static const struct clksel_rate common_mcbsp_96m_rates[] = { | ||
1138 | { .div = 1, .val = 0, .flags = RATE_IN_24XX }, | ||
1139 | { .div = 0 } | ||
1140 | }; | ||
1141 | |||
1142 | static const struct clksel_rate common_mcbsp_mcbsp_rates[] = { | ||
1143 | { .div = 1, .val = 1, .flags = RATE_IN_24XX }, | ||
1144 | { .div = 0 } | ||
1145 | }; | ||
1146 | |||
1147 | static const struct clksel mcbsp_fck_clksel[] = { | ||
1148 | { .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates }, | ||
1149 | { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates }, | ||
1150 | { .parent = NULL } | ||
1151 | }; | ||
1152 | |||
1138 | static struct clk mcbsp1_fck = { | 1153 | static struct clk mcbsp1_fck = { |
1139 | .name = "mcbsp1_fck", | 1154 | .name = "mcbsp1_fck", |
1140 | .ops = &clkops_omap2_dflt_wait, | 1155 | .ops = &clkops_omap2_dflt_wait, |
1141 | .parent = &func_96m_ck, | 1156 | .parent = &func_96m_ck, |
1157 | .init = &omap2_init_clksel_parent, | ||
1142 | .clkdm_name = "core_l4_clkdm", | 1158 | .clkdm_name = "core_l4_clkdm", |
1143 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), | 1159 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), |
1144 | .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, | 1160 | .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, |
1145 | .recalc = &followparent_recalc, | 1161 | .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0), |
1162 | .clksel_mask = OMAP2_MCBSP1_CLKS_MASK, | ||
1163 | .clksel = mcbsp_fck_clksel, | ||
1164 | .recalc = &omap2_clksel_recalc, | ||
1146 | }; | 1165 | }; |
1147 | 1166 | ||
1148 | static struct clk mcbsp2_ick = { | 1167 | static struct clk mcbsp2_ick = { |
1149 | .name = "mcbsp2_ick", | 1168 | .name = "mcbsp2_ick", |
1150 | .ops = &clkops_omap2_dflt_wait, | 1169 | .ops = &clkops_omap2_iclk_dflt_wait, |
1151 | .parent = &l4_ck, | 1170 | .parent = &l4_ck, |
1152 | .clkdm_name = "core_l4_clkdm", | 1171 | .clkdm_name = "core_l4_clkdm", |
1153 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1172 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1159,15 +1178,19 @@ static struct clk mcbsp2_fck = { | |||
1159 | .name = "mcbsp2_fck", | 1178 | .name = "mcbsp2_fck", |
1160 | .ops = &clkops_omap2_dflt_wait, | 1179 | .ops = &clkops_omap2_dflt_wait, |
1161 | .parent = &func_96m_ck, | 1180 | .parent = &func_96m_ck, |
1181 | .init = &omap2_init_clksel_parent, | ||
1162 | .clkdm_name = "core_l4_clkdm", | 1182 | .clkdm_name = "core_l4_clkdm", |
1163 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), | 1183 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), |
1164 | .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, | 1184 | .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, |
1165 | .recalc = &followparent_recalc, | 1185 | .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0), |
1186 | .clksel_mask = OMAP2_MCBSP2_CLKS_MASK, | ||
1187 | .clksel = mcbsp_fck_clksel, | ||
1188 | .recalc = &omap2_clksel_recalc, | ||
1166 | }; | 1189 | }; |
1167 | 1190 | ||
1168 | static struct clk mcspi1_ick = { | 1191 | static struct clk mcspi1_ick = { |
1169 | .name = "mcspi1_ick", | 1192 | .name = "mcspi1_ick", |
1170 | .ops = &clkops_omap2_dflt_wait, | 1193 | .ops = &clkops_omap2_iclk_dflt_wait, |
1171 | .parent = &l4_ck, | 1194 | .parent = &l4_ck, |
1172 | .clkdm_name = "core_l4_clkdm", | 1195 | .clkdm_name = "core_l4_clkdm", |
1173 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1196 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1187,7 +1210,7 @@ static struct clk mcspi1_fck = { | |||
1187 | 1210 | ||
1188 | static struct clk mcspi2_ick = { | 1211 | static struct clk mcspi2_ick = { |
1189 | .name = "mcspi2_ick", | 1212 | .name = "mcspi2_ick", |
1190 | .ops = &clkops_omap2_dflt_wait, | 1213 | .ops = &clkops_omap2_iclk_dflt_wait, |
1191 | .parent = &l4_ck, | 1214 | .parent = &l4_ck, |
1192 | .clkdm_name = "core_l4_clkdm", | 1215 | .clkdm_name = "core_l4_clkdm", |
1193 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1216 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1207,7 +1230,7 @@ static struct clk mcspi2_fck = { | |||
1207 | 1230 | ||
1208 | static struct clk uart1_ick = { | 1231 | static struct clk uart1_ick = { |
1209 | .name = "uart1_ick", | 1232 | .name = "uart1_ick", |
1210 | .ops = &clkops_omap2_dflt_wait, | 1233 | .ops = &clkops_omap2_iclk_dflt_wait, |
1211 | .parent = &l4_ck, | 1234 | .parent = &l4_ck, |
1212 | .clkdm_name = "core_l4_clkdm", | 1235 | .clkdm_name = "core_l4_clkdm", |
1213 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1236 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1227,7 +1250,7 @@ static struct clk uart1_fck = { | |||
1227 | 1250 | ||
1228 | static struct clk uart2_ick = { | 1251 | static struct clk uart2_ick = { |
1229 | .name = "uart2_ick", | 1252 | .name = "uart2_ick", |
1230 | .ops = &clkops_omap2_dflt_wait, | 1253 | .ops = &clkops_omap2_iclk_dflt_wait, |
1231 | .parent = &l4_ck, | 1254 | .parent = &l4_ck, |
1232 | .clkdm_name = "core_l4_clkdm", | 1255 | .clkdm_name = "core_l4_clkdm", |
1233 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1256 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1247,7 +1270,7 @@ static struct clk uart2_fck = { | |||
1247 | 1270 | ||
1248 | static struct clk uart3_ick = { | 1271 | static struct clk uart3_ick = { |
1249 | .name = "uart3_ick", | 1272 | .name = "uart3_ick", |
1250 | .ops = &clkops_omap2_dflt_wait, | 1273 | .ops = &clkops_omap2_iclk_dflt_wait, |
1251 | .parent = &l4_ck, | 1274 | .parent = &l4_ck, |
1252 | .clkdm_name = "core_l4_clkdm", | 1275 | .clkdm_name = "core_l4_clkdm", |
1253 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), | 1276 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), |
@@ -1267,9 +1290,9 @@ static struct clk uart3_fck = { | |||
1267 | 1290 | ||
1268 | static struct clk gpios_ick = { | 1291 | static struct clk gpios_ick = { |
1269 | .name = "gpios_ick", | 1292 | .name = "gpios_ick", |
1270 | .ops = &clkops_omap2_dflt_wait, | 1293 | .ops = &clkops_omap2_iclk_dflt_wait, |
1271 | .parent = &l4_ck, | 1294 | .parent = &wu_l4_ick, |
1272 | .clkdm_name = "core_l4_clkdm", | 1295 | .clkdm_name = "wkup_clkdm", |
1273 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 1296 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
1274 | .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, | 1297 | .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, |
1275 | .recalc = &followparent_recalc, | 1298 | .recalc = &followparent_recalc, |
@@ -1287,9 +1310,9 @@ static struct clk gpios_fck = { | |||
1287 | 1310 | ||
1288 | static struct clk mpu_wdt_ick = { | 1311 | static struct clk mpu_wdt_ick = { |
1289 | .name = "mpu_wdt_ick", | 1312 | .name = "mpu_wdt_ick", |
1290 | .ops = &clkops_omap2_dflt_wait, | 1313 | .ops = &clkops_omap2_iclk_dflt_wait, |
1291 | .parent = &l4_ck, | 1314 | .parent = &wu_l4_ick, |
1292 | .clkdm_name = "core_l4_clkdm", | 1315 | .clkdm_name = "wkup_clkdm", |
1293 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 1316 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
1294 | .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, | 1317 | .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, |
1295 | .recalc = &followparent_recalc, | 1318 | .recalc = &followparent_recalc, |
@@ -1307,10 +1330,10 @@ static struct clk mpu_wdt_fck = { | |||
1307 | 1330 | ||
1308 | static struct clk sync_32k_ick = { | 1331 | static struct clk sync_32k_ick = { |
1309 | .name = "sync_32k_ick", | 1332 | .name = "sync_32k_ick", |
1310 | .ops = &clkops_omap2_dflt_wait, | 1333 | .ops = &clkops_omap2_iclk_dflt_wait, |
1311 | .parent = &l4_ck, | 1334 | .parent = &wu_l4_ick, |
1335 | .clkdm_name = "wkup_clkdm", | ||
1312 | .flags = ENABLE_ON_INIT, | 1336 | .flags = ENABLE_ON_INIT, |
1313 | .clkdm_name = "core_l4_clkdm", | ||
1314 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 1337 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
1315 | .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT, | 1338 | .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT, |
1316 | .recalc = &followparent_recalc, | 1339 | .recalc = &followparent_recalc, |
@@ -1318,9 +1341,9 @@ static struct clk sync_32k_ick = { | |||
1318 | 1341 | ||
1319 | static struct clk wdt1_ick = { | 1342 | static struct clk wdt1_ick = { |
1320 | .name = "wdt1_ick", | 1343 | .name = "wdt1_ick", |
1321 | .ops = &clkops_omap2_dflt_wait, | 1344 | .ops = &clkops_omap2_iclk_dflt_wait, |
1322 | .parent = &l4_ck, | 1345 | .parent = &wu_l4_ick, |
1323 | .clkdm_name = "core_l4_clkdm", | 1346 | .clkdm_name = "wkup_clkdm", |
1324 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 1347 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
1325 | .enable_bit = OMAP24XX_EN_WDT1_SHIFT, | 1348 | .enable_bit = OMAP24XX_EN_WDT1_SHIFT, |
1326 | .recalc = &followparent_recalc, | 1349 | .recalc = &followparent_recalc, |
@@ -1328,10 +1351,10 @@ static struct clk wdt1_ick = { | |||
1328 | 1351 | ||
1329 | static struct clk omapctrl_ick = { | 1352 | static struct clk omapctrl_ick = { |
1330 | .name = "omapctrl_ick", | 1353 | .name = "omapctrl_ick", |
1331 | .ops = &clkops_omap2_dflt_wait, | 1354 | .ops = &clkops_omap2_iclk_dflt_wait, |
1332 | .parent = &l4_ck, | 1355 | .parent = &wu_l4_ick, |
1356 | .clkdm_name = "wkup_clkdm", | ||
1333 | .flags = ENABLE_ON_INIT, | 1357 | .flags = ENABLE_ON_INIT, |
1334 | .clkdm_name = "core_l4_clkdm", | ||
1335 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), | 1358 | .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), |
1336 | .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT, | 1359 | .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT, |
1337 | .recalc = &followparent_recalc, | 1360 | .recalc = &followparent_recalc, |
@@ -1339,7 +1362,7 @@ static struct clk omapctrl_ick = { | |||
1339 | 1362 | ||
1340 | static struct clk cam_ick = { | 1363 | static struct clk cam_ick = { |
1341 | .name = "cam_ick", | 1364 | .name = "cam_ick", |
1342 | .ops = &clkops_omap2_dflt, | 1365 | .ops = &clkops_omap2_iclk_dflt, |
1343 | .parent = &l4_ck, | 1366 | .parent = &l4_ck, |
1344 | .clkdm_name = "core_l4_clkdm", | 1367 | .clkdm_name = "core_l4_clkdm", |
1345 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1368 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1364,7 +1387,7 @@ static struct clk cam_fck = { | |||
1364 | 1387 | ||
1365 | static struct clk mailboxes_ick = { | 1388 | static struct clk mailboxes_ick = { |
1366 | .name = "mailboxes_ick", | 1389 | .name = "mailboxes_ick", |
1367 | .ops = &clkops_omap2_dflt_wait, | 1390 | .ops = &clkops_omap2_iclk_dflt_wait, |
1368 | .parent = &l4_ck, | 1391 | .parent = &l4_ck, |
1369 | .clkdm_name = "core_l4_clkdm", | 1392 | .clkdm_name = "core_l4_clkdm", |
1370 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1393 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1374,7 +1397,7 @@ static struct clk mailboxes_ick = { | |||
1374 | 1397 | ||
1375 | static struct clk wdt4_ick = { | 1398 | static struct clk wdt4_ick = { |
1376 | .name = "wdt4_ick", | 1399 | .name = "wdt4_ick", |
1377 | .ops = &clkops_omap2_dflt_wait, | 1400 | .ops = &clkops_omap2_iclk_dflt_wait, |
1378 | .parent = &l4_ck, | 1401 | .parent = &l4_ck, |
1379 | .clkdm_name = "core_l4_clkdm", | 1402 | .clkdm_name = "core_l4_clkdm", |
1380 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1403 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1394,7 +1417,7 @@ static struct clk wdt4_fck = { | |||
1394 | 1417 | ||
1395 | static struct clk wdt3_ick = { | 1418 | static struct clk wdt3_ick = { |
1396 | .name = "wdt3_ick", | 1419 | .name = "wdt3_ick", |
1397 | .ops = &clkops_omap2_dflt_wait, | 1420 | .ops = &clkops_omap2_iclk_dflt_wait, |
1398 | .parent = &l4_ck, | 1421 | .parent = &l4_ck, |
1399 | .clkdm_name = "core_l4_clkdm", | 1422 | .clkdm_name = "core_l4_clkdm", |
1400 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1423 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1414,7 +1437,7 @@ static struct clk wdt3_fck = { | |||
1414 | 1437 | ||
1415 | static struct clk mspro_ick = { | 1438 | static struct clk mspro_ick = { |
1416 | .name = "mspro_ick", | 1439 | .name = "mspro_ick", |
1417 | .ops = &clkops_omap2_dflt_wait, | 1440 | .ops = &clkops_omap2_iclk_dflt_wait, |
1418 | .parent = &l4_ck, | 1441 | .parent = &l4_ck, |
1419 | .clkdm_name = "core_l4_clkdm", | 1442 | .clkdm_name = "core_l4_clkdm", |
1420 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1443 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1434,7 +1457,7 @@ static struct clk mspro_fck = { | |||
1434 | 1457 | ||
1435 | static struct clk mmc_ick = { | 1458 | static struct clk mmc_ick = { |
1436 | .name = "mmc_ick", | 1459 | .name = "mmc_ick", |
1437 | .ops = &clkops_omap2_dflt_wait, | 1460 | .ops = &clkops_omap2_iclk_dflt_wait, |
1438 | .parent = &l4_ck, | 1461 | .parent = &l4_ck, |
1439 | .clkdm_name = "core_l4_clkdm", | 1462 | .clkdm_name = "core_l4_clkdm", |
1440 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1463 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1454,7 +1477,7 @@ static struct clk mmc_fck = { | |||
1454 | 1477 | ||
1455 | static struct clk fac_ick = { | 1478 | static struct clk fac_ick = { |
1456 | .name = "fac_ick", | 1479 | .name = "fac_ick", |
1457 | .ops = &clkops_omap2_dflt_wait, | 1480 | .ops = &clkops_omap2_iclk_dflt_wait, |
1458 | .parent = &l4_ck, | 1481 | .parent = &l4_ck, |
1459 | .clkdm_name = "core_l4_clkdm", | 1482 | .clkdm_name = "core_l4_clkdm", |
1460 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1483 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1474,7 +1497,7 @@ static struct clk fac_fck = { | |||
1474 | 1497 | ||
1475 | static struct clk eac_ick = { | 1498 | static struct clk eac_ick = { |
1476 | .name = "eac_ick", | 1499 | .name = "eac_ick", |
1477 | .ops = &clkops_omap2_dflt_wait, | 1500 | .ops = &clkops_omap2_iclk_dflt_wait, |
1478 | .parent = &l4_ck, | 1501 | .parent = &l4_ck, |
1479 | .clkdm_name = "core_l4_clkdm", | 1502 | .clkdm_name = "core_l4_clkdm", |
1480 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1503 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1494,7 +1517,7 @@ static struct clk eac_fck = { | |||
1494 | 1517 | ||
1495 | static struct clk hdq_ick = { | 1518 | static struct clk hdq_ick = { |
1496 | .name = "hdq_ick", | 1519 | .name = "hdq_ick", |
1497 | .ops = &clkops_omap2_dflt_wait, | 1520 | .ops = &clkops_omap2_iclk_dflt_wait, |
1498 | .parent = &l4_ck, | 1521 | .parent = &l4_ck, |
1499 | .clkdm_name = "core_l4_clkdm", | 1522 | .clkdm_name = "core_l4_clkdm", |
1500 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1523 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1514,7 +1537,7 @@ static struct clk hdq_fck = { | |||
1514 | 1537 | ||
1515 | static struct clk i2c2_ick = { | 1538 | static struct clk i2c2_ick = { |
1516 | .name = "i2c2_ick", | 1539 | .name = "i2c2_ick", |
1517 | .ops = &clkops_omap2_dflt_wait, | 1540 | .ops = &clkops_omap2_iclk_dflt_wait, |
1518 | .parent = &l4_ck, | 1541 | .parent = &l4_ck, |
1519 | .clkdm_name = "core_l4_clkdm", | 1542 | .clkdm_name = "core_l4_clkdm", |
1520 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1543 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1534,7 +1557,7 @@ static struct clk i2c2_fck = { | |||
1534 | 1557 | ||
1535 | static struct clk i2c1_ick = { | 1558 | static struct clk i2c1_ick = { |
1536 | .name = "i2c1_ick", | 1559 | .name = "i2c1_ick", |
1537 | .ops = &clkops_omap2_dflt_wait, | 1560 | .ops = &clkops_omap2_iclk_dflt_wait, |
1538 | .parent = &l4_ck, | 1561 | .parent = &l4_ck, |
1539 | .clkdm_name = "core_l4_clkdm", | 1562 | .clkdm_name = "core_l4_clkdm", |
1540 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1563 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1552,12 +1575,18 @@ static struct clk i2c1_fck = { | |||
1552 | .recalc = &followparent_recalc, | 1575 | .recalc = &followparent_recalc, |
1553 | }; | 1576 | }; |
1554 | 1577 | ||
1578 | /* | ||
1579 | * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE | ||
1580 | * accesses derived from this data. | ||
1581 | */ | ||
1555 | static struct clk gpmc_fck = { | 1582 | static struct clk gpmc_fck = { |
1556 | .name = "gpmc_fck", | 1583 | .name = "gpmc_fck", |
1557 | .ops = &clkops_null, /* RMK: missing? */ | 1584 | .ops = &clkops_omap2_iclk_idle_only, |
1558 | .parent = &core_l3_ck, | 1585 | .parent = &core_l3_ck, |
1559 | .flags = ENABLE_ON_INIT, | 1586 | .flags = ENABLE_ON_INIT, |
1560 | .clkdm_name = "core_l3_clkdm", | 1587 | .clkdm_name = "core_l3_clkdm", |
1588 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), | ||
1589 | .enable_bit = OMAP24XX_AUTO_GPMC_SHIFT, | ||
1561 | .recalc = &followparent_recalc, | 1590 | .recalc = &followparent_recalc, |
1562 | }; | 1591 | }; |
1563 | 1592 | ||
@@ -1569,17 +1598,38 @@ static struct clk sdma_fck = { | |||
1569 | .recalc = &followparent_recalc, | 1598 | .recalc = &followparent_recalc, |
1570 | }; | 1599 | }; |
1571 | 1600 | ||
1601 | /* | ||
1602 | * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE | ||
1603 | * accesses derived from this data. | ||
1604 | */ | ||
1572 | static struct clk sdma_ick = { | 1605 | static struct clk sdma_ick = { |
1573 | .name = "sdma_ick", | 1606 | .name = "sdma_ick", |
1574 | .ops = &clkops_null, /* RMK: missing? */ | 1607 | .ops = &clkops_omap2_iclk_idle_only, |
1575 | .parent = &l4_ck, | 1608 | .parent = &core_l3_ck, |
1609 | .clkdm_name = "core_l3_clkdm", | ||
1610 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), | ||
1611 | .enable_bit = OMAP24XX_AUTO_SDMA_SHIFT, | ||
1612 | .recalc = &followparent_recalc, | ||
1613 | }; | ||
1614 | |||
1615 | /* | ||
1616 | * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE | ||
1617 | * accesses derived from this data. | ||
1618 | */ | ||
1619 | static struct clk sdrc_ick = { | ||
1620 | .name = "sdrc_ick", | ||
1621 | .ops = &clkops_omap2_iclk_idle_only, | ||
1622 | .parent = &core_l3_ck, | ||
1623 | .flags = ENABLE_ON_INIT, | ||
1576 | .clkdm_name = "core_l3_clkdm", | 1624 | .clkdm_name = "core_l3_clkdm", |
1625 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3), | ||
1626 | .enable_bit = OMAP24XX_AUTO_SDRC_SHIFT, | ||
1577 | .recalc = &followparent_recalc, | 1627 | .recalc = &followparent_recalc, |
1578 | }; | 1628 | }; |
1579 | 1629 | ||
1580 | static struct clk vlynq_ick = { | 1630 | static struct clk vlynq_ick = { |
1581 | .name = "vlynq_ick", | 1631 | .name = "vlynq_ick", |
1582 | .ops = &clkops_omap2_dflt_wait, | 1632 | .ops = &clkops_omap2_iclk_dflt_wait, |
1583 | .parent = &core_l3_ck, | 1633 | .parent = &core_l3_ck, |
1584 | .clkdm_name = "core_l3_clkdm", | 1634 | .clkdm_name = "core_l3_clkdm", |
1585 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), | 1635 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), |
@@ -1628,7 +1678,7 @@ static struct clk vlynq_fck = { | |||
1628 | 1678 | ||
1629 | static struct clk des_ick = { | 1679 | static struct clk des_ick = { |
1630 | .name = "des_ick", | 1680 | .name = "des_ick", |
1631 | .ops = &clkops_omap2_dflt_wait, | 1681 | .ops = &clkops_omap2_iclk_dflt_wait, |
1632 | .parent = &l4_ck, | 1682 | .parent = &l4_ck, |
1633 | .clkdm_name = "core_l4_clkdm", | 1683 | .clkdm_name = "core_l4_clkdm", |
1634 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), | 1684 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), |
@@ -1638,7 +1688,7 @@ static struct clk des_ick = { | |||
1638 | 1688 | ||
1639 | static struct clk sha_ick = { | 1689 | static struct clk sha_ick = { |
1640 | .name = "sha_ick", | 1690 | .name = "sha_ick", |
1641 | .ops = &clkops_omap2_dflt_wait, | 1691 | .ops = &clkops_omap2_iclk_dflt_wait, |
1642 | .parent = &l4_ck, | 1692 | .parent = &l4_ck, |
1643 | .clkdm_name = "core_l4_clkdm", | 1693 | .clkdm_name = "core_l4_clkdm", |
1644 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), | 1694 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), |
@@ -1648,7 +1698,7 @@ static struct clk sha_ick = { | |||
1648 | 1698 | ||
1649 | static struct clk rng_ick = { | 1699 | static struct clk rng_ick = { |
1650 | .name = "rng_ick", | 1700 | .name = "rng_ick", |
1651 | .ops = &clkops_omap2_dflt_wait, | 1701 | .ops = &clkops_omap2_iclk_dflt_wait, |
1652 | .parent = &l4_ck, | 1702 | .parent = &l4_ck, |
1653 | .clkdm_name = "core_l4_clkdm", | 1703 | .clkdm_name = "core_l4_clkdm", |
1654 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), | 1704 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), |
@@ -1658,7 +1708,7 @@ static struct clk rng_ick = { | |||
1658 | 1708 | ||
1659 | static struct clk aes_ick = { | 1709 | static struct clk aes_ick = { |
1660 | .name = "aes_ick", | 1710 | .name = "aes_ick", |
1661 | .ops = &clkops_omap2_dflt_wait, | 1711 | .ops = &clkops_omap2_iclk_dflt_wait, |
1662 | .parent = &l4_ck, | 1712 | .parent = &l4_ck, |
1663 | .clkdm_name = "core_l4_clkdm", | 1713 | .clkdm_name = "core_l4_clkdm", |
1664 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), | 1714 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), |
@@ -1668,7 +1718,7 @@ static struct clk aes_ick = { | |||
1668 | 1718 | ||
1669 | static struct clk pka_ick = { | 1719 | static struct clk pka_ick = { |
1670 | .name = "pka_ick", | 1720 | .name = "pka_ick", |
1671 | .ops = &clkops_omap2_dflt_wait, | 1721 | .ops = &clkops_omap2_iclk_dflt_wait, |
1672 | .parent = &l4_ck, | 1722 | .parent = &l4_ck, |
1673 | .clkdm_name = "core_l4_clkdm", | 1723 | .clkdm_name = "core_l4_clkdm", |
1674 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), | 1724 | .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), |
@@ -1721,6 +1771,9 @@ static struct omap_clk omap2420_clks[] = { | |||
1721 | CLK(NULL, "osc_ck", &osc_ck, CK_242X), | 1771 | CLK(NULL, "osc_ck", &osc_ck, CK_242X), |
1722 | CLK(NULL, "sys_ck", &sys_ck, CK_242X), | 1772 | CLK(NULL, "sys_ck", &sys_ck, CK_242X), |
1723 | CLK(NULL, "alt_ck", &alt_ck, CK_242X), | 1773 | CLK(NULL, "alt_ck", &alt_ck, CK_242X), |
1774 | CLK("omap-mcbsp.1", "pad_fck", &mcbsp_clks, CK_242X), | ||
1775 | CLK("omap-mcbsp.2", "pad_fck", &mcbsp_clks, CK_242X), | ||
1776 | CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_242X), | ||
1724 | /* internal analog sources */ | 1777 | /* internal analog sources */ |
1725 | CLK(NULL, "dpll_ck", &dpll_ck, CK_242X), | 1778 | CLK(NULL, "dpll_ck", &dpll_ck, CK_242X), |
1726 | CLK(NULL, "apll96_ck", &apll96_ck, CK_242X), | 1779 | CLK(NULL, "apll96_ck", &apll96_ck, CK_242X), |
@@ -1728,6 +1781,8 @@ static struct omap_clk omap2420_clks[] = { | |||
1728 | /* internal prcm root sources */ | 1781 | /* internal prcm root sources */ |
1729 | CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X), | 1782 | CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X), |
1730 | CLK(NULL, "core_ck", &core_ck, CK_242X), | 1783 | CLK(NULL, "core_ck", &core_ck, CK_242X), |
1784 | CLK("omap-mcbsp.1", "prcm_fck", &func_96m_ck, CK_242X), | ||
1785 | CLK("omap-mcbsp.2", "prcm_fck", &func_96m_ck, CK_242X), | ||
1731 | CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X), | 1786 | CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X), |
1732 | CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X), | 1787 | CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X), |
1733 | CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X), | 1788 | CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X), |
@@ -1741,7 +1796,6 @@ static struct omap_clk omap2420_clks[] = { | |||
1741 | CLK(NULL, "mpu_ck", &mpu_ck, CK_242X), | 1796 | CLK(NULL, "mpu_ck", &mpu_ck, CK_242X), |
1742 | /* dsp domain clocks */ | 1797 | /* dsp domain clocks */ |
1743 | CLK(NULL, "dsp_fck", &dsp_fck, CK_242X), | 1798 | CLK(NULL, "dsp_fck", &dsp_fck, CK_242X), |
1744 | CLK(NULL, "dsp_irate_ick", &dsp_irate_ick, CK_242X), | ||
1745 | CLK(NULL, "dsp_ick", &dsp_ick, CK_242X), | 1799 | CLK(NULL, "dsp_ick", &dsp_ick, CK_242X), |
1746 | CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X), | 1800 | CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X), |
1747 | CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X), | 1801 | CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X), |
@@ -1750,10 +1804,10 @@ static struct omap_clk omap2420_clks[] = { | |||
1750 | CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), | 1804 | CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), |
1751 | CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), | 1805 | CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), |
1752 | /* DSS domain clocks */ | 1806 | /* DSS domain clocks */ |
1753 | CLK("omapdss", "ick", &dss_ick, CK_242X), | 1807 | CLK("omapdss_dss", "ick", &dss_ick, CK_242X), |
1754 | CLK("omapdss", "dss1_fck", &dss1_fck, CK_242X), | 1808 | CLK("omapdss_dss", "fck", &dss1_fck, CK_242X), |
1755 | CLK("omapdss", "dss2_fck", &dss2_fck, CK_242X), | 1809 | CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_242X), |
1756 | CLK("omapdss", "tv_fck", &dss_54m_fck, CK_242X), | 1810 | CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_242X), |
1757 | /* L3 domain clocks */ | 1811 | /* L3 domain clocks */ |
1758 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), | 1812 | CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), |
1759 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), | 1813 | CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), |
@@ -1761,6 +1815,7 @@ static struct omap_clk omap2420_clks[] = { | |||
1761 | /* L4 domain clocks */ | 1815 | /* L4 domain clocks */ |
1762 | CLK(NULL, "l4_ck", &l4_ck, CK_242X), | 1816 | CLK(NULL, "l4_ck", &l4_ck, CK_242X), |
1763 | CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X), | 1817 | CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X), |
1818 | CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_242X), | ||
1764 | /* virtual meta-group clock */ | 1819 | /* virtual meta-group clock */ |
1765 | CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X), | 1820 | CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X), |
1766 | /* general l4 interface ck, multi-parent functional clk */ | 1821 | /* general l4 interface ck, multi-parent functional clk */ |
@@ -1826,22 +1881,23 @@ static struct omap_clk omap2420_clks[] = { | |||
1826 | CLK(NULL, "eac_fck", &eac_fck, CK_242X), | 1881 | CLK(NULL, "eac_fck", &eac_fck, CK_242X), |
1827 | CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X), | 1882 | CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X), |
1828 | CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X), | 1883 | CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X), |
1829 | CLK("i2c_omap.1", "ick", &i2c1_ick, CK_242X), | 1884 | CLK("omap_i2c.1", "ick", &i2c1_ick, CK_242X), |
1830 | CLK("i2c_omap.1", "fck", &i2c1_fck, CK_242X), | 1885 | CLK("omap_i2c.1", "fck", &i2c1_fck, CK_242X), |
1831 | CLK("i2c_omap.2", "ick", &i2c2_ick, CK_242X), | 1886 | CLK("omap_i2c.2", "ick", &i2c2_ick, CK_242X), |
1832 | CLK("i2c_omap.2", "fck", &i2c2_fck, CK_242X), | 1887 | CLK("omap_i2c.2", "fck", &i2c2_fck, CK_242X), |
1833 | CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X), | 1888 | CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X), |
1834 | CLK(NULL, "sdma_fck", &sdma_fck, CK_242X), | 1889 | CLK(NULL, "sdma_fck", &sdma_fck, CK_242X), |
1835 | CLK(NULL, "sdma_ick", &sdma_ick, CK_242X), | 1890 | CLK(NULL, "sdma_ick", &sdma_ick, CK_242X), |
1891 | CLK(NULL, "sdrc_ick", &sdrc_ick, CK_242X), | ||
1836 | CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X), | 1892 | CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X), |
1837 | CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X), | 1893 | CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X), |
1838 | CLK(NULL, "des_ick", &des_ick, CK_242X), | 1894 | CLK(NULL, "des_ick", &des_ick, CK_242X), |
1839 | CLK("omap-sham", "ick", &sha_ick, CK_242X), | 1895 | CLK("omap-sham", "ick", &sha_ick, CK_242X), |
1840 | CLK("omap_rng", "ick", &rng_ick, CK_242X), | 1896 | CLK("omap_rng", "ick", &rng_ick, CK_242X), |
1841 | CLK(NULL, "aes_ick", &aes_ick, CK_242X), | 1897 | CLK("omap-aes", "ick", &aes_ick, CK_242X), |
1842 | CLK(NULL, "pka_ick", &pka_ick, CK_242X), | 1898 | CLK(NULL, "pka_ick", &pka_ick, CK_242X), |
1843 | CLK(NULL, "usb_fck", &usb_fck, CK_242X), | 1899 | CLK(NULL, "usb_fck", &usb_fck, CK_242X), |
1844 | CLK("musb_hdrc", "fck", &osc_ck, CK_242X), | 1900 | CLK("musb-hdrc", "fck", &osc_ck, CK_242X), |
1845 | }; | 1901 | }; |
1846 | 1902 | ||
1847 | /* | 1903 | /* |
@@ -1877,6 +1933,9 @@ int __init omap2420_clk_init(void) | |||
1877 | omap2_init_clk_clkdm(c->lk.clk); | 1933 | omap2_init_clk_clkdm(c->lk.clk); |
1878 | } | 1934 | } |
1879 | 1935 | ||
1936 | /* Disable autoidle on all clocks; let the PM code enable it later */ | ||
1937 | omap_clk_disable_autoidle_all(); | ||
1938 | |||
1880 | /* Check the MPU rate set by bootloader */ | 1939 | /* Check the MPU rate set by bootloader */ |
1881 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); | 1940 | clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); |
1882 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { | 1941 | for (prcm = rate_table; prcm->mpu_speed; prcm++) { |