dm: video: show correct colors in graphical console
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 8 Feb 2018 20:47:09 +0000 (21:47 +0100)
committerAnatolij Gustschin <agust@denx.de>
Tue, 6 Mar 2018 09:00:32 +0000 (10:00 +0100)
Get RGB sequence in pixels right (swap blue and red).
Do not set reserved bits.

qemu-system-i386 -display sdl -vga virtio and
qemu-system-i386 -display sdl -vga cirrus
now display the similar colors (highlighting still missing) as
qemu-system-i386 -nographic

Testing is possible via

setenv efi_selftest test output
bootefi selftest

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/vidconsole-uclass.c
test/dm/video.c

index 5f63c12d6c5924bf19c72234abb06f57fcecb8ab..8a2a377161fbd2093354c00df10173611b68bf27 100644 (file)
@@ -127,15 +127,14 @@ static void set_color(struct video_priv *priv, unsigned idx, unsigned *c)
 {
        switch (priv->bpix) {
        case VIDEO_BPP16:
-               *c = ((colors[idx].r >> 3) << 0) |
-                    ((colors[idx].g >> 2) << 5) |
-                    ((colors[idx].b >> 3) << 11);
+               *c = ((colors[idx].r >> 3) << 11) |
+                    ((colors[idx].g >> 2) <<  5) |
+                    ((colors[idx].b >> 3) <<  0);
                break;
        case VIDEO_BPP32:
-               *c = 0xff000000 |
-                    (colors[idx].r << 0) |
-                    (colors[idx].g << 8) |
-                    (colors[idx].b << 16);
+               *c = (colors[idx].r << 16) |
+                    (colors[idx].g <<  8) |
+                    (colors[idx].b <<  0);
                break;
        default:
                /* unsupported, leave current color in place */
index 29917d0c2d831beaf2387db1cfd9d5651f999af2..d158f1fcb394a6345f869fbf11fc0b4f9c2814b0 100644 (file)
@@ -186,7 +186,7 @@ static int dm_test_video_ansi(struct unit_test_state *uts)
        /* test colors (30-37 fg color, 40-47 bg color) */
        vidconsole_put_string(con, ANSI_ESC"[30;41mfoo"); /* black on red */
        vidconsole_put_string(con, ANSI_ESC"[33;44mbar"); /* yellow on blue */
-       ut_asserteq(268, compress_frame_buffer(dev));
+       ut_asserteq(267, compress_frame_buffer(dev));
 
        return 0;
 }