[PATCH 7/7] [ARM] s3c-fb: Added color key blending.
From: Pawel Osciak <hidden>
Date: 2009-09-11 18:05:04
Also in:
linux-arm-kernel
Subsystem:
arm port, framebuffer layer, the rest · Maintainers:
Russell King, Helge Deller, Linus Torvalds
This feature allows blending based on color key value. Pixels with key value get blended with alpha1, while the rest gets blended with alpha0. Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Pawel Osciak <redacted> --- arch/arm/plat-s3c/include/plat/s3c-fb.h | 2 ++ drivers/video/s3c-fb.c | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-s3c/include/plat/s3c-fb.h b/arch/arm/plat-s3c/include/plat/s3c-fb.h
index 080524d..def54ec 100644
--- a/arch/arm/plat-s3c/include/plat/s3c-fb.h
+++ b/arch/arm/plat-s3c/include/plat/s3c-fb.h@@ -67,6 +67,8 @@ typedef enum s3c_fb_alpha_mode { #define S3CFB_IOCTL_SET_COLOR_KEY_MODE _IO(S3CFB_IOCTL_MAGIC, 2) /* param: 1 - on, 0 - off */ #define S3CFB_IOCTL_COLOR_KEY_ENABLE _IO(S3CFB_IOCTL_MAGIC, 3) +/* param: 1 - on, 0 - off */ +#define S3CFB_IOCTL_COLOR_KEY_BLEND_ENABLE _IO(S3CFB_IOCTL_MAGIC, 8) /* Param: s3c_fb_source */
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 6721f20..5ea6a5b 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c@@ -926,7 +926,8 @@ static int s3c_fb_color_key_enable(struct s3c_fb_win *win, int enable) int keycon0_reg; if (! has_colorkey(win->index)) { - dev_err(sfb->dev, "Window does not support color keying\n"); + dev_err(sfb->dev, "Window %d does not support color keying\n", + win->index); return -EINVAL; }
@@ -941,6 +942,27 @@ static int s3c_fb_color_key_enable(struct s3c_fb_win *win, int enable) return 0; } +static int s3c_fb_color_key_blending_enable(struct s3c_fb_win *win, int enable) +{ + struct s3c_fb *sfb = win->parent; + int keycon0_reg; + + if (! has_colorkey(win->index)) { + dev_err(sfb->dev, "Window %d does not support color keying\n", + win->index); + return -EINVAL; + } + + keycon0_reg = readl(sfb->regs + WxKEYCON0(win->index)); + if (enable) + keycon0_reg |= WxKEYCON0_KEYBL_EN; + else + keycon0_reg &= ~WxKEYCON0_KEYBL_EN; + + writel(keycon0_reg, sfb->regs + WxKEYCON0(win->index)); + + return 0; +} static int s3c_fb_set_color_key_mode(struct s3c_fb_win *win, enum s3c_fb_color_key_mode mode) {
@@ -1115,6 +1137,9 @@ static int s3c_fb_ioctl(struct fb_info *info, unsigned int cmd, case S3CFB_IOCTL_COLOR_KEY_ENABLE: return s3c_fb_color_key_enable(win, arg); + case S3CFB_IOCTL_COLOR_KEY_BLEND_ENABLE: + return s3c_fb_color_key_blending_enable(win, arg); + case S3CFB_IOCTL_SET_SOURCE: return s3c_fb_set_source(win, arg);
--
1.6.4.2.253.g0b1fac