diff options
author | Jaroslav Kysela <perex@tm8103> | 2005-11-07 05:02:51 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@tm8103> | 2005-11-07 05:02:51 -0500 |
commit | 1d4ae4a119e5ba711f12b05cdf27f794460add4b (patch) | |
tree | 13a196ce55115d8f64acf0db86314f5abc847b40 /arch/arm/mach-pxa | |
parent | c2f2f0fa3829a8da1e029346c4f7e8da82f95d62 (diff) | |
parent | 0b154bb7d0cce80e9c0bcf11d4f9e71b59409d26 (diff) |
Merge with rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r-- | arch/arm/mach-pxa/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mach-pxa/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/lubbock.c | 80 | ||||
-rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 90 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pm.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-pxa/tosa.c | 162 |
6 files changed, 350 insertions, 8 deletions
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 3e5f69bb5ac4..b380a438e68f 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -27,7 +27,8 @@ config PXA_SHARPSL | |||
27 | Say Y here if you intend to run this kernel on a | 27 | Say Y here if you intend to run this kernel on a |
28 | Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi), | 28 | Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi), |
29 | SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita), | 29 | SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita), |
30 | SL-C3000 (Spitz) or SL-C3100 (Borzoi) handheld computer. | 30 | SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa) |
31 | handheld computer. | ||
31 | 32 | ||
32 | endchoice | 33 | endchoice |
33 | 34 | ||
@@ -37,7 +38,7 @@ choice | |||
37 | prompt "Select target Sharp Zaurus device range" | 38 | prompt "Select target Sharp Zaurus device range" |
38 | 39 | ||
39 | config PXA_SHARPSL_25x | 40 | config PXA_SHARPSL_25x |
40 | bool "Sharp PXA25x models (SL-5600 and SL-C7xx)" | 41 | bool "Sharp PXA25x models (SL-5600, SL-C7xx and SL-C6000x)" |
41 | select PXA25x | 42 | select PXA25x |
42 | 43 | ||
43 | config PXA_SHARPSL_27x | 44 | config PXA_SHARPSL_27x |
@@ -80,6 +81,10 @@ config MACH_BORZOI | |||
80 | depends PXA_SHARPSL_27x | 81 | depends PXA_SHARPSL_27x |
81 | select PXA_SHARP_Cxx00 | 82 | select PXA_SHARP_Cxx00 |
82 | 83 | ||
84 | config MACH_TOSA | ||
85 | bool "Enable Sharp SL-6000x (Tosa) Support" | ||
86 | depends PXA_SHARPSL | ||
87 | |||
83 | config PXA25x | 88 | config PXA25x |
84 | bool | 89 | bool |
85 | help | 90 | help |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index f609a0f232cb..8bc72d07cea8 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
@@ -14,6 +14,7 @@ obj-$(CONFIG_ARCH_PXA_IDP) += idp.o | |||
14 | obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o corgi_ssp.o corgi_lcd.o ssp.o | 14 | obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o corgi_ssp.o corgi_lcd.o ssp.o |
15 | obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o ssp.o | 15 | obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o ssp.o |
16 | obj-$(CONFIG_MACH_POODLE) += poodle.o | 16 | obj-$(CONFIG_MACH_POODLE) += poodle.o |
17 | obj-$(CONFIG_MACH_TOSA) += tosa.o | ||
17 | 18 | ||
18 | # Support for blinky lights | 19 | # Support for blinky lights |
19 | led-y := leds.o | 20 | led-y := leds.o |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 9c6e77faec5b..b464bc88ff93 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -19,16 +19,20 @@ | |||
19 | #include <linux/major.h> | 19 | #include <linux/major.h> |
20 | #include <linux/fb.h> | 20 | #include <linux/fb.h> |
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/mtd/mtd.h> | ||
23 | #include <linux/mtd/partitions.h> | ||
22 | 24 | ||
23 | #include <asm/setup.h> | 25 | #include <asm/setup.h> |
24 | #include <asm/memory.h> | 26 | #include <asm/memory.h> |
25 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
26 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
27 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
30 | #include <asm/sizes.h> | ||
28 | 31 | ||
29 | #include <asm/mach/arch.h> | 32 | #include <asm/mach/arch.h> |
30 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
31 | #include <asm/mach/irq.h> | 34 | #include <asm/mach/irq.h> |
35 | #include <asm/mach/flash.h> | ||
32 | 36 | ||
33 | #include <asm/hardware/sa1111.h> | 37 | #include <asm/hardware/sa1111.h> |
34 | 38 | ||
@@ -199,10 +203,75 @@ static struct platform_device smc91x_device = { | |||
199 | .resource = smc91x_resources, | 203 | .resource = smc91x_resources, |
200 | }; | 204 | }; |
201 | 205 | ||
206 | static struct resource flash_resources[] = { | ||
207 | [0] = { | ||
208 | .start = 0x00000000, | ||
209 | .end = SZ_64M - 1, | ||
210 | .flags = IORESOURCE_MEM, | ||
211 | }, | ||
212 | [1] = { | ||
213 | .start = 0x04000000, | ||
214 | .end = 0x04000000 + SZ_64M - 1, | ||
215 | .flags = IORESOURCE_MEM, | ||
216 | }, | ||
217 | }; | ||
218 | |||
219 | static struct mtd_partition lubbock_partitions[] = { | ||
220 | { | ||
221 | .name = "Bootloader", | ||
222 | .size = 0x00040000, | ||
223 | .offset = 0, | ||
224 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
225 | },{ | ||
226 | .name = "Kernel", | ||
227 | .size = 0x00100000, | ||
228 | .offset = 0x00040000, | ||
229 | },{ | ||
230 | .name = "Filesystem", | ||
231 | .size = MTDPART_SIZ_FULL, | ||
232 | .offset = 0x00140000 | ||
233 | } | ||
234 | }; | ||
235 | |||
236 | static struct flash_platform_data lubbock_flash_data[2] = { | ||
237 | { | ||
238 | .map_name = "cfi_probe", | ||
239 | .parts = lubbock_partitions, | ||
240 | .nr_parts = ARRAY_SIZE(lubbock_partitions), | ||
241 | }, { | ||
242 | .map_name = "cfi_probe", | ||
243 | .parts = NULL, | ||
244 | .nr_parts = 0, | ||
245 | } | ||
246 | }; | ||
247 | |||
248 | static struct platform_device lubbock_flash_device[2] = { | ||
249 | { | ||
250 | .name = "pxa2xx-flash", | ||
251 | .id = 0, | ||
252 | .dev = { | ||
253 | .platform_data = &lubbock_flash_data[0], | ||
254 | }, | ||
255 | .resource = &flash_resources[0], | ||
256 | .num_resources = 1, | ||
257 | }, | ||
258 | { | ||
259 | .name = "pxa2xx-flash", | ||
260 | .id = 1, | ||
261 | .dev = { | ||
262 | .platform_data = &lubbock_flash_data[1], | ||
263 | }, | ||
264 | .resource = &flash_resources[1], | ||
265 | .num_resources = 1, | ||
266 | }, | ||
267 | }; | ||
268 | |||
202 | static struct platform_device *devices[] __initdata = { | 269 | static struct platform_device *devices[] __initdata = { |
203 | &sa1111_device, | 270 | &sa1111_device, |
204 | &lub_audio_device, | 271 | &lub_audio_device, |
205 | &smc91x_device, | 272 | &smc91x_device, |
273 | &lubbock_flash_device[0], | ||
274 | &lubbock_flash_device[1], | ||
206 | }; | 275 | }; |
207 | 276 | ||
208 | static struct pxafb_mach_info sharp_lm8v31 __initdata = { | 277 | static struct pxafb_mach_info sharp_lm8v31 __initdata = { |
@@ -315,10 +384,21 @@ static struct pxaficp_platform_data lubbock_ficp_platform_data = { | |||
315 | 384 | ||
316 | static void __init lubbock_init(void) | 385 | static void __init lubbock_init(void) |
317 | { | 386 | { |
387 | int flashboot = (LUB_CONF_SWITCHES & 1); | ||
388 | |||
318 | pxa_set_udc_info(&udc_info); | 389 | pxa_set_udc_info(&udc_info); |
319 | set_pxa_fb_info(&sharp_lm8v31); | 390 | set_pxa_fb_info(&sharp_lm8v31); |
320 | pxa_set_mci_info(&lubbock_mci_platform_data); | 391 | pxa_set_mci_info(&lubbock_mci_platform_data); |
321 | pxa_set_ficp_info(&lubbock_ficp_platform_data); | 392 | pxa_set_ficp_info(&lubbock_ficp_platform_data); |
393 | |||
394 | lubbock_flash_data[0].width = lubbock_flash_data[1].width = | ||
395 | (BOOT_DEF & 1) ? 2 : 4; | ||
396 | /* Compensate for the nROMBT switch which swaps the flash banks */ | ||
397 | printk(KERN_NOTICE "Lubbock configured to boot from %s (bank %d)\n", | ||
398 | flashboot?"Flash":"ROM", flashboot); | ||
399 | |||
400 | lubbock_flash_data[flashboot^1].name = "application-flash"; | ||
401 | lubbock_flash_data[flashboot].name = "boot-rom"; | ||
322 | (void) platform_add_devices(devices, ARRAY_SIZE(devices)); | 402 | (void) platform_add_devices(devices, ARRAY_SIZE(devices)); |
323 | } | 403 | } |
324 | 404 | ||
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 887a8cb7b721..07892f4012d8 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -20,6 +20,9 @@ | |||
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/bitops.h> | 21 | #include <linux/bitops.h> |
22 | #include <linux/fb.h> | 22 | #include <linux/fb.h> |
23 | #include <linux/ioport.h> | ||
24 | #include <linux/mtd/mtd.h> | ||
25 | #include <linux/mtd/partitions.h> | ||
23 | 26 | ||
24 | #include <asm/types.h> | 27 | #include <asm/types.h> |
25 | #include <asm/setup.h> | 28 | #include <asm/setup.h> |
@@ -27,10 +30,12 @@ | |||
27 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
28 | #include <asm/hardware.h> | 31 | #include <asm/hardware.h> |
29 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
33 | #include <asm/sizes.h> | ||
30 | 34 | ||
31 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
32 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
33 | #include <asm/mach/irq.h> | 37 | #include <asm/mach/irq.h> |
38 | #include <asm/mach/flash.h> | ||
34 | 39 | ||
35 | #include <asm/arch/pxa-regs.h> | 40 | #include <asm/arch/pxa-regs.h> |
36 | #include <asm/arch/mainstone.h> | 41 | #include <asm/arch/mainstone.h> |
@@ -190,6 +195,69 @@ static struct platform_device mst_audio_device = { | |||
190 | .dev = { .platform_data = &mst_audio_ops }, | 195 | .dev = { .platform_data = &mst_audio_ops }, |
191 | }; | 196 | }; |
192 | 197 | ||
198 | static struct resource flash_resources[] = { | ||
199 | [0] = { | ||
200 | .start = PXA_CS0_PHYS, | ||
201 | .end = PXA_CS0_PHYS + SZ_64M - 1, | ||
202 | .flags = IORESOURCE_MEM, | ||
203 | }, | ||
204 | [1] = { | ||
205 | .start = PXA_CS1_PHYS, | ||
206 | .end = PXA_CS1_PHYS + SZ_64M - 1, | ||
207 | .flags = IORESOURCE_MEM, | ||
208 | }, | ||
209 | }; | ||
210 | |||
211 | static struct mtd_partition mainstoneflash0_partitions[] = { | ||
212 | { | ||
213 | .name = "Bootloader", | ||
214 | .size = 0x00040000, | ||
215 | .offset = 0, | ||
216 | .mask_flags = MTD_WRITEABLE /* force read-only */ | ||
217 | },{ | ||
218 | .name = "Kernel", | ||
219 | .size = 0x00400000, | ||
220 | .offset = 0x00040000, | ||
221 | },{ | ||
222 | .name = "Filesystem", | ||
223 | .size = MTDPART_SIZ_FULL, | ||
224 | .offset = 0x00440000 | ||
225 | } | ||
226 | }; | ||
227 | |||
228 | static struct flash_platform_data mst_flash_data[2] = { | ||
229 | { | ||
230 | .map_name = "cfi_probe", | ||
231 | .parts = mainstoneflash0_partitions, | ||
232 | .nr_parts = ARRAY_SIZE(mainstoneflash0_partitions), | ||
233 | }, { | ||
234 | .map_name = "cfi_probe", | ||
235 | .parts = NULL, | ||
236 | .nr_parts = 0, | ||
237 | } | ||
238 | }; | ||
239 | |||
240 | static struct platform_device mst_flash_device[2] = { | ||
241 | { | ||
242 | .name = "pxa2xx-flash", | ||
243 | .id = 0, | ||
244 | .dev = { | ||
245 | .platform_data = &mst_flash_data[0], | ||
246 | }, | ||
247 | .resource = &flash_resources[0], | ||
248 | .num_resources = 1, | ||
249 | }, | ||
250 | { | ||
251 | .name = "pxa2xx-flash", | ||
252 | .id = 1, | ||
253 | .dev = { | ||
254 | .platform_data = &mst_flash_data[1], | ||
255 | }, | ||
256 | .resource = &flash_resources[1], | ||
257 | .num_resources = 1, | ||
258 | }, | ||
259 | }; | ||
260 | |||
193 | static void mainstone_backlight_power(int on) | 261 | static void mainstone_backlight_power(int on) |
194 | { | 262 | { |
195 | if (on) { | 263 | if (on) { |
@@ -318,16 +386,34 @@ static struct pxaficp_platform_data mainstone_ficp_platform_data = { | |||
318 | .transceiver_mode = mainstone_irda_transceiver_mode, | 386 | .transceiver_mode = mainstone_irda_transceiver_mode, |
319 | }; | 387 | }; |
320 | 388 | ||
389 | static struct platform_device *platform_devices[] __initdata = { | ||
390 | &smc91x_device, | ||
391 | &mst_audio_device, | ||
392 | &mst_flash_device[0], | ||
393 | &mst_flash_device[1], | ||
394 | }; | ||
395 | |||
321 | static void __init mainstone_init(void) | 396 | static void __init mainstone_init(void) |
322 | { | 397 | { |
398 | int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */ | ||
399 | |||
400 | mst_flash_data[0].width = (BOOT_DEF & 1) ? 2 : 4; | ||
401 | mst_flash_data[1].width = 4; | ||
402 | |||
403 | /* Compensate for SW7 which swaps the flash banks */ | ||
404 | mst_flash_data[SW7].name = "processor-flash"; | ||
405 | mst_flash_data[SW7 ^ 1].name = "mainboard-flash"; | ||
406 | |||
407 | printk(KERN_NOTICE "Mainstone configured to boot from %s\n", | ||
408 | mst_flash_data[0].name); | ||
409 | |||
323 | /* | 410 | /* |
324 | * On Mainstone, we route AC97_SYSCLK via GPIO45 to | 411 | * On Mainstone, we route AC97_SYSCLK via GPIO45 to |
325 | * the audio daughter card | 412 | * the audio daughter card |
326 | */ | 413 | */ |
327 | pxa_gpio_mode(GPIO45_SYSCLK_AC97_MD); | 414 | pxa_gpio_mode(GPIO45_SYSCLK_AC97_MD); |
328 | 415 | ||
329 | platform_device_register(&smc91x_device); | 416 | platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); |
330 | platform_device_register(&mst_audio_device); | ||
331 | 417 | ||
332 | /* reading Mainstone's "Virtual Configuration Register" | 418 | /* reading Mainstone's "Virtual Configuration Register" |
333 | might be handy to select LCD type here */ | 419 | might be handy to select LCD type here */ |
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c index ac4dd4336160..f74b9af112dc 100644 --- a/arch/arm/mach-pxa/pm.c +++ b/arch/arm/mach-pxa/pm.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | #include <linux/config.h> | 13 | #include <linux/config.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/module.h> | ||
15 | #include <linux/suspend.h> | 16 | #include <linux/suspend.h> |
16 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
17 | #include <linux/time.h> | 18 | #include <linux/time.h> |
@@ -19,6 +20,7 @@ | |||
19 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> |
20 | #include <asm/memory.h> | 21 | #include <asm/memory.h> |
21 | #include <asm/system.h> | 22 | #include <asm/system.h> |
23 | #include <asm/arch/pm.h> | ||
22 | #include <asm/arch/pxa-regs.h> | 24 | #include <asm/arch/pxa-regs.h> |
23 | #include <asm/arch/lubbock.h> | 25 | #include <asm/arch/lubbock.h> |
24 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
@@ -72,7 +74,7 @@ enum { SLEEP_SAVE_START = 0, | |||
72 | }; | 74 | }; |
73 | 75 | ||
74 | 76 | ||
75 | static int pxa_pm_enter(suspend_state_t state) | 77 | int pxa_pm_enter(suspend_state_t state) |
76 | { | 78 | { |
77 | unsigned long sleep_save[SLEEP_SAVE_SIZE]; | 79 | unsigned long sleep_save[SLEEP_SAVE_SIZE]; |
78 | unsigned long checksum = 0; | 80 | unsigned long checksum = 0; |
@@ -191,6 +193,8 @@ static int pxa_pm_enter(suspend_state_t state) | |||
191 | return 0; | 193 | return 0; |
192 | } | 194 | } |
193 | 195 | ||
196 | EXPORT_SYMBOL_GPL(pxa_pm_enter); | ||
197 | |||
194 | unsigned long sleep_phys_sp(void *sp) | 198 | unsigned long sleep_phys_sp(void *sp) |
195 | { | 199 | { |
196 | return virt_to_phys(sp); | 200 | return virt_to_phys(sp); |
@@ -199,21 +203,25 @@ unsigned long sleep_phys_sp(void *sp) | |||
199 | /* | 203 | /* |
200 | * Called after processes are frozen, but before we shut down devices. | 204 | * Called after processes are frozen, but before we shut down devices. |
201 | */ | 205 | */ |
202 | static int pxa_pm_prepare(suspend_state_t state) | 206 | int pxa_pm_prepare(suspend_state_t state) |
203 | { | 207 | { |
204 | extern int pxa_cpu_pm_prepare(suspend_state_t state); | 208 | extern int pxa_cpu_pm_prepare(suspend_state_t state); |
205 | 209 | ||
206 | return pxa_cpu_pm_prepare(state); | 210 | return pxa_cpu_pm_prepare(state); |
207 | } | 211 | } |
208 | 212 | ||
213 | EXPORT_SYMBOL_GPL(pxa_pm_prepare); | ||
214 | |||
209 | /* | 215 | /* |
210 | * Called after devices are re-setup, but before processes are thawed. | 216 | * Called after devices are re-setup, but before processes are thawed. |
211 | */ | 217 | */ |
212 | static int pxa_pm_finish(suspend_state_t state) | 218 | int pxa_pm_finish(suspend_state_t state) |
213 | { | 219 | { |
214 | return 0; | 220 | return 0; |
215 | } | 221 | } |
216 | 222 | ||
223 | EXPORT_SYMBOL_GPL(pxa_pm_finish); | ||
224 | |||
217 | /* | 225 | /* |
218 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. | 226 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. |
219 | */ | 227 | */ |
@@ -230,4 +238,4 @@ static int __init pxa_pm_init(void) | |||
230 | return 0; | 238 | return 0; |
231 | } | 239 | } |
232 | 240 | ||
233 | late_initcall(pxa_pm_init); | 241 | device_initcall(pxa_pm_init); |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c new file mode 100644 index 000000000000..400609f8b6a8 --- /dev/null +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Support for Sharp SL-C6000x PDAs | ||
3 | * Model: (Tosa) | ||
4 | * | ||
5 | * Copyright (c) 2005 Dirk Opfer | ||
6 | * | ||
7 | * Based on code written by Sharp/Lineo for 2.4 kernels | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/device.h> | ||
18 | #include <linux/major.h> | ||
19 | #include <linux/fs.h> | ||
20 | #include <linux/interrupt.h> | ||
21 | #include <linux/mmc/host.h> | ||
22 | |||
23 | #include <asm/setup.h> | ||
24 | #include <asm/memory.h> | ||
25 | #include <asm/mach-types.h> | ||
26 | #include <asm/hardware.h> | ||
27 | #include <asm/irq.h> | ||
28 | #include <asm/arch/irda.h> | ||
29 | #include <asm/arch/mmc.h> | ||
30 | #include <asm/arch/udc.h> | ||
31 | |||
32 | #include <asm/mach/arch.h> | ||
33 | #include <asm/mach/map.h> | ||
34 | #include <asm/mach/irq.h> | ||
35 | |||
36 | #include <asm/arch/pxa-regs.h> | ||
37 | #include <asm/arch/irq.h> | ||
38 | #include <asm/arch/tosa.h> | ||
39 | |||
40 | #include <asm/hardware/scoop.h> | ||
41 | #include <asm/mach/sharpsl_param.h> | ||
42 | |||
43 | #include "generic.h" | ||
44 | |||
45 | |||
46 | /* | ||
47 | * SCOOP Device | ||
48 | */ | ||
49 | static struct resource tosa_scoop_resources[] = { | ||
50 | [0] = { | ||
51 | .start = TOSA_CF_PHYS, | ||
52 | .end = TOSA_CF_PHYS + 0xfff, | ||
53 | .flags = IORESOURCE_MEM, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static struct scoop_config tosa_scoop_setup = { | ||
58 | .io_dir = TOSA_SCOOP_IO_DIR, | ||
59 | .io_out = TOSA_SCOOP_IO_OUT, | ||
60 | |||
61 | }; | ||
62 | |||
63 | struct platform_device tosascoop_device = { | ||
64 | .name = "sharp-scoop", | ||
65 | .id = 0, | ||
66 | .dev = { | ||
67 | .platform_data = &tosa_scoop_setup, | ||
68 | }, | ||
69 | .num_resources = ARRAY_SIZE(tosa_scoop_resources), | ||
70 | .resource = tosa_scoop_resources, | ||
71 | }; | ||
72 | |||
73 | |||
74 | /* | ||
75 | * SCOOP Device Jacket | ||
76 | */ | ||
77 | static struct resource tosa_scoop_jc_resources[] = { | ||
78 | [0] = { | ||
79 | .start = TOSA_SCOOP_PHYS + 0x40, | ||
80 | .end = TOSA_SCOOP_PHYS + 0xfff, | ||
81 | .flags = IORESOURCE_MEM, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | static struct scoop_config tosa_scoop_jc_setup = { | ||
86 | .io_dir = TOSA_SCOOP_JC_IO_DIR, | ||
87 | .io_out = TOSA_SCOOP_JC_IO_OUT, | ||
88 | }; | ||
89 | |||
90 | struct platform_device tosascoop_jc_device = { | ||
91 | .name = "sharp-scoop", | ||
92 | .id = 1, | ||
93 | .dev = { | ||
94 | .platform_data = &tosa_scoop_jc_setup, | ||
95 | .parent = &tosascoop_device.dev, | ||
96 | }, | ||
97 | .num_resources = ARRAY_SIZE(tosa_scoop_jc_resources), | ||
98 | .resource = tosa_scoop_jc_resources, | ||
99 | }; | ||
100 | |||
101 | static struct scoop_pcmcia_dev tosa_pcmcia_scoop[] = { | ||
102 | { | ||
103 | .dev = &tosascoop_device.dev, | ||
104 | .irq = TOSA_IRQ_GPIO_CF_IRQ, | ||
105 | .cd_irq = TOSA_IRQ_GPIO_CF_CD, | ||
106 | .cd_irq_str = "PCMCIA0 CD", | ||
107 | },{ | ||
108 | .dev = &tosascoop_jc_device.dev, | ||
109 | .irq = TOSA_IRQ_GPIO_JC_CF_IRQ, | ||
110 | .cd_irq = -1, | ||
111 | }, | ||
112 | }; | ||
113 | |||
114 | |||
115 | static struct platform_device *devices[] __initdata = { | ||
116 | &tosascoop_device, | ||
117 | &tosascoop_jc_device, | ||
118 | }; | ||
119 | |||
120 | static void __init tosa_init(void) | ||
121 | { | ||
122 | pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_IN); | ||
123 | pxa_gpio_mode(TOSA_GPIO_TC6393_INT | GPIO_IN); | ||
124 | |||
125 | /* setup sleep mode values */ | ||
126 | PWER = 0x00000002; | ||
127 | PFER = 0x00000000; | ||
128 | PRER = 0x00000002; | ||
129 | PGSR0 = 0x00000000; | ||
130 | PGSR1 = 0x00FF0002; | ||
131 | PGSR2 = 0x00014000; | ||
132 | PCFR |= PCFR_OPDE; | ||
133 | |||
134 | // enable batt_fault | ||
135 | PMCR = 0x01; | ||
136 | |||
137 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
138 | |||
139 | scoop_num = 2; | ||
140 | scoop_devs = &tosa_pcmcia_scoop[0]; | ||
141 | } | ||
142 | |||
143 | static void __init fixup_tosa(struct machine_desc *desc, | ||
144 | struct tag *tags, char **cmdline, struct meminfo *mi) | ||
145 | { | ||
146 | sharpsl_save_param(); | ||
147 | mi->nr_banks=1; | ||
148 | mi->bank[0].start = 0xa0000000; | ||
149 | mi->bank[0].node = 0; | ||
150 | mi->bank[0].size = (64*1024*1024); | ||
151 | } | ||
152 | |||
153 | MACHINE_START(TOSA, "SHARP Tosa") | ||
154 | .phys_ram = 0xa0000000, | ||
155 | .phys_io = 0x40000000, | ||
156 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | ||
157 | .fixup = fixup_tosa, | ||
158 | .map_io = pxa_map_io, | ||
159 | .init_irq = pxa_init_irq, | ||
160 | .init_machine = tosa_init, | ||
161 | .timer = &pxa_timer, | ||
162 | MACHINE_END | ||