Before the console is available, the functions serial_*() are used, while serial_stub_*() are called after the console is ready.
Functions in those two groups are almost the same except how udevice is passed; serial_*() pass "cur_dev" whereas serial_stub_*() pass sdev->priv. This commit merges the duplicated code; common lines are put into _serlal_*(). Signed-off-by: Masahiro Yamada <[email protected]> --- drivers/serial/serial-uclass.c | 98 ++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index 163308b..6ee097d 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -71,52 +71,72 @@ void serial_initialize(void) serial_find_console_or_panic(); } -void serial_putc(char ch) +static void _serial_putc(struct udevice *dev, const char ch) { - struct dm_serial_ops *ops = serial_get_ops(cur_dev); - int err; + struct dm_serial_ops *ops = serial_get_ops(dev); + int res; do { - err = ops->putc(cur_dev, ch); - } while (err == -EAGAIN); + res = ops->putc(cur_dev, ch); + } while (res == -EAGAIN); if (ch == '\n') - serial_putc('\r'); + _serial_putc(dev, '\r'); } -void serial_setbrg(void) +static void _serial_puts(struct udevice *dev, const char *str) { - struct dm_serial_ops *ops = serial_get_ops(cur_dev); - - if (ops->setbrg) - ops->setbrg(cur_dev, gd->baudrate); + while (*str) + _serial_putc(dev, *str++); } -void serial_puts(const char *str) +static int _serial_getc(struct udevice *dev) { - while (*str) - serial_putc(*str++); + struct dm_serial_ops *ops = serial_get_ops(dev); + int res; + + do { + res = ops->getc(dev); + } while (res == -EAGAIN); + + return res >= 0 ? res : 0; } -int serial_tstc(void) +static int _serial_tstc(struct udevice *dev) { - struct dm_serial_ops *ops = serial_get_ops(cur_dev); + struct dm_serial_ops *ops = serial_get_ops(dev); if (ops->pending) - return ops->pending(cur_dev, true); + return ops->pending(dev, true); return 1; } +void serial_putc(char ch) +{ + _serial_putc(cur_dev, ch); +} + +void serial_puts(const char *str) +{ + _serial_puts(cur_dev, str); +} + int serial_getc(void) { - struct dm_serial_ops *ops = serial_get_ops(cur_dev); - int err; + return _serial_getc(cur_dev); +} - do { - err = ops->getc(cur_dev); - } while (err == -EAGAIN); +int serial_tstc(void) +{ + return _serial_tstc(cur_dev); +} + +void serial_setbrg(void) +{ + struct dm_serial_ops *ops = serial_get_ops(cur_dev); - return err >= 0 ? err : 0; + if (ops->setbrg) + ops->setbrg(cur_dev, gd->baudrate); } void serial_stdio_init(void) @@ -125,46 +145,22 @@ void serial_stdio_init(void) void serial_stub_putc(struct stdio_dev *sdev, const char ch) { - struct udevice *dev = sdev->priv; - struct dm_serial_ops *ops = serial_get_ops(dev); - int err; - - do { - err = ops->putc(cur_dev, ch); - } while (err == -EAGAIN); - if (ch == '\n') - serial_putc('\r'); + _serial_putc(sdev->priv, ch); } void serial_stub_puts(struct stdio_dev *sdev, const char *str) { - while (*str) - serial_stub_putc(sdev, *str++); + _serial_puts(sdev->priv, str); } int serial_stub_getc(struct stdio_dev *sdev) { - struct udevice *dev = sdev->priv; - struct dm_serial_ops *ops = serial_get_ops(dev); - - int err; - - do { - err = ops->getc(dev); - } while (err == -EAGAIN); - - return err >= 0 ? err : 0; + return _serial_getc(sdev->priv); } int serial_stub_tstc(struct stdio_dev *sdev) { - struct udevice *dev = sdev->priv; - struct dm_serial_ops *ops = serial_get_ops(dev); - - if (ops->pending) - return ops->pending(dev, true); - - return 1; + return _serial_tstc(sdev->priv); } static int serial_post_probe(struct udevice *dev) -- 1.9.1 _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

