summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2018-11-15 13:13:14 +0800
committerYe Li <ye.li@nxp.com>2020-04-26 23:34:19 -0700
commit8e053ce620c3471332caacd74d0720d409a67503 (patch)
tree55a931af381c023ccd4329e639014955bb400973
parentcbc0a6698241cf12e131d8722220657ae4d684ae (diff)
MLK-20373-2 dm: serial: introduce puts hook
Introduce puts hook for dm serial driver. Change-Id: I75423998c7d8db20949bae6ac46a094dc62c9612 Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Flynn xu <flynn.xu@nxp.com> (cherry picked from commit bb986d4ff2124285ec0d99a51a2702a53f485813)
-rw-r--r--drivers/serial/serial-uclass.c13
-rw-r--r--include/serial.h8
2 files changed, 19 insertions, 2 deletions
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 30f9b8c9394..3a3e44ecc3b 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -188,8 +188,17 @@ static void _serial_putc(struct udevice *dev, char ch)
static void _serial_puts(struct udevice *dev, const char *str)
{
- while (*str)
- _serial_putc(dev, *str++);
+ struct dm_serial_ops *ops = serial_get_ops(dev);
+ int err;
+
+ if (ops->puts) {
+ do {
+ err = ops->puts(dev, str);
+ } while (err == -EAGAIN);
+ } else {
+ while (*str)
+ _serial_putc(dev, *str++);
+ }
}
static int __serial_getc(struct udevice *dev)
diff --git a/include/serial.h b/include/serial.h
index 104f34ff914..cfe4d3463eb 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -184,6 +184,14 @@ struct dm_serial_ops {
*/
int (*getc)(struct udevice *dev);
/**
+ * puts() - puts a string
+ *
+ * @dev: Device pointer
+ * @str: string to write
+ * @return 0 if OK, -ve on error
+ */
+ int (*puts)(struct udevice *dev, const char *str);
+ /**
* putc() - Write a character
*
* @dev: Device pointer