[PATCH v2 1/2] imxfb: Set alpha value of the framebuffer
From: Markus Pargmann <hidden>
Date: 2013-03-05 17:30:07
Also in:
linux-arm-kernel
Subsystem:
framebuffer layer, the rest · Maintainers:
Helge Deller, Linus Torvalds
From: Christian Hemp <redacted> Based on Sascha Hauer's patch i.MX27 clock: Do not disable lcd clocks during startup. This patch gives a interface to chance the alphavalue of the framebuffer. Signed-off-by: Christian Hemp <redacted> rebased to 3.7 Signed-off-by: Markus Pargmann <redacted> --- drivers/video/imxfb.c | 35 +++++++++++++++++++++++++++++++ include/linux/platform_data/video-imxfb.h | 3 +++ 2 files changed, 38 insertions(+)
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c
index 0abf2bf..ef2b587 100644
--- a/drivers/video/imxfb.c
+++ b/drivers/video/imxfb.c@@ -31,6 +31,7 @@ #include <linux/dma-mapping.h> #include <linux/io.h> #include <linux/math64.h> +#include <linux/uaccess.h> #include <linux/platform_data/video-imxfb.h>
@@ -112,6 +113,10 @@ #define LCDISR_EOF (1<<1) #define LCDISR_BOF (1<<0) +#define LCDC_LGWCR 0x64 +#define LGWCR_GWAV(alpha) (((alpha) & 0xff) << 24) +#define LGWCR_GWE (1 << 22) + /* Used fb-mode. Can be set on kernel command line, therefore file-static. */ static const char *fb_mode;
@@ -610,6 +615,35 @@ static int imxfb_blank(int blank, struct fb_info *info) return 0; } +static int imxfb_ioctl(struct fb_info *info, unsigned int cmd, + unsigned long arg) +{ + struct imxfb_info *fbi = info->par; + int alpha, ret = 0; + unsigned int tmp; + + switch (cmd) { + case IMXFB_ALPHA: + if (get_user(alpha, (int __user *)arg)) { + ret = -EFAULT; + } else { + tmp = readl(fbi->regs + LCDC_LGWCR); + tmp &= ~LGWCR_GWAV(0xff); + tmp |= LGWCR_GWAV(alpha); + if (!alpha) + tmp &= ~LGWCR_GWE; + else + tmp |= LGWCR_GWE; + writel(tmp , fbi->regs + LCDC_LGWCR); + } + break; + default: + ret = -EINVAL; + } + + return ret; +} + static struct fb_ops imxfb_ops = { .owner = THIS_MODULE, .fb_check_var = imxfb_check_var,
@@ -619,6 +653,7 @@ static struct fb_ops imxfb_ops = { .fb_copyarea = cfb_copyarea, .fb_imageblit = cfb_imageblit, .fb_blank = imxfb_blank, + .fb_ioctl = imxfb_ioctl, }; /*
diff --git a/include/linux/platform_data/video-imxfb.h b/include/linux/platform_data/video-imxfb.h
index 9de8f06..ce3875f 100644
--- a/include/linux/platform_data/video-imxfb.h
+++ b/include/linux/platform_data/video-imxfb.h@@ -51,6 +51,9 @@ #define DMACR_HM(x) (((x) & 0xf) << 16) #define DMACR_TM(x) ((x) & 0xf) +#define IMXFB_IOW(num, dtype) _IOW('I', num, dtype) +#define IMXFB_ALPHA IMXFB_IOW(31, int) + struct imx_fb_videomode { struct fb_videomode mode; u32 pcr;
--
1.8.1.4