aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa
diff options
context:
space:
mode:
authorTony Luck <tony.luck@intel.com>2005-10-20 13:41:44 -0400
committerTony Luck <tony.luck@intel.com>2005-10-20 13:41:44 -0400
commit9cec58dc138d6fcad9f447a19c8ff69f6540e667 (patch)
tree4fe1cca94fdba8b705c87615bee06d3346f687ce /arch/arm/mach-pxa
parent17e5ad6c0ce5a970e2830d0de8bdd60a2f077d38 (diff)
parentac9b9c667c2e1194e22ebe0a441ae1c37aaa9b90 (diff)
Update from upstream with manual merge of Yasunori Goto's
changes to swiotlb.c made in commit 281dd25cdc0d6903929b79183816d151ea626341 since this file has been moved from arch/ia64/lib/swiotlb.c to lib/swiotlb.c Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r--arch/arm/mach-pxa/corgi.c58
-rw-r--r--arch/arm/mach-pxa/corgi_lcd.c21
-rw-r--r--arch/arm/mach-pxa/generic.c6
-rw-r--r--arch/arm/mach-pxa/poodle.c113
-rw-r--r--arch/arm/mach-pxa/spitz.c4
5 files changed, 137 insertions, 65 deletions
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 426c2bc517eb..60c8b9d8bb9c 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -36,6 +36,7 @@
36#include <asm/arch/mmc.h> 36#include <asm/arch/mmc.h>
37#include <asm/arch/udc.h> 37#include <asm/arch/udc.h>
38#include <asm/arch/corgi.h> 38#include <asm/arch/corgi.h>
39#include <asm/arch/sharpsl.h>
39 40
40#include <asm/mach/sharpsl_param.h> 41#include <asm/mach/sharpsl_param.h>
41#include <asm/hardware/scoop.h> 42#include <asm/hardware/scoop.h>
@@ -198,13 +199,10 @@ static void corgi_mci_setpower(struct device *dev, unsigned int vdd)
198{ 199{
199 struct pxamci_platform_data* p_d = dev->platform_data; 200 struct pxamci_platform_data* p_d = dev->platform_data;
200 201
201 if (( 1 << vdd) & p_d->ocr_mask) { 202 if (( 1 << vdd) & p_d->ocr_mask)
202 printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
203 GPSR1 = GPIO_bit(CORGI_GPIO_SD_PWR); 203 GPSR1 = GPIO_bit(CORGI_GPIO_SD_PWR);
204 } else { 204 else
205 printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
206 GPCR1 = GPIO_bit(CORGI_GPIO_SD_PWR); 205 GPCR1 = GPIO_bit(CORGI_GPIO_SD_PWR);
207 }
208} 206}
209 207
210static int corgi_mci_get_ro(struct device *dev) 208static int corgi_mci_get_ro(struct device *dev)
@@ -259,6 +257,16 @@ static struct platform_device *devices[] __initdata = {
259 257
260static void __init corgi_init(void) 258static void __init corgi_init(void)
261{ 259{
260 /* setup sleep mode values */
261 PWER = 0x00000002;
262 PFER = 0x00000000;
263 PRER = 0x00000002;
264 PGSR0 = 0x0158C000;
265 PGSR1 = 0x00FF0080;
266 PGSR2 = 0x0001C004;
267 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
268 PCFR |= PCFR_OPDE;
269
262 corgi_ssp_set_machinfo(&corgi_ssp_machinfo); 270 corgi_ssp_set_machinfo(&corgi_ssp_machinfo);
263 271
264 pxa_gpio_mode(CORGI_GPIO_USB_PULLUP | GPIO_OUT); 272 pxa_gpio_mode(CORGI_GPIO_USB_PULLUP | GPIO_OUT);
@@ -285,42 +293,14 @@ static void __init fixup_corgi(struct machine_desc *desc,
285 mi->bank[0].size = (64*1024*1024); 293 mi->bank[0].size = (64*1024*1024);
286} 294}
287 295
288static void __init corgi_init_irq(void)
289{
290 pxa_init_irq();
291}
292
293static struct map_desc corgi_io_desc[] __initdata = {
294/* virtual physical length */
295/* { 0xf1000000, 0x08000000, 0x01000000, MT_DEVICE },*/ /* LCDC (readable for Qt driver) */
296/* { 0xef700000, 0x10800000, 0x00001000, MT_DEVICE },*/ /* SCOOP */
297 { 0xef800000, 0x00000000, 0x00800000, MT_DEVICE }, /* Boot Flash */
298};
299
300static void __init corgi_map_io(void)
301{
302 pxa_map_io();
303 iotable_init(corgi_io_desc,ARRAY_SIZE(corgi_io_desc));
304
305 /* setup sleep mode values */
306 PWER = 0x00000002;
307 PFER = 0x00000000;
308 PRER = 0x00000002;
309 PGSR0 = 0x0158C000;
310 PGSR1 = 0x00FF0080;
311 PGSR2 = 0x0001C004;
312 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
313 PCFR |= PCFR_OPDE;
314}
315
316#ifdef CONFIG_MACH_CORGI 296#ifdef CONFIG_MACH_CORGI
317MACHINE_START(CORGI, "SHARP Corgi") 297MACHINE_START(CORGI, "SHARP Corgi")
318 .phys_ram = 0xa0000000, 298 .phys_ram = 0xa0000000,
319 .phys_io = 0x40000000, 299 .phys_io = 0x40000000,
320 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 300 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
321 .fixup = fixup_corgi, 301 .fixup = fixup_corgi,
322 .map_io = corgi_map_io, 302 .map_io = pxa_map_io,
323 .init_irq = corgi_init_irq, 303 .init_irq = pxa_init_irq,
324 .init_machine = corgi_init, 304 .init_machine = corgi_init,
325 .timer = &pxa_timer, 305 .timer = &pxa_timer,
326MACHINE_END 306MACHINE_END
@@ -332,8 +312,8 @@ MACHINE_START(SHEPHERD, "SHARP Shepherd")
332 .phys_io = 0x40000000, 312 .phys_io = 0x40000000,
333 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 313 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
334 .fixup = fixup_corgi, 314 .fixup = fixup_corgi,
335 .map_io = corgi_map_io, 315 .map_io = pxa_map_io,
336 .init_irq = corgi_init_irq, 316 .init_irq = pxa_init_irq,
337 .init_machine = corgi_init, 317 .init_machine = corgi_init,
338 .timer = &pxa_timer, 318 .timer = &pxa_timer,
339MACHINE_END 319MACHINE_END
@@ -345,8 +325,8 @@ MACHINE_START(HUSKY, "SHARP Husky")
345 .phys_io = 0x40000000, 325 .phys_io = 0x40000000,
346 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 326 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
347 .fixup = fixup_corgi, 327 .fixup = fixup_corgi,
348 .map_io = corgi_map_io, 328 .map_io = pxa_map_io,
349 .init_irq = corgi_init_irq, 329 .init_irq = pxa_init_irq,
350 .init_machine = corgi_init, 330 .init_machine = corgi_init,
351 .timer = &pxa_timer, 331 .timer = &pxa_timer,
352MACHINE_END 332MACHINE_END
diff --git a/arch/arm/mach-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c
index c5efcd04fcbc..850538fadece 100644
--- a/arch/arm/mach-pxa/corgi_lcd.c
+++ b/arch/arm/mach-pxa/corgi_lcd.c
@@ -19,7 +19,6 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/device.h> 20#include <linux/device.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <asm/mach-types.h>
23#include <asm/arch/akita.h> 22#include <asm/arch/akita.h>
24#include <asm/arch/corgi.h> 23#include <asm/arch/corgi.h>
25#include <asm/arch/hardware.h> 24#include <asm/arch/hardware.h>
@@ -468,6 +467,7 @@ void corgi_put_hsync(void)
468{ 467{
469 if (get_hsync_time) 468 if (get_hsync_time)
470 symbol_put(w100fb_get_hsynclen); 469 symbol_put(w100fb_get_hsynclen);
470 get_hsync_time = NULL;
471} 471}
472 472
473void corgi_wait_hsync(void) 473void corgi_wait_hsync(void)
@@ -477,20 +477,37 @@ void corgi_wait_hsync(void)
477#endif 477#endif
478 478
479#ifdef CONFIG_PXA_SHARP_Cxx00 479#ifdef CONFIG_PXA_SHARP_Cxx00
480static struct device *spitz_pxafb_dev;
481
482static int is_pxafb_device(struct device * dev, void * data)
483{
484 struct platform_device *pdev = container_of(dev, struct platform_device, dev);
485
486 return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0);
487}
488
480unsigned long spitz_get_hsync_len(void) 489unsigned long spitz_get_hsync_len(void)
481{ 490{
491 if (!spitz_pxafb_dev) {
492 spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
493 if (!spitz_pxafb_dev)
494 return 0;
495 }
482 if (!get_hsync_time) 496 if (!get_hsync_time)
483 get_hsync_time = symbol_get(pxafb_get_hsync_time); 497 get_hsync_time = symbol_get(pxafb_get_hsync_time);
484 if (!get_hsync_time) 498 if (!get_hsync_time)
485 return 0; 499 return 0;
486 500
487 return pxafb_get_hsync_time(&pxafb_device.dev); 501 return pxafb_get_hsync_time(spitz_pxafb_dev);
488} 502}
489 503
490void spitz_put_hsync(void) 504void spitz_put_hsync(void)
491{ 505{
506 put_device(spitz_pxafb_dev);
492 if (get_hsync_time) 507 if (get_hsync_time)
493 symbol_put(pxafb_get_hsync_time); 508 symbol_put(pxafb_get_hsync_time);
509 spitz_pxafb_dev = NULL;
510 get_hsync_time = NULL;
494} 511}
495 512
496void spitz_wait_hsync(void) 513void spitz_wait_hsync(void)
diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c
index a45aaa115a76..d327c127eddb 100644
--- a/arch/arm/mach-pxa/generic.c
+++ b/arch/arm/mach-pxa/generic.c
@@ -34,6 +34,7 @@
34#include <asm/arch/udc.h> 34#include <asm/arch/udc.h>
35#include <asm/arch/pxafb.h> 35#include <asm/arch/pxafb.h>
36#include <asm/arch/mmc.h> 36#include <asm/arch/mmc.h>
37#include <asm/arch/i2c.h>
37 38
38#include "generic.h" 39#include "generic.h"
39 40
@@ -207,6 +208,11 @@ static struct platform_device pxafb_device = {
207 .resource = pxafb_resources, 208 .resource = pxafb_resources,
208}; 209};
209 210
211void __init set_pxa_fb_parent(struct device *parent_dev)
212{
213 pxafb_device.dev.parent = parent_dev;
214}
215
210static struct platform_device ffuart_device = { 216static struct platform_device ffuart_device = {
211 .name = "pxa2xx-uart", 217 .name = "pxa2xx-uart",
212 .id = 0, 218 .id = 0,
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 47cfb8bb8318..f25638810017 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -30,6 +30,8 @@
30 30
31#include <asm/arch/pxa-regs.h> 31#include <asm/arch/pxa-regs.h>
32#include <asm/arch/irq.h> 32#include <asm/arch/irq.h>
33#include <asm/arch/mmc.h>
34#include <asm/arch/udc.h>
33#include <asm/arch/poodle.h> 35#include <asm/arch/poodle.h>
34#include <asm/arch/pxafb.h> 36#include <asm/arch/pxafb.h>
35 37
@@ -93,6 +95,83 @@ static struct platform_device locomo_device = {
93 .resource = locomo_resources, 95 .resource = locomo_resources,
94}; 96};
95 97
98
99/*
100 * MMC/SD Device
101 *
102 * The card detect interrupt isn't debounced so we delay it by 250ms
103 * to give the card a chance to fully insert/eject.
104 */
105static struct pxamci_platform_data poodle_mci_platform_data;
106
107static int poodle_mci_init(struct device *dev, irqreturn_t (*poodle_detect_int)(int, void *, struct pt_regs *), void *data)
108{
109 int err;
110
111 /* setup GPIO for PXA25x MMC controller */
112 pxa_gpio_mode(GPIO6_MMCCLK_MD);
113 pxa_gpio_mode(GPIO8_MMCCS0_MD);
114 pxa_gpio_mode(POODLE_GPIO_nSD_DETECT | GPIO_IN);
115 pxa_gpio_mode(POODLE_GPIO_SD_PWR | GPIO_OUT);
116
117 poodle_mci_platform_data.detect_delay = msecs_to_jiffies(250);
118
119 err = request_irq(POODLE_IRQ_GPIO_nSD_DETECT, poodle_detect_int, SA_INTERRUPT,
120 "MMC card detect", data);
121 if (err) {
122 printk(KERN_ERR "poodle_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
123 return -1;
124 }
125
126 set_irq_type(POODLE_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE);
127
128 return 0;
129}
130
131static void poodle_mci_setpower(struct device *dev, unsigned int vdd)
132{
133 struct pxamci_platform_data* p_d = dev->platform_data;
134
135 if (( 1 << vdd) & p_d->ocr_mask)
136 GPSR1 = GPIO_bit(POODLE_GPIO_SD_PWR);
137 else
138 GPCR1 = GPIO_bit(POODLE_GPIO_SD_PWR);
139}
140
141static void poodle_mci_exit(struct device *dev, void *data)
142{
143 free_irq(POODLE_IRQ_GPIO_nSD_DETECT, data);
144}
145
146static struct pxamci_platform_data poodle_mci_platform_data = {
147 .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
148 .init = poodle_mci_init,
149 .setpower = poodle_mci_setpower,
150 .exit = poodle_mci_exit,
151};
152
153
154/*
155 * USB Device Controller
156 */
157static void poodle_udc_command(int cmd)
158{
159 switch(cmd) {
160 case PXA2XX_UDC_CMD_CONNECT:
161 GPSR(POODLE_GPIO_USB_PULLUP) = GPIO_bit(POODLE_GPIO_USB_PULLUP);
162 break;
163 case PXA2XX_UDC_CMD_DISCONNECT:
164 GPCR(POODLE_GPIO_USB_PULLUP) = GPIO_bit(POODLE_GPIO_USB_PULLUP);
165 break;
166 }
167}
168
169static struct pxa2xx_udc_mach_info udc_info __initdata = {
170 /* no connect GPIO; poodle can't tell connection status */
171 .udc_command = poodle_udc_command,
172};
173
174
96/* PXAFB device */ 175/* PXAFB device */
97static struct pxafb_mach_info poodle_fb_info __initdata = { 176static struct pxafb_mach_info poodle_fb_info __initdata = {
98 .pixclock = 144700, 177 .pixclock = 144700,
@@ -126,6 +205,15 @@ static void __init poodle_init(void)
126{ 205{
127 int ret = 0; 206 int ret = 0;
128 207
208 /* setup sleep mode values */
209 PWER = 0x00000002;
210 PFER = 0x00000000;
211 PRER = 0x00000002;
212 PGSR0 = 0x00008000;
213 PGSR1 = 0x003F0202;
214 PGSR2 = 0x0001C000;
215 PCFR |= PCFR_OPDE;
216
129 /* cpu initialize */ 217 /* cpu initialize */
130 /* Pgsr Register */ 218 /* Pgsr Register */
131 PGSR0 = 0x0146dd80; 219 PGSR0 = 0x0146dd80;
@@ -155,6 +243,9 @@ static void __init poodle_init(void)
155 GPSR2 = 0x00000000; 243 GPSR2 = 0x00000000;
156 244
157 set_pxa_fb_info(&poodle_fb_info); 245 set_pxa_fb_info(&poodle_fb_info);
246 pxa_gpio_mode(POODLE_GPIO_USB_PULLUP | GPIO_OUT);
247 pxa_set_udc_info(&udc_info);
248 pxa_set_mci_info(&poodle_mci_platform_data);
158 249
159 scoop_num = 1; 250 scoop_num = 1;
160 scoop_devs = &poodle_pcmcia_scoop[0]; 251 scoop_devs = &poodle_pcmcia_scoop[0];
@@ -171,32 +262,12 @@ static void __init fixup_poodle(struct machine_desc *desc,
171 sharpsl_save_param(); 262 sharpsl_save_param();
172} 263}
173 264
174static struct map_desc poodle_io_desc[] __initdata = {
175 /* virtual physical length */
176 { 0xef800000, 0x00000000, 0x00800000, MT_DEVICE }, /* Boot Flash */
177};
178
179static void __init poodle_map_io(void)
180{
181 pxa_map_io();
182 iotable_init(poodle_io_desc, ARRAY_SIZE(poodle_io_desc));
183
184 /* setup sleep mode values */
185 PWER = 0x00000002;
186 PFER = 0x00000000;
187 PRER = 0x00000002;
188 PGSR0 = 0x00008000;
189 PGSR1 = 0x003F0202;
190 PGSR2 = 0x0001C000;
191 PCFR |= PCFR_OPDE;
192}
193
194MACHINE_START(POODLE, "SHARP Poodle") 265MACHINE_START(POODLE, "SHARP Poodle")
195 .phys_ram = 0xa0000000, 266 .phys_ram = 0xa0000000,
196 .phys_io = 0x40000000, 267 .phys_io = 0x40000000,
197 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, 268 .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
198 .fixup = fixup_poodle, 269 .fixup = fixup_poodle,
199 .map_io = poodle_map_io, 270 .map_io = pxa_map_io,
200 .init_irq = pxa_init_irq, 271 .init_irq = pxa_init_irq,
201 .timer = &pxa_timer, 272 .timer = &pxa_timer,
202 .init_machine = poodle_init, 273 .init_machine = poodle_init,
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 568afe3d6e1a..d0ab428c2d7d 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -36,7 +36,6 @@
36#include <asm/arch/irq.h> 36#include <asm/arch/irq.h>
37#include <asm/arch/mmc.h> 37#include <asm/arch/mmc.h>
38#include <asm/arch/udc.h> 38#include <asm/arch/udc.h>
39#include <asm/arch/ohci.h>
40#include <asm/arch/pxafb.h> 39#include <asm/arch/pxafb.h>
41#include <asm/arch/akita.h> 40#include <asm/arch/akita.h>
42#include <asm/arch/spitz.h> 41#include <asm/arch/spitz.h>
@@ -304,7 +303,6 @@ static struct platform_device *devices[] __initdata = {
304 &spitzkbd_device, 303 &spitzkbd_device,
305 &spitzts_device, 304 &spitzts_device,
306 &spitzbl_device, 305 &spitzbl_device,
307 &spitzbattery_device,
308}; 306};
309 307
310static void __init common_init(void) 308static void __init common_init(void)
@@ -328,7 +326,7 @@ static void __init common_init(void)
328 326
329 platform_add_devices(devices, ARRAY_SIZE(devices)); 327 platform_add_devices(devices, ARRAY_SIZE(devices));
330 pxa_set_mci_info(&spitz_mci_platform_data); 328 pxa_set_mci_info(&spitz_mci_platform_data);
331 pxafb_device.dev.parent = &spitzssp_device.dev; 329 set_pxa_fb_parent(&spitzssp_device.dev);
332 set_pxa_fb_info(&spitz_pxafb_info); 330 set_pxa_fb_info(&spitz_pxafb_info);
333} 331}
334 332