diff options
Diffstat (limited to 'arch/arm/mach-w90x900/dev.c')
-rw-r--r-- | arch/arm/mach-w90x900/dev.c | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index b2eda4dc1c34..73b3ecaf81c1 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
@@ -36,6 +36,7 @@ | |||
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> | ||
39 | 40 | ||
40 | #include "cpu.h" | 41 | #include "cpu.h" |
41 | 42 | ||
@@ -382,7 +383,44 @@ struct platform_device nuc900_device_kpi = { | |||
382 | .resource = nuc900_kpi_resource, | 383 | .resource = nuc900_kpi_resource, |
383 | }; | 384 | }; |
384 | 385 | ||
385 | #ifdef CONFIG_FB_NUC900 | 386 | /* LCD controller*/ |
387 | |||
388 | static struct nuc900fb_display __initdata nuc900_lcd_info[] = { | ||
389 | /* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */ | ||
390 | [0] = { | ||
391 | .type = LCM_DCCS_VA_SRC_RGB565, | ||
392 | .width = 320, | ||
393 | .height = 240, | ||
394 | .xres = 320, | ||
395 | .yres = 240, | ||
396 | .bpp = 16, | ||
397 | .pixclock = 200000, | ||
398 | .left_margin = 34, | ||
399 | .right_margin = 54, | ||
400 | .hsync_len = 10, | ||
401 | .upper_margin = 18, | ||
402 | .lower_margin = 4, | ||
403 | .vsync_len = 1, | ||
404 | .dccs = 0x8e00041a, | ||
405 | .devctl = 0x060800c0, | ||
406 | .fbctrl = 0x00a000a0, | ||
407 | .scale = 0x04000400, | ||
408 | }, | ||
409 | }; | ||
410 | |||
411 | static struct nuc900fb_mach_info nuc900_fb_info __initdata = { | ||
412 | #if defined(CONFIG_GPM1040A0_320X240) | ||
413 | .displays = &nuc900_lcd_info[0], | ||
414 | #else | ||
415 | .displays = nuc900_lcd_info, | ||
416 | #endif | ||
417 | .num_displays = ARRAY_SIZE(nuc900_lcd_info), | ||
418 | .default_display = 0, | ||
419 | .gpio_dir = 0x00000004, | ||
420 | .gpio_dir_mask = 0xFFFFFFFD, | ||
421 | .gpio_data = 0x00000004, | ||
422 | .gpio_data_mask = 0xFFFFFFFD, | ||
423 | }; | ||
386 | 424 | ||
387 | static struct resource nuc900_lcd_resource[] = { | 425 | static struct resource nuc900_lcd_resource[] = { |
388 | [0] = { | 426 | [0] = { |
@@ -406,23 +444,10 @@ struct platform_device nuc900_device_lcd = { | |||
406 | .dev = { | 444 | .dev = { |
407 | .dma_mask = &nuc900_device_lcd_dmamask, | 445 | .dma_mask = &nuc900_device_lcd_dmamask, |
408 | .coherent_dma_mask = -1, | 446 | .coherent_dma_mask = -1, |
447 | .platform_data = &nuc900_fb_info, | ||
409 | } | 448 | } |
410 | }; | 449 | }; |
411 | 450 | ||
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*/ | 451 | /* AUDIO controller*/ |
427 | static u64 nuc900_device_audio_dmamask = -1; | 452 | static u64 nuc900_device_audio_dmamask = -1; |
428 | static struct resource nuc900_ac97_resource[] = { | 453 | static struct resource nuc900_ac97_resource[] = { |