fbdev/logo: check compatibility of main and extra logos
authorGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Tue, 6 Jan 2009 22:42:37 +0000 (14:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 6 Jan 2009 23:59:27 +0000 (15:59 -0800)
The code to draw penguin logos always uses some properties of the main logo.
This is incorrect if additional logos (CONFIG_FB_LOGO_EXTRA=y) have different
types than the main logo, which causes corrupted logo images.

  http://bugzilla.kernel.org/show_bug.cgi?id=12181

Hence skip additional logos that are not compatible with the main logo.

Technically, it's possible to draw multiple logos of different types on
truecolor displays, but this would complicate the (already quite
complicated) logo drawing code even more.

This patch fixes a problem with Debian's linux-image-2.6.26-1-powerpc64
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508173

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/fbmem.c

index 3c65b0d676174f6ee683a0516700324a0cb4cc17..756efeb91abc09bc3635387840f2b686f724d1fc 100644 (file)
@@ -510,6 +510,10 @@ static int fb_prepare_extra_logos(struct fb_info *info, unsigned int height,
                fb_logo_ex_num = 0;
 
        for (i = 0; i < fb_logo_ex_num; i++) {
+               if (fb_logo_ex[i].logo->type != fb_logo.logo->type) {
+                       fb_logo_ex[i].logo = NULL;
+                       continue;
+               }
                height += fb_logo_ex[i].logo->height;
                if (height > yres) {
                        height -= fb_logo_ex[i].logo->height;