diff options
author | Nicolin Chen <b42378@freescale.com> | 2013-06-13 07:50:56 -0400 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2013-06-17 03:45:16 -0400 |
commit | e7eccc7e16acfcc3e613e7c0df7e62528d24581c (patch) | |
tree | 59bcf789c1f05e9a6d4abebb1f3b331edb8dfae4 /arch/arm/mach-imx/mach-imx6q.c | |
parent | 3250f59e5d1c6279bd02c45c681b258adf9899a8 (diff) |
ARM: clk-imx6qdl: Add clko1 configuration for imx6qdl-sabresd
WM8962 needs 24MHz clock for its MCLK, so choose PLL4 as the parent of clko1.
Signed-off-by: Nicolin Chen <b42378@freescale.com>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6q.c')
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 045e5e30b18f..f5965220a4d8 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -146,6 +146,45 @@ static void __init imx6q_sabrelite_init(void) | |||
146 | imx6q_sabrelite_cko1_setup(); | 146 | imx6q_sabrelite_cko1_setup(); |
147 | } | 147 | } |
148 | 148 | ||
149 | static void __init imx6q_sabresd_cko1_setup(void) | ||
150 | { | ||
151 | struct clk *cko1_sel, *pll4, *pll4_post, *cko1; | ||
152 | unsigned long rate; | ||
153 | |||
154 | cko1_sel = clk_get_sys(NULL, "cko1_sel"); | ||
155 | pll4 = clk_get_sys(NULL, "pll4_audio"); | ||
156 | pll4_post = clk_get_sys(NULL, "pll4_post_div"); | ||
157 | cko1 = clk_get_sys(NULL, "cko1"); | ||
158 | if (IS_ERR(cko1_sel) || IS_ERR(pll4) | ||
159 | || IS_ERR(pll4_post) || IS_ERR(cko1)) { | ||
160 | pr_err("cko1 setup failed!\n"); | ||
161 | goto put_clk; | ||
162 | } | ||
163 | /* | ||
164 | * Setting pll4 at 768MHz (24MHz * 32) | ||
165 | * So its child clock can get 24MHz easily | ||
166 | */ | ||
167 | clk_set_rate(pll4, 768000000); | ||
168 | |||
169 | clk_set_parent(cko1_sel, pll4_post); | ||
170 | rate = clk_round_rate(cko1, 24000000); | ||
171 | clk_set_rate(cko1, rate); | ||
172 | put_clk: | ||
173 | if (!IS_ERR(cko1_sel)) | ||
174 | clk_put(cko1_sel); | ||
175 | if (!IS_ERR(pll4_post)) | ||
176 | clk_put(pll4_post); | ||
177 | if (!IS_ERR(pll4)) | ||
178 | clk_put(pll4); | ||
179 | if (!IS_ERR(cko1)) | ||
180 | clk_put(cko1); | ||
181 | } | ||
182 | |||
183 | static void __init imx6q_sabresd_init(void) | ||
184 | { | ||
185 | imx6q_sabresd_cko1_setup(); | ||
186 | } | ||
187 | |||
149 | static void __init imx6q_1588_init(void) | 188 | static void __init imx6q_1588_init(void) |
150 | { | 189 | { |
151 | struct regmap *gpr; | 190 | struct regmap *gpr; |
@@ -166,6 +205,9 @@ static void __init imx6q_init_machine(void) | |||
166 | { | 205 | { |
167 | if (of_machine_is_compatible("fsl,imx6q-sabrelite")) | 206 | if (of_machine_is_compatible("fsl,imx6q-sabrelite")) |
168 | imx6q_sabrelite_init(); | 207 | imx6q_sabrelite_init(); |
208 | else if (of_machine_is_compatible("fsl,imx6q-sabresd") || | ||
209 | of_machine_is_compatible("fsl,imx6dl-sabresd")) | ||
210 | imx6q_sabresd_init(); | ||
169 | 211 | ||
170 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 212 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
171 | 213 | ||