ColdFire: Fix UART baudrate formula
authorTsiChung Liew <Tsi-Chung.Liew@freescale.com>
Thu, 29 May 2008 17:21:54 +0000 (12:21 -0500)
committerJohn Rigby <jrigby@freescale.com>
Fri, 11 Jul 2008 16:45:56 +0000 (10:45 -0600)
The formula "counter = (u32) (gd->bus_clk / gd->baudrate) / 32"
can generate the wrong divisor due to integer division truncation.
Round the calculated divisor value by adding 1/2 the baudrate
before dividing by the baudrate.

Signed-off-by: TsiChung Liew <Tsi-Chung.Liew@freescale.com>
Acked-by: Gerald Van Baren <vanbaren@cideas.com>
drivers/serial/mcfuart.c

index 88f3eb10abf8f3b4b67d5459b503cb3b6f8e7830..5eb4f458f815e0a966ea8c8b1bd892c7241bbc13 100644 (file)
@@ -63,8 +63,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);