video: Allow temporary colour changes

It is sometimes necessary to highlight some text in a different colour.
Add an easy way to do this and then restore the original console colours.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-06-01 10:22:45 -06:00 committed by Tom Rini
parent 7ea207db2a
commit 648a4991d0
2 changed files with 50 additions and 0 deletions

View file

@ -596,6 +596,26 @@ int vidconsole_select_font(struct udevice *dev, const char *name, uint size)
return ops->select_font(dev, name, size);
}
void vidconsole_push_colour(struct udevice *dev, enum colour_idx fg,
enum colour_idx bg, struct vidconsole_colour *old)
{
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
old->colour_fg = vid_priv->colour_fg;
old->colour_bg = vid_priv->colour_bg;
vid_priv->colour_fg = video_index_to_colour(vid_priv, fg);
vid_priv->colour_bg = video_index_to_colour(vid_priv, bg);
}
void vidconsole_pop_colour(struct udevice *dev, struct vidconsole_colour *old)
{
struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
vid_priv->colour_fg = old->colour_fg;
vid_priv->colour_bg = old->colour_bg;
}
/* Set up the number of rows and colours (rotated drivers override this) */
static int vidconsole_pre_probe(struct udevice *dev)
{

View file

@ -71,6 +71,17 @@ struct vidfont_info {
const char *name;
};
/**
* struct vidconsole_colour - Holds colour information
*
* @colour_fg: Foreground colour (pixel value)
* @colour_bg: Background colour (pixel value)
*/
struct vidconsole_colour {
u32 colour_fg;
u32 colour_bg;
};
/**
* struct vidconsole_ops - Video console operations
*
@ -204,6 +215,25 @@ int vidconsole_get_font(struct udevice *dev, int seq,
*/
int vidconsole_select_font(struct udevice *dev, const char *name, uint size);
/**
* vidconsole_push_colour() - Temporarily change the font colour
*
* @dev: Device to adjust
* @fg: Foreground colour to select
* @bg: Background colour to select
* @old: Place to store the current colour, so it can be restored
*/
void vidconsole_push_colour(struct udevice *dev, enum colour_idx fg,
enum colour_idx bg, struct vidconsole_colour *old);
/**
* vidconsole_pop_colour() - Restore the original colour
*
* @dev: Device to adjust
* @old: Old colour to be restored
*/
void vidconsole_pop_colour(struct udevice *dev, struct vidconsole_colour *old);
/**
* vidconsole_putc_xy() - write a single character to a position
*