mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
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>
This commit is contained in:
parent
9f62a472df
commit
a76b60f820
3 changed files with 29 additions and 4 deletions
12
cmd/cls.c
12
cmd/cls.c
|
@ -8,7 +8,7 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <video.h>
|
#include <video_console.h>
|
||||||
|
|
||||||
#define CSI "\x1b["
|
#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 */
|
/* Send clear screen and home */
|
||||||
printf(CSI "2J" CSI "1;1H");
|
printf(CSI "2J" CSI "1;1H");
|
||||||
if (IS_ENABLED(CONFIG_VIDEO) && !IS_ENABLED(CONFIG_VIDEO_ANSI)) {
|
if (IS_ENABLED(CONFIG_VIDEO_ANSI))
|
||||||
if (uclass_first_device_err(UCLASS_VIDEO, &dev))
|
return 0;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_VIDEO)) {
|
||||||
|
if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
if (video_clear(dev))
|
if (vidconsole_clear_and_reset(dev))
|
||||||
return CMD_RET_FAILURE;
|
return CMD_RET_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return CMD_RET_SUCCESS;
|
return CMD_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -643,3 +643,15 @@ int vidconsole_memmove(struct udevice *dev, void *dst, const void *src,
|
||||||
return vidconsole_sync_copy(dev, dst, dst + size);
|
return vidconsole_sync_copy(dev, dst, dst + size);
|
||||||
}
|
}
|
||||||
#endif
|
#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;
|
||||||
|
}
|
||||||
|
|
|
@ -285,6 +285,15 @@ int vidconsole_put_string(struct udevice *dev, const char *str);
|
||||||
void vidconsole_position_cursor(struct udevice *dev, unsigned col,
|
void vidconsole_position_cursor(struct udevice *dev, unsigned col,
|
||||||
unsigned row);
|
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
|
* vidconsole_set_cursor_pos() - set cursor position
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue