diff options
author | Marek Vasut | 2019-05-17 20:22:31 +0200 |
---|---|---|
committer | Anatolij Gustschin | 2019-05-20 12:00:05 +0200 |
commit | e63168a9ffae18f807f59925bb5d9d4623633e46 (patch) | |
tree | 7dfc643cd5bb6cccc7725870098c36f25216b29c | |
parent | b5e1a82e924d18d4134757e39a1f26e473f80e0b (diff) |
video: Factor out vidconsole_put_string()
Pull the vidconsole_put_string() function from DM tests, make it
available to e.g. boards that want to display information on the
LCD on boot.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Reviewed-by: Anatolij Gustschin <agust@denx.de>
-rw-r--r-- | drivers/video/vidconsole-uclass.c | 17 | ||||
-rw-r--r-- | include/video_console.h | 16 | ||||
-rw-r--r-- | test/dm/video.c | 8 |
3 files changed, 31 insertions, 10 deletions
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c index c31303b56ed..af885889044 100644 --- a/drivers/video/vidconsole-uclass.c +++ b/drivers/video/vidconsole-uclass.c @@ -529,6 +529,20 @@ int vidconsole_put_char(struct udevice *dev, char ch) return 0; } +int vidconsole_put_string(struct udevice *dev, const char *str) +{ + const char *s; + int ret; + + for (s = str; *s; s++) { + ret = vidconsole_put_char(dev, *s); + if (ret) + return ret; + } + + return 0; +} + static void vidconsole_putc(struct stdio_dev *sdev, const char ch) { struct udevice *dev = sdev->priv; @@ -541,8 +555,7 @@ static void vidconsole_puts(struct stdio_dev *sdev, const char *s) { struct udevice *dev = sdev->priv; - while (*s) - vidconsole_put_char(dev, *s++); + vidconsole_put_string(dev, s); video_sync(dev->parent, false); } diff --git a/include/video_console.h b/include/video_console.h index 52a41ac2007..0936ceaaf1c 100644 --- a/include/video_console.h +++ b/include/video_console.h @@ -215,6 +215,22 @@ int vidconsole_set_row(struct udevice *dev, uint row, int clr); int vidconsole_put_char(struct udevice *dev, char ch); /** + * vidconsole_put_string() - Output a string to the current console position + * + * Outputs a string to the console and advances the cursor. This function + * handles wrapping to new lines and scrolling the console. Special + * characters are handled also: \n, \r, \b and \t. + * + * The device always starts with the cursor at position 0,0 (top left). It + * can be adjusted manually using vidconsole_position_cursor(). + * + * @dev: Device to adjust + * @str: String to write + * @return 0 if OK, -ve on error + */ +int vidconsole_put_string(struct udevice *dev, const char *str); + +/** * vidconsole_position_cursor() - Move the text cursor * * @dev: Device to adjust diff --git a/test/dm/video.c b/test/dm/video.c index 6be5defc53c..3151ebb73fc 100644 --- a/test/dm/video.c +++ b/test/dm/video.c @@ -97,14 +97,6 @@ static int select_vidconsole(struct unit_test_state *uts, const char *drv_name) return 0; } -static void vidconsole_put_string(struct udevice *dev, const char *str) -{ - const char *s; - - for (s = str; *s; s++) - vidconsole_put_char(dev, *s); -} - /* Test text output works on the video console */ static int dm_test_video_text(struct unit_test_state *uts) { |