diff options
Diffstat (limited to 'arch/arm/mach-pxa/pxa25x.c')
-rw-r--r-- | arch/arm/mach-pxa/pxa25x.c | 89 |
1 files changed, 53 insertions, 36 deletions
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 25d17a1dab78..6c57522e2469 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
@@ -36,12 +36,6 @@ | |||
36 | #include "devices.h" | 36 | #include "devices.h" |
37 | #include "clock.h" | 37 | #include "clock.h" |
38 | 38 | ||
39 | int cpu_is_pxa26x(void) | ||
40 | { | ||
41 | return cpu_is_pxa250() && ((BOOT_DEF & 0x8) == 0); | ||
42 | } | ||
43 | EXPORT_SYMBOL_GPL(cpu_is_pxa26x); | ||
44 | |||
45 | /* | 39 | /* |
46 | * Various clock factors driven by the CCCR register. | 40 | * Various clock factors driven by the CCCR register. |
47 | */ | 41 | */ |
@@ -167,36 +161,51 @@ static const struct clkops clk_pxa25x_gpio11_ops = { | |||
167 | * 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz | 161 | * 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz |
168 | * 147.456MHz -> UART 14.7456MHz, AC97 12.288MHz, I2S 5.672MHz (allegedly) | 162 | * 147.456MHz -> UART 14.7456MHz, AC97 12.288MHz, I2S 5.672MHz (allegedly) |
169 | */ | 163 | */ |
170 | static struct clk pxa25x_hwuart_clk = | 164 | static DEFINE_CKEN(pxa25x_hwuart, HWUART, 14745600, 1); |
171 | INIT_CKEN("UARTCLK", HWUART, 14745600, 1, &pxa_device_hwuart.dev) | 165 | |
172 | ; | 166 | static struct clk_lookup pxa25x_hwuart_clkreg = |
167 | INIT_CLKREG(&clk_pxa25x_hwuart, "pxa2xx-uart.3", NULL); | ||
173 | 168 | ||
174 | /* | 169 | /* |
175 | * PXA 2xx clock declarations. | 170 | * PXA 2xx clock declarations. |
176 | */ | 171 | */ |
177 | static struct clk pxa25x_clks[] = { | 172 | static DEFINE_CK(pxa25x_lcd, LCD, &clk_pxa25x_lcd_ops); |
178 | INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev), | 173 | static DEFINE_CKEN(pxa25x_ffuart, FFUART, 14745600, 1); |
179 | INIT_CKEN("UARTCLK", FFUART, 14745600, 1, &pxa_device_ffuart.dev), | 174 | static DEFINE_CKEN(pxa25x_btuart, BTUART, 14745600, 1); |
180 | INIT_CKEN("UARTCLK", BTUART, 14745600, 1, &pxa_device_btuart.dev), | 175 | static DEFINE_CKEN(pxa25x_stuart, STUART, 14745600, 1); |
181 | INIT_CKEN("UARTCLK", STUART, 14745600, 1, NULL), | 176 | static DEFINE_CKEN(pxa25x_usb, USB, 47923000, 5); |
182 | INIT_CKEN("UDCCLK", USB, 47923000, 5, &pxa25x_device_udc.dev), | 177 | static DEFINE_CLK(pxa25x_gpio11, &clk_pxa25x_gpio11_ops, 3686400, 0); |
183 | INIT_CLK("GPIO11_CLK", &clk_pxa25x_gpio11_ops, 3686400, 0, NULL), | 178 | static DEFINE_CLK(pxa25x_gpio12, &clk_pxa25x_gpio12_ops, 32768, 0); |
184 | INIT_CLK("GPIO12_CLK", &clk_pxa25x_gpio12_ops, 32768, 0, NULL), | 179 | static DEFINE_CKEN(pxa25x_mmc, MMC, 19169000, 0); |
185 | INIT_CKEN("MMCCLK", MMC, 19169000, 0, &pxa_device_mci.dev), | 180 | static DEFINE_CKEN(pxa25x_i2c, I2C, 31949000, 0); |
186 | INIT_CKEN("I2CCLK", I2C, 31949000, 0, &pxa_device_i2c.dev), | 181 | static DEFINE_CKEN(pxa25x_ssp, SSP, 3686400, 0); |
187 | 182 | static DEFINE_CKEN(pxa25x_nssp, NSSP, 3686400, 0); | |
188 | INIT_CKEN("SSPCLK", SSP, 3686400, 0, &pxa25x_device_ssp.dev), | 183 | static DEFINE_CKEN(pxa25x_assp, ASSP, 3686400, 0); |
189 | INIT_CKEN("SSPCLK", NSSP, 3686400, 0, &pxa25x_device_nssp.dev), | 184 | static DEFINE_CKEN(pxa25x_pwm0, PWM0, 3686400, 0); |
190 | INIT_CKEN("SSPCLK", ASSP, 3686400, 0, &pxa25x_device_assp.dev), | 185 | static DEFINE_CKEN(pxa25x_pwm1, PWM1, 3686400, 0); |
191 | INIT_CKEN("PWMCLK", PWM0, 3686400, 0, &pxa25x_device_pwm0.dev), | 186 | static DEFINE_CKEN(pxa25x_ac97, AC97, 24576000, 0); |
192 | INIT_CKEN("PWMCLK", PWM1, 3686400, 0, &pxa25x_device_pwm1.dev), | 187 | static DEFINE_CKEN(pxa25x_i2s, I2S, 14745600, 0); |
193 | 188 | static DEFINE_CKEN(pxa25x_ficp, FICP, 47923000, 0); | |
194 | INIT_CKEN("AC97CLK", AC97, 24576000, 0, NULL), | 189 | |
195 | 190 | static struct clk_lookup pxa25x_clkregs[] = { | |
196 | /* | 191 | INIT_CLKREG(&clk_pxa25x_lcd, "pxa2xx-fb", NULL), |
197 | INIT_CKEN("I2SCLK", I2S, 14745600, 0, NULL), | 192 | INIT_CLKREG(&clk_pxa25x_ffuart, "pxa2xx-uart.0", NULL), |
198 | */ | 193 | INIT_CLKREG(&clk_pxa25x_btuart, "pxa2xx-uart.1", NULL), |
199 | INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL), | 194 | INIT_CLKREG(&clk_pxa25x_stuart, "pxa2xx-uart.2", NULL), |
195 | INIT_CLKREG(&clk_pxa25x_usb, "pxa25x-udc", NULL), | ||
196 | INIT_CLKREG(&clk_pxa25x_mmc, "pxa2xx-mci.0", NULL), | ||
197 | INIT_CLKREG(&clk_pxa25x_i2c, "pxa2xx-i2c.0", NULL), | ||
198 | INIT_CLKREG(&clk_pxa25x_ssp, "pxa25x-ssp.0", NULL), | ||
199 | INIT_CLKREG(&clk_pxa25x_nssp, "pxa25x-nssp.1", NULL), | ||
200 | INIT_CLKREG(&clk_pxa25x_assp, "pxa25x-nssp.2", NULL), | ||
201 | INIT_CLKREG(&clk_pxa25x_pwm0, "pxa25x-pwm.0", NULL), | ||
202 | INIT_CLKREG(&clk_pxa25x_pwm1, "pxa25x-pwm.1", NULL), | ||
203 | INIT_CLKREG(&clk_pxa25x_i2s, "pxa2xx-i2s", NULL), | ||
204 | INIT_CLKREG(&clk_pxa25x_stuart, "pxa2xx-ir", "UARTCLK"), | ||
205 | INIT_CLKREG(&clk_pxa25x_ficp, "pxa2xx-ir", "FICPCLK"), | ||
206 | INIT_CLKREG(&clk_pxa25x_ac97, NULL, "AC97CLK"), | ||
207 | INIT_CLKREG(&clk_pxa25x_gpio11, NULL, "GPIO11_CLK"), | ||
208 | INIT_CLKREG(&clk_pxa25x_gpio12, NULL, "GPIO12_CLK"), | ||
200 | }; | 209 | }; |
201 | 210 | ||
202 | #ifdef CONFIG_PM | 211 | #ifdef CONFIG_PM |
@@ -304,13 +313,21 @@ void __init pxa25x_init_irq(void) | |||
304 | pxa_init_gpio(85, pxa25x_set_wake); | 313 | pxa_init_gpio(85, pxa25x_set_wake); |
305 | } | 314 | } |
306 | 315 | ||
316 | #ifdef CONFIG_CPU_PXA26x | ||
317 | void __init pxa26x_init_irq(void) | ||
318 | { | ||
319 | pxa_init_irq(32, pxa25x_set_wake); | ||
320 | pxa_init_gpio(90, pxa25x_set_wake); | ||
321 | } | ||
322 | #endif | ||
323 | |||
307 | static struct platform_device *pxa25x_devices[] __initdata = { | 324 | static struct platform_device *pxa25x_devices[] __initdata = { |
308 | &pxa25x_device_udc, | 325 | &pxa25x_device_udc, |
309 | &pxa_device_ffuart, | 326 | &pxa_device_ffuart, |
310 | &pxa_device_btuart, | 327 | &pxa_device_btuart, |
311 | &pxa_device_stuart, | 328 | &pxa_device_stuart, |
312 | &pxa_device_i2s, | 329 | &pxa_device_i2s, |
313 | &pxa_device_rtc, | 330 | &sa1100_device_rtc, |
314 | &pxa25x_device_ssp, | 331 | &pxa25x_device_ssp, |
315 | &pxa25x_device_nssp, | 332 | &pxa25x_device_nssp, |
316 | &pxa25x_device_assp, | 333 | &pxa25x_device_assp, |
@@ -336,7 +353,7 @@ static int __init pxa25x_init(void) | |||
336 | 353 | ||
337 | reset_status = RCSR; | 354 | reset_status = RCSR; |
338 | 355 | ||
339 | clks_register(pxa25x_clks, ARRAY_SIZE(pxa25x_clks)); | 356 | clks_register(pxa25x_clkregs, ARRAY_SIZE(pxa25x_clkregs)); |
340 | 357 | ||
341 | if ((ret = pxa_init_dma(16))) | 358 | if ((ret = pxa_init_dma(16))) |
342 | return ret; | 359 | return ret; |
@@ -356,8 +373,8 @@ static int __init pxa25x_init(void) | |||
356 | } | 373 | } |
357 | 374 | ||
358 | /* Only add HWUART for PXA255/26x; PXA210/250 do not have it. */ | 375 | /* Only add HWUART for PXA255/26x; PXA210/250 do not have it. */ |
359 | if (cpu_is_pxa255() || cpu_is_pxa26x()) { | 376 | if (cpu_is_pxa255()) { |
360 | clks_register(&pxa25x_hwuart_clk, 1); | 377 | clks_register(&pxa25x_hwuart_clkreg, 1); |
361 | ret = platform_device_register(&pxa_device_hwuart); | 378 | ret = platform_device_register(&pxa_device_hwuart); |
362 | } | 379 | } |
363 | 380 | ||