video: Add 30bpp support
authorMark Kettenis <kettenis@openbsd.org>
Sat, 25 Sep 2021 20:47:36 +0000 (22:47 +0200)
committerAnatolij Gustschin <agust@denx.de>
Sat, 9 Oct 2021 16:43:51 +0000 (18:43 +0200)
Add support for 30bpp mode where pixels are picked in 32-bit
integers but use 10 bits instead of 8 bits for each component.

Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
drivers/video/vidconsole-uclass.c
include/video.h

index 8132efa..f42db40 100644 (file)
@@ -155,9 +155,14 @@ u32 vid_console_color(struct video_priv *priv, unsigned int idx)
                break;
        case VIDEO_BPP32:
                if (CONFIG_IS_ENABLED(VIDEO_BPP32)) {
-                       return (colors[idx].r << 16) |
-                              (colors[idx].g <<  8) |
-                              (colors[idx].b <<  0);
+                       if (priv->format == VIDEO_X2R10G10B10)
+                               return (colors[idx].r << 22) |
+                                      (colors[idx].g << 12) |
+                                      (colors[idx].b <<  2);
+                       else
+                               return (colors[idx].r << 16) |
+                                      (colors[idx].g <<  8) |
+                                      (colors[idx].b <<  0);
                }
                break;
        default:
index 8277333..f14fb15 100644 (file)
@@ -64,6 +64,13 @@ enum video_log2_bpp {
 
 #define VNBITS(bpix)   (1 << (bpix))
 
+enum video_format {
+       VIDEO_UNKNOWN,
+       VIDEO_X8B8G8R8,
+       VIDEO_X8R8G8B8,
+       VIDEO_X2R10G10B10,
+};
+
 /**
  * struct video_priv - Device information used by the video uclass
  *
@@ -71,6 +78,7 @@ enum video_log2_bpp {
  * @ysize:     Number of pixels rows (e.g.. 768)
  * @rot:       Display rotation (0=none, 1=90 degrees clockwise, etc.)
  * @bpix:      Encoded bits per pixel (enum video_log2_bpp)
+ * @format:    Pixel format (enum video_format)
  * @vidconsole_drv_name:       Driver to use for the text console, NULL to
  *             select automatically
  * @font_size: Font size in pixels (0 to use a default value)
@@ -95,6 +103,7 @@ struct video_priv {
        ushort ysize;
        ushort rot;
        enum video_log2_bpp bpix;
+       enum video_format format;
        const char *vidconsole_drv_name;
        int font_size;