提交 b9f210a3 编写于 作者: S Simon Glass

video: Update video_set_default_colors() to support invert

It is useful to be able to invert the colours in some cases so that the
text matches the background colour. Add a parameter to the function to
support this.

It is strange that function takes a private data structure from another
driver as an argument. It seems better to pass the device and have the
function internally work out how to find its required information.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 4b6dbaa3
...@@ -344,7 +344,7 @@ static void vidconsole_escape_char(struct udevice *dev, char ch) ...@@ -344,7 +344,7 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
switch (val) { switch (val) {
case 0: case 0:
/* all attributes off */ /* all attributes off */
video_set_default_colors(vid_priv); video_set_default_colors(dev->parent, false);
break; break;
case 1: case 1:
/* bold */ /* bold */
......
...@@ -115,18 +115,29 @@ int video_clear(struct udevice *dev) ...@@ -115,18 +115,29 @@ int video_clear(struct udevice *dev)
return 0; return 0;
} }
void video_set_default_colors(struct video_priv *priv) void video_set_default_colors(struct udevice *dev, bool invert)
{ {
struct video_priv *priv = dev_get_uclass_priv(dev);
int fore, back;
#ifdef CONFIG_SYS_WHITE_ON_BLACK #ifdef CONFIG_SYS_WHITE_ON_BLACK
/* White is used when switching to bold, use light gray here */ /* White is used when switching to bold, use light gray here */
priv->fg_col_idx = VID_LIGHT_GRAY; fore = VID_LIGHT_GRAY;
priv->colour_fg = vid_console_color(priv, VID_LIGHT_GRAY); back = VID_BLACK;
priv->colour_bg = vid_console_color(priv, VID_BLACK);
#else #else
priv->fg_col_idx = VID_BLACK; fore = VID_BLACK;
priv->colour_fg = vid_console_color(priv, VID_BLACK); back = VID_WHITE;
priv->colour_bg = vid_console_color(priv, VID_WHITE);
#endif #endif
if (invert) {
int temp;
temp = fore;
fore = back;
back = temp;
}
priv->fg_col_idx = fore;
priv->colour_fg = vid_console_color(priv, fore);
priv->colour_bg = vid_console_color(priv, back);
} }
/* Flush video activity to the caches */ /* Flush video activity to the caches */
...@@ -219,7 +230,7 @@ static int video_post_probe(struct udevice *dev) ...@@ -219,7 +230,7 @@ static int video_post_probe(struct udevice *dev)
priv->fb_size = priv->line_length * priv->ysize; priv->fb_size = priv->line_length * priv->ysize;
/* Set up colors */ /* Set up colors */
video_set_default_colors(priv); video_set_default_colors(dev, false);
if (!CONFIG_IS_ENABLED(NO_FB_CLEAR)) if (!CONFIG_IS_ENABLED(NO_FB_CLEAR))
video_clear(dev); video_clear(dev);
......
...@@ -191,9 +191,10 @@ void video_set_flush_dcache(struct udevice *dev, bool flush); ...@@ -191,9 +191,10 @@ void video_set_flush_dcache(struct udevice *dev, bool flush);
/** /**
* Set default colors and attributes * Set default colors and attributes
* *
* @priv device information * @dev: video device
* @invert true to invert colours
*/ */
void video_set_default_colors(struct video_priv *priv); void video_set_default_colors(struct udevice *dev, bool invert);
#endif /* CONFIG_DM_VIDEO */ #endif /* CONFIG_DM_VIDEO */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册