USB: serial: cp210x.c: add mark/space parity
Add mark and space parity support. Signed-off-by: Roland Koebler <r.koebler@yahoo.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
968b822c00
commit
4b6181caa4
1 changed files with 22 additions and 17 deletions
|
@ -520,18 +520,13 @@ static void cp210x_get_termios_port(struct usb_serial_port *port,
|
|||
cflag |= PARENB;
|
||||
break;
|
||||
case BITS_PARITY_MARK:
|
||||
dbg("%s - parity = MARK (not supported, disabling parity)",
|
||||
__func__);
|
||||
cflag &= ~PARENB;
|
||||
bits &= ~BITS_PARITY_MASK;
|
||||
cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2);
|
||||
dbg("%s - parity = MARK", __func__);
|
||||
cflag |= (PARENB|PARODD|CMSPAR);
|
||||
break;
|
||||
case BITS_PARITY_SPACE:
|
||||
dbg("%s - parity = SPACE (not supported, disabling parity)",
|
||||
__func__);
|
||||
cflag &= ~PARENB;
|
||||
bits &= ~BITS_PARITY_MASK;
|
||||
cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2);
|
||||
dbg("%s - parity = SPACE", __func__);
|
||||
cflag &= ~PARODD;
|
||||
cflag |= (PARENB|CMSPAR);
|
||||
break;
|
||||
default:
|
||||
dbg("%s - Unknown parity mode, disabling parity", __func__);
|
||||
|
@ -588,7 +583,6 @@ static void cp210x_set_termios(struct tty_struct *tty,
|
|||
if (!tty)
|
||||
return;
|
||||
|
||||
tty->termios->c_cflag &= ~CMSPAR;
|
||||
cflag = tty->termios->c_cflag;
|
||||
old_cflag = old_termios->c_cflag;
|
||||
baud = cp210x_quantise_baudrate(tty_get_baud_rate(tty));
|
||||
|
@ -643,16 +637,27 @@ static void cp210x_set_termios(struct tty_struct *tty,
|
|||
"not supported by device\n");
|
||||
}
|
||||
|
||||
if ((cflag & (PARENB|PARODD)) != (old_cflag & (PARENB|PARODD))) {
|
||||
if ((cflag & (PARENB|PARODD|CMSPAR)) !=
|
||||
(old_cflag & (PARENB|PARODD|CMSPAR))) {
|
||||
cp210x_get_config(port, CP210X_GET_LINE_CTL, &bits, 2);
|
||||
bits &= ~BITS_PARITY_MASK;
|
||||
if (cflag & PARENB) {
|
||||
if (cflag & PARODD) {
|
||||
bits |= BITS_PARITY_ODD;
|
||||
dbg("%s - parity = ODD", __func__);
|
||||
if (cflag & CMSPAR) {
|
||||
if (cflag & PARODD) {
|
||||
bits |= BITS_PARITY_MARK;
|
||||
dbg("%s - parity = MARK", __func__);
|
||||
} else {
|
||||
bits |= BITS_PARITY_SPACE;
|
||||
dbg("%s - parity = SPACE", __func__);
|
||||
}
|
||||
} else {
|
||||
bits |= BITS_PARITY_EVEN;
|
||||
dbg("%s - parity = EVEN", __func__);
|
||||
if (cflag & PARODD) {
|
||||
bits |= BITS_PARITY_ODD;
|
||||
dbg("%s - parity = ODD", __func__);
|
||||
} else {
|
||||
bits |= BITS_PARITY_EVEN;
|
||||
dbg("%s - parity = EVEN", __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cp210x_set_config(port, CP210X_SET_LINE_CTL, &bits, 2))
|
||||
|
|
Loading…
Reference in a new issue