Commit 04ab9ef9 authored by Pawel Osciak's avatar Pawel Osciak Committed by Linus Torvalds

s3c-fb: add support for DMA channel control on S5PV210

S5PV210 SoCs allow enabling/disabling DMA channels per window.  For a
window to display data from framebuffer memory, its channel has to be
enabled.
Signed-off-by: default avatarPawel Osciak <p.osciak@samsung.com>
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Cc: InKi Dae <inki.dae@samsung.com>
Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8cfdcb23
...@@ -223,6 +223,10 @@ ...@@ -223,6 +223,10 @@
/* S5PV210 */ /* S5PV210 */
#define SHADOWCON (0x34) #define SHADOWCON (0x34)
#define SHADOWCON_WINx_PROTECT(_win) (1 << (10 + (_win))) #define SHADOWCON_WINx_PROTECT(_win) (1 << (10 + (_win)))
/* DMA channels (all windows) */
#define SHADOWCON_CHx_ENABLE(_win) (1 << (_win))
/* Local input channels (windows 0-2) */
#define SHADOWCON_CHx_LOCAL_ENABLE(_win) (1 << (5 + (_win)))
#define VIDOSDxA_TOPLEFT_X_MASK (0x7ff << 11) #define VIDOSDxA_TOPLEFT_X_MASK (0x7ff << 11)
#define VIDOSDxA_TOPLEFT_X_SHIFT (11) #define VIDOSDxA_TOPLEFT_X_SHIFT (11)
......
...@@ -634,6 +634,13 @@ static int s3c_fb_set_par(struct fb_info *info) ...@@ -634,6 +634,13 @@ static int s3c_fb_set_par(struct fb_info *info)
writel(data, regs + sfb->variant.wincon + (win_no * 4)); writel(data, regs + sfb->variant.wincon + (win_no * 4));
writel(0x0, regs + sfb->variant.winmap + (win_no * 4)); writel(0x0, regs + sfb->variant.winmap + (win_no * 4));
/* Enable DMA channel for this window */
if (sfb->variant.has_shadowcon) {
data = readl(sfb->regs + SHADOWCON);
data |= SHADOWCON_CHx_ENABLE(win_no);
writel(data, sfb->regs + SHADOWCON);
}
shadow_protect_win(win, 0); shadow_protect_win(win, 0);
return 0; return 0;
...@@ -1091,7 +1098,15 @@ static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win) ...@@ -1091,7 +1098,15 @@ static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win)
*/ */
static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win) static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
{ {
u32 data;
if (win->fbinfo) { if (win->fbinfo) {
if (sfb->variant.has_shadowcon) {
data = readl(sfb->regs + SHADOWCON);
data &= ~SHADOWCON_CHx_ENABLE(win->index);
data &= ~SHADOWCON_CHx_LOCAL_ENABLE(win->index);
writel(data, sfb->regs + SHADOWCON);
}
unregister_framebuffer(win->fbinfo); unregister_framebuffer(win->fbinfo);
if (win->fbinfo->cmap.len) if (win->fbinfo->cmap.len)
fb_dealloc_cmap(&win->fbinfo->cmap); fb_dealloc_cmap(&win->fbinfo->cmap);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment