diff --git a/common/stdio.c b/common/stdio.c index 2e5143a025..fbf06e29f0 100644 --- a/common/stdio.c +++ b/common/stdio.c @@ -54,6 +54,11 @@ static int nulldev_input(struct stdio_dev *dev) /* nulldev is empty! */ return 0; } + +static void nulldev_clear(struct stdio_dev *dev) +{ + /* nulldev is empty! */ +} #endif static void stdio_serial_putc(struct stdio_dev *dev, const char c) @@ -76,6 +81,11 @@ static int stdio_serial_tstc(struct stdio_dev *dev) return serial_tstc(); } +static void stdio_serial_clear(struct stdio_dev *dev) +{ + serial_clear(); +} + /************************************************************************** * SYSTEM DRIVERS ************************************************************************** @@ -93,6 +103,7 @@ static void drv_system_init (void) dev.puts = stdio_serial_puts; dev.getc = stdio_serial_getc; dev.tstc = stdio_serial_tstc; + dev.clear = stdio_serial_clear; stdio_register (&dev); #ifdef CONFIG_SYS_DEVICE_NULLDEV @@ -104,6 +115,7 @@ static void drv_system_init (void) dev.puts = nulldev_puts; dev.getc = nulldev_input; dev.tstc = nulldev_input; + dev.clear = nulldev_clear; stdio_register (&dev); #endif diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index c86766bb44..aaa864b8ac 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -201,6 +201,14 @@ static int __serial_tstc(struct udevice *dev) return 1; } +static void __serial_clear(struct udevice *dev) +{ + struct dm_serial_ops *ops = serial_get_ops(dev); + + if (ops->clear) + ops->clear(dev); +} + #if CONFIG_IS_ENABLED(SERIAL_RX_BUFFER) static int _serial_tstc(struct udevice *dev) { @@ -281,14 +289,10 @@ void serial_setbrg(void) void serial_clear(void) { - struct dm_serial_ops *ops; - if (!gd->cur_serial_dev) return; - ops = serial_get_ops(gd->cur_serial_dev); - if (ops->setbrg) - ops->clear(gd->cur_serial_dev); + __serial_clear(gd->cur_serial_dev); } void serial_stdio_init(void)