]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/serial/mcfuart.c
Merge branch 'next' of git://git.denx.de/u-boot-nios
[people/ms/u-boot.git] / drivers / serial / mcfuart.c
index f54aabec2684e2757d8e177d05120572375d1a60..d93b24b8970677e7331eaa4ca86c851783602003 100644 (file)
  */
 
 #include <common.h>
+
 #include <asm/immap.h>
 #include <asm/uart.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_MCFSERIAL
+extern void uart_port_conf(int port);
+
 int serial_init(void)
 {
        volatile uart_t *uart;
        u32 counter;
 
-       uart = (volatile uart_t *)(CFG_UART_BASE);
+       uart = (volatile uart_t *)(CONFIG_SYS_UART_BASE);
+
+       uart_port_conf(CONFIG_SYS_UART_PORT);
 
        /* write to SICR: SIM2 = uart mode,dcd does not affect rx */
        uart->ucr = UART_UCR_RESET_RX;
@@ -57,8 +61,8 @@ int serial_init(void)
        uart->umr = UART_UMR_SB_STOP_BITS_1;
 
        /* Setting up BaudRate */
-       counter = (u32) (gd->bus_clk / (gd->baudrate));
-       counter >>= 5;
+       counter = (u32) ((gd->bus_clk / 32) + (gd->baudrate / 2));
+       counter = counter / gd->baudrate;
 
        /* write to CTUR: divide counter upper byte */
        uart->ubg1 = (u8) ((counter & 0xff00) >> 8);
@@ -72,7 +76,7 @@ int serial_init(void)
 
 void serial_putc(const char c)
 {
-       volatile uart_t *uart = (volatile uart_t *)(CFG_UART_BASE);
+       volatile uart_t *uart = (volatile uart_t *)(CONFIG_SYS_UART_BASE);
 
        if (c == '\n')
                serial_putc('\r');
@@ -92,7 +96,7 @@ void serial_puts(const char *s)
 
 int serial_getc(void)
 {
-       volatile uart_t *uart = (volatile uart_t *)(CFG_UART_BASE);
+       volatile uart_t *uart = (volatile uart_t *)(CONFIG_SYS_UART_BASE);
 
        /* Wait for a character to arrive. */
        while (!(uart->usr & UART_USR_RXRDY)) ;
@@ -101,18 +105,19 @@ int serial_getc(void)
 
 int serial_tstc(void)
 {
-       volatile uart_t *uart = (volatile uart_t *)(CFG_UART_BASE);
+       volatile uart_t *uart = (volatile uart_t *)(CONFIG_SYS_UART_BASE);
 
        return (uart->usr & UART_USR_RXRDY);
 }
 
 void serial_setbrg(void)
 {
-       volatile uart_t *uart = (volatile uart_t *)(CFG_UART_BASE);
+       volatile uart_t *uart = (volatile uart_t *)(CONFIG_SYS_UART_BASE);
        u32 counter;
 
-       counter = ((gd->bus_clk / gd->baudrate)) >> 5;
-       counter++;
+       /* Setting up BaudRate */
+       counter = (u32) ((gd->bus_clk / 32) + (gd->baudrate / 2));
+       counter = counter / gd->baudrate;
 
        /* write to CTUR: divide counter upper byte */
        uart->ubg1 = ((counter & 0xff00) >> 8);
@@ -124,4 +129,3 @@ void serial_setbrg(void)
 
        uart->ucr = UART_UCR_RX_ENABLED | UART_UCR_TX_ENABLED;
 }
-#endif                         /* CONFIG_MCFSERIAL */