|
@@ -812,12 +812,16 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info)
|
|
|
|
|
|
case FB_BLANK_NORMAL:
|
|
|
/* disable the DMA and display 0x0 (black) */
|
|
|
+ shadow_protect_win(win, 1);
|
|
|
writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x0),
|
|
|
sfb->regs + sfb->variant.winmap + (index * 4));
|
|
|
+ shadow_protect_win(win, 0);
|
|
|
break;
|
|
|
|
|
|
case FB_BLANK_UNBLANK:
|
|
|
+ shadow_protect_win(win, 1);
|
|
|
writel(0x0, sfb->regs + sfb->variant.winmap + (index * 4));
|
|
|
+ shadow_protect_win(win, 0);
|
|
|
wincon |= WINCONx_ENWIN;
|
|
|
sfb->enabled |= (1 << index);
|
|
|
break;
|
|
@@ -828,7 +832,9 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ shadow_protect_win(win, 1);
|
|
|
writel(wincon, sfb->regs + sfb->variant.wincon + (index * 4));
|
|
|
+ shadow_protect_win(win, 0);
|
|
|
|
|
|
/* Check the enabled state to see if we need to be running the
|
|
|
* main LCD interface, as if there are no active windows then
|
|
@@ -847,8 +853,11 @@ static int s3c_fb_blank(int blank_mode, struct fb_info *info)
|
|
|
/* we're stuck with this until we can do something about overriding
|
|
|
* the power control using the blanking event for a single fb.
|
|
|
*/
|
|
|
- if (index == sfb->pdata->default_win)
|
|
|
+ if (index == sfb->pdata->default_win) {
|
|
|
+ shadow_protect_win(win, 1);
|
|
|
s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
|
|
|
+ shadow_protect_win(win, 0);
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1551,10 +1560,15 @@ static int s3c_fb_resume(struct device *dev)
|
|
|
|
|
|
for (win_no = 0; win_no < sfb->variant.nr_windows - 1; win_no++) {
|
|
|
void __iomem *regs = sfb->regs + sfb->variant.keycon;
|
|
|
+ win = sfb->windows[win_no];
|
|
|
+ if (!win)
|
|
|
+ continue;
|
|
|
|
|
|
+ shadow_protect_win(win, 1);
|
|
|
regs += (win_no * 8);
|
|
|
writel(0xffffff, regs + WKEYCON0);
|
|
|
writel(0xffffff, regs + WKEYCON1);
|
|
|
+ shadow_protect_win(win, 0);
|
|
|
}
|
|
|
|
|
|
/* restore framebuffers */
|