2013-06-11 15:40:17 +07:00
|
|
|
/*
|
|
|
|
* linux/arch/arm/mach-nspire/clcd.c
|
|
|
|
*
|
|
|
|
* Copyright (C) 2013 Daniel Tang <tangrs@tangrs.id.au>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2, as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/of.h>
|
|
|
|
#include <linux/amba/bus.h>
|
|
|
|
#include <linux/amba/clcd.h>
|
|
|
|
#include <linux/dma-mapping.h>
|
|
|
|
|
|
|
|
static struct clcd_panel nspire_cx_lcd_panel = {
|
|
|
|
.mode = {
|
|
|
|
.name = "Color LCD",
|
|
|
|
.refresh = 60,
|
|
|
|
.xres = 320,
|
|
|
|
.yres = 240,
|
|
|
|
.sync = 0,
|
|
|
|
.vmode = FB_VMODE_NONINTERLACED,
|
|
|
|
.pixclock = 1,
|
|
|
|
.hsync_len = 6,
|
|
|
|
.vsync_len = 1,
|
|
|
|
.right_margin = 50,
|
|
|
|
.left_margin = 38,
|
|
|
|
.lower_margin = 3,
|
|
|
|
.upper_margin = 17,
|
|
|
|
},
|
|
|
|
.width = 65, /* ~6.50 cm */
|
|
|
|
.height = 49, /* ~4.87 cm */
|
|
|
|
.tim2 = TIM2_IPC,
|
|
|
|
.cntl = CNTL_LCDTFT | CNTL_LCDVCOMP(1),
|
|
|
|
.bpp = 16,
|
|
|
|
.caps = CLCD_CAP_565,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct clcd_panel nspire_classic_lcd_panel = {
|
|
|
|
.mode = {
|
|
|
|
.name = "Grayscale LCD",
|
|
|
|
.refresh = 60,
|
|
|
|
.xres = 320,
|
|
|
|
.yres = 240,
|
|
|
|
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
|
|
|
.vmode = FB_VMODE_NONINTERLACED,
|
|
|
|
.pixclock = 1,
|
|
|
|
.hsync_len = 6,
|
|
|
|
.vsync_len = 1,
|
|
|
|
.right_margin = 6,
|
|
|
|
.left_margin = 6,
|
|
|
|
},
|
|
|
|
.width = 71, /* 7.11cm */
|
|
|
|
.height = 53, /* 5.33cm */
|
|
|
|
.tim2 = 0x80007d0,
|
|
|
|
.cntl = CNTL_LCDMONO8,
|
|
|
|
.bpp = 8,
|
|
|
|
.grayscale = 1,
|
|
|
|
.caps = CLCD_CAP_5551,
|
|
|
|
};
|
|
|
|
|
|
|
|
int nspire_clcd_setup(struct clcd_fb *fb)
|
|
|
|
{
|
|
|
|
struct clcd_panel *panel;
|
|
|
|
size_t panel_size;
|
|
|
|
const char *type;
|
|
|
|
dma_addr_t dma;
|
|
|
|
int err;
|
|
|
|
|
|
|
|
BUG_ON(!fb->dev->dev.of_node);
|
|
|
|
|
|
|
|
err = of_property_read_string(fb->dev->dev.of_node, "lcd-type", &type);
|
|
|
|
if (err) {
|
|
|
|
pr_err("CLCD: Could not find lcd-type property\n");
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!strcmp(type, "cx")) {
|
|
|
|
panel = &nspire_cx_lcd_panel;
|
|
|
|
} else if (!strcmp(type, "classic")) {
|
|
|
|
panel = &nspire_classic_lcd_panel;
|
|
|
|
} else {
|
|
|
|
pr_err("CLCD: Unknown lcd-type %s\n", type);
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
|
|
|
|
panel_size = ((panel->mode.xres * panel->mode.yres) * panel->bpp) / 8;
|
|
|
|
panel_size = ALIGN(panel_size, PAGE_SIZE);
|
|
|
|
|
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 09:34:22 +07:00
|
|
|
fb->fb.screen_base = dma_alloc_wc(&fb->dev->dev, panel_size, &dma,
|
|
|
|
GFP_KERNEL);
|
2013-06-11 15:40:17 +07: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 = panel_size;
|
|
|
|
fb->panel = panel;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int nspire_clcd_mmap(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 09:34:22 +07:00
|
|
|
return dma_mmap_wc(&fb->dev->dev, vma, fb->fb.screen_base,
|
|
|
|
fb->fb.fix.smem_start, fb->fb.fix.smem_len);
|
2013-06-11 15:40:17 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
void nspire_clcd_remove(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 09:34:22 +07:00
|
|
|
dma_free_wc(&fb->dev->dev, fb->fb.fix.smem_len, fb->fb.screen_base,
|
|
|
|
fb->fb.fix.smem_start);
|
2013-06-11 15:40:17 +07:00
|
|
|
}
|