video: s3c-fb: add shadow register protect
Shadow registers should be protectd whenever the registers are updated. Shadow registers are updated after SHADOWCON shadow register is cleared. Signed-off-by: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
This commit is contained in:
parent
35784b4315
commit
ff8c910723
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue