diff options
author | Peng Fan <peng.fan@nxp.com> | 2018-11-15 13:13:14 +0800 |
---|---|---|
committer | Ye Li <ye.li@nxp.com> | 2020-04-26 23:34:19 -0700 |
commit | 8e053ce620c3471332caacd74d0720d409a67503 (patch) | |
tree | 55a931af381c023ccd4329e639014955bb400973 | |
parent | cbc0a6698241cf12e131d8722220657ae4d684ae (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.c | 13 | ||||
-rw-r--r-- | include/serial.h | 8 |
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 |