diff options
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index ebcc6d0e2e91..216f187582ab 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <linux/serial.h> | 44 | #include <linux/serial.h> |
45 | #include <linux/usb/serial.h> | 45 | #include <linux/usb/serial.h> |
46 | #include "ftdi_sio.h" | 46 | #include "ftdi_sio.h" |
47 | #include "ftdi_sio_ids.h" | ||
47 | 48 | ||
48 | /* | 49 | /* |
49 | * Version Information | 50 | * Version Information |
@@ -598,6 +599,20 @@ static struct usb_device_id id_table_combined [] = { | |||
598 | { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) }, | 599 | { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) }, |
599 | { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) }, | 600 | { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) }, |
600 | { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) }, | 601 | { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) }, |
602 | { USB_DEVICE(BANDB_VID, BANDB_USOPTL4_PID) }, | ||
603 | { USB_DEVICE(BANDB_VID, BANDB_USPTL4_PID) }, | ||
604 | { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_2_PID) }, | ||
605 | { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_PID) }, | ||
606 | { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR2_PID) }, | ||
607 | { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR_PID) }, | ||
608 | { USB_DEVICE(BANDB_VID, BANDB_485USB9F_2W_PID) }, | ||
609 | { USB_DEVICE(BANDB_VID, BANDB_485USB9F_4W_PID) }, | ||
610 | { USB_DEVICE(BANDB_VID, BANDB_232USB9M_PID) }, | ||
611 | { USB_DEVICE(BANDB_VID, BANDB_485USBTB_2W_PID) }, | ||
612 | { USB_DEVICE(BANDB_VID, BANDB_485USBTB_4W_PID) }, | ||
613 | { USB_DEVICE(BANDB_VID, BANDB_TTL5USB9M_PID) }, | ||
614 | { USB_DEVICE(BANDB_VID, BANDB_TTL3USB9M_PID) }, | ||
615 | { USB_DEVICE(BANDB_VID, BANDB_ZZ_PROG1_USB_PID) }, | ||
601 | { USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) }, | 616 | { USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) }, |
602 | { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) }, | 617 | { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) }, |
603 | { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) }, | 618 | { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) }, |
@@ -2195,15 +2210,21 @@ static void ftdi_set_termios(struct tty_struct *tty, | |||
2195 | 2210 | ||
2196 | /* Set number of data bits, parity, stop bits */ | 2211 | /* Set number of data bits, parity, stop bits */ |
2197 | 2212 | ||
2198 | termios->c_cflag &= ~CMSPAR; | ||
2199 | |||
2200 | urb_value = 0; | 2213 | urb_value = 0; |
2201 | urb_value |= (cflag & CSTOPB ? FTDI_SIO_SET_DATA_STOP_BITS_2 : | 2214 | urb_value |= (cflag & CSTOPB ? FTDI_SIO_SET_DATA_STOP_BITS_2 : |
2202 | FTDI_SIO_SET_DATA_STOP_BITS_1); | 2215 | FTDI_SIO_SET_DATA_STOP_BITS_1); |
2203 | urb_value |= (cflag & PARENB ? | 2216 | if (cflag & PARENB) { |
2204 | (cflag & PARODD ? FTDI_SIO_SET_DATA_PARITY_ODD : | 2217 | if (cflag & CMSPAR) |
2205 | FTDI_SIO_SET_DATA_PARITY_EVEN) : | 2218 | urb_value |= cflag & PARODD ? |
2206 | FTDI_SIO_SET_DATA_PARITY_NONE); | 2219 | FTDI_SIO_SET_DATA_PARITY_MARK : |
2220 | FTDI_SIO_SET_DATA_PARITY_SPACE; | ||
2221 | else | ||
2222 | urb_value |= cflag & PARODD ? | ||
2223 | FTDI_SIO_SET_DATA_PARITY_ODD : | ||
2224 | FTDI_SIO_SET_DATA_PARITY_EVEN; | ||
2225 | } else { | ||
2226 | urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE; | ||
2227 | } | ||
2207 | if (cflag & CSIZE) { | 2228 | if (cflag & CSIZE) { |
2208 | switch (cflag & CSIZE) { | 2229 | switch (cflag & CSIZE) { |
2209 | case CS5: urb_value |= 5; dbg("Setting CS5"); break; | 2230 | case CS5: urb_value |= 5; dbg("Setting CS5"); break; |