aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-03-10 12:47:21 -0800
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-03-13 13:53:01 +0100
commita76b60f8205eb7f02e17e10c13ad05e46a69c1fd (patch)
tree0b9cf40e88e1bbda70ac14410c8153cfb944bacb
parent9f62a472dfb26ec14408a27938ddd2a25700009d (diff)
downloadu-boot-a76b60f8205eb7f02e17e10c13ad05e46a69c1fd.zip
u-boot-a76b60f8205eb7f02e17e10c13ad05e46a69c1fd.tar.gz
u-boot-a76b60f8205eb7f02e17e10c13ad05e46a69c1fd.tar.bz2
video: Clear the vidconsole rather than the video
It is better to clear the console device rather than the video device, since the console has the text display. We also need to reset the cursor position with the console, but not with the video device. Add a new function to handle this and update the 'cls' command to use it. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--cmd/cls.c12
-rw-r--r--drivers/video/vidconsole-uclass.c12
-rw-r--r--include/video_console.h9
3 files changed, 29 insertions, 4 deletions
diff --git a/cmd/cls.c b/cmd/cls.c
index 40a32ee..073ba5a 100644
--- a/cmd/cls.c
+++ b/cmd/cls.c
@@ -8,7 +8,7 @@
#include <common.h>
#include <command.h>
#include <dm.h>
-#include <video.h>
+#include <video_console.h>
#define CSI "\x1b["
@@ -19,12 +19,16 @@ static int do_video_clear(struct cmd_tbl *cmdtp, int flag, int argc,
/* Send clear screen and home */
printf(CSI "2J" CSI "1;1H");
- if (IS_ENABLED(CONFIG_VIDEO) && !IS_ENABLED(CONFIG_VIDEO_ANSI)) {
- if (uclass_first_device_err(UCLASS_VIDEO, &dev))
+ if (IS_ENABLED(CONFIG_VIDEO_ANSI))
+ return 0;
+
+ if (IS_ENABLED(CONFIG_VIDEO)) {
+ if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
return CMD_RET_FAILURE;
- if (video_clear(dev))
+ if (vidconsole_clear_and_reset(dev))
return CMD_RET_FAILURE;
}
+
return CMD_RET_SUCCESS;
}
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index 627db82..61f4216 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -643,3 +643,15 @@ int vidconsole_memmove(struct udevice *dev, void *dst, const void *src,
return vidconsole_sync_copy(dev, dst, dst + size);
}
#endif
+
+int vidconsole_clear_and_reset(struct udevice *dev)
+{
+ int ret;
+
+ ret = video_clear(dev_get_parent(dev));
+ if (ret)
+ return ret;
+ vidconsole_position_cursor(dev, 0, 0);
+
+ return 0;
+}
diff --git a/include/video_console.h b/include/video_console.h
index 7701032..3db9a7e 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -286,6 +286,15 @@ void vidconsole_position_cursor(struct udevice *dev, unsigned col,
unsigned row);
/**
+ * vidconsole_clear_and_reset() - Clear the console and reset the cursor
+ *
+ * The cursor is placed at the start of the console
+ *
+ * @dev: vidconsole device to adjust
+ */
+int vidconsole_clear_and_reset(struct udevice *dev);
+
+/**
* vidconsole_set_cursor_pos() - set cursor position
*
* The cursor is set to the new position and the start-of-line information is