
Fix CD calcutation on serial device.
Signed-off-by: Trimarchi Michael trimarchimichael@yahoo.it ---
--- cpu/arm920t/at91rm9200/serial.c.orig 2007-08-19 19:26:23.000000000 +0200 +++ cpu/arm920t/at91rm9200/serial.c 2007-08-19 19:29:50.000000000 +0200 @@ -50,14 +50,18 @@ AT91PS_USART us = (AT91PS_USART) AT91C_B AT91PS_USART us = (AT91PS_USART) AT91C_BASE_US1; #endif
+#define BAUDRATE(mck, baud) \ + ((((mck) * 10) % ((baud) * 16)) >= 5) ? \ + (mck / (baud * 16) + 1) : ((mck) / (baud * 16)) + void serial_setbrg (void) { int baudrate;
if ((baudrate = gd->baudrate) <= 0) baudrate = CONFIG_BAUDRATE; - /* MASTER_CLOCK/(16 * baudrate) */ - us->US_BRGR = (AT91C_MASTER_CLOCK >> 4) / (unsigned)baudrate; + + us->US_BRGR = BOUDRATE(AT91C_MASTER_CLOCK, (unsigned)baudrate); }
int serial_init (void)