aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-integrator/Kconfig1
-rw-r--r--arch/arm/mach-integrator/impd1.c5
-rw-r--r--arch/arm/mach-integrator/integrator_cp.c65
3 files changed, 15 insertions, 56 deletions
diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig
index 769b0f10c83..d701d32a07f 100644
--- a/arch/arm/mach-integrator/Kconfig
+++ b/arch/arm/mach-integrator/Kconfig
@@ -13,6 +13,7 @@ config ARCH_INTEGRATOR_CP
13 bool "Support Integrator/CP platform" 13 bool "Support Integrator/CP platform"
14 select ARCH_CINTEGRATOR 14 select ARCH_CINTEGRATOR
15 select ARM_TIMER_SP804 15 select ARM_TIMER_SP804
16 select PLAT_VERSATILE_CLCD
16 help 17 help
17 Include support for the ARM(R) Integrator CP platform. 18 Include support for the ARM(R) Integrator CP platform.
18 19
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c
index 5db574f8ae3..8cbb75a96bd 100644
--- a/arch/arm/mach-integrator/impd1.c
+++ b/arch/arm/mach-integrator/impd1.c
@@ -121,6 +121,7 @@ static struct clcd_panel vga = {
121 .height = -1, 121 .height = -1,
122 .tim2 = TIM2_BCD | TIM2_IPC, 122 .tim2 = TIM2_BCD | TIM2_IPC,
123 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1), 123 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
124 .caps = CLCD_CAP_5551,
124 .connector = IMPD1_CTRL_DISP_VGA, 125 .connector = IMPD1_CTRL_DISP_VGA,
125 .bpp = 16, 126 .bpp = 16,
126 .grayscale = 0, 127 .grayscale = 0,
@@ -149,6 +150,7 @@ static struct clcd_panel svga = {
149 .tim2 = TIM2_BCD, 150 .tim2 = TIM2_BCD,
150 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1), 151 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
151 .connector = IMPD1_CTRL_DISP_VGA, 152 .connector = IMPD1_CTRL_DISP_VGA,
153 .caps = CLCD_CAP_5551,
152 .bpp = 16, 154 .bpp = 16,
153 .grayscale = 0, 155 .grayscale = 0,
154}; 156};
@@ -175,6 +177,7 @@ static struct clcd_panel prospector = {
175 .height = -1, 177 .height = -1,
176 .tim2 = TIM2_BCD, 178 .tim2 = TIM2_BCD,
177 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1), 179 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
180 .caps = CLCD_CAP_5551,
178 .fixedtimings = 1, 181 .fixedtimings = 1,
179 .connector = IMPD1_CTRL_DISP_LCD, 182 .connector = IMPD1_CTRL_DISP_LCD,
180 .bpp = 16, 183 .bpp = 16,
@@ -206,6 +209,7 @@ static struct clcd_panel ltm10c209 = {
206 .height = -1, 209 .height = -1,
207 .tim2 = TIM2_BCD, 210 .tim2 = TIM2_BCD,
208 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1), 211 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
212 .caps = CLCD_CAP_5551,
209 .fixedtimings = 1, 213 .fixedtimings = 1,
210 .connector = IMPD1_CTRL_DISP_LCD, 214 .connector = IMPD1_CTRL_DISP_LCD,
211 .bpp = 16, 215 .bpp = 16,
@@ -279,6 +283,7 @@ static void impd1fb_clcd_remove(struct clcd_fb *fb)
279 283
280static struct clcd_board impd1_clcd_data = { 284static struct clcd_board impd1_clcd_data = {
281 .name = "IM-PD/1", 285 .name = "IM-PD/1",
286 .caps = CLCD_CAP_5551 | CLCD_CAP_888,
282 .check = clcdfb_check, 287 .check = clcdfb_check,
283 .decode = clcdfb_decode, 288 .decode = clcdfb_decode,
284 .disable = impd1fb_clcd_disable, 289 .disable = impd1fb_clcd_disable,
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c
index 860090247b3..9c0203738aa 100644
--- a/arch/arm/mach-integrator/integrator_cp.c
+++ b/arch/arm/mach-integrator/integrator_cp.c
@@ -42,6 +42,8 @@
42 42
43#include <asm/hardware/timer-sp.h> 43#include <asm/hardware/timer-sp.h>
44 44
45#include <plat/clcd.h>
46
45#include "common.h" 47#include "common.h"
46 48
47#define INTCP_PA_FLASH_BASE 0x24000000 49#define INTCP_PA_FLASH_BASE 0x24000000
@@ -449,30 +451,6 @@ static struct amba_device aaci_device = {
449/* 451/*
450 * CLCD support 452 * CLCD support
451 */ 453 */
452static struct clcd_panel vga = {
453 .mode = {
454 .name = "VGA",
455 .refresh = 60,
456 .xres = 640,
457 .yres = 480,
458 .pixclock = 39721,
459 .left_margin = 40,
460 .right_margin = 24,
461 .upper_margin = 32,
462 .lower_margin = 11,
463 .hsync_len = 96,
464 .vsync_len = 2,
465 .sync = 0,
466 .vmode = FB_VMODE_NONINTERLACED,
467 },
468 .width = -1,
469 .height = -1,
470 .tim2 = TIM2_BCD | TIM2_IPC,
471 .cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
472 .bpp = 16,
473 .grayscale = 0,
474};
475
476/* 454/*
477 * Ensure VGA is selected. 455 * Ensure VGA is selected.
478 */ 456 */
@@ -500,49 +478,24 @@ static void cp_clcd_enable(struct clcd_fb *fb)
500 CM_CTRL_n24BITEN, val); 478 CM_CTRL_n24BITEN, val);
501} 479}
502 480
503static unsigned long framesize = SZ_1M;
504
505static int cp_clcd_setup(struct clcd_fb *fb) 481static int cp_clcd_setup(struct clcd_fb *fb)
506{ 482{
507 dma_addr_t dma; 483 fb->panel = versatile_clcd_get_panel("VGA");
508 484 if (!fb->panel)
509 fb->panel = &vga; 485 return -EINVAL;
510
511 fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, framesize,
512 &dma, GFP_KERNEL);
513 if (!fb->fb.screen_base) {
514 printk(KERN_ERR "CLCD: unable to map framebuffer\n");
515 return -ENOMEM;
516 }
517
518 fb->fb.fix.smem_start = dma;
519 fb->fb.fix.smem_len = framesize;
520
521 return 0;
522}
523
524static int cp_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
525{
526 return dma_mmap_writecombine(&fb->dev->dev, vma,
527 fb->fb.screen_base,
528 fb->fb.fix.smem_start,
529 fb->fb.fix.smem_len);
530}
531 486
532static void cp_clcd_remove(struct clcd_fb *fb) 487 return versatile_clcd_setup_dma(fb, SZ_1M);
533{
534 dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len,
535 fb->fb.screen_base, fb->fb.fix.smem_start);
536} 488}
537 489
538static struct clcd_board clcd_data = { 490static struct clcd_board clcd_data = {
539 .name = "Integrator/CP", 491 .name = "Integrator/CP",
492 .caps = CLCD_CAP_5551 | CLCD_CAP_RGB565 | CLCD_CAP_888,
540 .check = clcdfb_check, 493 .check = clcdfb_check,
541 .decode = clcdfb_decode, 494 .decode = clcdfb_decode,
542 .enable = cp_clcd_enable, 495 .enable = cp_clcd_enable,
543 .setup = cp_clcd_setup, 496 .setup = cp_clcd_setup,
544 .mmap = cp_clcd_mmap, 497 .mmap = versatile_clcd_mmap_dma,
545 .remove = cp_clcd_remove, 498 .remove = versatile_clcd_remove_dma,
546}; 499};
547 500
548static struct amba_device clcd_device = { 501static struct amba_device clcd_device = {