From: Krzysztof H. <krz...@po...> - 2009-10-03 05:07:24
|
On Fri, 11 Sep 2009 20:04:52 +0200 Pawel Osciak <p.o...@sa...> wrote: > It is now possible to switch between local bus and DMA as the source > for a window. Local source mode can handle RGB and YCbCr formats. > > Reviewed-by: Marek Szyprowski <m.s...@sa...> > Reviewed-by: Kyungmin Park <kyu...@sa...> > Signed-off-by: Pawel Osciak <p.o...@sa...> > > --- > arch/arm/plat-s3c/include/plat/regs-fb.h | 1 + > arch/arm/plat-s3c/include/plat/s3c-fb.h | 9 ++++++ > drivers/video/s3c-fb.c | 40 ++++++++++++++++++++++++++++++ > 3 files changed, 50 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/plat-s3c/include/plat/regs-fb.h b/arch/arm/plat-s3c/include/plat/regs-fb.h > index 8d3071d..4c024ca 100644 > --- a/arch/arm/plat-s3c/include/plat/regs-fb.h > +++ b/arch/arm/plat-s3c/include/plat/regs-fb.h > @@ -170,6 +170,7 @@ > /* WINCONx */ > > > +#define WINCONx(_x) (0x20 + ((_x) * 4)) > #define WINCONx_BITSWP (1 << 18) > #define WINCONx_BYTSWP (1 << 17) > #define WINCONx_HAWSWP (1 << 16) > diff --git a/arch/arm/plat-s3c/include/plat/s3c-fb.h b/arch/arm/plat-s3c/include/plat/s3c-fb.h > index 0aebc40..b08f9ad 100644 > --- a/arch/arm/plat-s3c/include/plat/s3c-fb.h > +++ b/arch/arm/plat-s3c/include/plat/s3c-fb.h > @@ -26,6 +26,12 @@ typedef enum s3c_fb_color_key_mode { > S3CFB_COLORKEY_MODE_FG = 1 > } s3c_fb_color_key_mode_t; > > +typedef enum s3c_fb_source { > + S3CFB_SOURCE_DMA = 0, > + S3CFB_SOURCE_LOCAL_RGB = 1, > + S3CFB_SOURCE_LOCAL_YCbCr = 2 > +} s3c_fb_source_t; > + There is no need to use typedef here (see Documentation/CodingStyle). It is used in one place only, anyway. > #ifndef FBIO_WAITFORVSYNC > #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32) > #endif > @@ -41,5 +47,8 @@ typedef enum s3c_fb_color_key_mode { > /* param: 1 - on, 0 - off */ > #define S3CFB_IOCTL_COLOR_KEY_ENABLE _IO(S3CFB_IOCTL_MAGIC, 3) > > + > +/* Param: s3c_fb_source */ > +#define S3CFB_IOCTL_SET_SOURCE _IO(S3CFB_IOCTL_MAGIC, 5) > #endif /* __LINUX_S3C_FB_H__ */ > > diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c > index 2de3151..28622c0 100644 > --- a/drivers/video/s3c-fb.c > +++ b/drivers/video/s3c-fb.c > @@ -960,6 +960,43 @@ static int s3c_fb_set_color_key_mode(struct s3c_fb_win *win, > return 0; > } > > +static int s3c_fb_set_source(struct s3c_fb_win *win, s3c_fb_source_t source) > +{ > + struct s3c_fb *sfb = win->parent; > + int wincon_reg, new_val; > + > + if (win->index > 2) { > + dev_err(sfb->dev, "Source change not supported for window %d\n", > + win->index); > + return -EINVAL; > + } > + > + wincon_reg = readl(sfb->regs + WINCONx(win->index)); > + new_val = wincon_reg; > + > + switch (source) { > + case S3CFB_SOURCE_DMA: > + new_val &= ~(WINCONx_ENLOCAL | WINCONx_YCbCr); > + break; > + case S3CFB_SOURCE_LOCAL_RGB: > + new_val &= ~WINCONx_YCbCr; > + new_val |= WINCONx_ENLOCAL; > + break; > + case S3CFB_SOURCE_LOCAL_YCbCr: > + new_val |= WINCONx_YCbCr | WINCONx_ENLOCAL; > + break; > + default: > + return -EINVAL; > + } > + > + /* The window has to be disabled during source switch */ > + writel(wincon_reg & ~WINCONx_ENWIN, sfb->regs + WINCONx(win->index)); > + new_val |= WINCONx_ENWIN; > + writel(new_val, sfb->regs + WINCONx(win->index)); > + > + return 0; > +} > + > static int s3c_fb_ioctl(struct fb_info *info, unsigned int cmd, > unsigned long arg) > { > @@ -999,6 +1036,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_SET_SOURCE: > + return s3c_fb_set_source(win, arg); > default: > return -ENOTTY; > } > -- > 1.6.4.2.253.g0b1fac > > > _______________________________________________ > linux-arm-kernel mailing list > lin...@li... > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ---------------------------------------------------------------------- Nie boisz sie wampirow! A wiêc Graj >>> http://link.interia.pl/f2390 |