@@ -709,15 +709,45 @@ static int do_video_puts(struct cmd_tbl *cmdtp, int flag, int argc,
{
struct udevice *dev;
const char *s;
+ char c;
if (argc != 2)
return CMD_RET_USAGE;
if (uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &dev))
return CMD_RET_FAILURE;
- for (s = argv[1]; *s; s++)
- vidconsole_put_char(dev, *s);
+ for (s = argv[1]; (c = *s); s++) {
+ if (c == '\\') {
+ s++;
+
+ switch (*s) {
+ case '\0':
+ goto sync;
+ case '\\':
+ c = '\\';
+ break;
+ case 'r':
+ c = '\r';
+ break;
+ case 'n':
+ c = '\n';
+ break;
+ case 't':
+ c = '\t';
+ break;
+ case 'b':
+ c = '\b';
+ break;
+ default:
+ continue;
+ }
+ }
+
+ vidconsole_put_char(dev, c);
+ }
+
+sync:
return video_sync(dev->parent, false);
}