diff options
Diffstat (limited to 'arch/arm/mach-imx/clk-imx27.c')
| -rw-r--r-- | arch/arm/mach-imx/clk-imx27.c | 29 | 
1 files changed, 20 insertions, 9 deletions
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 1ffe3b534e5..c3cfa4116dc 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -62,7 +62,7 @@ static const char *clko_sel_clks[] = {  	"32k", "usb_div", "dptc",  }; -static const char *ssi_sel_clks[] = { "spll", "mpll", }; +static const char *ssi_sel_clks[] = { "spll_gate", "mpll", };  enum mx27_clks {  	dummy, ckih, ckil, mpll, spll, mpll_main2, ahb, ipg, nfc_div, per1_div, @@ -82,14 +82,16 @@ enum mx27_clks {  	csi_ahb_gate, brom_ahb_gate, ata_ahb_gate, wdog_ipg_gate, usb_ipg_gate,  	uart6_ipg_gate, uart5_ipg_gate, uart4_ipg_gate, uart3_ipg_gate,  	uart2_ipg_gate, uart1_ipg_gate, ckih_div1p5, fpm, mpll_osc_sel, -	mpll_sel, clk_max +	mpll_sel, spll_gate, clk_max  };  static struct clk *clk[clk_max]; +static struct clk_onecell_data clk_data;  int __init mx27_clocks_init(unsigned long fref)  {  	int i; +	struct device_node *np;  	clk[dummy] = imx_clk_fixed("dummy", 0);  	clk[ckih] = imx_clk_fixed("ckih", fref); @@ -104,6 +106,7 @@ int __init mx27_clocks_init(unsigned long fref)  			ARRAY_SIZE(mpll_sel_clks));  	clk[mpll] = imx_clk_pllv1("mpll", "mpll_sel", CCM_MPCTL0);  	clk[spll] = imx_clk_pllv1("spll", "ckih", CCM_SPCTL0); +	clk[spll_gate] = imx_clk_gate("spll_gate", "spll", CCM_CSCR, 1);  	clk[mpll_main2] = imx_clk_fixed_factor("mpll_main2", "mpll", 2, 3);  	if (mx27_revision() >= IMX_CHIP_REVISION_2_0) { @@ -121,7 +124,7 @@ int __init mx27_clocks_init(unsigned long fref)  	clk[per4_div] = imx_clk_divider("per4_div", "mpll_main2", CCM_PCDR1, 24, 6);  	clk[vpu_sel] = imx_clk_mux("vpu_sel", CCM_CSCR, 21, 1, vpu_sel_clks, ARRAY_SIZE(vpu_sel_clks));  	clk[vpu_div] = imx_clk_divider("vpu_div", "vpu_sel", CCM_PCDR0, 10, 6); -	clk[usb_div] = imx_clk_divider("usb_div", "spll", CCM_CSCR, 28, 3); +	clk[usb_div] = imx_clk_divider("usb_div", "spll_gate", CCM_CSCR, 28, 3);  	clk[cpu_sel] = imx_clk_mux("cpu_sel", CCM_CSCR, 15, 1, cpu_sel_clks, ARRAY_SIZE(cpu_sel_clks));  	clk[clko_sel] = imx_clk_mux("clko_sel", CCM_CCSR, 0, 5, clko_sel_clks, ARRAY_SIZE(clko_sel_clks));  	if (mx27_revision() >= IMX_CHIP_REVISION_2_0) @@ -197,6 +200,13 @@ int __init mx27_clocks_init(unsigned long fref)  			pr_err("i.MX27 clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); +	np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm"); +	if (np) { +		clk_data.clks = clk; +		clk_data.clk_num = ARRAY_SIZE(clk); +		of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); +	} +  	clk_register_clkdev(clk[uart1_ipg_gate], "ipg", "imx21-uart.0");  	clk_register_clkdev(clk[per1_gate], "per", "imx21-uart.0");  	clk_register_clkdev(clk[uart2_ipg_gate], "ipg", "imx21-uart.1"); @@ -228,9 +238,12 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1");  	clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2");  	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); -	clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); -	clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); -	clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.0"); +	clk_register_clkdev(clk[cspi1_ipg_gate], "ipg", "imx27-cspi.0"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.1"); +	clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx27-cspi.1"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.2"); +	clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx27-cspi.2");  	clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0");  	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0");  	clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); @@ -272,10 +285,8 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL);  	clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc");  	clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); -	clk_register_clkdev(clk[cpu_div], "cpu", NULL); +	clk_register_clkdev(clk[cpu_div], NULL, "cpufreq-cpu0.0");  	clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); -	clk_register_clkdev(clk[ssi1_baud_gate], "bitrate" , "imx-ssi.0"); -	clk_register_clkdev(clk[ssi2_baud_gate], "bitrate" , "imx-ssi.1");  	mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1);  |