aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial
diff options
context:
space:
mode:
authorOskar Schirmer <os@emlix.com>2009-06-11 09:55:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-11 11:51:09 -0400
commitd7f8d437bda0ec409e26cffb846bc28a40603ee3 (patch)
tree917e906bc45d2f08038f0dcba326b1dbb6c57320 /drivers/serial
parentb6e4913834cd032082e5c76dfade61050212dc98 (diff)
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>
Diffstat (limited to 'drivers/serial')
-rw-r--r--drivers/serial/imx.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
index 8c79e8c2fd4e..7b5d1de9cfe3 100644
--- a/drivers/serial/imx.c
+++ b/drivers/serial/imx.c
@@ -818,6 +818,7 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
818 unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8; 818 unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8;
819 unsigned int div, ufcr; 819 unsigned int div, ufcr;
820 unsigned long num, denom; 820 unsigned long num, denom;
821 uint64_t tdiv64;
821 822
822 /* 823 /*
823 * If we don't support modem control lines, don't allow 824 * 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,
930 rational_best_approximation(16 * div * baud, sport->port.uartclk, 931 rational_best_approximation(16 * div * baud, sport->port.uartclk,
931 1 << 16, 1 << 16, &num, &denom); 932 1 << 16, 1 << 16, &num, &denom);
932 933
934 tdiv64 = sport->port.uartclk;
935 tdiv64 *= num;
936 do_div(tdiv64, denom * 16 * div);
937 tty_encode_baud_rate(sport->port.info->port.tty,
938 (speed_t)tdiv64, (speed_t)tdiv64);
939
933 num -= 1; 940 num -= 1;
934 denom -= 1; 941 denom -= 1;
935 942