serial: mfd: adjust the baud rate setting
authorFeng Tang <feng.tang@intel.com>
Fri, 19 Nov 2010 03:01:48 +0000 (11:01 +0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 9 Dec 2010 21:33:22 +0000 (13:33 -0800)
commit a5880a9e5bb40fbae55de60051d69a29091053c3 upstream.

Previous baud rate setting code only has been tested with 3.5M/9600/
115200/230400/460800 bps, and recently we got a 3M bps device to test,
which needs to modify current MUL register setting, and with this
patch 2.5M/2M/1.5M/1M/0.5M should also work as they just use a MUL
value scale down from 3M's.

Also got some reference register setting from silicon guys for
different baud rates, which tries to keep the pre-scalar register value
to 16.

Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/mfd.c

index 5dff45c76d32c5f026dc1ae408166a4f5e9ac6d2..f083f7c90c292cddff6291eda636241513531e62 100644 (file)
@@ -892,8 +892,7 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios,
        unsigned char cval, fcr = 0;
        unsigned long flags;
        unsigned int baud, quot;
-       u32 mul = 0x3600;
-       u32 ps = 0x10;
+       u32 ps, mul;
 
        switch (termios->c_cflag & CSIZE) {
        case CS5:
@@ -937,20 +936,19 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios,
                ps = 0xC;
                quot = 1;
                break;
-       case 2500000:
-               mul = 0x2710;
-               ps = 0x10;
-               quot = 1;
-               break;
        case 18432000:
                mul = 0x2400;
                ps = 0x10;
                quot = 1;
                break;
+       case 3000000:
+       case 2500000:
+       case 2000000:
        case 1500000:
-               mul = 0x1D4C;
-               ps = 0xc;
-               quot = 1;
+       case 1000000:
+       case 500000:
+               /* mul/ps/quot = 0x9C4/0x10/0x1 will make a 500000 bps */
+               mul = baud / 500000 * 0x9C4;
                break;
        default:
                ;