aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-w90x900/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-w90x900/dev.c')
-rw-r--r--arch/arm/mach-w90x900/dev.c55
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
388static 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
411static 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
387static struct resource nuc900_lcd_resource[] = { 425static 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
412void 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*/
427static u64 nuc900_device_audio_dmamask = -1; 452static u64 nuc900_device_audio_dmamask = -1;
428static struct resource nuc900_ac97_resource[] = { 453static struct resource nuc900_ac97_resource[] = {