diff options
Diffstat (limited to 'arch/arm/mach-pxa/mainstone.c')
| -rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 92 |
1 files changed, 89 insertions, 3 deletions
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index a48c64026e1f..07892f4012d8 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
| @@ -14,12 +14,15 @@ | |||
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/device.h> | 17 | #include <linux/platform_device.h> |
| 18 | #include <linux/sysdev.h> | 18 | #include <linux/sysdev.h> |
| 19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
| 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 */ |
