Genuine FTDI chips support only CS7/8. A previous fix enforced this limitation and reported it back to userspace. However, certain types of smartcard readers depend on specific driver behaviour that requests 0 data bits (not 5) to change into a different operating mode if CS5 has been set. This patch reenables this behaviour for all FTDI devices. Tagged to be added to stable, because it affects a lot of users of embedded systems which rely on these readers to work properly. Cc: stable@xxxxxxxxxxxxxxx Tested-by: Heinrich Siebmanns <H.Siebmanns@xxxxxxxxxxx> Signed-off-by: Colin Leitner <colin.leitner@xxxxxxxxx> --- drivers/usb/serial/ftdi_sio.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index fb0d537..f3def6bb 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c @@ -2125,9 +2125,20 @@ static void ftdi_set_termios(struct tty_struct *tty, /* * All FTDI UART chips are limited to CS7/8. We won't pretend to - * support CS5/6 and revert the CSIZE setting instead. + * support CS6 and revert the CSIZE setting instead. + * + * Some smartcard readers abuse this limitation to switch modes. + * Original FTDI chips fall back to eight data bits. + * + * TODO: Implement a quirk to only allow this with mentioned + * readers. One I know of (Argolis Smartreader V1) + * returns "USB smartcard server" as iInterface string. + * The vendor didn't bother with a custom VID/PID of + * course. */ - if ((C_CSIZE(tty) != CS8) && (C_CSIZE(tty) != CS7)) { + if ((C_CSIZE(tty) != CS5) + && (C_CSIZE(tty) != CS8) + && (C_CSIZE(tty) != CS7)) { dev_warn(ddev, "requested CSIZE setting not supported\n"); termios->c_cflag &= ~CSIZE; @@ -2174,6 +2185,9 @@ no_skip: urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE; } switch (cflag & CSIZE) { + case CS5: + dev_dbg(ddev, "Setting CS5 quirk\n"); + break; case CS7: urb_value |= 7; dev_dbg(ddev, "Setting CS7\n"); -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html