Here's a patch from Hugh Blemings that fixes some character size logic
in the keyspan.c driver.  It is against 2.4.4 but applies cleanly to
2.4.5-pre1.

thanks,

greg k-h
diff -Nru a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
--- a/drivers/usb/serial/keyspan.c      Wed May  2 16:31:27 2001
+++ b/drivers/usb/serial/keyspan.c      Wed May  2 16:31:27 2001
@@ -1287,7 +1287,21 @@
                msg.setPrescaler = 0xff;
        }
 
-       msg.lcr = USA_DATABITS_8 | STOPBITS_5678_1;
+       msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
+       switch (p_priv->cflag & CSIZE) {
+       case CS5:
+               msg.lcr |= USA_DATABITS_5;
+               break;
+       case CS6:
+               msg.lcr |= USA_DATABITS_6;
+               break;
+       case CS7:
+               msg.lcr |= USA_DATABITS_7;
+               break;
+       case CS8:
+               msg.lcr |= USA_DATABITS_8;
+               break;
+       }
        if (p_priv->cflag & PARENB) {
                /* note USA_PARITY_NONE == 0 */
                msg.lcr |= (p_priv->cflag & PARODD)?
@@ -1480,7 +1494,21 @@
                //msg.setPrescaler = 0xff;
        }
 
-       msg.lcr = USA_DATABITS_8 | STOPBITS_5678_1;
+       msg.lcr = (p_priv->cflag & CSTOPB)? STOPBITS_678_2: STOPBITS_5678_1;
+       switch (p_priv->cflag & CSIZE) {
+       case CS5:
+               msg.lcr |= USA_DATABITS_5;
+               break;
+       case CS6:
+               msg.lcr |= USA_DATABITS_6;
+               break;
+       case CS7:
+               msg.lcr |= USA_DATABITS_7;
+               break;
+       case CS8:
+               msg.lcr |= USA_DATABITS_8;
+               break;
+       }
        if (p_priv->cflag & PARENB) {
                /* note USA_PARITY_NONE == 0 */
                msg.lcr |= (p_priv->cflag & PARODD)?

Reply via email to