diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/clk/mxs/clk-imx23.c | 55 | ||||
| -rw-r--r-- | drivers/clk/mxs/clk-imx28.c | 113 |
2 files changed, 20 insertions, 148 deletions
diff --git a/drivers/clk/mxs/clk-imx23.c b/drivers/clk/mxs/clk-imx23.c index 844043ad0fe4..9f6d15546cbe 100644 --- a/drivers/clk/mxs/clk-imx23.c +++ b/drivers/clk/mxs/clk-imx23.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/err.h> | 14 | #include <linux/err.h> |
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/of.h> | ||
| 17 | #include <mach/common.h> | 18 | #include <mach/common.h> |
| 18 | #include <mach/mx23.h> | 19 | #include <mach/mx23.h> |
| 19 | #include "clk.h" | 20 | #include "clk.h" |
| @@ -71,44 +72,6 @@ static void __init clk_misc_init(void) | |||
| 71 | __mxs_setl(30 << BP_FRAC_IOFRAC, FRAC); | 72 | __mxs_setl(30 << BP_FRAC_IOFRAC, FRAC); |
| 72 | } | 73 | } |
| 73 | 74 | ||
| 74 | static struct clk_lookup uart_lookups[] = { | ||
| 75 | { .dev_id = "duart", }, | ||
| 76 | { .dev_id = "mxs-auart.0", }, | ||
| 77 | { .dev_id = "mxs-auart.1", }, | ||
| 78 | { .dev_id = "8006c000.serial", }, | ||
| 79 | { .dev_id = "8006e000.serial", }, | ||
| 80 | { .dev_id = "80070000.serial", }, | ||
| 81 | }; | ||
| 82 | |||
| 83 | static struct clk_lookup hbus_lookups[] = { | ||
| 84 | { .dev_id = "imx23-dma-apbh", }, | ||
| 85 | { .dev_id = "80004000.dma-apbh", }, | ||
| 86 | }; | ||
| 87 | |||
| 88 | static struct clk_lookup xbus_lookups[] = { | ||
| 89 | { .dev_id = "duart", .con_id = "apb_pclk"}, | ||
| 90 | { .dev_id = "80070000.serial", .con_id = "apb_pclk"}, | ||
| 91 | { .dev_id = "imx23-dma-apbx", }, | ||
| 92 | { .dev_id = "80024000.dma-apbx", }, | ||
| 93 | }; | ||
| 94 | |||
| 95 | static struct clk_lookup ssp_lookups[] = { | ||
| 96 | { .dev_id = "imx23-mmc.0", }, | ||
| 97 | { .dev_id = "imx23-mmc.1", }, | ||
| 98 | { .dev_id = "80010000.ssp", }, | ||
| 99 | { .dev_id = "80034000.ssp", }, | ||
| 100 | }; | ||
| 101 | |||
| 102 | static struct clk_lookup lcdif_lookups[] = { | ||
| 103 | { .dev_id = "imx23-fb", }, | ||
| 104 | { .dev_id = "80030000.lcdif", }, | ||
| 105 | }; | ||
| 106 | |||
| 107 | static struct clk_lookup gpmi_lookups[] = { | ||
| 108 | { .dev_id = "imx23-gpmi-nand", }, | ||
| 109 | { .dev_id = "8000c000.gpmi-nand", }, | ||
| 110 | }; | ||
| 111 | |||
| 112 | static const char *sel_pll[] __initconst = { "pll", "ref_xtal", }; | 75 | static const char *sel_pll[] __initconst = { "pll", "ref_xtal", }; |
| 113 | static const char *sel_cpu[] __initconst = { "ref_cpu", "ref_xtal", }; | 76 | static const char *sel_cpu[] __initconst = { "ref_cpu", "ref_xtal", }; |
| 114 | static const char *sel_pix[] __initconst = { "ref_pix", "ref_xtal", }; | 77 | static const char *sel_pix[] __initconst = { "ref_pix", "ref_xtal", }; |
| @@ -127,6 +90,7 @@ enum imx23_clk { | |||
| 127 | }; | 90 | }; |
| 128 | 91 | ||
| 129 | static struct clk *clks[clk_max]; | 92 | static struct clk *clks[clk_max]; |
| 93 | static struct clk_onecell_data clk_data; | ||
| 130 | 94 | ||
| 131 | static enum imx23_clk clks_init_on[] __initdata = { | 95 | static enum imx23_clk clks_init_on[] __initdata = { |
| 132 | cpu, hbus, xbus, emi, uart, | 96 | cpu, hbus, xbus, emi, uart, |
| @@ -134,6 +98,7 @@ static enum imx23_clk clks_init_on[] __initdata = { | |||
| 134 | 98 | ||
| 135 | int __init mx23_clocks_init(void) | 99 | int __init mx23_clocks_init(void) |
| 136 | { | 100 | { |
| 101 | struct device_node *np; | ||
| 137 | int i; | 102 | int i; |
| 138 | 103 | ||
| 139 | clk_misc_init(); | 104 | clk_misc_init(); |
| @@ -188,14 +153,14 @@ int __init mx23_clocks_init(void) | |||
| 188 | return PTR_ERR(clks[i]); | 153 | return PTR_ERR(clks[i]); |
| 189 | } | 154 | } |
| 190 | 155 | ||
| 156 | np = of_find_compatible_node(NULL, NULL, "fsl,imx23-clkctrl"); | ||
| 157 | if (np) { | ||
| 158 | clk_data.clks = clks; | ||
| 159 | clk_data.clk_num = ARRAY_SIZE(clks); | ||
| 160 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); | ||
| 161 | } | ||
| 162 | |||
| 191 | clk_register_clkdev(clks[clk32k], NULL, "timrot"); | 163 | clk_register_clkdev(clks[clk32k], NULL, "timrot"); |
| 192 | clk_register_clkdev(clks[pwm], NULL, "80064000.pwm"); | ||
| 193 | clk_register_clkdevs(clks[hbus], hbus_lookups, ARRAY_SIZE(hbus_lookups)); | ||
| 194 | clk_register_clkdevs(clks[xbus], xbus_lookups, ARRAY_SIZE(xbus_lookups)); | ||
| 195 | clk_register_clkdevs(clks[uart], uart_lookups, ARRAY_SIZE(uart_lookups)); | ||
| 196 | clk_register_clkdevs(clks[ssp], ssp_lookups, ARRAY_SIZE(ssp_lookups)); | ||
| 197 | clk_register_clkdevs(clks[gpmi], gpmi_lookups, ARRAY_SIZE(gpmi_lookups)); | ||
| 198 | clk_register_clkdevs(clks[lcdif], lcdif_lookups, ARRAY_SIZE(lcdif_lookups)); | ||
| 199 | 164 | ||
| 200 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) | 165 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) |
| 201 | clk_prepare_enable(clks[clks_init_on[i]]); | 166 | clk_prepare_enable(clks[clks_init_on[i]]); |
diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index e3aab67b3eb7..613e76f3758e 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/err.h> | 14 | #include <linux/err.h> |
| 15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
| 16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
| 17 | #include <linux/of.h> | ||
| 17 | #include <mach/common.h> | 18 | #include <mach/common.h> |
| 18 | #include <mach/mx28.h> | 19 | #include <mach/mx28.h> |
| 19 | #include "clk.h" | 20 | #include "clk.h" |
| @@ -120,90 +121,6 @@ static void __init clk_misc_init(void) | |||
| 120 | writel_relaxed(val, FRAC0); | 121 | writel_relaxed(val, FRAC0); |
| 121 | } | 122 | } |
| 122 | 123 | ||
| 123 | static struct clk_lookup uart_lookups[] = { | ||
| 124 | { .dev_id = "duart", }, | ||
| 125 | { .dev_id = "mxs-auart.0", }, | ||
| 126 | { .dev_id = "mxs-auart.1", }, | ||
| 127 | { .dev_id = "mxs-auart.2", }, | ||
| 128 | { .dev_id = "mxs-auart.3", }, | ||
| 129 | { .dev_id = "mxs-auart.4", }, | ||
| 130 | { .dev_id = "8006a000.serial", }, | ||
| 131 | { .dev_id = "8006c000.serial", }, | ||
| 132 | { .dev_id = "8006e000.serial", }, | ||
| 133 | { .dev_id = "80070000.serial", }, | ||
| 134 | { .dev_id = "80072000.serial", }, | ||
| 135 | { .dev_id = "80074000.serial", }, | ||
| 136 | }; | ||
| 137 | |||
| 138 | static struct clk_lookup hbus_lookups[] = { | ||
| 139 | { .dev_id = "imx28-dma-apbh", }, | ||
| 140 | { .dev_id = "80004000.dma-apbh", }, | ||
| 141 | }; | ||
| 142 | |||
| 143 | static struct clk_lookup xbus_lookups[] = { | ||
| 144 | { .dev_id = "duart", .con_id = "apb_pclk"}, | ||
| 145 | { .dev_id = "80074000.serial", .con_id = "apb_pclk"}, | ||
| 146 | { .dev_id = "imx28-dma-apbx", }, | ||
| 147 | { .dev_id = "80024000.dma-apbx", }, | ||
| 148 | }; | ||
| 149 | |||
| 150 | static struct clk_lookup ssp0_lookups[] = { | ||
| 151 | { .dev_id = "imx28-mmc.0", }, | ||
| 152 | { .dev_id = "80010000.ssp", }, | ||
| 153 | }; | ||
| 154 | |||
| 155 | static struct clk_lookup ssp1_lookups[] = { | ||
| 156 | { .dev_id = "imx28-mmc.1", }, | ||
| 157 | { .dev_id = "80012000.ssp", }, | ||
| 158 | }; | ||
| 159 | |||
| 160 | static struct clk_lookup ssp2_lookups[] = { | ||
| 161 | { .dev_id = "imx28-mmc.2", }, | ||
| 162 | { .dev_id = "80014000.ssp", }, | ||
| 163 | }; | ||
| 164 | |||
| 165 | static struct clk_lookup ssp3_lookups[] = { | ||
| 166 | { .dev_id = "imx28-mmc.3", }, | ||
| 167 | { .dev_id = "80016000.ssp", }, | ||
| 168 | }; | ||
| 169 | |||
| 170 | static struct clk_lookup lcdif_lookups[] = { | ||
| 171 | { .dev_id = "imx28-fb", }, | ||
| 172 | { .dev_id = "80030000.lcdif", }, | ||
| 173 | }; | ||
| 174 | |||
| 175 | static struct clk_lookup gpmi_lookups[] = { | ||
| 176 | { .dev_id = "imx28-gpmi-nand", }, | ||
| 177 | { .dev_id = "8000c000.gpmi-nand", }, | ||
| 178 | }; | ||
| 179 | |||
| 180 | static struct clk_lookup fec_lookups[] = { | ||
| 181 | { .dev_id = "imx28-fec.0", }, | ||
| 182 | { .dev_id = "imx28-fec.1", }, | ||
| 183 | { .dev_id = "800f0000.ethernet", }, | ||
| 184 | { .dev_id = "800f4000.ethernet", }, | ||
| 185 | }; | ||
| 186 | |||
| 187 | static struct clk_lookup can0_lookups[] = { | ||
| 188 | { .dev_id = "flexcan.0", }, | ||
| 189 | { .dev_id = "80032000.can", }, | ||
| 190 | }; | ||
| 191 | |||
| 192 | static struct clk_lookup can1_lookups[] = { | ||
| 193 | { .dev_id = "flexcan.1", }, | ||
| 194 | { .dev_id = "80034000.can", }, | ||
| 195 | }; | ||
| 196 | |||
| 197 | static struct clk_lookup saif0_lookups[] = { | ||
| 198 | { .dev_id = "mxs-saif.0", }, | ||
| 199 | { .dev_id = "80042000.saif", }, | ||
| 200 | }; | ||
| 201 | |||
| 202 | static struct clk_lookup saif1_lookups[] = { | ||
| 203 | { .dev_id = "mxs-saif.1", }, | ||
| 204 | { .dev_id = "80046000.saif", }, | ||
| 205 | }; | ||
| 206 | |||
| 207 | static const char *sel_cpu[] __initconst = { "ref_cpu", "ref_xtal", }; | 124 | static const char *sel_cpu[] __initconst = { "ref_cpu", "ref_xtal", }; |
| 208 | static const char *sel_io0[] __initconst = { "ref_io0", "ref_xtal", }; | 125 | static const char *sel_io0[] __initconst = { "ref_io0", "ref_xtal", }; |
| 209 | static const char *sel_io1[] __initconst = { "ref_io1", "ref_xtal", }; | 126 | static const char *sel_io1[] __initconst = { "ref_io1", "ref_xtal", }; |
| @@ -228,6 +145,7 @@ enum imx28_clk { | |||
| 228 | }; | 145 | }; |
| 229 | 146 | ||
| 230 | static struct clk *clks[clk_max]; | 147 | static struct clk *clks[clk_max]; |
| 148 | static struct clk_onecell_data clk_data; | ||
| 231 | 149 | ||
| 232 | static enum imx28_clk clks_init_on[] __initdata = { | 150 | static enum imx28_clk clks_init_on[] __initdata = { |
| 233 | cpu, hbus, xbus, emi, uart, | 151 | cpu, hbus, xbus, emi, uart, |
| @@ -235,6 +153,7 @@ static enum imx28_clk clks_init_on[] __initdata = { | |||
| 235 | 153 | ||
| 236 | int __init mx28_clocks_init(void) | 154 | int __init mx28_clocks_init(void) |
| 237 | { | 155 | { |
| 156 | struct device_node *np; | ||
| 238 | int i; | 157 | int i; |
| 239 | 158 | ||
| 240 | clk_misc_init(); | 159 | clk_misc_init(); |
| @@ -312,27 +231,15 @@ int __init mx28_clocks_init(void) | |||
| 312 | return PTR_ERR(clks[i]); | 231 | return PTR_ERR(clks[i]); |
| 313 | } | 232 | } |
| 314 | 233 | ||
| 234 | np = of_find_compatible_node(NULL, NULL, "fsl,imx28-clkctrl"); | ||
| 235 | if (np) { | ||
| 236 | clk_data.clks = clks; | ||
| 237 | clk_data.clk_num = ARRAY_SIZE(clks); | ||
| 238 | of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); | ||
| 239 | } | ||
| 240 | |||
| 315 | clk_register_clkdev(clks[clk32k], NULL, "timrot"); | 241 | clk_register_clkdev(clks[clk32k], NULL, "timrot"); |
| 316 | clk_register_clkdev(clks[enet_out], NULL, "enet_out"); | 242 | clk_register_clkdev(clks[enet_out], NULL, "enet_out"); |
| 317 | clk_register_clkdev(clks[pwm], NULL, "80064000.pwm"); | ||
| 318 | clk_register_clkdevs(clks[hbus], hbus_lookups, ARRAY_SIZE(hbus_lookups)); | ||
| 319 | clk_register_clkdevs(clks[xbus], xbus_lookups, ARRAY_SIZE(xbus_lookups)); | ||
| 320 | clk_register_clkdevs(clks[uart], uart_lookups, ARRAY_SIZE(uart_lookups)); | ||
| 321 | clk_register_clkdevs(clks[ssp0], ssp0_lookups, ARRAY_SIZE(ssp0_lookups)); | ||
| 322 | clk_register_clkdevs(clks[ssp1], ssp1_lookups, ARRAY_SIZE(ssp1_lookups)); | ||
| 323 | clk_register_clkdevs(clks[ssp2], ssp2_lookups, ARRAY_SIZE(ssp2_lookups)); | ||
| 324 | clk_register_clkdevs(clks[ssp3], ssp3_lookups, ARRAY_SIZE(ssp3_lookups)); | ||
| 325 | clk_register_clkdevs(clks[gpmi], gpmi_lookups, ARRAY_SIZE(gpmi_lookups)); | ||
| 326 | clk_register_clkdevs(clks[saif0], saif0_lookups, ARRAY_SIZE(saif0_lookups)); | ||
| 327 | clk_register_clkdevs(clks[saif1], saif1_lookups, ARRAY_SIZE(saif1_lookups)); | ||
| 328 | clk_register_clkdevs(clks[lcdif], lcdif_lookups, ARRAY_SIZE(lcdif_lookups)); | ||
| 329 | clk_register_clkdevs(clks[fec], fec_lookups, ARRAY_SIZE(fec_lookups)); | ||
| 330 | clk_register_clkdevs(clks[can0], can0_lookups, ARRAY_SIZE(can0_lookups)); | ||
| 331 | clk_register_clkdevs(clks[can1], can1_lookups, ARRAY_SIZE(can1_lookups)); | ||
| 332 | clk_register_clkdev(clks[usb0_pwr], NULL, "8007c000.usbphy"); | ||
| 333 | clk_register_clkdev(clks[usb1_pwr], NULL, "8007e000.usbphy"); | ||
| 334 | clk_register_clkdev(clks[usb0], NULL, "80080000.usb"); | ||
| 335 | clk_register_clkdev(clks[usb1], NULL, "80090000.usb"); | ||
| 336 | 243 | ||
| 337 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) | 244 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) |
| 338 | clk_prepare_enable(clks[clks_init_on[i]]); | 245 | clk_prepare_enable(clks[clks_init_on[i]]); |
