diff options
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r-- | arch/arm/mach-pxa/corgi.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-pxa/corgi_ssp.c | 24 | ||||
-rw-r--r-- | arch/arm/mach-pxa/generic.c | 83 | ||||
-rw-r--r-- | arch/arm/mach-pxa/idp.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-pxa/lubbock.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 32 | ||||
-rw-r--r-- | arch/arm/mach-pxa/poodle.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa25x.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa27x.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/sleep.S | 7 | ||||
-rw-r--r-- | arch/arm/mach-pxa/spitz.c | 19 | ||||
-rw-r--r-- | arch/arm/mach-pxa/standby.S | 2 |
12 files changed, 220 insertions, 40 deletions
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index 60c8b9d8bb9c..656f73bbcb5a 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c | |||
@@ -33,6 +33,7 @@ | |||
33 | 33 | ||
34 | #include <asm/arch/pxa-regs.h> | 34 | #include <asm/arch/pxa-regs.h> |
35 | #include <asm/arch/irq.h> | 35 | #include <asm/arch/irq.h> |
36 | #include <asm/arch/irda.h> | ||
36 | #include <asm/arch/mmc.h> | 37 | #include <asm/arch/mmc.h> |
37 | #include <asm/arch/udc.h> | 38 | #include <asm/arch/udc.h> |
38 | #include <asm/arch/corgi.h> | 39 | #include <asm/arch/corgi.h> |
@@ -224,6 +225,22 @@ static struct pxamci_platform_data corgi_mci_platform_data = { | |||
224 | }; | 225 | }; |
225 | 226 | ||
226 | 227 | ||
228 | /* | ||
229 | * Irda | ||
230 | */ | ||
231 | static void corgi_irda_transceiver_mode(struct device *dev, int mode) | ||
232 | { | ||
233 | if (mode & IR_OFF) | ||
234 | GPSR(CORGI_GPIO_IR_ON) = GPIO_bit(CORGI_GPIO_IR_ON); | ||
235 | else | ||
236 | GPCR(CORGI_GPIO_IR_ON) = GPIO_bit(CORGI_GPIO_IR_ON); | ||
237 | } | ||
238 | |||
239 | static struct pxaficp_platform_data corgi_ficp_platform_data = { | ||
240 | .transceiver_cap = IR_SIRMODE | IR_OFF, | ||
241 | .transceiver_mode = corgi_irda_transceiver_mode, | ||
242 | }; | ||
243 | |||
227 | 244 | ||
228 | /* | 245 | /* |
229 | * USB Device Controller | 246 | * USB Device Controller |
@@ -269,10 +286,13 @@ static void __init corgi_init(void) | |||
269 | 286 | ||
270 | corgi_ssp_set_machinfo(&corgi_ssp_machinfo); | 287 | corgi_ssp_set_machinfo(&corgi_ssp_machinfo); |
271 | 288 | ||
289 | pxa_gpio_mode(CORGI_GPIO_IR_ON | GPIO_OUT); | ||
272 | pxa_gpio_mode(CORGI_GPIO_USB_PULLUP | GPIO_OUT); | 290 | pxa_gpio_mode(CORGI_GPIO_USB_PULLUP | GPIO_OUT); |
273 | pxa_gpio_mode(CORGI_GPIO_HSYNC | GPIO_IN); | 291 | pxa_gpio_mode(CORGI_GPIO_HSYNC | GPIO_IN); |
292 | |||
274 | pxa_set_udc_info(&udc_info); | 293 | pxa_set_udc_info(&udc_info); |
275 | pxa_set_mci_info(&corgi_mci_platform_data); | 294 | pxa_set_mci_info(&corgi_mci_platform_data); |
295 | pxa_set_ficp_info(&corgi_ficp_platform_data); | ||
276 | 296 | ||
277 | scoop_num = 1; | 297 | scoop_num = 1; |
278 | scoop_devs = &corgi_pcmcia_scoop[0]; | 298 | scoop_devs = &corgi_pcmcia_scoop[0]; |
diff --git a/arch/arm/mach-pxa/corgi_ssp.c b/arch/arm/mach-pxa/corgi_ssp.c index 0ef428287055..136c269db0b7 100644 --- a/arch/arm/mach-pxa/corgi_ssp.c +++ b/arch/arm/mach-pxa/corgi_ssp.c | |||
@@ -222,24 +222,22 @@ static int corgi_ssp_remove(struct device *dev) | |||
222 | return 0; | 222 | return 0; |
223 | } | 223 | } |
224 | 224 | ||
225 | static int corgi_ssp_suspend(struct device *dev, pm_message_t state, u32 level) | 225 | static int corgi_ssp_suspend(struct device *dev, pm_message_t state) |
226 | { | 226 | { |
227 | if (level == SUSPEND_POWER_DOWN) { | 227 | ssp_flush(&corgi_ssp_dev); |
228 | ssp_flush(&corgi_ssp_dev); | 228 | ssp_save_state(&corgi_ssp_dev,&corgi_ssp_state); |
229 | ssp_save_state(&corgi_ssp_dev,&corgi_ssp_state); | 229 | |
230 | } | ||
231 | return 0; | 230 | return 0; |
232 | } | 231 | } |
233 | 232 | ||
234 | static int corgi_ssp_resume(struct device *dev, u32 level) | 233 | static int corgi_ssp_resume(struct device *dev) |
235 | { | 234 | { |
236 | if (level == RESUME_POWER_ON) { | 235 | GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */ |
237 | GPSR(ssp_machinfo->cs_lcdcon) = GPIO_bit(ssp_machinfo->cs_lcdcon); /* High - Disable LCD Control/Timing Gen */ | 236 | GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/ |
238 | GPSR(ssp_machinfo->cs_max1111) = GPIO_bit(ssp_machinfo->cs_max1111); /* High - Disable MAX1111*/ | 237 | GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/ |
239 | GPSR(ssp_machinfo->cs_ads7846) = GPIO_bit(ssp_machinfo->cs_ads7846); /* High - Disable ADS7846*/ | 238 | ssp_restore_state(&corgi_ssp_dev,&corgi_ssp_state); |
240 | ssp_restore_state(&corgi_ssp_dev,&corgi_ssp_state); | 239 | ssp_enable(&corgi_ssp_dev); |
241 | ssp_enable(&corgi_ssp_dev); | 240 | |
242 | } | ||
243 | return 0; | 241 | return 0; |
244 | } | 242 | } |
245 | 243 | ||
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index 1d7677669a76..9c0289333301 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
24 | #include <linux/ioport.h> | 24 | #include <linux/ioport.h> |
25 | #include <linux/pm.h> | 25 | #include <linux/pm.h> |
26 | #include <linux/string.h> | ||
26 | 27 | ||
27 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
28 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
@@ -34,6 +35,7 @@ | |||
34 | #include <asm/arch/udc.h> | 35 | #include <asm/arch/udc.h> |
35 | #include <asm/arch/pxafb.h> | 36 | #include <asm/arch/pxafb.h> |
36 | #include <asm/arch/mmc.h> | 37 | #include <asm/arch/mmc.h> |
38 | #include <asm/arch/irda.h> | ||
37 | #include <asm/arch/i2c.h> | 39 | #include <asm/arch/i2c.h> |
38 | 40 | ||
39 | #include "generic.h" | 41 | #include "generic.h" |
@@ -92,14 +94,42 @@ EXPORT_SYMBOL(pxa_set_cken); | |||
92 | * and cache flush area. | 94 | * and cache flush area. |
93 | */ | 95 | */ |
94 | static struct map_desc standard_io_desc[] __initdata = { | 96 | static struct map_desc standard_io_desc[] __initdata = { |
95 | /* virtual physical length type */ | 97 | { /* Devs */ |
96 | { 0xf2000000, 0x40000000, 0x02000000, MT_DEVICE }, /* Devs */ | 98 | .virtual = 0xf2000000, |
97 | { 0xf4000000, 0x44000000, 0x00100000, MT_DEVICE }, /* LCD */ | 99 | .pfn = __phys_to_pfn(0x40000000), |
98 | { 0xf6000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Mem Ctl */ | 100 | .length = 0x02000000, |
99 | { 0xf8000000, 0x4c000000, 0x00100000, MT_DEVICE }, /* USB host */ | 101 | .type = MT_DEVICE |
100 | { 0xfa000000, 0x50000000, 0x00100000, MT_DEVICE }, /* Camera */ | 102 | }, { /* LCD */ |
101 | { 0xfe000000, 0x58000000, 0x00100000, MT_DEVICE }, /* IMem ctl */ | 103 | .virtual = 0xf4000000, |
102 | { 0xff000000, 0x00000000, 0x00100000, MT_DEVICE } /* UNCACHED_PHYS_0 */ | 104 | .pfn = __phys_to_pfn(0x44000000), |
105 | .length = 0x00100000, | ||
106 | .type = MT_DEVICE | ||
107 | }, { /* Mem Ctl */ | ||
108 | .virtual = 0xf6000000, | ||
109 | .pfn = __phys_to_pfn(0x48000000), | ||
110 | .length = 0x00100000, | ||
111 | .type = MT_DEVICE | ||
112 | }, { /* USB host */ | ||
113 | .virtual = 0xf8000000, | ||
114 | .pfn = __phys_to_pfn(0x4c000000), | ||
115 | .length = 0x00100000, | ||
116 | .type = MT_DEVICE | ||
117 | }, { /* Camera */ | ||
118 | .virtual = 0xfa000000, | ||
119 | .pfn = __phys_to_pfn(0x50000000), | ||
120 | .length = 0x00100000, | ||
121 | .type = MT_DEVICE | ||
122 | }, { /* IMem ctl */ | ||
123 | .virtual = 0xfe000000, | ||
124 | .pfn = __phys_to_pfn(0x58000000), | ||
125 | .length = 0x00100000, | ||
126 | .type = MT_DEVICE | ||
127 | }, { /* UNCACHED_PHYS_0 */ | ||
128 | .virtual = 0xff000000, | ||
129 | .pfn = __phys_to_pfn(0x00000000), | ||
130 | .length = 0x00100000, | ||
131 | .type = MT_DEVICE | ||
132 | } | ||
103 | }; | 133 | }; |
104 | 134 | ||
105 | void __init pxa_map_io(void) | 135 | void __init pxa_map_io(void) |
@@ -225,6 +255,10 @@ static struct platform_device stuart_device = { | |||
225 | .name = "pxa2xx-uart", | 255 | .name = "pxa2xx-uart", |
226 | .id = 2, | 256 | .id = 2, |
227 | }; | 257 | }; |
258 | static struct platform_device hwuart_device = { | ||
259 | .name = "pxa2xx-uart", | ||
260 | .id = 3, | ||
261 | }; | ||
228 | 262 | ||
229 | static struct resource i2c_resources[] = { | 263 | static struct resource i2c_resources[] = { |
230 | { | 264 | { |
@@ -265,10 +299,26 @@ static struct resource i2s_resources[] = { | |||
265 | static struct platform_device i2s_device = { | 299 | static struct platform_device i2s_device = { |
266 | .name = "pxa2xx-i2s", | 300 | .name = "pxa2xx-i2s", |
267 | .id = -1, | 301 | .id = -1, |
268 | .resource = i2c_resources, | 302 | .resource = i2s_resources, |
269 | .num_resources = ARRAY_SIZE(i2s_resources), | 303 | .num_resources = ARRAY_SIZE(i2s_resources), |
270 | }; | 304 | }; |
271 | 305 | ||
306 | static u64 pxaficp_dmamask = ~(u32)0; | ||
307 | |||
308 | static struct platform_device pxaficp_device = { | ||
309 | .name = "pxa2xx-ir", | ||
310 | .id = -1, | ||
311 | .dev = { | ||
312 | .dma_mask = &pxaficp_dmamask, | ||
313 | .coherent_dma_mask = 0xffffffff, | ||
314 | }, | ||
315 | }; | ||
316 | |||
317 | void __init pxa_set_ficp_info(struct pxaficp_platform_data *info) | ||
318 | { | ||
319 | pxaficp_device.dev.platform_data = info; | ||
320 | } | ||
321 | |||
272 | static struct platform_device *devices[] __initdata = { | 322 | static struct platform_device *devices[] __initdata = { |
273 | &pxamci_device, | 323 | &pxamci_device, |
274 | &udc_device, | 324 | &udc_device, |
@@ -276,13 +326,26 @@ static struct platform_device *devices[] __initdata = { | |||
276 | &ffuart_device, | 326 | &ffuart_device, |
277 | &btuart_device, | 327 | &btuart_device, |
278 | &stuart_device, | 328 | &stuart_device, |
329 | &pxaficp_device, | ||
279 | &i2c_device, | 330 | &i2c_device, |
280 | &i2s_device, | 331 | &i2s_device, |
281 | }; | 332 | }; |
282 | 333 | ||
283 | static int __init pxa_init(void) | 334 | static int __init pxa_init(void) |
284 | { | 335 | { |
285 | return platform_add_devices(devices, ARRAY_SIZE(devices)); | 336 | int cpuid, ret; |
337 | |||
338 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
339 | if (ret) | ||
340 | return ret; | ||
341 | |||
342 | /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ | ||
343 | cpuid = read_cpuid(CPUID_ID); | ||
344 | if (((cpuid >> 4) & 0xfff) == 0x2d0 || | ||
345 | ((cpuid >> 4) & 0xfff) == 0x290) | ||
346 | ret = platform_device_register(&hwuart_device); | ||
347 | |||
348 | return ret; | ||
286 | } | 349 | } |
287 | 350 | ||
288 | subsys_initcall(pxa_init); | 351 | subsys_initcall(pxa_init); |
diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c index 386e107b53cc..01a83ab09ac3 100644 --- a/arch/arm/mach-pxa/idp.c +++ b/arch/arm/mach-pxa/idp.c | |||
@@ -152,16 +152,17 @@ static void __init idp_init_irq(void) | |||
152 | } | 152 | } |
153 | 153 | ||
154 | static struct map_desc idp_io_desc[] __initdata = { | 154 | static struct map_desc idp_io_desc[] __initdata = { |
155 | /* virtual physical length type */ | 155 | { |
156 | 156 | .virtual = IDP_COREVOLT_VIRT, | |
157 | { IDP_COREVOLT_VIRT, | 157 | .pfn = __phys_to_pfn(IDP_COREVOLT_PHYS), |
158 | IDP_COREVOLT_PHYS, | 158 | .length = IDP_COREVOLT_SIZE, |
159 | IDP_COREVOLT_SIZE, | 159 | .type = MT_DEVICE |
160 | MT_DEVICE }, | 160 | }, { |
161 | { IDP_CPLD_VIRT, | 161 | .virtual = IDP_CPLD_VIRT, |
162 | IDP_CPLD_PHYS, | 162 | .pfn = __phys_to_pfn(IDP_CPLD_PHYS), |
163 | IDP_CPLD_SIZE, | 163 | .length = IDP_CPLD_SIZE, |
164 | MT_DEVICE } | 164 | .type = MT_DEVICE |
165 | } | ||
165 | }; | 166 | }; |
166 | 167 | ||
167 | static void __init idp_map_io(void) | 168 | static void __init idp_map_io(void) |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 1f38033921e9..beccf455f796 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <asm/arch/pxa-regs.h> | 35 | #include <asm/arch/pxa-regs.h> |
36 | #include <asm/arch/lubbock.h> | 36 | #include <asm/arch/lubbock.h> |
37 | #include <asm/arch/udc.h> | 37 | #include <asm/arch/udc.h> |
38 | #include <asm/arch/irda.h> | ||
38 | #include <asm/arch/pxafb.h> | 39 | #include <asm/arch/pxafb.h> |
39 | #include <asm/arch/mmc.h> | 40 | #include <asm/arch/mmc.h> |
40 | 41 | ||
@@ -237,16 +238,40 @@ static struct pxamci_platform_data lubbock_mci_platform_data = { | |||
237 | .init = lubbock_mci_init, | 238 | .init = lubbock_mci_init, |
238 | }; | 239 | }; |
239 | 240 | ||
241 | static void lubbock_irda_transceiver_mode(struct device *dev, int mode) | ||
242 | { | ||
243 | unsigned long flags; | ||
244 | |||
245 | local_irq_save(flags); | ||
246 | if (mode & IR_SIRMODE) { | ||
247 | LUB_MISC_WR &= ~(1 << 4); | ||
248 | } else if (mode & IR_FIRMODE) { | ||
249 | LUB_MISC_WR |= 1 << 4; | ||
250 | } | ||
251 | local_irq_restore(flags); | ||
252 | } | ||
253 | |||
254 | static struct pxaficp_platform_data lubbock_ficp_platform_data = { | ||
255 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE, | ||
256 | .transceiver_mode = lubbock_irda_transceiver_mode, | ||
257 | }; | ||
258 | |||
240 | static void __init lubbock_init(void) | 259 | static void __init lubbock_init(void) |
241 | { | 260 | { |
242 | pxa_set_udc_info(&udc_info); | 261 | pxa_set_udc_info(&udc_info); |
243 | set_pxa_fb_info(&sharp_lm8v31); | 262 | set_pxa_fb_info(&sharp_lm8v31); |
244 | pxa_set_mci_info(&lubbock_mci_platform_data); | 263 | pxa_set_mci_info(&lubbock_mci_platform_data); |
264 | pxa_set_ficp_info(&lubbock_ficp_platform_data); | ||
245 | (void) platform_add_devices(devices, ARRAY_SIZE(devices)); | 265 | (void) platform_add_devices(devices, ARRAY_SIZE(devices)); |
246 | } | 266 | } |
247 | 267 | ||
248 | static struct map_desc lubbock_io_desc[] __initdata = { | 268 | static struct map_desc lubbock_io_desc[] __initdata = { |
249 | { LUBBOCK_FPGA_VIRT, LUBBOCK_FPGA_PHYS, 0x00100000, MT_DEVICE }, /* CPLD */ | 269 | { /* CPLD */ |
270 | .virtual = LUBBOCK_FPGA_VIRT, | ||
271 | .pfn = __phys_to_pfn(LUBBOCK_FPGA_PHYS), | ||
272 | .length = 0x00100000, | ||
273 | .type = MT_DEVICE | ||
274 | } | ||
250 | }; | 275 | }; |
251 | 276 | ||
252 | static void __init lubbock_map_io(void) | 277 | static void __init lubbock_map_io(void) |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 85fdb5b1470a..a48c64026e1f 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <asm/arch/audio.h> | 37 | #include <asm/arch/audio.h> |
38 | #include <asm/arch/pxafb.h> | 38 | #include <asm/arch/pxafb.h> |
39 | #include <asm/arch/mmc.h> | 39 | #include <asm/arch/mmc.h> |
40 | #include <asm/arch/irda.h> | ||
40 | 41 | ||
41 | #include "generic.h" | 42 | #include "generic.h" |
42 | 43 | ||
@@ -294,6 +295,29 @@ static struct pxamci_platform_data mainstone_mci_platform_data = { | |||
294 | .exit = mainstone_mci_exit, | 295 | .exit = mainstone_mci_exit, |
295 | }; | 296 | }; |
296 | 297 | ||
298 | static void mainstone_irda_transceiver_mode(struct device *dev, int mode) | ||
299 | { | ||
300 | unsigned long flags; | ||
301 | |||
302 | local_irq_save(flags); | ||
303 | if (mode & IR_SIRMODE) { | ||
304 | MST_MSCWR1 &= ~MST_MSCWR1_IRDA_FIR; | ||
305 | } else if (mode & IR_FIRMODE) { | ||
306 | MST_MSCWR1 |= MST_MSCWR1_IRDA_FIR; | ||
307 | } | ||
308 | if (mode & IR_OFF) { | ||
309 | MST_MSCWR1 = (MST_MSCWR1 & ~MST_MSCWR1_IRDA_MASK) | MST_MSCWR1_IRDA_OFF; | ||
310 | } else { | ||
311 | MST_MSCWR1 = (MST_MSCWR1 & ~MST_MSCWR1_IRDA_MASK) | MST_MSCWR1_IRDA_FULL; | ||
312 | } | ||
313 | local_irq_restore(flags); | ||
314 | } | ||
315 | |||
316 | static struct pxaficp_platform_data mainstone_ficp_platform_data = { | ||
317 | .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, | ||
318 | .transceiver_mode = mainstone_irda_transceiver_mode, | ||
319 | }; | ||
320 | |||
297 | static void __init mainstone_init(void) | 321 | static void __init mainstone_init(void) |
298 | { | 322 | { |
299 | /* | 323 | /* |
@@ -313,11 +337,17 @@ static void __init mainstone_init(void) | |||
313 | set_pxa_fb_info(&toshiba_ltm035a776c); | 337 | set_pxa_fb_info(&toshiba_ltm035a776c); |
314 | 338 | ||
315 | pxa_set_mci_info(&mainstone_mci_platform_data); | 339 | pxa_set_mci_info(&mainstone_mci_platform_data); |
340 | pxa_set_ficp_info(&mainstone_ficp_platform_data); | ||
316 | } | 341 | } |
317 | 342 | ||
318 | 343 | ||
319 | static struct map_desc mainstone_io_desc[] __initdata = { | 344 | static struct map_desc mainstone_io_desc[] __initdata = { |
320 | { MST_FPGA_VIRT, MST_FPGA_PHYS, 0x00100000, MT_DEVICE }, /* CPLD */ | 345 | { /* CPLD */ |
346 | .virtual = MST_FPGA_VIRT, | ||
347 | .pfn = __phys_to_pfn(MST_FPGA_PHYS), | ||
348 | .length = 0x00100000, | ||
349 | .type = MT_DEVICE | ||
350 | } | ||
321 | }; | 351 | }; |
322 | 352 | ||
323 | static void __init mainstone_map_io(void) | 353 | static void __init mainstone_map_io(void) |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index f25638810017..6d413f6701a7 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/arch/irq.h> | 32 | #include <asm/arch/irq.h> |
33 | #include <asm/arch/mmc.h> | 33 | #include <asm/arch/mmc.h> |
34 | #include <asm/arch/udc.h> | 34 | #include <asm/arch/udc.h> |
35 | #include <asm/arch/irda.h> | ||
35 | #include <asm/arch/poodle.h> | 36 | #include <asm/arch/poodle.h> |
36 | #include <asm/arch/pxafb.h> | 37 | #include <asm/arch/pxafb.h> |
37 | 38 | ||
@@ -152,6 +153,24 @@ static struct pxamci_platform_data poodle_mci_platform_data = { | |||
152 | 153 | ||
153 | 154 | ||
154 | /* | 155 | /* |
156 | * Irda | ||
157 | */ | ||
158 | static void poodle_irda_transceiver_mode(struct device *dev, int mode) | ||
159 | { | ||
160 | if (mode & IR_OFF) { | ||
161 | GPSR(POODLE_GPIO_IR_ON) = GPIO_bit(POODLE_GPIO_IR_ON); | ||
162 | } else { | ||
163 | GPCR(POODLE_GPIO_IR_ON) = GPIO_bit(POODLE_GPIO_IR_ON); | ||
164 | } | ||
165 | } | ||
166 | |||
167 | static struct pxaficp_platform_data poodle_ficp_platform_data = { | ||
168 | .transceiver_cap = IR_SIRMODE | IR_OFF, | ||
169 | .transceiver_mode = poodle_irda_transceiver_mode, | ||
170 | }; | ||
171 | |||
172 | |||
173 | /* | ||
155 | * USB Device Controller | 174 | * USB Device Controller |
156 | */ | 175 | */ |
157 | static void poodle_udc_command(int cmd) | 176 | static void poodle_udc_command(int cmd) |
@@ -244,8 +263,10 @@ static void __init poodle_init(void) | |||
244 | 263 | ||
245 | set_pxa_fb_info(&poodle_fb_info); | 264 | set_pxa_fb_info(&poodle_fb_info); |
246 | pxa_gpio_mode(POODLE_GPIO_USB_PULLUP | GPIO_OUT); | 265 | pxa_gpio_mode(POODLE_GPIO_USB_PULLUP | GPIO_OUT); |
266 | pxa_gpio_mode(POODLE_GPIO_IR_ON | GPIO_OUT); | ||
247 | pxa_set_udc_info(&udc_info); | 267 | pxa_set_udc_info(&udc_info); |
248 | pxa_set_mci_info(&poodle_mci_platform_data); | 268 | pxa_set_mci_info(&poodle_mci_platform_data); |
269 | pxa_set_ficp_info(&poodle_ficp_platform_data); | ||
249 | 270 | ||
250 | scoop_num = 1; | 271 | scoop_num = 1; |
251 | scoop_devs = &poodle_pcmcia_scoop[0]; | 272 | scoop_devs = &poodle_pcmcia_scoop[0]; |
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index 7869c3b4e62f..573a5758e781 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
@@ -129,7 +129,7 @@ void pxa_cpu_pm_enter(suspend_state_t state) | |||
129 | case PM_SUSPEND_MEM: | 129 | case PM_SUSPEND_MEM: |
130 | /* set resume return address */ | 130 | /* set resume return address */ |
131 | PSPR = virt_to_phys(pxa_cpu_resume); | 131 | PSPR = virt_to_phys(pxa_cpu_resume); |
132 | pxa_cpu_suspend(3); | 132 | pxa_cpu_suspend(PWRMODE_SLEEP); |
133 | break; | 133 | break; |
134 | } | 134 | } |
135 | } | 135 | } |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index 9a791b07118d..09a5d593f04b 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
@@ -157,7 +157,7 @@ void pxa_cpu_pm_enter(suspend_state_t state) | |||
157 | case PM_SUSPEND_MEM: | 157 | case PM_SUSPEND_MEM: |
158 | /* set resume return address */ | 158 | /* set resume return address */ |
159 | PSPR = virt_to_phys(pxa_cpu_resume); | 159 | PSPR = virt_to_phys(pxa_cpu_resume); |
160 | pxa_cpu_suspend(3); | 160 | pxa_cpu_suspend(PWRMODE_SLEEP); |
161 | break; | 161 | break; |
162 | } | 162 | } |
163 | } | 163 | } |
diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S index 5786ccad938c..c9862688ff3d 100644 --- a/arch/arm/mach-pxa/sleep.S +++ b/arch/arm/mach-pxa/sleep.S | |||
@@ -28,7 +28,9 @@ | |||
28 | /* | 28 | /* |
29 | * pxa_cpu_suspend() | 29 | * pxa_cpu_suspend() |
30 | * | 30 | * |
31 | * Forces CPU into sleep state | 31 | * Forces CPU into sleep state. |
32 | * | ||
33 | * r0 = value for PWRMODE M field for desired sleep state | ||
32 | */ | 34 | */ |
33 | 35 | ||
34 | ENTRY(pxa_cpu_suspend) | 36 | ENTRY(pxa_cpu_suspend) |
@@ -53,6 +55,7 @@ ENTRY(pxa_cpu_suspend) | |||
53 | mov r10, sp | 55 | mov r10, sp |
54 | stmfd sp!, {r3 - r10} | 56 | stmfd sp!, {r3 - r10} |
55 | 57 | ||
58 | mov r5, r0 @ save sleep mode | ||
56 | @ preserve phys address of stack | 59 | @ preserve phys address of stack |
57 | mov r0, sp | 60 | mov r0, sp |
58 | bl sleep_phys_sp | 61 | bl sleep_phys_sp |
@@ -66,7 +69,7 @@ ENTRY(pxa_cpu_suspend) | |||
66 | @ (also workaround for sighting 28071) | 69 | @ (also workaround for sighting 28071) |
67 | 70 | ||
68 | @ prepare value for sleep mode | 71 | @ prepare value for sleep mode |
69 | mov r1, #3 @ sleep mode | 72 | mov r1, r5 @ sleep mode |
70 | 73 | ||
71 | @ prepare pointer to physical address 0 (virtual mapping in generic.c) | 74 | @ prepare pointer to physical address 0 (virtual mapping in generic.c) |
72 | mov r2, #UNCACHED_PHYS_0 | 75 | mov r2, #UNCACHED_PHYS_0 |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index d0ab428c2d7d..b838842b6a20 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | #include <asm/arch/pxa-regs.h> | 35 | #include <asm/arch/pxa-regs.h> |
36 | #include <asm/arch/irq.h> | 36 | #include <asm/arch/irq.h> |
37 | #include <asm/arch/irda.h> | ||
37 | #include <asm/arch/mmc.h> | 38 | #include <asm/arch/mmc.h> |
38 | #include <asm/arch/udc.h> | 39 | #include <asm/arch/udc.h> |
39 | #include <asm/arch/pxafb.h> | 40 | #include <asm/arch/pxafb.h> |
@@ -277,6 +278,23 @@ static struct pxamci_platform_data spitz_mci_platform_data = { | |||
277 | 278 | ||
278 | 279 | ||
279 | /* | 280 | /* |
281 | * Irda | ||
282 | */ | ||
283 | static void spitz_irda_transceiver_mode(struct device *dev, int mode) | ||
284 | { | ||
285 | if (mode & IR_OFF) | ||
286 | set_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_IR_ON); | ||
287 | else | ||
288 | reset_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_IR_ON); | ||
289 | } | ||
290 | |||
291 | static struct pxaficp_platform_data spitz_ficp_platform_data = { | ||
292 | .transceiver_cap = IR_SIRMODE | IR_OFF, | ||
293 | .transceiver_mode = spitz_irda_transceiver_mode, | ||
294 | }; | ||
295 | |||
296 | |||
297 | /* | ||
280 | * Spitz PXA Framebuffer | 298 | * Spitz PXA Framebuffer |
281 | */ | 299 | */ |
282 | static struct pxafb_mach_info spitz_pxafb_info __initdata = { | 300 | static struct pxafb_mach_info spitz_pxafb_info __initdata = { |
@@ -326,6 +344,7 @@ static void __init common_init(void) | |||
326 | 344 | ||
327 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 345 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
328 | pxa_set_mci_info(&spitz_mci_platform_data); | 346 | pxa_set_mci_info(&spitz_mci_platform_data); |
347 | pxa_set_ficp_info(&spitz_ficp_platform_data); | ||
329 | set_pxa_fb_parent(&spitzssp_device.dev); | 348 | set_pxa_fb_parent(&spitzssp_device.dev); |
330 | set_pxa_fb_info(&spitz_pxafb_info); | 349 | set_pxa_fb_info(&spitz_pxafb_info); |
331 | } | 350 | } |
diff --git a/arch/arm/mach-pxa/standby.S b/arch/arm/mach-pxa/standby.S index 8a3f27b76784..6f6dbbd08021 100644 --- a/arch/arm/mach-pxa/standby.S +++ b/arch/arm/mach-pxa/standby.S | |||
@@ -21,7 +21,7 @@ | |||
21 | ENTRY(pxa_cpu_standby) | 21 | ENTRY(pxa_cpu_standby) |
22 | ldr r0, =PSSR | 22 | ldr r0, =PSSR |
23 | mov r1, #(PSSR_PH | PSSR_STS) | 23 | mov r1, #(PSSR_PH | PSSR_STS) |
24 | mov r2, #2 | 24 | mov r2, #PWRMODE_STANDBY |
25 | mov r3, #UNCACHED_PHYS_0 @ Read mem context in. | 25 | mov r3, #UNCACHED_PHYS_0 @ Read mem context in. |
26 | ldr ip, [r3] | 26 | ldr ip, [r3] |
27 | b 1f | 27 | b 1f |