serial: uartlite: Init all uartlites for serial multi

Initialize all possible uartlites and return the first
initialized port. For static configuration is initialization
done in userial_ports array.

Signed-off-by: Michal Simek <monstr@monstr.eu>
Acked-by: Stephan Linz <linz@li-pro.net>
This commit is contained in:
Michal Simek 2012-07-02 10:32:18 +02:00
parent 7636ebe1d2
commit 25239e12d9

View File

@ -89,11 +89,17 @@ int uartlite_serial_tstc(const int port)
return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA; return in_be32(&regs->status) & SR_RX_FIFO_VALID_DATA;
} }
static int uartlite_serial_init(const int port)
{
if (userial_ports[port])
return 0;
return -1;
}
#if !defined(CONFIG_SERIAL_MULTI) #if !defined(CONFIG_SERIAL_MULTI)
int serial_init(void) int serial_init(void)
{ {
/* FIXME: Nothing for now. We should initialize fifo, etc */ return uartlite_serial_init(0);
return 0;
} }
void serial_setbrg(void) void serial_setbrg(void)
@ -126,7 +132,7 @@ int serial_tstc(void)
/* Multi serial device functions */ /* Multi serial device functions */
#define DECLARE_ESERIAL_FUNCTIONS(port) \ #define DECLARE_ESERIAL_FUNCTIONS(port) \
int userial##port##_init(void) \ int userial##port##_init(void) \
{ return(0); } \ { return uartlite_serial_init(port); } \
void userial##port##_setbrg(void) {} \ void userial##port##_setbrg(void) {} \
int userial##port##_getc(void) \ int userial##port##_getc(void) \
{ return uartlite_serial_getc(port); } \ { return uartlite_serial_getc(port); } \
@ -163,17 +169,15 @@ struct serial_device uartlite_serial3_device =
__weak struct serial_device *default_serial_console(void) __weak struct serial_device *default_serial_console(void)
{ {
# ifdef XILINX_UARTLITE_BASEADDR if (userial_ports[0])
return &uartlite_serial0_device; return &uartlite_serial0_device;
# endif /* XILINX_UARTLITE_BASEADDR */ if (userial_ports[1])
# ifdef XILINX_UARTLITE_BASEADDR1 return &uartlite_serial1_device;
return &uartlite_serial1_device; if (userial_ports[2])
# endif /* XILINX_UARTLITE_BASEADDR1 */ return &uartlite_serial2_device;
# ifdef XILINX_UARTLITE_BASEADDR2 if (userial_ports[3])
return &uartlite_serial2_device; return &uartlite_serial3_device;
# endif /* XILINX_UARTLITE_BASEADDR2 */
# ifdef XILINX_UARTLITE_BASEADDR3 return NULL;
return &uartlite_serial3_device;
# endif /* XILINX_UARTLITE_BASEADDR3 */
} }
#endif /* CONFIG_SERIAL_MULTI */ #endif /* CONFIG_SERIAL_MULTI */