|
@@ -47,6 +47,15 @@ int vidconsole_set_row(struct udevice *dev, uint row, int clr)
|
|
|
return ops->set_row(dev, row, clr);
|
|
|
}
|
|
|
|
|
|
+static int vidconsole_entry_start(struct udevice *dev)
|
|
|
+{
|
|
|
+ struct vidconsole_ops *ops = vidconsole_get_ops(dev);
|
|
|
+
|
|
|
+ if (!ops->entry_start)
|
|
|
+ return -ENOSYS;
|
|
|
+ return ops->entry_start(dev);
|
|
|
+}
|
|
|
+
|
|
|
/* Move backwards one space */
|
|
|
static void vidconsole_back(struct udevice *dev)
|
|
|
{
|
|
@@ -82,6 +91,8 @@ static void vidconsole_newline(struct udevice *dev)
|
|
|
vid_priv->colour_bg);
|
|
|
priv->ycur -= rows * priv->y_charsize;
|
|
|
}
|
|
|
+ priv->last_ch = 0;
|
|
|
+
|
|
|
video_sync(dev->parent);
|
|
|
}
|
|
|
|
|
@@ -99,6 +110,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
|
|
|
break;
|
|
|
case '\n':
|
|
|
vidconsole_newline(dev);
|
|
|
+ vidconsole_entry_start(dev);
|
|
|
break;
|
|
|
case '\t': /* Tab (8 chars alignment) */
|
|
|
priv->xcur_frac = ((priv->xcur_frac / priv->tab_width_frac)
|
|
@@ -109,6 +121,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
|
|
|
break;
|
|
|
case '\b':
|
|
|
vidconsole_back(dev);
|
|
|
+ priv->last_ch = 0;
|
|
|
break;
|
|
|
default:
|
|
|
/*
|
|
@@ -125,6 +138,7 @@ int vidconsole_put_char(struct udevice *dev, char ch)
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
priv->xcur_frac += ret;
|
|
|
+ priv->last_ch = ch;
|
|
|
if (priv->xcur_frac >= priv->xsize_frac)
|
|
|
vidconsole_newline(dev);
|
|
|
break;
|