diff options
-rw-r--r-- | drivers/serial/bfin_sport_uart.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/serial/bfin_sport_uart.c b/drivers/serial/bfin_sport_uart.c index 5318dd3774ae..6f1b51e231e4 100644 --- a/drivers/serial/bfin_sport_uart.c +++ b/drivers/serial/bfin_sport_uart.c | |||
@@ -131,7 +131,12 @@ static int sport_uart_setup(struct sport_uart_port *up, int size, int baud_rate) | |||
131 | pr_debug("%s RCR1:%x, RCR2:%x\n", __func__, SPORT_GET_RCR1(up), SPORT_GET_RCR2(up)); | 131 | pr_debug("%s RCR1:%x, RCR2:%x\n", __func__, SPORT_GET_RCR1(up), SPORT_GET_RCR2(up)); |
132 | 132 | ||
133 | tclkdiv = sclk / (2 * baud_rate) - 1; | 133 | tclkdiv = sclk / (2 * baud_rate) - 1; |
134 | rclkdiv = sclk / (2 * baud_rate * 2) - 1; | 134 | /* The actual uart baud rate of devices vary between +/-2%. The sport |
135 | * RX sample rate should be faster than the double of the worst case, | ||
136 | * otherwise, wrong data are received. So, set sport RX clock to be | ||
137 | * 3% faster. | ||
138 | */ | ||
139 | rclkdiv = sclk / (2 * baud_rate * 2 * 97 / 100) - 1; | ||
135 | SPORT_PUT_TCLKDIV(up, tclkdiv); | 140 | SPORT_PUT_TCLKDIV(up, tclkdiv); |
136 | SPORT_PUT_RCLKDIV(up, rclkdiv); | 141 | SPORT_PUT_RCLKDIV(up, rclkdiv); |
137 | SSYNC(); | 142 | SSYNC(); |