aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 40a32eeab63..073ba5a6c86 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 627db8208b0..61f4216750f 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 770103284b7..3db9a7e1fb9 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