video: Add 30bpp support

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>
This commit is contained in:
Mark Kettenis 2021-09-25 22:47:36 +02:00 committed by Anatolij Gustschin
parent 94e922c76a
commit 0efe41ca15
2 changed files with 17 additions and 3 deletions

View 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:

View 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;