video: tegra: Scale colors in pseudopalette
authorRobert Morell <rmorell@nvidia.com>
Sat, 20 Nov 2010 02:55:51 +0000 (18:55 -0800)
committerErik Gilling <konkers@android.com>
Sat, 20 Nov 2010 03:19:25 +0000 (19:19 -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 15a4f5b472a8333152d79ae1c2cac6bd0af04674..cc26c5977a20b613400ba6515a04d3a530d866a9 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);