aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorRajendra Nayak <rnayak@ti.com>2011-07-10 07:56:14 -0400
committerPaul Walmsley <paul@pwsan.com>2011-07-10 07:56:14 -0400
commitad03f1cb2d44257afa63a2171e84daad931c48cb (patch)
treeb56f0b6371095db6817dbcc161b00f8f2d477306 /arch/arm
parentc84584139aaeef7631df152e13cbf319d8e55950 (diff)
OMAP4: clock data: Add missing divider selection for auxclks
On OMAP4 the auxclk nodes (part of SCRM) support both divider as well as parent selection. Supporting this requires splitting the existing nodes (which support only parent selection) into two nodes, one for parent and another for divider selection. The nodes for parent selection are named auxclk*_src_ck and the ones for divider selection as auxclk*_ck. Signed-off-by: Rajendra Nayak <rnayak@ti.com> [b-cousson@ti.com: Rebase on top of clock cleanup and autogen alignement] Signed-off-by: Benoit Cousson <b-cousson@ti.com> Cc: Paul Walmsley <paul@pwsan.com> Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-omap2/clock44xx_data.c176
1 files changed, 152 insertions, 24 deletions
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
index 257882028492..2fcdb8d3b515 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -2774,19 +2774,39 @@ static struct clk trace_clk_div_ck = {
2774 2774
2775/* SCRM aux clk nodes */ 2775/* SCRM aux clk nodes */
2776 2776
2777static const struct clksel auxclk_sel[] = { 2777static const struct clksel auxclk_src_sel[] = {
2778 { .parent = &sys_clkin_ck, .rates = div_1_0_rates }, 2778 { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
2779 { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates }, 2779 { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
2780 { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates }, 2780 { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
2781 { .parent = NULL }, 2781 { .parent = NULL },
2782}; 2782};
2783 2783
2784static struct clk auxclk0_ck = { 2784static const struct clksel_rate div16_1to16_rates[] = {
2785 .name = "auxclk0_ck", 2785 { .div = 1, .val = 0, .flags = RATE_IN_4430 },
2786 { .div = 2, .val = 1, .flags = RATE_IN_4430 },
2787 { .div = 3, .val = 2, .flags = RATE_IN_4430 },
2788 { .div = 4, .val = 3, .flags = RATE_IN_4430 },
2789 { .div = 5, .val = 4, .flags = RATE_IN_4430 },
2790 { .div = 6, .val = 5, .flags = RATE_IN_4430 },
2791 { .div = 7, .val = 6, .flags = RATE_IN_4430 },
2792 { .div = 8, .val = 7, .flags = RATE_IN_4430 },
2793 { .div = 9, .val = 8, .flags = RATE_IN_4430 },
2794 { .div = 10, .val = 9, .flags = RATE_IN_4430 },
2795 { .div = 11, .val = 10, .flags = RATE_IN_4430 },
2796 { .div = 12, .val = 11, .flags = RATE_IN_4430 },
2797 { .div = 13, .val = 12, .flags = RATE_IN_4430 },
2798 { .div = 14, .val = 13, .flags = RATE_IN_4430 },
2799 { .div = 15, .val = 14, .flags = RATE_IN_4430 },
2800 { .div = 16, .val = 15, .flags = RATE_IN_4430 },
2801 { .div = 0 },
2802};
2803
2804static struct clk auxclk0_src_ck = {
2805 .name = "auxclk0_src_ck",
2786 .parent = &sys_clkin_ck, 2806 .parent = &sys_clkin_ck,
2787 .init = &omap2_init_clksel_parent, 2807 .init = &omap2_init_clksel_parent,
2788 .ops = &clkops_omap2_dflt, 2808 .ops = &clkops_omap2_dflt,
2789 .clksel = auxclk_sel, 2809 .clksel = auxclk_src_sel,
2790 .clksel_reg = OMAP4_SCRM_AUXCLK0, 2810 .clksel_reg = OMAP4_SCRM_AUXCLK0,
2791 .clksel_mask = OMAP4_SRCSELECT_MASK, 2811 .clksel_mask = OMAP4_SRCSELECT_MASK,
2792 .recalc = &omap2_clksel_recalc, 2812 .recalc = &omap2_clksel_recalc,
@@ -2794,12 +2814,29 @@ static struct clk auxclk0_ck = {
2794 .enable_bit = OMAP4_ENABLE_SHIFT, 2814 .enable_bit = OMAP4_ENABLE_SHIFT,
2795}; 2815};
2796 2816
2797static struct clk auxclk1_ck = { 2817static const struct clksel auxclk0_sel[] = {
2798 .name = "auxclk1_ck", 2818 { .parent = &auxclk0_src_ck, .rates = div16_1to16_rates },
2819 { .parent = NULL },
2820};
2821
2822static struct clk auxclk0_ck = {
2823 .name = "auxclk0_ck",
2824 .parent = &auxclk0_src_ck,
2825 .clksel = auxclk0_sel,
2826 .clksel_reg = OMAP4_SCRM_AUXCLK0,
2827 .clksel_mask = OMAP4_CLKDIV_MASK,
2828 .ops = &clkops_null,
2829 .recalc = &omap2_clksel_recalc,
2830 .round_rate = &omap2_clksel_round_rate,
2831 .set_rate = &omap2_clksel_set_rate,
2832};
2833
2834static struct clk auxclk1_src_ck = {
2835 .name = "auxclk1_src_ck",
2799 .parent = &sys_clkin_ck, 2836 .parent = &sys_clkin_ck,
2800 .init = &omap2_init_clksel_parent, 2837 .init = &omap2_init_clksel_parent,
2801 .ops = &clkops_omap2_dflt, 2838 .ops = &clkops_omap2_dflt,
2802 .clksel = auxclk_sel, 2839 .clksel = auxclk_src_sel,
2803 .clksel_reg = OMAP4_SCRM_AUXCLK1, 2840 .clksel_reg = OMAP4_SCRM_AUXCLK1,
2804 .clksel_mask = OMAP4_SRCSELECT_MASK, 2841 .clksel_mask = OMAP4_SRCSELECT_MASK,
2805 .recalc = &omap2_clksel_recalc, 2842 .recalc = &omap2_clksel_recalc,
@@ -2807,12 +2844,29 @@ static struct clk auxclk1_ck = {
2807 .enable_bit = OMAP4_ENABLE_SHIFT, 2844 .enable_bit = OMAP4_ENABLE_SHIFT,
2808}; 2845};
2809 2846
2810static struct clk auxclk2_ck = { 2847static const struct clksel auxclk1_sel[] = {
2811 .name = "auxclk2_ck", 2848 { .parent = &auxclk1_src_ck, .rates = div16_1to16_rates },
2849 { .parent = NULL },
2850};
2851
2852static struct clk auxclk1_ck = {
2853 .name = "auxclk1_ck",
2854 .parent = &auxclk1_src_ck,
2855 .clksel = auxclk1_sel,
2856 .clksel_reg = OMAP4_SCRM_AUXCLK1,
2857 .clksel_mask = OMAP4_CLKDIV_MASK,
2858 .ops = &clkops_null,
2859 .recalc = &omap2_clksel_recalc,
2860 .round_rate = &omap2_clksel_round_rate,
2861 .set_rate = &omap2_clksel_set_rate,
2862};
2863
2864static struct clk auxclk2_src_ck = {
2865 .name = "auxclk2_src_ck",
2812 .parent = &sys_clkin_ck, 2866 .parent = &sys_clkin_ck,
2813 .init = &omap2_init_clksel_parent, 2867 .init = &omap2_init_clksel_parent,
2814 .ops = &clkops_omap2_dflt, 2868 .ops = &clkops_omap2_dflt,
2815 .clksel = auxclk_sel, 2869 .clksel = auxclk_src_sel,
2816 .clksel_reg = OMAP4_SCRM_AUXCLK2, 2870 .clksel_reg = OMAP4_SCRM_AUXCLK2,
2817 .clksel_mask = OMAP4_SRCSELECT_MASK, 2871 .clksel_mask = OMAP4_SRCSELECT_MASK,
2818 .recalc = &omap2_clksel_recalc, 2872 .recalc = &omap2_clksel_recalc,
@@ -2820,12 +2874,29 @@ static struct clk auxclk2_ck = {
2820 .enable_bit = OMAP4_ENABLE_SHIFT, 2874 .enable_bit = OMAP4_ENABLE_SHIFT,
2821}; 2875};
2822 2876
2823static struct clk auxclk3_ck = { 2877static const struct clksel auxclk2_sel[] = {
2824 .name = "auxclk3_ck", 2878 { .parent = &auxclk2_src_ck, .rates = div16_1to16_rates },
2879 { .parent = NULL },
2880};
2881
2882static struct clk auxclk2_ck = {
2883 .name = "auxclk2_ck",
2884 .parent = &auxclk2_src_ck,
2885 .clksel = auxclk2_sel,
2886 .clksel_reg = OMAP4_SCRM_AUXCLK2,
2887 .clksel_mask = OMAP4_CLKDIV_MASK,
2888 .ops = &clkops_null,
2889 .recalc = &omap2_clksel_recalc,
2890 .round_rate = &omap2_clksel_round_rate,
2891 .set_rate = &omap2_clksel_set_rate,
2892};
2893
2894static struct clk auxclk3_src_ck = {
2895 .name = "auxclk3_src_ck",
2825 .parent = &sys_clkin_ck, 2896 .parent = &sys_clkin_ck,
2826 .init = &omap2_init_clksel_parent, 2897 .init = &omap2_init_clksel_parent,
2827 .ops = &clkops_omap2_dflt, 2898 .ops = &clkops_omap2_dflt,
2828 .clksel = auxclk_sel, 2899 .clksel = auxclk_src_sel,
2829 .clksel_reg = OMAP4_SCRM_AUXCLK3, 2900 .clksel_reg = OMAP4_SCRM_AUXCLK3,
2830 .clksel_mask = OMAP4_SRCSELECT_MASK, 2901 .clksel_mask = OMAP4_SRCSELECT_MASK,
2831 .recalc = &omap2_clksel_recalc, 2902 .recalc = &omap2_clksel_recalc,
@@ -2833,12 +2904,29 @@ static struct clk auxclk3_ck = {
2833 .enable_bit = OMAP4_ENABLE_SHIFT, 2904 .enable_bit = OMAP4_ENABLE_SHIFT,
2834}; 2905};
2835 2906
2836static struct clk auxclk4_ck = { 2907static const struct clksel auxclk3_sel[] = {
2837 .name = "auxclk4_ck", 2908 { .parent = &auxclk3_src_ck, .rates = div16_1to16_rates },
2909 { .parent = NULL },
2910};
2911
2912static struct clk auxclk3_ck = {
2913 .name = "auxclk3_ck",
2914 .parent = &auxclk3_src_ck,
2915 .clksel = auxclk3_sel,
2916 .clksel_reg = OMAP4_SCRM_AUXCLK3,
2917 .clksel_mask = OMAP4_CLKDIV_MASK,
2918 .ops = &clkops_null,
2919 .recalc = &omap2_clksel_recalc,
2920 .round_rate = &omap2_clksel_round_rate,
2921 .set_rate = &omap2_clksel_set_rate,
2922};
2923
2924static struct clk auxclk4_src_ck = {
2925 .name = "auxclk4_src_ck",
2838 .parent = &sys_clkin_ck, 2926 .parent = &sys_clkin_ck,
2839 .init = &omap2_init_clksel_parent, 2927 .init = &omap2_init_clksel_parent,
2840 .ops = &clkops_omap2_dflt, 2928 .ops = &clkops_omap2_dflt,
2841 .clksel = auxclk_sel, 2929 .clksel = auxclk_src_sel,
2842 .clksel_reg = OMAP4_SCRM_AUXCLK4, 2930 .clksel_reg = OMAP4_SCRM_AUXCLK4,
2843 .clksel_mask = OMAP4_SRCSELECT_MASK, 2931 .clksel_mask = OMAP4_SRCSELECT_MASK,
2844 .recalc = &omap2_clksel_recalc, 2932 .recalc = &omap2_clksel_recalc,
@@ -2846,12 +2934,29 @@ static struct clk auxclk4_ck = {
2846 .enable_bit = OMAP4_ENABLE_SHIFT, 2934 .enable_bit = OMAP4_ENABLE_SHIFT,
2847}; 2935};
2848 2936
2849static struct clk auxclk5_ck = { 2937static const struct clksel auxclk4_sel[] = {
2850 .name = "auxclk5_ck", 2938 { .parent = &auxclk4_src_ck, .rates = div16_1to16_rates },
2939 { .parent = NULL },
2940};
2941
2942static struct clk auxclk4_ck = {
2943 .name = "auxclk4_ck",
2944 .parent = &auxclk4_src_ck,
2945 .clksel = auxclk4_sel,
2946 .clksel_reg = OMAP4_SCRM_AUXCLK4,
2947 .clksel_mask = OMAP4_CLKDIV_MASK,
2948 .ops = &clkops_null,
2949 .recalc = &omap2_clksel_recalc,
2950 .round_rate = &omap2_clksel_round_rate,
2951 .set_rate = &omap2_clksel_set_rate,
2952};
2953
2954static struct clk auxclk5_src_ck = {
2955 .name = "auxclk5_src_ck",
2851 .parent = &sys_clkin_ck, 2956 .parent = &sys_clkin_ck,
2852 .init = &omap2_init_clksel_parent, 2957 .init = &omap2_init_clksel_parent,
2853 .ops = &clkops_omap2_dflt, 2958 .ops = &clkops_omap2_dflt,
2854 .clksel = auxclk_sel, 2959 .clksel = auxclk_src_sel,
2855 .clksel_reg = OMAP4_SCRM_AUXCLK5, 2960 .clksel_reg = OMAP4_SCRM_AUXCLK5,
2856 .clksel_mask = OMAP4_SRCSELECT_MASK, 2961 .clksel_mask = OMAP4_SRCSELECT_MASK,
2857 .recalc = &omap2_clksel_recalc, 2962 .recalc = &omap2_clksel_recalc,
@@ -2859,6 +2964,23 @@ static struct clk auxclk5_ck = {
2859 .enable_bit = OMAP4_ENABLE_SHIFT, 2964 .enable_bit = OMAP4_ENABLE_SHIFT,
2860}; 2965};
2861 2966
2967static const struct clksel auxclk5_sel[] = {
2968 { .parent = &auxclk5_src_ck, .rates = div16_1to16_rates },
2969 { .parent = NULL },
2970};
2971
2972static struct clk auxclk5_ck = {
2973 .name = "auxclk5_ck",
2974 .parent = &auxclk5_src_ck,
2975 .clksel = auxclk5_sel,
2976 .clksel_reg = OMAP4_SCRM_AUXCLK5,
2977 .clksel_mask = OMAP4_CLKDIV_MASK,
2978 .ops = &clkops_null,
2979 .recalc = &omap2_clksel_recalc,
2980 .round_rate = &omap2_clksel_round_rate,
2981 .set_rate = &omap2_clksel_set_rate,
2982};
2983
2862static const struct clksel auxclkreq_sel[] = { 2984static const struct clksel auxclkreq_sel[] = {
2863 { .parent = &auxclk0_ck, .rates = div_1_0_rates }, 2985 { .parent = &auxclk0_ck, .rates = div_1_0_rates },
2864 { .parent = &auxclk1_ck, .rates = div_1_1_rates }, 2986 { .parent = &auxclk1_ck, .rates = div_1_1_rates },
@@ -3150,17 +3272,23 @@ static struct omap_clk omap44xx_clks[] = {
3150 CLK(NULL, "wd_timer3_fck", &wd_timer3_fck, CK_443X), 3272 CLK(NULL, "wd_timer3_fck", &wd_timer3_fck, CK_443X),
3151 CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X), 3273 CLK(NULL, "stm_clk_div_ck", &stm_clk_div_ck, CK_443X),
3152 CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X), 3274 CLK(NULL, "trace_clk_div_ck", &trace_clk_div_ck, CK_443X),
3275 CLK(NULL, "auxclk0_src_ck", &auxclk0_src_ck, CK_443X),
3153 CLK(NULL, "auxclk0_ck", &auxclk0_ck, CK_443X), 3276 CLK(NULL, "auxclk0_ck", &auxclk0_ck, CK_443X),
3154 CLK(NULL, "auxclk1_ck", &auxclk1_ck, CK_443X),
3155 CLK(NULL, "auxclk2_ck", &auxclk2_ck, CK_443X),
3156 CLK(NULL, "auxclk3_ck", &auxclk3_ck, CK_443X),
3157 CLK(NULL, "auxclk4_ck", &auxclk4_ck, CK_443X),
3158 CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X),
3159 CLK(NULL, "auxclkreq0_ck", &auxclkreq0_ck, CK_443X), 3277 CLK(NULL, "auxclkreq0_ck", &auxclkreq0_ck, CK_443X),
3278 CLK(NULL, "auxclk1_src_ck", &auxclk1_src_ck, CK_443X),
3279 CLK(NULL, "auxclk1_ck", &auxclk1_ck, CK_443X),
3160 CLK(NULL, "auxclkreq1_ck", &auxclkreq1_ck, CK_443X), 3280 CLK(NULL, "auxclkreq1_ck", &auxclkreq1_ck, CK_443X),
3281 CLK(NULL, "auxclk2_src_ck", &auxclk2_src_ck, CK_443X),
3282 CLK(NULL, "auxclk2_ck", &auxclk2_ck, CK_443X),
3161 CLK(NULL, "auxclkreq2_ck", &auxclkreq2_ck, CK_443X), 3283 CLK(NULL, "auxclkreq2_ck", &auxclkreq2_ck, CK_443X),
3284 CLK(NULL, "auxclk3_src_ck", &auxclk3_src_ck, CK_443X),
3285 CLK(NULL, "auxclk3_ck", &auxclk3_ck, CK_443X),
3162 CLK(NULL, "auxclkreq3_ck", &auxclkreq3_ck, CK_443X), 3286 CLK(NULL, "auxclkreq3_ck", &auxclkreq3_ck, CK_443X),
3287 CLK(NULL, "auxclk4_src_ck", &auxclk4_src_ck, CK_443X),
3288 CLK(NULL, "auxclk4_ck", &auxclk4_ck, CK_443X),
3163 CLK(NULL, "auxclkreq4_ck", &auxclkreq4_ck, CK_443X), 3289 CLK(NULL, "auxclkreq4_ck", &auxclkreq4_ck, CK_443X),
3290 CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck, CK_443X),
3291 CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X),
3164 CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X), 3292 CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X),
3165 CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X), 3293 CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X),
3166 CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X), 3294 CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X),