diff options
Diffstat (limited to 'arch/arm/mach-pxa/lubbock.c')
-rw-r--r-- | arch/arm/mach-pxa/lubbock.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 9c6e77faec5..b464bc88ff9 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 | ||