video: Make white-on-black a video-device property

The CONFIG_WHITE_ON_BLACK setting is hard-coded at build-time. It is
useful to be able to control this when showing menus.

Create a property to hold this information, using the CONFIG as the
initial value.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-04-02 06:29:33 +13:00
committed by Tom Rini
parent fe2d4d4cef
commit 3ad5f49b5d
4 changed files with 32 additions and 6 deletions

View File

@@ -194,7 +194,7 @@ int expo_render(struct expo *exp)
u32 colour;
int ret;
back = CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK) ? VID_BLACK : VID_WHITE;
back = vid_priv->white_on_black ? VID_BLACK : VID_WHITE;
colour = video_index_to_colour(vid_priv, back);
ret = video_fill(dev, colour);
if (ret)

View File

@@ -330,8 +330,9 @@ static void scene_render_background(struct scene_obj *obj, bool box_only)
enum colour_idx fore, back;
uint inset = theme->menu_inset;
vid_priv = dev_get_uclass_priv(dev);
/* draw a background for the object */
if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) {
if (vid_priv->white_on_black) {
fore = VID_DARK_GREY;
back = VID_WHITE;
} else {
@@ -344,7 +345,6 @@ static void scene_render_background(struct scene_obj *obj, bool box_only)
return;
vidconsole_push_colour(cons, fore, back, &old);
vid_priv = dev_get_uclass_priv(dev);
video_fill_part(dev, label_bbox.x0 - inset, label_bbox.y0 - inset,
label_bbox.x1 + inset, label_bbox.y1 + inset,
vid_priv->colour_fg);
@@ -408,7 +408,8 @@ static int scene_obj_render(struct scene_obj *obj, bool text_mode)
struct vidconsole_colour old;
enum colour_idx fore, back;
if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) {
vid_priv = dev_get_uclass_priv(dev);
if (vid_priv->white_on_black) {
fore = VID_BLACK;
back = VID_WHITE;
} else {
@@ -416,7 +417,6 @@ static int scene_obj_render(struct scene_obj *obj, bool text_mode)
back = VID_BLACK;
}
vid_priv = dev_get_uclass_priv(dev);
if (obj->flags & SCENEOF_POINT) {
vidconsole_push_colour(cons, fore, back, &old);
video_fill_part(dev, x - theme->menu_inset, y,

View File

@@ -345,7 +345,7 @@ void video_set_default_colors(struct udevice *dev, bool invert)
struct video_priv *priv = dev_get_uclass_priv(dev);
int fore, back;
if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) {
if (priv->white_on_black) {
/* White is used when switching to bold, use light gray here */
fore = VID_LIGHT_GRAY;
back = VID_BLACK;
@@ -582,6 +582,18 @@ static void video_idle(struct cyclic_info *cyc)
video_sync_all();
}
void video_set_white_on_black(struct udevice *dev, bool white_on_black)
{
struct video_priv *priv = dev_get_uclass_priv(dev);
if (priv->white_on_black != white_on_black) {
priv->white_on_black = white_on_black;
video_set_default_colors(dev, false);
video_clear(dev);
}
}
/* Set up the display ready for use */
static int video_post_probe(struct udevice *dev)
{
@@ -624,6 +636,8 @@ static int video_post_probe(struct udevice *dev)
if (IS_ENABLED(CONFIG_VIDEO_COPY) && plat->copy_base)
priv->copy_fb = map_sysmem(plat->copy_base, plat->size);
priv->white_on_black = CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK);
/* Set up colors */
video_set_default_colors(dev, false);

View File

@@ -100,6 +100,7 @@ enum video_format {
* @fg_col_idx: Foreground color code (bit 3 = bold, bit 0-2 = color)
* @bg_col_idx: Background color code (bit 3 = bold, bit 0-2 = color)
* @last_sync: Monotonic time of last video sync
* @white_on_black: Use a black background
*/
struct video_priv {
/* Things set up by the driver: */
@@ -131,6 +132,7 @@ struct video_priv {
u8 fg_col_idx;
u8 bg_col_idx;
ulong last_sync;
bool white_on_black;
};
/**
@@ -346,6 +348,16 @@ void video_set_flush_dcache(struct udevice *dev, bool flush);
*/
void video_set_default_colors(struct udevice *dev, bool invert);
/**
* video_set_white_on_black() - Change the setting for white-on-black
*
* This does nothing if the setting is already the same.
*
* @dev: video device
* @white_on_black: true to use white-on-black, false for black-on-white
*/
void video_set_white_on_black(struct udevice *dev, bool white_on_black);
/**
* video_default_font_height() - Get the default font height
*