sa1100fb: fix color component length for pseudocolor modes
authorMichal Januszewski <spock@gentoo.org>
Mon, 13 Apr 2009 21:39:51 +0000 (14:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 13 Apr 2009 22:04:29 +0000 (15:04 -0700)
sa1100fb incorrectly sets the length of the color fields to 8 bits for
PSEUDOCOLOR modes for which only 4 bits are used per pixel.  Fix this by
setting the length to 4 bits for these modes.

Signed-off-by: Michal Januszewski <spock@gentoo.org>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/sa1100fb.c
drivers/video/sa1100fb.h

index fad58cf..10ddad8 100644 (file)
 extern void (*sa1100fb_backlight_power)(int on);
 extern void (*sa1100fb_lcd_power)(int on);
 
-/*
- * IMHO this looks wrong.  In 8BPP, length should be 8.
- */
-static struct sa1100fb_rgb rgb_8 = {
+static struct sa1100fb_rgb rgb_4 = {
        .red    = { .offset = 0,  .length = 4, },
        .green  = { .offset = 0,  .length = 4, },
        .blue   = { .offset = 0,  .length = 4, },
        .transp = { .offset = 0,  .length = 0, },
 };
 
+static struct sa1100fb_rgb rgb_8 = {
+       .red    = { .offset = 0,  .length = 8, },
+       .green  = { .offset = 0,  .length = 8, },
+       .blue   = { .offset = 0,  .length = 8, },
+       .transp = { .offset = 0,  .length = 0, },
+};
+
 static struct sa1100fb_rgb def_rgb_16 = {
        .red    = { .offset = 11, .length = 5, },
        .green  = { .offset = 5,  .length = 6, },
@@ -613,7 +617,7 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
        DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel);
        switch (var->bits_per_pixel) {
        case 4:
-               rgbidx = RGB_8;
+               rgbidx = RGB_4;
                break;
        case 8:
                rgbidx = RGB_8;
@@ -1382,6 +1386,7 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev)
        fbi->fb.monspecs        = monspecs;
        fbi->fb.pseudo_palette  = (fbi + 1);
 
+       fbi->rgb[RGB_4]         = &rgb_4;
        fbi->rgb[RGB_8]         = &rgb_8;
        fbi->rgb[RGB_16]        = &def_rgb_16;
 
index 86831db..1c3b459 100644 (file)
@@ -57,9 +57,10 @@ struct sa1100fb_lcd_reg {
        unsigned long lccr3;
 };
 
-#define RGB_8  (0)
-#define RGB_16 (1)
-#define NR_RGB 2
+#define RGB_4  (0)
+#define RGB_8  (1)
+#define RGB_16 (2)
+#define NR_RGB 3
 
 struct sa1100fb_info {
        struct fb_info          fb;