]> git.sur5r.net Git - u-boot/commitdiff
Small refactor to remove duplicate serial code
authorSimon Glass <sjg@chromium.org>
Fri, 19 Aug 2011 11:09:43 +0000 (11:09 +0000)
committerWolfgang Denk <wd@denx.de>
Sat, 1 Oct 2011 19:52:48 +0000 (21:52 +0200)
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>
common/serial.c

index 995d268f64f2deec3027382811925e8ed65cd6f5..7bfc861211a79f2d9c28407be854b146e7e6465c 100644 (file)
@@ -158,73 +158,49 @@ void serial_reinit_all (void)
        }
 }
 
-int serial_init (void)
+static struct serial_device *get_current(void)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
+       struct serial_device *dev;
 
-               return dev->init ();
-       }
+       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
+               dev = default_serial_console();
+
+               /* 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)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
-
-               dev->setbrg ();
-               return;
-       }
-
-       serial_current->setbrg ();
+       get_current()->setbrg();
 }
 
 int serial_getc (void)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
-
-               return dev->getc ();
-       }
-
-       return serial_current->getc ();
+       return get_current()->getc();
 }
 
 int serial_tstc (void)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
-
-               return dev->tstc ();
-       }
-
-       return serial_current->tstc ();
+       return get_current()->tstc();
 }
 
 void serial_putc (const char c)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
-
-               dev->putc (c);
-               return;
-       }
-
-       serial_current->putc (c);
+       get_current()->putc(c);
 }
 
 void serial_puts (const char *s)
 {
-       if (!(gd->flags & GD_FLG_RELOC) || !serial_current) {
-               struct serial_device *dev = default_serial_console ();
-
-               dev->puts (s);
-               return;
-       }
-
-       serial_current->puts (s);
+       get_current()->puts(s);
 }
 
 #if CONFIG_POST & CONFIG_SYS_POST_UART