diff options
Diffstat (limited to 'arch/arm/mach-w90x900/dev.c')
-rw-r--r-- | arch/arm/mach-w90x900/dev.c | 96 |
1 files changed, 79 insertions, 17 deletions
diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index b2eda4dc1c34..7a1fa6adb7c3 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
@@ -36,6 +36,8 @@ | |||
36 | #include <mach/nuc900_spi.h> | 36 | #include <mach/nuc900_spi.h> |
37 | #include <mach/map.h> | 37 | #include <mach/map.h> |
38 | #include <mach/fb.h> | 38 | #include <mach/fb.h> |
39 | #include <mach/regs-ldm.h> | ||
40 | #include <mach/w90p910_keypad.h> | ||
39 | 41 | ||
40 | #include "cpu.h" | 42 | #include "cpu.h" |
41 | 43 | ||
@@ -207,7 +209,7 @@ static struct nuc900_spi_info nuc900_spiflash_data = { | |||
207 | .divider = 24, | 209 | .divider = 24, |
208 | .sleep = 0, | 210 | .sleep = 0, |
209 | .txnum = 0, | 211 | .txnum = 0, |
210 | .txbitlen = 1, | 212 | .txbitlen = 8, |
211 | .bus_num = 0, | 213 | .bus_num = 0, |
212 | }; | 214 | }; |
213 | 215 | ||
@@ -256,7 +258,7 @@ static struct spi_board_info nuc900_spi_board_info[] __initdata = { | |||
256 | .modalias = "m25p80", | 258 | .modalias = "m25p80", |
257 | .max_speed_hz = 20000000, | 259 | .max_speed_hz = 20000000, |
258 | .bus_num = 0, | 260 | .bus_num = 0, |
259 | .chip_select = 1, | 261 | .chip_select = 0, |
260 | .platform_data = &nuc900_spi_flash_data, | 262 | .platform_data = &nuc900_spi_flash_data, |
261 | .mode = SPI_MODE_0, | 263 | .mode = SPI_MODE_0, |
262 | }, | 264 | }, |
@@ -361,6 +363,39 @@ struct platform_device nuc900_device_fmi = { | |||
361 | 363 | ||
362 | /* KPI controller*/ | 364 | /* KPI controller*/ |
363 | 365 | ||
366 | static int nuc900_keymap[] = { | ||
367 | KEY(0, 0, KEY_A), | ||
368 | KEY(0, 1, KEY_B), | ||
369 | KEY(0, 2, KEY_C), | ||
370 | KEY(0, 3, KEY_D), | ||
371 | |||
372 | KEY(1, 0, KEY_E), | ||
373 | KEY(1, 1, KEY_F), | ||
374 | KEY(1, 2, KEY_G), | ||
375 | KEY(1, 3, KEY_H), | ||
376 | |||
377 | KEY(2, 0, KEY_I), | ||
378 | KEY(2, 1, KEY_J), | ||
379 | KEY(2, 2, KEY_K), | ||
380 | KEY(2, 3, KEY_L), | ||
381 | |||
382 | KEY(3, 0, KEY_M), | ||
383 | KEY(3, 1, KEY_N), | ||
384 | KEY(3, 2, KEY_O), | ||
385 | KEY(3, 3, KEY_P), | ||
386 | }; | ||
387 | |||
388 | static struct matrix_keymap_data nuc900_map_data = { | ||
389 | .keymap = nuc900_keymap, | ||
390 | .keymap_size = ARRAY_SIZE(nuc900_keymap), | ||
391 | }; | ||
392 | |||
393 | struct w90p910_keypad_platform_data nuc900_keypad_info = { | ||
394 | .keymap_data = &nuc900_map_data, | ||
395 | .prescale = 0xfa, | ||
396 | .debounce = 0x50, | ||
397 | }; | ||
398 | |||
364 | static struct resource nuc900_kpi_resource[] = { | 399 | static struct resource nuc900_kpi_resource[] = { |
365 | [0] = { | 400 | [0] = { |
366 | .start = W90X900_PA_KPI, | 401 | .start = W90X900_PA_KPI, |
@@ -380,9 +415,49 @@ struct platform_device nuc900_device_kpi = { | |||
380 | .id = -1, | 415 | .id = -1, |
381 | .num_resources = ARRAY_SIZE(nuc900_kpi_resource), | 416 | .num_resources = ARRAY_SIZE(nuc900_kpi_resource), |
382 | .resource = nuc900_kpi_resource, | 417 | .resource = nuc900_kpi_resource, |
418 | .dev = { | ||
419 | .platform_data = &nuc900_keypad_info, | ||
420 | } | ||
383 | }; | 421 | }; |
384 | 422 | ||
385 | #ifdef CONFIG_FB_NUC900 | 423 | /* LCD controller*/ |
424 | |||
425 | static struct nuc900fb_display __initdata nuc900_lcd_info[] = { | ||
426 | /* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */ | ||
427 | [0] = { | ||
428 | .type = LCM_DCCS_VA_SRC_RGB565, | ||
429 | .width = 320, | ||
430 | .height = 240, | ||
431 | .xres = 320, | ||
432 | .yres = 240, | ||
433 | .bpp = 16, | ||
434 | .pixclock = 200000, | ||
435 | .left_margin = 34, | ||
436 | .right_margin = 54, | ||
437 | .hsync_len = 10, | ||
438 | .upper_margin = 18, | ||
439 | .lower_margin = 4, | ||
440 | .vsync_len = 1, | ||
441 | .dccs = 0x8e00041a, | ||
442 | .devctl = 0x060800c0, | ||
443 | .fbctrl = 0x00a000a0, | ||
444 | .scale = 0x04000400, | ||
445 | }, | ||
446 | }; | ||
447 | |||
448 | static struct nuc900fb_mach_info nuc900_fb_info __initdata = { | ||
449 | #if defined(CONFIG_GPM1040A0_320X240) | ||
450 | .displays = &nuc900_lcd_info[0], | ||
451 | #else | ||
452 | .displays = nuc900_lcd_info, | ||
453 | #endif | ||
454 | .num_displays = ARRAY_SIZE(nuc900_lcd_info), | ||
455 | .default_display = 0, | ||
456 | .gpio_dir = 0x00000004, | ||
457 | .gpio_dir_mask = 0xFFFFFFFD, | ||
458 | .gpio_data = 0x00000004, | ||
459 | .gpio_data_mask = 0xFFFFFFFD, | ||
460 | }; | ||
386 | 461 | ||
387 | static struct resource nuc900_lcd_resource[] = { | 462 | static struct resource nuc900_lcd_resource[] = { |
388 | [0] = { | 463 | [0] = { |
@@ -406,23 +481,10 @@ struct platform_device nuc900_device_lcd = { | |||
406 | .dev = { | 481 | .dev = { |
407 | .dma_mask = &nuc900_device_lcd_dmamask, | 482 | .dma_mask = &nuc900_device_lcd_dmamask, |
408 | .coherent_dma_mask = -1, | 483 | .coherent_dma_mask = -1, |
484 | .platform_data = &nuc900_fb_info, | ||
409 | } | 485 | } |
410 | }; | 486 | }; |
411 | 487 | ||
412 | void nuc900_fb_set_platdata(struct nuc900fb_mach_info *pd) | ||
413 | { | ||
414 | struct nuc900fb_mach_info *npd; | ||
415 | |||
416 | npd = kmalloc(sizeof(*npd), GFP_KERNEL); | ||
417 | if (npd) { | ||
418 | memcpy(npd, pd, sizeof(*npd)); | ||
419 | nuc900_device_lcd.dev.platform_data = npd; | ||
420 | } else { | ||
421 | printk(KERN_ERR "no memory for LCD platform data\n"); | ||
422 | } | ||
423 | } | ||
424 | #endif | ||
425 | |||
426 | /* AUDIO controller*/ | 488 | /* AUDIO controller*/ |
427 | static u64 nuc900_device_audio_dmamask = -1; | 489 | static u64 nuc900_device_audio_dmamask = -1; |
428 | static struct resource nuc900_ac97_resource[] = { | 490 | static struct resource nuc900_ac97_resource[] = { |