[U-Boot] [PATCH 3/6] serial: Reorder serial_assign()

Allen Martin
2012-10-20T00:45:54Z

On Sat, Oct 06, 2012 at 05:07:03PM -0700, Marek Vasut wrote:
> Reorder serial_assign() function to get rid of the extra level of
> indentation. Also, adjust the return value to be -EINVAL instead of
> positive one to be more consistent.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Marek Vasut <marek.vasut@gmail.com>
> Cc: Tom Rini <trini@ti.com>
> ---
> drivers/serial/serial.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c
> index da41cd5..1054494 100644
> --- a/drivers/serial/serial.c
> +++ b/drivers/serial/serial.c
> @@ -26,6 +26,7 @@
> #include <stdio_dev.h>
> #include <post.h>
> #include <linux/compiler.h>
> +#include <errno.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -203,13 +204,13 @@ int serial_assign(const char *name)
> struct serial_device *s;
>
> for (s = serial_devices; s; s = s->next) {
> - if (strcmp(s->name, name) == 0) {
> - serial_current = s;
> - return 0;
> - }
> + if (strcmp(s->name, name))
> + continue;
> + serial_current = s;
> + return 0;
> }
>
> - return 1;
> + return -EINVAL;

Hi Marek, the change to return value here broke serial output on
tegra. What I see is that the serial device name (s->name) is
"eserial0" as set by serial_ns16550.c, and the name passed in from the
stdout environment is "serial" so they don't match and it fails. This
always used to be ok because the return code didn't indicate failure
and iomux_doenv() would continue on happily, but now it causes
iomux_doenv() to fail and no printfs() work after that.

Not sure what the right fix is, should stdout really be set to
"eserial0"? It seems "serial" should mean "the default serial device"
which for the normal case is the one and only device.

-Allen
--
nvpublic