video/console: Factor out actual character output
authorAndre Przywara <andre.przywara@arm.com>
Sat, 23 Mar 2019 01:29:59 +0000 (01:29 +0000)
committerAnatolij Gustschin <agust@denx.de>
Sun, 14 Apr 2019 12:18:47 +0000 (14:18 +0200)
In preparation for doing character set translations, factor out the
actual glyph display functionality into a separate function.
This will be used in a subsequent patch.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/video/vidconsole-uclass.c

index cf2f0dff441fa76a61b82cc21caee21976b7b223..c31303b56edc3fe2f824f20c14f9fea4ae7c2b5d 100644 (file)
@@ -457,6 +457,32 @@ error:
        priv->escape = 0;
 }
 
+/* Put that actual character on the screen (using the CP437 code page). */
+static int vidconsole_output_glyph(struct udevice *dev, char ch)
+{
+       struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
+       int ret;
+
+       /*
+        * Failure of this function normally indicates an unsupported
+        * colour depth. Check this and return an error to help with
+        * diagnosis.
+        */
+       ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
+       if (ret == -EAGAIN) {
+               vidconsole_newline(dev);
+               ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
+       }
+       if (ret < 0)
+               return ret;
+       priv->xcur_frac += ret;
+       priv->last_ch = ch;
+       if (priv->xcur_frac >= priv->xsize_frac)
+               vidconsole_newline(dev);
+
+       return 0;
+}
+
 int vidconsole_put_char(struct udevice *dev, char ch)
 {
        struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
@@ -494,23 +520,9 @@ int vidconsole_put_char(struct udevice *dev, char ch)
                priv->last_ch = 0;
                break;
        default:
-               /*
-                * Failure of this function normally indicates an unsupported
-                * colour depth. Check this and return an error to help with
-                * diagnosis.
-                */
-               ret = vidconsole_putc_xy(dev, priv->xcur_frac, priv->ycur, ch);
-               if (ret == -EAGAIN) {
-                       vidconsole_newline(dev);
-                       ret = vidconsole_putc_xy(dev, priv->xcur_frac,
-                                                priv->ycur, ch);
-               }
+               ret = vidconsole_output_glyph(dev, 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;
        }