|
@@ -634,6 +634,13 @@ static int s3c_fb_set_par(struct fb_info *info)
|
|
|
writel(data, regs + sfb->variant.wincon + (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);
|
|
|
|
|
|
return 0;
|
|
@@ -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)
|
|
|
{
|
|
|
+ u32 data;
|
|
|
+
|
|
|
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);
|
|
|
if (win->fbinfo->cmap.len)
|
|
|
fb_dealloc_cmap(&win->fbinfo->cmap);
|