USB: serial: ftdi_sio: add space/mark parity
authorRoland Koebler <r.koebler@yahoo.de>
Mon, 5 Oct 2009 17:58:56 +0000 (19:58 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 11 Dec 2009 19:55:13 +0000 (11:55 -0800)
Add mark and space parity, since the device supports it.

Signed-off-by: Roland Koebler <r.koebler@yahoo.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/ftdi_sio.c

index ebcc6d0e2e91ec48d355a020e6da86f34c727508..a8103e0347ee8f031c70cbc8fdb72c8937c0a506 100644 (file)
@@ -2195,15 +2195,21 @@ static void ftdi_set_termios(struct tty_struct *tty,
 
        /* Set number of data bits, parity, stop bits */
 
-       termios->c_cflag &= ~CMSPAR;
-
        urb_value = 0;
        urb_value |= (cflag & CSTOPB ? FTDI_SIO_SET_DATA_STOP_BITS_2 :
                      FTDI_SIO_SET_DATA_STOP_BITS_1);
-       urb_value |= (cflag & PARENB ?
-                     (cflag & PARODD ? FTDI_SIO_SET_DATA_PARITY_ODD :
-                      FTDI_SIO_SET_DATA_PARITY_EVEN) :
-                     FTDI_SIO_SET_DATA_PARITY_NONE);
+       if (cflag & PARENB) {
+               if (cflag & CMSPAR)
+                       urb_value |= cflag & PARODD ?
+                                    FTDI_SIO_SET_DATA_PARITY_MARK :
+                                    FTDI_SIO_SET_DATA_PARITY_SPACE;
+               else
+                       urb_value |= cflag & PARODD ?
+                                    FTDI_SIO_SET_DATA_PARITY_ODD :
+                                    FTDI_SIO_SET_DATA_PARITY_EVEN;
+       } else {
+               urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
+       }
        if (cflag & CSIZE) {
                switch (cflag & CSIZE) {
                case CS5: urb_value |= 5; dbg("Setting CS5"); break;