diff options
Diffstat (limited to 'drivers/serial/serial.c')
| -rw-r--r-- | drivers/serial/serial.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index 76425d879..182ca2d14 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -144,8 +144,13 @@ static int calc_divisor (NS16550_t port)  #else  #define MODE_X_DIV 16  #endif -	return (CFG_NS16550_CLK / MODE_X_DIV / gd->baudrate); +	/* Compute divisor value. Normally, we should simply return: +	 *   CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate +	 * but we need to round that value by adding 0.5 or 8/16. +	 * Rounding is especially important at high baud rates. +	 */ +	return (((16 * CFG_NS16550_CLK) / MODE_X_DIV / gd->baudrate) + 8) / 16;  }  #if !defined(CONFIG_SERIAL_MULTI)  |