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 <[email protected]>
---
 drivers/tty/moxa.c | 17 +++++++++++------
 drivers/tty/moxa.h |  2 ++
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
index 68cbc03..250a19f 100644
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
@@ -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;
 
diff --git a/drivers/tty/moxa.h b/drivers/tty/moxa.h
index 8ce89fd..563d2dc 100644
--- a/drivers/tty/moxa.h
+++ b/drivers/tty/moxa.h
@@ -301,5 +301,7 @@
 #define        MX_PARNONE      0x00
 #define        MX_PAREVEN      0x40
 #define        MX_PARODD       0xC0
+#define        MX_PARMARK      0xA0
+#define        MX_PARSPACE     0x20
 
 #endif
-- 
2.7.4

Reply via email to