2011-01-19 04:08:06 +08:00
|
|
|
#include <linux/device.h>
|
|
|
|
#include <linux/dma-mapping.h>
|
|
|
|
#include <linux/amba/bus.h>
|
|
|
|
#include <linux/amba/clcd.h>
|
2014-05-23 05:25:14 +08:00
|
|
|
#include <linux/platform_data/video-clcd-versatile.h>
|
2011-01-19 04:08:06 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
dma, mm/pat: Rename dma_*_writecombine() to dma_*_wc()
Rename dma_*_writecombine() to dma_*_wc(), so that the naming
is coherent across the various write-combining APIs. Keep the
old names for compatibility for a while, these can be removed
at a later time. A guard is left to enable backporting of the
rename, and later remove of the old mapping defines seemlessly.
Build tested successfully with allmodconfig.
The following Coccinelle SmPL patch was used for this simple
transformation:
@ rename_dma_alloc_writecombine @
expression dev, size, dma_addr, gfp;
@@
-dma_alloc_writecombine(dev, size, dma_addr, gfp)
+dma_alloc_wc(dev, size, dma_addr, gfp)
@ rename_dma_free_writecombine @
expression dev, size, cpu_addr, dma_addr;
@@
-dma_free_writecombine(dev, size, cpu_addr, dma_addr)
+dma_free_wc(dev, size, cpu_addr, dma_addr)
@ rename_dma_mmap_writecombine @
expression dev, vma, cpu_addr, dma_addr, size;
@@
-dma_mmap_writecombine(dev, vma, cpu_addr, dma_addr, size)
+dma_mmap_wc(dev, vma, cpu_addr, dma_addr, size)
We also keep the old names as compatibility helpers, and
guard against their definition to make backporting easier.
Generated-by: Coccinelle SmPL
Suggested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: airlied@linux.ie
Cc: akpm@linux-foundation.org
Cc: benh@kernel.crashing.org
Cc: bhelgaas@google.com
Cc: bp@suse.de
Cc: dan.j.williams@intel.com
Cc: daniel.vetter@ffwll.ch
Cc: dhowells@redhat.com
Cc: julia.lawall@lip6.fr
Cc: konrad.wilk@oracle.com
Cc: linux-fbdev@vger.kernel.org
Cc: linux-pci@vger.kernel.org
Cc: luto@amacapital.net
Cc: mst@redhat.com
Cc: tomi.valkeinen@ti.com
Cc: toshi.kani@hp.com
Cc: vinod.koul@intel.com
Cc: xen-devel@lists.xensource.com
Link: http://lkml.kernel.org/r/1453516462-4844-1-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-01-23 10:34:22 +08:00
|
|
|
fb->fb.screen_base = dma_alloc_wc(&fb->dev->dev, framesize, &dma,
|
|
|
|
GFP_KERNEL);
|
2011-01-19 04:08:06 +08:00
|
|
|
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)
|
|
|
|
{
|
dma, mm/pat: Rename dma_*_writecombine() to dma_*_wc()
Rename dma_*_writecombine() to dma_*_wc(), so that the naming
is coherent across the various write-combining APIs. Keep the
old names for compatibility for a while, these can be removed
at a later time. A guard is left to enable backporting of the
rename, and later remove of the old mapping defines seemlessly.
Build tested successfully with allmodconfig.
The following Coccinelle SmPL patch was used for this simple
transformation:
@ rename_dma_alloc_writecombine @
expression dev, size, dma_addr, gfp;
@@
-dma_alloc_writecombine(dev, size, dma_addr, gfp)
+dma_alloc_wc(dev, size, dma_addr, gfp)
@ rename_dma_free_writecombine @
expression dev, size, cpu_addr, dma_addr;
@@
-dma_free_writecombine(dev, size, cpu_addr, dma_addr)
+dma_free_wc(dev, size, cpu_addr, dma_addr)
@ rename_dma_mmap_writecombine @
expression dev, vma, cpu_addr, dma_addr, size;
@@
-dma_mmap_writecombine(dev, vma, cpu_addr, dma_addr, size)
+dma_mmap_wc(dev, vma, cpu_addr, dma_addr, size)
We also keep the old names as compatibility helpers, and
guard against their definition to make backporting easier.
Generated-by: Coccinelle SmPL
Suggested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: airlied@linux.ie
Cc: akpm@linux-foundation.org
Cc: benh@kernel.crashing.org
Cc: bhelgaas@google.com
Cc: bp@suse.de
Cc: dan.j.williams@intel.com
Cc: daniel.vetter@ffwll.ch
Cc: dhowells@redhat.com
Cc: julia.lawall@lip6.fr
Cc: konrad.wilk@oracle.com
Cc: linux-fbdev@vger.kernel.org
Cc: linux-pci@vger.kernel.org
Cc: luto@amacapital.net
Cc: mst@redhat.com
Cc: tomi.valkeinen@ti.com
Cc: toshi.kani@hp.com
Cc: vinod.koul@intel.com
Cc: xen-devel@lists.xensource.com
Link: http://lkml.kernel.org/r/1453516462-4844-1-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-01-23 10:34:22 +08:00
|
|
|
return dma_mmap_wc(&fb->dev->dev, vma, fb->fb.screen_base,
|
|
|
|
fb->fb.fix.smem_start, fb->fb.fix.smem_len);
|
2011-01-19 04:08:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void versatile_clcd_remove_dma(struct clcd_fb *fb)
|
|
|
|
{
|
dma, mm/pat: Rename dma_*_writecombine() to dma_*_wc()
Rename dma_*_writecombine() to dma_*_wc(), so that the naming
is coherent across the various write-combining APIs. Keep the
old names for compatibility for a while, these can be removed
at a later time. A guard is left to enable backporting of the
rename, and later remove of the old mapping defines seemlessly.
Build tested successfully with allmodconfig.
The following Coccinelle SmPL patch was used for this simple
transformation:
@ rename_dma_alloc_writecombine @
expression dev, size, dma_addr, gfp;
@@
-dma_alloc_writecombine(dev, size, dma_addr, gfp)
+dma_alloc_wc(dev, size, dma_addr, gfp)
@ rename_dma_free_writecombine @
expression dev, size, cpu_addr, dma_addr;
@@
-dma_free_writecombine(dev, size, cpu_addr, dma_addr)
+dma_free_wc(dev, size, cpu_addr, dma_addr)
@ rename_dma_mmap_writecombine @
expression dev, vma, cpu_addr, dma_addr, size;
@@
-dma_mmap_writecombine(dev, vma, cpu_addr, dma_addr, size)
+dma_mmap_wc(dev, vma, cpu_addr, dma_addr, size)
We also keep the old names as compatibility helpers, and
guard against their definition to make backporting easier.
Generated-by: Coccinelle SmPL
Suggested-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: airlied@linux.ie
Cc: akpm@linux-foundation.org
Cc: benh@kernel.crashing.org
Cc: bhelgaas@google.com
Cc: bp@suse.de
Cc: dan.j.williams@intel.com
Cc: daniel.vetter@ffwll.ch
Cc: dhowells@redhat.com
Cc: julia.lawall@lip6.fr
Cc: konrad.wilk@oracle.com
Cc: linux-fbdev@vger.kernel.org
Cc: linux-pci@vger.kernel.org
Cc: luto@amacapital.net
Cc: mst@redhat.com
Cc: tomi.valkeinen@ti.com
Cc: toshi.kani@hp.com
Cc: vinod.koul@intel.com
Cc: xen-devel@lists.xensource.com
Link: http://lkml.kernel.org/r/1453516462-4844-1-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-01-23 10:34:22 +08:00
|
|
|
dma_free_wc(&fb->dev->dev, fb->fb.fix.smem_len, fb->fb.screen_base,
|
|
|
|
fb->fb.fix.smem_start);
|
2011-01-19 04:08:06 +08:00
|
|
|
}
|