Skip to content

Commit

Permalink
video: s3c-fb: add shadow register protect
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jingoo Han authored and Florian Tobias Schandinat committed Dec 19, 2011
1 parent 35784b4 commit ff8c910
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion drivers/video/s3c-fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -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;
}
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit ff8c910

Please sign in to comment.