tty: moxa: Add support for CMSPAR
authorLars Kanis <kanis@comcard.de>
Tue, 28 Nov 2017 10:55:17 +0000 (11:55 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2017 14:32:33 +0000 (15:32 +0100)
The mode constants are taken from the GPL-2.0+ driver available
in the driver section of the Moxa homepage.

It is tested on a C320Turbo PCI card per logic analyzer and
per a device which requires 9 bit character communication.

The vendors driver supports CMSPAR unconditionally, so that all
other available firmware versions seems to support mark/space
parity modes as well.

Signed-off-by: Lars Kanis <kanis@comcard.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/moxa.c
drivers/tty/moxa.h

index 68cbc03aab4b86e49a3f1f8904de52ef91f4b5c3..250a19f042d74ce7bf46c21a15addfb34a193d1a 100644 (file)
@@ -1487,8 +1487,6 @@ static void moxa_set_tty_param(struct tty_struct *tty, struct ktermios *old_term
        if (ts->c_iflag & IXANY)
                xany = 1;
 
-       /* Clear the features we don't support */
-       ts->c_cflag &= ~CMSPAR;
        MoxaPortFlowCtrl(ch, rts, cts, txflow, rxflow, xany);
        baud = MoxaPortSetTermio(ch, ts, tty_get_baud_rate(tty));
        if (baud == -1)
@@ -1781,10 +1779,17 @@ static int MoxaPortSetTermio(struct moxa_port *port, struct ktermios *termio,
                mode |= MX_STOP1;
 
        if (termio->c_cflag & PARENB) {
-               if (termio->c_cflag & PARODD)
-                       mode |= MX_PARODD;
-               else
-                       mode |= MX_PAREVEN;
+               if (termio->c_cflag & PARODD) {
+                       if (termio->c_cflag & CMSPAR)
+                               mode |= MX_PARMARK;
+                       else
+                               mode |= MX_PARODD;
+               } else {
+                       if (termio->c_cflag & CMSPAR)
+                               mode |= MX_PARSPACE;
+                       else
+                               mode |= MX_PAREVEN;
+               }
        } else
                mode |= MX_PARNONE;
 
index 8ce89fd36c7bdffbc9861c920a98c12831fa3d5c..563d2dce80b3cd98e7b18a9179c413ca9ac9b70d 100644 (file)
 #define        MX_PARNONE      0x00
 #define        MX_PAREVEN      0x40
 #define        MX_PARODD       0xC0
+#define        MX_PARMARK      0xA0
+#define        MX_PARSPACE     0x20
 
 #endif