video: Factor out vidconsole_put_string()
authorMarek Vasut <marex@denx.de>
Fri, 17 May 2019 18:22:31 +0000 (20:22 +0200)
committerAnatolij Gustschin <agust@denx.de>
Mon, 20 May 2019 10:00:05 +0000 (12:00 +0200)
Pull the vidconsole_put_string() function from DM tests, make it
available to e.g. boards that want to display information on the
LCD on boot.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Reviewed-by: Anatolij Gustschin <agust@denx.de>
drivers/video/vidconsole-uclass.c
include/video_console.h
test/dm/video.c

index c31303b56edc3fe2f824f20c14f9fea4ae7c2b5d..af88588904464ad3c4506ecc587e97bdcc908eda 100644 (file)
@@ -529,6 +529,20 @@ int vidconsole_put_char(struct udevice *dev, char ch)
        return 0;
 }
 
+int vidconsole_put_string(struct udevice *dev, const char *str)
+{
+       const char *s;
+       int ret;
+
+       for (s = str; *s; s++) {
+               ret = vidconsole_put_char(dev, *s);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 static void vidconsole_putc(struct stdio_dev *sdev, const char ch)
 {
        struct udevice *dev = sdev->priv;
@@ -541,8 +555,7 @@ static void vidconsole_puts(struct stdio_dev *sdev, const char *s)
 {
        struct udevice *dev = sdev->priv;
 
-       while (*s)
-               vidconsole_put_char(dev, *s++);
+       vidconsole_put_string(dev, s);
        video_sync(dev->parent, false);
 }
 
index 52a41ac2007afb759b82771fe9ce426c5461a055..0936ceaaf1c7b502241ecb7501c3a41dcb9fd6ce 100644 (file)
@@ -214,6 +214,22 @@ int vidconsole_set_row(struct udevice *dev, uint row, int clr);
  */
 int vidconsole_put_char(struct udevice *dev, char ch);
 
+/**
+ * vidconsole_put_string() - Output a string to the current console position
+ *
+ * Outputs a string to the console and advances the cursor. This function
+ * handles wrapping to new lines and scrolling the console. Special
+ * characters are handled also: \n, \r, \b and \t.
+ *
+ * The device always starts with the cursor at position 0,0 (top left). It
+ * can be adjusted manually using vidconsole_position_cursor().
+ *
+ * @dev:       Device to adjust
+ * @str:       String to write
+ * @return 0 if OK, -ve on error
+ */
+int vidconsole_put_string(struct udevice *dev, const char *str);
+
 /**
  * vidconsole_position_cursor() - Move the text cursor
  *
index 6be5defc53c9177a99445668a4765b1818d21bdb..3151ebb73fc644c8778cab4248d1f494af28b0e9 100644 (file)
@@ -97,14 +97,6 @@ static int select_vidconsole(struct unit_test_state *uts, const char *drv_name)
        return 0;
 }
 
-static void vidconsole_put_string(struct udevice *dev, const char *str)
-{
-       const char *s;
-
-       for (s = str; *s; s++)
-               vidconsole_put_char(dev, *s);
-}
-
 /* Test text output works on the video console */
 static int dm_test_video_text(struct unit_test_state *uts)
 {