diff options
Diffstat (limited to 'arch/arm/mach-imx/clk-imx27.c')
-rw-r--r-- | arch/arm/mach-imx/clk-imx27.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 366e5d59d886..4c1d1e4efc74 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c | |||
@@ -6,9 +6,9 @@ | |||
6 | #include <linux/clk-provider.h> | 6 | #include <linux/clk-provider.h> |
7 | #include <linux/of.h> | 7 | #include <linux/of.h> |
8 | 8 | ||
9 | #include <mach/common.h> | ||
10 | #include <mach/hardware.h> | ||
11 | #include "clk.h" | 9 | #include "clk.h" |
10 | #include "common.h" | ||
11 | #include "hardware.h" | ||
12 | 12 | ||
13 | #define IO_ADDR_CCM(off) (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off))) | 13 | #define IO_ADDR_CCM(off) (MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off))) |
14 | 14 | ||
@@ -51,8 +51,10 @@ | |||
51 | 51 | ||
52 | static const char *vpu_sel_clks[] = { "spll", "mpll_main2", }; | 52 | static const char *vpu_sel_clks[] = { "spll", "mpll_main2", }; |
53 | static const char *cpu_sel_clks[] = { "mpll_main2", "mpll", }; | 53 | static const char *cpu_sel_clks[] = { "mpll_main2", "mpll", }; |
54 | static const char *mpll_sel_clks[] = { "fpm", "mpll_osc_sel", }; | ||
55 | static const char *mpll_osc_sel_clks[] = { "ckih", "ckih_div1p5", }; | ||
54 | static const char *clko_sel_clks[] = { | 56 | static const char *clko_sel_clks[] = { |
55 | "ckil", "prem", "ckih", "ckih", | 57 | "ckil", "fpm", "ckih", "ckih", |
56 | "ckih", "mpll", "spll", "cpu_div", | 58 | "ckih", "mpll", "spll", "cpu_div", |
57 | "ahb", "ipg", "per1_div", "per2_div", | 59 | "ahb", "ipg", "per1_div", "per2_div", |
58 | "per3_div", "per4_div", "ssi1_div", "ssi2_div", | 60 | "per3_div", "per4_div", "ssi1_div", "ssi2_div", |
@@ -79,7 +81,8 @@ enum mx27_clks { | |||
79 | vpu_ahb_gate, fec_ahb_gate, emma_ahb_gate, emi_ahb_gate, dma_ahb_gate, | 81 | vpu_ahb_gate, fec_ahb_gate, emma_ahb_gate, emi_ahb_gate, dma_ahb_gate, |
80 | csi_ahb_gate, brom_ahb_gate, ata_ahb_gate, wdog_ipg_gate, usb_ipg_gate, | 82 | csi_ahb_gate, brom_ahb_gate, ata_ahb_gate, wdog_ipg_gate, usb_ipg_gate, |
81 | uart6_ipg_gate, uart5_ipg_gate, uart4_ipg_gate, uart3_ipg_gate, | 83 | uart6_ipg_gate, uart5_ipg_gate, uart4_ipg_gate, uart3_ipg_gate, |
82 | uart2_ipg_gate, uart1_ipg_gate, clk_max | 84 | uart2_ipg_gate, uart1_ipg_gate, ckih_div1p5, fpm, mpll_osc_sel, |
85 | mpll_sel, clk_max | ||
83 | }; | 86 | }; |
84 | 87 | ||
85 | static struct clk *clk[clk_max]; | 88 | static struct clk *clk[clk_max]; |
@@ -91,7 +94,15 @@ int __init mx27_clocks_init(unsigned long fref) | |||
91 | clk[dummy] = imx_clk_fixed("dummy", 0); | 94 | clk[dummy] = imx_clk_fixed("dummy", 0); |
92 | clk[ckih] = imx_clk_fixed("ckih", fref); | 95 | clk[ckih] = imx_clk_fixed("ckih", fref); |
93 | clk[ckil] = imx_clk_fixed("ckil", 32768); | 96 | clk[ckil] = imx_clk_fixed("ckil", 32768); |
94 | clk[mpll] = imx_clk_pllv1("mpll", "ckih", CCM_MPCTL0); | 97 | clk[fpm] = imx_clk_fixed_factor("fpm", "ckil", 1024, 1); |
98 | clk[ckih_div1p5] = imx_clk_fixed_factor("ckih_div1p5", "ckih", 2, 3); | ||
99 | |||
100 | clk[mpll_osc_sel] = imx_clk_mux("mpll_osc_sel", CCM_CSCR, 4, 1, | ||
101 | mpll_osc_sel_clks, | ||
102 | ARRAY_SIZE(mpll_osc_sel_clks)); | ||
103 | clk[mpll_sel] = imx_clk_mux("mpll_sel", CCM_CSCR, 16, 1, mpll_sel_clks, | ||
104 | ARRAY_SIZE(mpll_sel_clks)); | ||
105 | clk[mpll] = imx_clk_pllv1("mpll", "mpll_sel", CCM_MPCTL0); | ||
95 | clk[spll] = imx_clk_pllv1("spll", "ckih", CCM_SPCTL0); | 106 | clk[spll] = imx_clk_pllv1("spll", "ckih", CCM_SPCTL0); |
96 | clk[mpll_main2] = imx_clk_fixed_factor("mpll_main2", "mpll", 2, 3); | 107 | clk[mpll_main2] = imx_clk_fixed_factor("mpll_main2", "mpll", 2, 3); |
97 | 108 | ||
@@ -211,19 +222,20 @@ int __init mx27_clocks_init(unsigned long fref) | |||
211 | clk_register_clkdev(clk[gpt6_ipg_gate], "ipg", "imx-gpt.5"); | 222 | clk_register_clkdev(clk[gpt6_ipg_gate], "ipg", "imx-gpt.5"); |
212 | clk_register_clkdev(clk[per1_gate], "per", "imx-gpt.5"); | 223 | clk_register_clkdev(clk[per1_gate], "per", "imx-gpt.5"); |
213 | clk_register_clkdev(clk[pwm_ipg_gate], NULL, "mxc_pwm.0"); | 224 | clk_register_clkdev(clk[pwm_ipg_gate], NULL, "mxc_pwm.0"); |
214 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.0"); | 225 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.0"); |
215 | clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "mxc-mmc.0"); | 226 | clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "imx21-mmc.0"); |
216 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.1"); | 227 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.1"); |
217 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.1"); | 228 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1"); |
218 | clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.2"); | 229 | clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2"); |
219 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.2"); | 230 | clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); |
220 | clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); | 231 | clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); |
221 | clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); | 232 | clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); |
222 | clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); | 233 | clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); |
223 | clk_register_clkdev(clk[per3_gate], "per", "imx-fb.0"); | 234 | clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0"); |
224 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); | 235 | clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); |
225 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx-fb.0"); | 236 | clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); |
226 | clk_register_clkdev(clk[csi_ahb_gate], "ahb", "mx2-camera.0"); | 237 | clk_register_clkdev(clk[csi_ahb_gate], "ahb", "imx27-camera.0"); |
238 | clk_register_clkdev(clk[per4_gate], "per", "imx27-camera.0"); | ||
227 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); | 239 | clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); |
228 | clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); | 240 | clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc"); |
229 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); | 241 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); |
@@ -238,27 +250,27 @@ int __init mx27_clocks_init(unsigned long fref) | |||
238 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2"); | 250 | clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2"); |
239 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); | 251 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); |
240 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); | 252 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); |
241 | clk_register_clkdev(clk[nfc_baud_gate], NULL, "mxc_nand.0"); | 253 | clk_register_clkdev(clk[nfc_baud_gate], NULL, "imx27-nand.0"); |
242 | clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0"); | 254 | clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0"); |
243 | clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); | 255 | clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); |
244 | clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx-dma"); | 256 | clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx27-dma"); |
245 | clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx-dma"); | 257 | clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx27-dma"); |
246 | clk_register_clkdev(clk[fec_ipg_gate], "ipg", "imx27-fec.0"); | 258 | clk_register_clkdev(clk[fec_ipg_gate], "ipg", "imx27-fec.0"); |
247 | clk_register_clkdev(clk[fec_ahb_gate], "ahb", "imx27-fec.0"); | 259 | clk_register_clkdev(clk[fec_ahb_gate], "ahb", "imx27-fec.0"); |
248 | clk_register_clkdev(clk[wdog_ipg_gate], NULL, "imx2-wdt.0"); | 260 | clk_register_clkdev(clk[wdog_ipg_gate], NULL, "imx2-wdt.0"); |
249 | clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx-i2c.0"); | 261 | clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx21-i2c.0"); |
250 | clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx-i2c.1"); | 262 | clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx21-i2c.1"); |
251 | clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0"); | 263 | clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0"); |
252 | clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); | 264 | clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); |
253 | clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "mx2-camera.0"); | 265 | clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "imx27-camera.0"); |
254 | clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "mx2-camera.0"); | 266 | clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "imx27-camera.0"); |
255 | clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0"); | 267 | clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0"); |
256 | clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0"); | 268 | clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0"); |
257 | clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL); | 269 | clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL); |
258 | clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL); | 270 | clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL); |
259 | clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL); | 271 | clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL); |
260 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); | 272 | clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); |
261 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "mxc_rtc"); | 273 | clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc"); |
262 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); | 274 | clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); |
263 | clk_register_clkdev(clk[cpu_div], "cpu", NULL); | 275 | clk_register_clkdev(clk[cpu_div], "cpu", NULL); |
264 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); | 276 | clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); |