USB-serial: pl2303: use 1.5 instead of 2 stop bits with 5 data bits
authorFrank Schaefer <schaefer.frank@gmx.net>
Tue, 18 Aug 2009 18:34:24 +0000 (20:34 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Sep 2009 13:46:37 +0000 (06:46 -0700)
This is how "real" UARTs (e.g. 16550) work and AFAIK what RS232 specifies, too.
Make the driver more compliant.

Signed-off-by: Frank Schaefer <schaefer.frank@gmx.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/pl2303.c

index 6ed33c7e53e229b7b59e1257504dbd0ab6acb9c3..1128e01525b117001841dfd3462871bbbdc7e299 100644 (file)
@@ -622,8 +622,16 @@ static void pl2303_set_termios(struct tty_struct *tty,
        /* For reference buf[4]=1 is 1.5 stop bits */
        /* For reference buf[4]=2 is 2 stop bits */
        if (cflag & CSTOPB) {
-               buf[4] = 2;
-               dbg("%s - stop bits = 2", __func__);
+               /* NOTE: Comply with "real" UARTs / RS232:
+                *       use 1.5 instead of 2 stop bits with 5 data bits
+                */
+               if ((cflag & CSIZE) == CS5) {
+                       buf[4] = 1;
+                       dbg("%s - stop bits = 1.5", __func__);
+               } else {
+                       buf[4] = 2;
+                       dbg("%s - stop bits = 2", __func__);
+               }
        } else {
                buf[4] = 0;
                dbg("%s - stop bits = 1", __func__);