aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Anderson <sean.anderson@seco.com>2022-04-04 14:17:58 -0400
committerTom Rini <trini@konsulko.com>2022-04-14 15:39:15 -0400
commitefa51f2bd641965f91550e1f7eeec14b5746db87 (patch)
tree3b1b673feefe800384c9413747a2910757924632
parent2c777488b6709dea4aadfdadbbfccc0de751a022 (diff)
downloadu-boot-efa51f2bd641965f91550e1f7eeec14b5746db87.zip
u-boot-efa51f2bd641965f91550e1f7eeec14b5746db87.tar.gz
u-boot-efa51f2bd641965f91550e1f7eeec14b5746db87.tar.bz2
serial: sandbox: Implement puts
This implements puts for sandbox. It is fairly straightforward, except that we break out the shared color printing functionality into its own function. Signed-off-by: Sean Anderson <sean.anderson@seco.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--drivers/serial/Kconfig1
-rw-r--r--drivers/serial/sandbox.c21
2 files changed, 21 insertions, 1 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 286c998..6b189f8 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -779,6 +779,7 @@ config S5P_SERIAL
config SANDBOX_SERIAL
bool "Sandbox UART support"
depends on SANDBOX
+ imply SERIAL_PUTS
help
Select this to enable a seral UART for sandbox. This is required to
operate correctly, otherwise you will see no serial output from
diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c
index 0b1756f..50cf2c7 100644
--- a/drivers/serial/sandbox.c
+++ b/drivers/serial/sandbox.c
@@ -67,7 +67,7 @@ static int sandbox_serial_remove(struct udevice *dev)
return 0;
}
-static int sandbox_serial_putc(struct udevice *dev, const char ch)
+static void sandbox_print_color(struct udevice *dev)
{
struct sandbox_serial_priv *priv = dev_get_priv(dev);
struct sandbox_serial_plat *plat = dev_get_plat(dev);
@@ -78,7 +78,13 @@ static int sandbox_serial_putc(struct udevice *dev, const char ch)
priv->start_of_line = false;
output_ansi_colour(plat->colour);
}
+}
+static int sandbox_serial_putc(struct udevice *dev, const char ch)
+{
+ struct sandbox_serial_priv *priv = dev_get_priv(dev);
+
+ sandbox_print_color(dev);
os_write(1, &ch, 1);
if (ch == '\n')
priv->start_of_line = true;
@@ -86,6 +92,18 @@ static int sandbox_serial_putc(struct udevice *dev, const char ch)
return 0;
}
+static ssize_t sandbox_serial_puts(struct udevice *dev, const char *s,
+ size_t len)
+{
+ struct sandbox_serial_priv *priv = dev_get_priv(dev);
+
+ sandbox_print_color(dev);
+ if (s[len - 1] == '\n')
+ priv->start_of_line = true;
+
+ return os_write(1, s, len);
+}
+
static int sandbox_serial_pending(struct udevice *dev, bool input)
{
struct sandbox_serial_priv *priv = dev_get_priv(dev);
@@ -212,6 +230,7 @@ static int sandbox_serial_of_to_plat(struct udevice *dev)
static const struct dm_serial_ops sandbox_serial_ops = {
.putc = sandbox_serial_putc,
+ .puts = sandbox_serial_puts,
.pending = sandbox_serial_pending,
.getc = sandbox_serial_getc,
.getconfig = sandbox_serial_getconfig,