aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Stein <alexander.stein@systec-electronic.com>2015-09-09 05:35:14 -0400
committerShawn Guo <shawnguo@kernel.org>2015-09-22 21:03:15 -0400
commit8d449cb5e29a488cef44d81196f2819b92585513 (patch)
tree6628ca1b1e00a6ad07090d75b890df7f82c8cf96
parent0753f56e411a5e216c9899c21e54bd11dde17313 (diff)
clk: imx35: Do not call mxc_timer_init twice when booting with DT
mxc_timer_init must not be called from within mx35_clocks_init_dt. It will eventually be called by imx31_timer_init_dt (drivers/clocksource/timer-imx-gpt.c). This arranges the initialization code similar to clk-imx27.c Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
-rw-r--r--drivers/clk/imx/clk-imx35.c49
1 files changed, 27 insertions, 22 deletions
diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c
index 8623cd4e49fd..76c463dcdb1c 100644
--- a/drivers/clk/imx/clk-imx35.c
+++ b/drivers/clk/imx/clk-imx35.c
@@ -84,7 +84,7 @@ enum mx35_clks {
84 84
85static struct clk *clk[clk_max]; 85static struct clk *clk[clk_max];
86 86
87int __init mx35_clocks_init(void) 87static void __init _mx35_clocks_init(void)
88{ 88{
89 void __iomem *base; 89 void __iomem *base;
90 u32 pdr0, consumer_sel, hsp_sel; 90 u32 pdr0, consumer_sel, hsp_sel;
@@ -220,6 +220,30 @@ int __init mx35_clocks_init(void)
220 220
221 imx_check_clocks(clk, ARRAY_SIZE(clk)); 221 imx_check_clocks(clk, ARRAY_SIZE(clk));
222 222
223 clk_prepare_enable(clk[spba_gate]);
224 clk_prepare_enable(clk[gpio1_gate]);
225 clk_prepare_enable(clk[gpio2_gate]);
226 clk_prepare_enable(clk[gpio3_gate]);
227 clk_prepare_enable(clk[iim_gate]);
228 clk_prepare_enable(clk[emi_gate]);
229 clk_prepare_enable(clk[max_gate]);
230 clk_prepare_enable(clk[iomuxc_gate]);
231
232 /*
233 * SCC is needed to boot via mmc after a watchdog reset. The clock code
234 * before conversion to common clk also enabled UART1 (which isn't
235 * handled here and not needed for mmc) and IIM (which is enabled
236 * unconditionally above).
237 */
238 clk_prepare_enable(clk[scc_gate]);
239
240 imx_print_silicon_rev("i.MX35", mx35_revision());
241}
242
243int __init mx35_clocks_init(void)
244{
245 _mx35_clocks_init();
246
223 clk_register_clkdev(clk[pata_gate], NULL, "pata_imx"); 247 clk_register_clkdev(clk[pata_gate], NULL, "pata_imx");
224 clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0"); 248 clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0");
225 clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1"); 249 clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1");
@@ -279,25 +303,6 @@ int __init mx35_clocks_init(void)
279 clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); 303 clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");
280 clk_register_clkdev(clk[admux_gate], "audmux", NULL); 304 clk_register_clkdev(clk[admux_gate], "audmux", NULL);
281 305
282 clk_prepare_enable(clk[spba_gate]);
283 clk_prepare_enable(clk[gpio1_gate]);
284 clk_prepare_enable(clk[gpio2_gate]);
285 clk_prepare_enable(clk[gpio3_gate]);
286 clk_prepare_enable(clk[iim_gate]);
287 clk_prepare_enable(clk[emi_gate]);
288 clk_prepare_enable(clk[max_gate]);
289 clk_prepare_enable(clk[iomuxc_gate]);
290
291 /*
292 * SCC is needed to boot via mmc after a watchdog reset. The clock code
293 * before conversion to common clk also enabled UART1 (which isn't
294 * handled here and not needed for mmc) and IIM (which is enabled
295 * unconditionally above).
296 */
297 clk_prepare_enable(clk[scc_gate]);
298
299 imx_print_silicon_rev("i.MX35", mx35_revision());
300
301 mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31); 306 mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31);
302 307
303 return 0; 308 return 0;
@@ -305,10 +310,10 @@ int __init mx35_clocks_init(void)
305 310
306static void __init mx35_clocks_init_dt(struct device_node *ccm_node) 311static void __init mx35_clocks_init_dt(struct device_node *ccm_node)
307{ 312{
313 _mx35_clocks_init();
314
308 clk_data.clks = clk; 315 clk_data.clks = clk;
309 clk_data.clk_num = ARRAY_SIZE(clk); 316 clk_data.clk_num = ARRAY_SIZE(clk);
310 of_clk_add_provider(ccm_node, of_clk_src_onecell_get, &clk_data); 317 of_clk_add_provider(ccm_node, of_clk_src_onecell_get, &clk_data);
311
312 mx35_clocks_init();
313} 318}
314CLK_OF_DECLARE(imx35, "fsl,imx35-ccm", mx35_clocks_init_dt); 319CLK_OF_DECLARE(imx35, "fsl,imx35-ccm", mx35_clocks_init_dt);