aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorAaron Sierra <asierra@xes-inc.com>2014-03-03 20:54:29 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-03-09 01:24:53 -0500
commit50825c57ab80ea44cae6bdcd79ead61e3e4e4e4c (patch)
treede485a535c3bf2ee4de1b13f8924e667b4c4d16d /drivers/tty
parent013daec9c19b73ef1e8e427dd7c8acca5766c17e (diff)
serial: 8250_pci: more BayTrail error-free bauds
Support the following additional baud rates with 0% error: 500000, 1500000, 2500000, 3500000 Signed-off-by: Aaron Sierra <asierra@xes-inc.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/8250/8250_pci.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 0ff3e3624d4c..a3dbc4d97fa2 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1366,22 +1366,43 @@ byt_set_termios(struct uart_port *p, struct ktermios *termios,
1366 struct ktermios *old) 1366 struct ktermios *old)
1367{ 1367{
1368 unsigned int baud = tty_termios_baud_rate(termios); 1368 unsigned int baud = tty_termios_baud_rate(termios);
1369 unsigned int m = 6912; 1369 unsigned int m, n;
1370 unsigned int n = 15625;
1371 u32 reg; 1370 u32 reg;
1372 1371
1373 /* For baud rates 1M, 2M, 3M and 4M the dividers must be adjusted. */ 1372 /*
1374 if (baud == 1000000 || baud == 2000000 || baud == 4000000) { 1373 * For baud rates 0.5M, 1M, 1.5M, 2M, 2.5M, 3M, 3.5M and 4M the
1374 * dividers must be adjusted.
1375 *
1376 * uartclk = (m / n) * 100 MHz, where m <= n
1377 */
1378 switch (baud) {
1379 case 500000:
1380 case 1000000:
1381 case 2000000:
1382 case 4000000:
1375 m = 64; 1383 m = 64;
1376 n = 100; 1384 n = 100;
1377
1378 p->uartclk = 64000000; 1385 p->uartclk = 64000000;
1379 } else if (baud == 3000000) { 1386 break;
1387 case 3500000:
1388 m = 56;
1389 n = 100;
1390 p->uartclk = 56000000;
1391 break;
1392 case 1500000:
1393 case 3000000:
1380 m = 48; 1394 m = 48;
1381 n = 100; 1395 n = 100;
1382
1383 p->uartclk = 48000000; 1396 p->uartclk = 48000000;
1384 } else { 1397 break;
1398 case 2500000:
1399 m = 40;
1400 n = 100;
1401 p->uartclk = 40000000;
1402 break;
1403 default:
1404 m = 6912;
1405 n = 15625;
1385 p->uartclk = 44236800; 1406 p->uartclk = 44236800;
1386 } 1407 }
1387 1408