summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2010-08-10 18:02:32 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-11 08:59:10 -0700
commit949470375393e82dc9158d36d675180c8c250388 (patch)
tree8e0e7b78292aa08784dda53826817fc54b9c6b65
parentdc8498c00f6a41a28f01111a3d2ed9f179356a71 (diff)
s3c-fb: only init window colour key controls for windows with blending
The driver clears all windows, but also sets the windows' colour key controls at the same time. However, the last window does not have these registers as it is always blended into the previous window. Move the colour key initialisation into the probe, and run it for only nr_win-1 windows. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pawel Osciak <p.osciak@samsung.com> Cc: InKi Dae <inki.dae@samsung.com> Cc: KyungMin Park <kyungmin.park.samsung.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/video/s3c-fb.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
index 9c46f954c614..f9d0170b2413 100644
--- a/drivers/video/s3c-fb.c
+++ b/drivers/video/s3c-fb.c
@@ -845,9 +845,6 @@ static void s3c_fb_clear_win(struct s3c_fb *sfb, int win)
void __iomem *regs = sfb->regs;
writel(0, regs + WINCON(win));
- writel(0xffffff, regs + WxKEYCONy(win, 0));
- writel(0xffffff, regs + WxKEYCONy(win, 1));
-
writel(0, regs + VIDOSD_A(win));
writel(0, regs + VIDOSD_B(win));
writel(0, regs + VIDOSD_C(win));
@@ -920,6 +917,12 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
for (win = 0; win < S3C_FB_MAX_WIN; win++)
s3c_fb_clear_win(sfb, win);
+ /* initialise colour key controls */
+ for (win = 0; win < (S3C_FB_MAX_WIN - 1); win++) {
+ writel(0xffffff, sfb->regs + WxKEYCONy(win, 0));
+ writel(0xffffff, sfb->regs + WxKEYCONy(win, 1));
+ }
+
/* we have the register setup, start allocating framebuffers */
for (win = 0; win < S3C_FB_MAX_WIN; win++) {
@@ -1020,6 +1023,11 @@ static int s3c_fb_resume(struct platform_device *pdev)
for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++)
s3c_fb_clear_win(sfb, win_no);
+ for (win_no = 0; win_no < S3C_FB_MAX_WIN - 1; win_no++) {
+ writel(0xffffff, sfb->regs + WxKEYCONy(win_no, 1));
+ writel(0xffffff, sfb->regs + WxKEYCONy(win_no, 1));
+ }
+
/* restore framebuffers */
for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {
win = sfb->windows[win_no];