]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: Clear the vidconsole rather than the video
authorSimon Glass <sjg@chromium.org>
Fri, 10 Mar 2023 20:47:21 +0000 (12:47 -0800)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 13 Mar 2023 12:53:01 +0000 (13:53 +0100)
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>
cmd/cls.c
drivers/video/vidconsole-uclass.c
include/video_console.h

index 40a32eeab638a7a5327d47cbdddcf89a633ac9ee..073ba5a6c8670b6906d7bb0331ab48f7f3d8a735 100644 (file)
--- 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;
 }
 
index 627db8208b00011a57e02ac95a8354aec8def5f6..61f4216750f2ea8dbfe5f67438f4d9675733ff38 100644 (file)
@@ -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;
+}
index 770103284b752647d104f17af6c8ecee1554e4a1..3db9a7e1fb950f8b79f2760a908d86d9abe01307 100644 (file)
@@ -285,6 +285,15 @@ int vidconsole_put_string(struct udevice *dev, const char *str);
 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
  *