video: move Versatile CLCD helpers
This moves the Versatile-specific helper code and panel database down into the drivers/video folder next to the CLCD driver itself, preserving the config symbol but also moving the header to platform data. This is necessary to rid the Integrator of this final <plat/*> inclusion dependency and get us one less user of the plat-versatile folder. Cc: Arnd Bergmann <arnd@arndb.de> Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com> Cc: linux-fbdev@vger.kernel.org Cc: Russell King <linux@arm.linux.org.uk> Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
e6dc195c1c
commit
11c32d7b62
11 changed files with 13 additions and 12 deletions
|
|
@ -17,7 +17,6 @@ config ARCH_INTEGRATOR_CP
|
|||
bool "Support Integrator/CP platform"
|
||||
select ARCH_CINTEGRATOR
|
||||
select ARM_TIMER_SP804
|
||||
select PLAT_VERSATILE_CLCD
|
||||
select SERIAL_AMBA_PL011 if TTY
|
||||
select SERIAL_AMBA_PL011_CONSOLE if TTY
|
||||
select SOC_BUS
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/kmi.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
#include <linux/amba/mmci.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqchip/versatile-fpga.h>
|
||||
|
|
@ -36,8 +37,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include <plat/clcd.h>
|
||||
|
||||
#include "hardware.h"
|
||||
#include "cm.h"
|
||||
#include "common.h"
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/ata_platform.h>
|
||||
|
|
@ -48,7 +49,6 @@
|
|||
#include <mach/irqs.h>
|
||||
#include <asm/hardware/timer-sp.h>
|
||||
|
||||
#include <plat/clcd.h>
|
||||
#include <plat/sched_clock.h>
|
||||
|
||||
#include "core.h"
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <linux/of_platform.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
#include <linux/amba/pl061.h>
|
||||
#include <linux/amba/mmci.h>
|
||||
#include <linux/amba/pl022.h>
|
||||
|
|
@ -53,7 +54,6 @@
|
|||
#include <mach/platform.h>
|
||||
#include <asm/hardware/timer-sp.h>
|
||||
|
||||
#include <plat/clcd.h>
|
||||
#include <plat/sched_clock.h>
|
||||
|
||||
#include "core.h"
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/vexpress.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
|
|
@ -29,8 +30,6 @@
|
|||
#include <mach/motherboard.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include <plat/clcd.h>
|
||||
|
||||
static struct map_desc ct_ca9x4_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = V2T_PERIPH,
|
||||
|
|
|
|||
|
|
@ -3,9 +3,6 @@ if PLAT_VERSATILE
|
|||
config PLAT_VERSATILE_CLOCK
|
||||
bool
|
||||
|
||||
config PLAT_VERSATILE_CLCD
|
||||
bool
|
||||
|
||||
config PLAT_VERSATILE_SCHED_CLOCK
|
||||
def_bool y
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
|
||||
|
||||
obj-$(CONFIG_PLAT_VERSATILE_CLOCK) += clock.o
|
||||
obj-$(CONFIG_PLAT_VERSATILE_CLCD) += clcd.o
|
||||
obj-$(CONFIG_PLAT_VERSATILE_SCHED_CLOCK) += sched-clock.o
|
||||
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
||||
|
|
|
|||
|
|
@ -290,6 +290,13 @@ config FB_ARMCLCD
|
|||
here and read <file:Documentation/kbuild/modules.txt>. The module
|
||||
will be called amba-clcd.
|
||||
|
||||
# Helper logic selected only by the ARM Versatile platform family.
|
||||
config PLAT_VERSATILE_CLCD
|
||||
depends on FB_ARMCLCD
|
||||
depends on (PLAT_VERSATILE || ARCH_INTEGRATOR)
|
||||
default y
|
||||
bool
|
||||
|
||||
config FB_ACORN
|
||||
bool "Acorn VIDC support"
|
||||
depends on (FB = y) && ARM && ARCH_ACORN
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
|
|||
obj-$(CONFIG_FB_PVR2) += pvr2fb.o
|
||||
obj-$(CONFIG_FB_VOODOO1) += sstfb.o
|
||||
obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
|
||||
obj-$(CONFIG_PLAT_VERSATILE_CLCD) += amba-clcd-versatile.o
|
||||
obj-$(CONFIG_FB_GOLDFISH) += goldfishfb.o
|
||||
obj-$(CONFIG_FB_68328) += 68328fb.o
|
||||
obj-$(CONFIG_FB_GBE) += gbefb.o
|
||||
|
|
|
|||
182
drivers/video/fbdev/amba-clcd-versatile.c
Normal file
182
drivers/video/fbdev/amba-clcd-versatile.c
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
#include <linux/platform_data/video-clcd-versatile.h>
|
||||
|
||||
static struct clcd_panel vga = {
|
||||
.mode = {
|
||||
.name = "VGA",
|
||||
.refresh = 60,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 39721,
|
||||
.left_margin = 40,
|
||||
.right_margin = 24,
|
||||
.upper_margin = 32,
|
||||
.lower_margin = 11,
|
||||
.hsync_len = 96,
|
||||
.vsync_len = 2,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_BCD | TIM2_IPC,
|
||||
.cntl = CNTL_LCDTFT | CNTL_BGR | CNTL_LCDVCOMP(1),
|
||||
.caps = CLCD_CAP_5551 | CLCD_CAP_565 | CLCD_CAP_888,
|
||||
.bpp = 16,
|
||||
};
|
||||
|
||||
static struct clcd_panel xvga = {
|
||||
.mode = {
|
||||
.name = "XVGA",
|
||||
.refresh = 60,
|
||||
.xres = 1024,
|
||||
.yres = 768,
|
||||
.pixclock = 15748,
|
||||
.left_margin = 152,
|
||||
.right_margin = 48,
|
||||
.upper_margin = 23,
|
||||
.lower_margin = 3,
|
||||
.hsync_len = 104,
|
||||
.vsync_len = 4,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_BCD | TIM2_IPC,
|
||||
.cntl = CNTL_LCDTFT | CNTL_BGR | CNTL_LCDVCOMP(1),
|
||||
.caps = CLCD_CAP_5551 | CLCD_CAP_565 | CLCD_CAP_888,
|
||||
.bpp = 16,
|
||||
};
|
||||
|
||||
/* Sanyo TM38QV67A02A - 3.8 inch QVGA (320x240) Color TFT */
|
||||
static struct clcd_panel sanyo_tm38qv67a02a = {
|
||||
.mode = {
|
||||
.name = "Sanyo TM38QV67A02A",
|
||||
.refresh = 116,
|
||||
.xres = 320,
|
||||
.yres = 240,
|
||||
.pixclock = 100000,
|
||||
.left_margin = 6,
|
||||
.right_margin = 6,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 6,
|
||||
.vsync_len = 6,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_BCD,
|
||||
.cntl = CNTL_LCDTFT | CNTL_BGR | CNTL_LCDVCOMP(1),
|
||||
.caps = CLCD_CAP_5551,
|
||||
.bpp = 16,
|
||||
};
|
||||
|
||||
static struct clcd_panel sanyo_2_5_in = {
|
||||
.mode = {
|
||||
.name = "Sanyo QVGA Portrait",
|
||||
.refresh = 116,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.pixclock = 100000,
|
||||
.left_margin = 20,
|
||||
.right_margin = 10,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 2,
|
||||
.hsync_len = 10,
|
||||
.vsync_len = 2,
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_IVS | TIM2_IHS | TIM2_IPC,
|
||||
.cntl = CNTL_LCDTFT | CNTL_BGR | CNTL_LCDVCOMP(1),
|
||||
.caps = CLCD_CAP_5551,
|
||||
.bpp = 16,
|
||||
};
|
||||
|
||||
/* Epson L2F50113T00 - 2.2 inch 176x220 Color TFT */
|
||||
static struct clcd_panel epson_l2f50113t00 = {
|
||||
.mode = {
|
||||
.name = "Epson L2F50113T00",
|
||||
.refresh = 390,
|
||||
.xres = 176,
|
||||
.yres = 220,
|
||||
.pixclock = 62500,
|
||||
.left_margin = 3,
|
||||
.right_margin = 2,
|
||||
.upper_margin = 1,
|
||||
.lower_margin = 0,
|
||||
.hsync_len = 3,
|
||||
.vsync_len = 2,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_BCD | TIM2_IPC,
|
||||
.cntl = CNTL_LCDTFT | CNTL_BGR | CNTL_LCDVCOMP(1),
|
||||
.caps = CLCD_CAP_5551,
|
||||
.bpp = 16,
|
||||
};
|
||||
|
||||
static struct clcd_panel *panels[] = {
|
||||
&vga,
|
||||
&xvga,
|
||||
&sanyo_tm38qv67a02a,
|
||||
&sanyo_2_5_in,
|
||||
&epson_l2f50113t00,
|
||||
};
|
||||
|
||||
struct clcd_panel *versatile_clcd_get_panel(const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(panels); i++)
|
||||
if (strcmp(panels[i]->mode.name, name) == 0)
|
||||
break;
|
||||
|
||||
if (i < ARRAY_SIZE(panels))
|
||||
return panels[i];
|
||||
|
||||
pr_err("CLCD: couldn't get parameters for panel %s\n", name);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int versatile_clcd_setup_dma(struct clcd_fb *fb, unsigned long framesize)
|
||||
{
|
||||
dma_addr_t dma;
|
||||
|
||||
fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, framesize,
|
||||
&dma, GFP_KERNEL);
|
||||
if (!fb->fb.screen_base) {
|
||||
pr_err("CLCD: unable to map framebuffer\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
fb->fb.fix.smem_start = dma;
|
||||
fb->fb.fix.smem_len = framesize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int versatile_clcd_mmap_dma(struct clcd_fb *fb, struct vm_area_struct *vma)
|
||||
{
|
||||
return dma_mmap_writecombine(&fb->dev->dev, vma,
|
||||
fb->fb.screen_base,
|
||||
fb->fb.fix.smem_start,
|
||||
fb->fb.fix.smem_len);
|
||||
}
|
||||
|
||||
void versatile_clcd_remove_dma(struct clcd_fb *fb)
|
||||
{
|
||||
dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len,
|
||||
fb->fb.screen_base, fb->fb.fix.smem_start);
|
||||
}
|
||||
9
include/linux/platform_data/video-clcd-versatile.h
Normal file
9
include/linux/platform_data/video-clcd-versatile.h
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifndef PLAT_CLCD_H
|
||||
#define PLAT_CLCD_H
|
||||
|
||||
struct clcd_panel *versatile_clcd_get_panel(const char *);
|
||||
int versatile_clcd_setup_dma(struct clcd_fb *, unsigned long);
|
||||
int versatile_clcd_mmap_dma(struct clcd_fb *, struct vm_area_struct *);
|
||||
void versatile_clcd_remove_dma(struct clcd_fb *);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue