summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-01-14 18:10:41 -0700
committerAnatolij Gustschin <agust@denx.de>2016-01-30 10:55:37 +0100
commit7b9f7e445e13de4f3169d9e5ba5e3b28c4d79ce4 (patch)
treeb79a245825071d87f981fcb9e749848c3c9585cf
parent58c733a70ff1967490af1fd69aab2ba7bb86eb2c (diff)
downloadu-boot-imx-7b9f7e445e13de4f3169d9e5ba5e3b28c4d79ce4.zip
u-boot-imx-7b9f7e445e13de4f3169d9e5ba5e3b28c4d79ce4.tar.gz
u-boot-imx-7b9f7e445e13de4f3169d9e5ba5e3b28c4d79ce4.tar.bz2
video: Provide a backspace method
With proportional fonts the vidconsole uclass cannot itself erase the previous character. Provide an optional method so that the driver can handle this operation. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/video/vidconsole-uclass.c12
-rw-r--r--include/video_console.h14
2 files changed, 25 insertions, 1 deletions
diff --git a/drivers/video/vidconsole-uclass.c b/drivers/video/vidconsole-uclass.c
index bea563a..f6326b6 100644
--- a/drivers/video/vidconsole-uclass.c
+++ b/drivers/video/vidconsole-uclass.c
@@ -57,9 +57,17 @@ static int vidconsole_entry_start(struct udevice *dev)
}
/* Move backwards one space */
-static void vidconsole_back(struct udevice *dev)
+static int vidconsole_back(struct udevice *dev)
{
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+ struct vidconsole_ops *ops = vidconsole_get_ops(dev);
+ int ret;
+
+ if (ops->backspace) {
+ ret = ops->backspace(dev);
+ if (ret != -ENOSYS)
+ return ret;
+ }
priv->xcur_frac -= VID_TO_POS(priv->x_charsize);
if (priv->xcur_frac < priv->xstart_frac) {
@@ -69,6 +77,8 @@ static void vidconsole_back(struct udevice *dev)
if (priv->ycur < 0)
priv->ycur = 0;
}
+
+ return 0;
}
/* Move to a newline, scrolling the display if necessary */
diff --git a/include/video_console.h b/include/video_console.h
index 36c4e13..2604793 100644
--- a/include/video_console.h
+++ b/include/video_console.h
@@ -101,6 +101,20 @@ struct vidconsole_ops {
* positions.
*/
int (*entry_start)(struct udevice *dev);
+
+ /**
+ * backspace() - Handle erasing the last character
+ *
+ * With proportional fonts the vidconsole uclass cannot itself erase
+ * the previous character. This optional method will be called when
+ * a backspace is needed. The driver should erase the previous
+ * character and update the cursor position (xcur_frac, ycur) to the
+ * start of the previous character.
+ *
+ * If not implement, default behaviour will work for fixed-width
+ * characters.
+ */
+ int (*backspace)(struct udevice *dev);
};
/* Get a pointer to the driver operations for a video console device */