imx: serial: use tty_encode_baud_rate to set true rate
real baud rate may be different from the one requested. for upper layers, set the nearest value to the real rate in favour of the rate previously requested. Signed-off-by: Oskar Schirmer <os@emlix.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b6e4913834
commit
d7f8d437bd
|
@ -818,6 +818,7 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|||
unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8;
|
||||
unsigned int div, ufcr;
|
||||
unsigned long num, denom;
|
||||
uint64_t tdiv64;
|
||||
|
||||
/*
|
||||
* If we don't support modem control lines, don't allow
|
||||
|
@ -930,6 +931,12 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|||
rational_best_approximation(16 * div * baud, sport->port.uartclk,
|
||||
1 << 16, 1 << 16, &num, &denom);
|
||||
|
||||
tdiv64 = sport->port.uartclk;
|
||||
tdiv64 *= num;
|
||||
do_div(tdiv64, denom * 16 * div);
|
||||
tty_encode_baud_rate(sport->port.info->port.tty,
|
||||
(speed_t)tdiv64, (speed_t)tdiv64);
|
||||
|
||||
num -= 1;
|
||||
denom -= 1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue