Commit b1230ee5 authored by Magnus Damm's avatar Magnus Damm Committed by Linus Torvalds

sm501fb: clear framebuffer memory and palette

Avoid displaying garbage on unused framebuffers.  For most users a single
framebuffer is used together with fbcon.  sm501fb supports two framebuffers
where one often is assigned to fbcon and the other one is left unused during
the boot.

The problem here is that framebuffers not in use by fbcon happen to display
garbage.  This can easily be solved by making sure that framebuffer memory and
palette ram are cleared.

The problem can be observed by using looking at the panel output (fb1) after
booting the kernel with fbcon on crt (fb0).  This is the default
configuration.  It's also possible to watch the garbage on the crt framebuffer
by passing "fbcon=map:1" on the kernel cmdline.  This will assign fbcon to the
panel (fb1) and leave the crt (fb0) unused.
Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent dfcffa46
...@@ -1276,6 +1276,7 @@ static int sm501fb_start(struct sm501fb_info *info, ...@@ -1276,6 +1276,7 @@ static int sm501fb_start(struct sm501fb_info *info,
{ {
struct resource *res; struct resource *res;
struct device *dev; struct device *dev;
int k;
int ret; int ret;
info->dev = dev = &pdev->dev; info->dev = dev = &pdev->dev;
...@@ -1337,6 +1338,13 @@ static int sm501fb_start(struct sm501fb_info *info, ...@@ -1337,6 +1338,13 @@ static int sm501fb_start(struct sm501fb_info *info,
info->fbmem_len = (res->end - res->start)+1; info->fbmem_len = (res->end - res->start)+1;
/* clear framebuffer memory - avoids garbage data on unused fb */
memset(info->fbmem, 0, info->fbmem_len);
/* clear palette ram - undefined at power on */
for (k = 0; k < (256 * 3); k++)
writel(0, info->regs + SM501_DC_PANEL_PALETTE + (k * 4));
/* enable display controller */ /* enable display controller */
sm501_unit_power(dev->parent, SM501_GATE_DISPLAY, 1); sm501_unit_power(dev->parent, SM501_GATE_DISPLAY, 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment