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)?