video: tegra: Scale colors in pseudopalette
Robert Morell [Sat, 20 Nov 2010 02:55:51 +0000 (18:55 -0800)]
This fixes incorrect colors drawn by clients such as fbconsole.  As
described by skeletonfb's fb_setcolreg: "The values supplied have a 16
bit magnitude which needs to be scaled in this function for the
hardware."

Tested with both r8g8b8 and r5g6b5 pixel depths and fbconsole.

Change-Id: Ie3c3579502ddab8843a8a4dc7049c6efaa5d0ac1
Signed-off-by: Robert Morell <rmorell@nvidia.com>
Acked-by: Erik Gilling <konkers@android.com>

drivers/video/tegra/fb.c

index 15a4f5b..cc26c59 100644 (file)
@@ -198,6 +198,10 @@ static int tegra_fb_setcolreg(unsigned regno, unsigned red, unsigned green,
                if (regno >= 16)
                        return -EINVAL;
 
+               red = (red >> (16 - info->var.red.length));
+               green = (green >> (16 - info->var.green.length));
+               blue = (blue >> (16 - info->var.blue.length));
+
                v = (red << var->red.offset) |
                        (green << var->green.offset) |
                        (blue << var->blue.offset);