Small refactor to remove duplicate serial code

This tidies up duplicate code, and checks that default_serial_console() does
in fact produce a device.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Simon Glass 2011-08-19 11:09:43 +00:00 committed by Wolfgang Denk
parent 025421eab4
commit 857c283e9b

View File

@ -158,73 +158,49 @@ void serial_reinit_all (void)
} }
} }
int serial_init (void) static struct serial_device *get_current(void)
{ {
struct serial_device *dev;
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
struct serial_device *dev = default_serial_console (); dev = default_serial_console();
return dev->init (); /* We must have a console device */
} if (!dev)
panic("Cannot find console");
} else
dev = serial_current;
return dev;
}
return serial_current->init (); int serial_init(void)
{
return get_current()->init();
} }
void serial_setbrg (void) void serial_setbrg (void)
{ {
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { get_current()->setbrg();
struct serial_device *dev = default_serial_console ();
dev->setbrg ();
return;
}
serial_current->setbrg ();
} }
int serial_getc (void) int serial_getc (void)
{ {
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { return get_current()->getc();
struct serial_device *dev = default_serial_console ();
return dev->getc ();
}
return serial_current->getc ();
} }
int serial_tstc (void) int serial_tstc (void)
{ {
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { return get_current()->tstc();
struct serial_device *dev = default_serial_console ();
return dev->tstc ();
}
return serial_current->tstc ();
} }
void serial_putc (const char c) void serial_putc (const char c)
{ {
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { get_current()->putc(c);
struct serial_device *dev = default_serial_console ();
dev->putc (c);
return;
}
serial_current->putc (c);
} }
void serial_puts (const char *s) void serial_puts (const char *s)
{ {
if (!(gd->flags & GD_FLG_RELOC) || !serial_current) { get_current()->puts(s);
struct serial_device *dev = default_serial_console ();
dev->puts (s);
return;
}
serial_current->puts (s);
} }
#if CONFIG_POST & CONFIG_SYS_POST_UART #if CONFIG_POST & CONFIG_SYS_POST_UART