https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=288953

            Bug ID: 288953
           Summary: uchcom(4) wrong modem status
           Product: Base System
           Version: Unspecified
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: usb
          Assignee: usb@FreeBSD.org
          Reporter: di...@dz.dn.ua

Created attachment 263070
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=263070&action=edit
patch for 13.5-RELEASE-p2

For CH340G, CH341A3, CH341B, ioctl(TIOCMGET) return signal states:
DCD as TIOCM_DSR
DSR as TIOCM_DCD
I think all other versions of CH340/341 are affected too.

A bit-swap needed between SER_DSR and SER_DCD in sys/dev/usb/serial/uchcom.c,
void uchcom_convert_status().
This is probably an incorrect porting of NetBSD driver, where the constants for
DSR and DCD have opposite values:

NetBSD
#define UMSR_DCD        0x80
#define UMSR_RI         0x40
#define UMSR_DSR        0x20
#define UMSR_CTS        0x10
#define UMSR_DDCD       0x08
#define UMSR_TERI       0x04
#define UMSR_DDSR       0x02
#define UMSR_DCTS       0x01

FreeBSD
#define SER_DTR         0x0001
#define SER_RTS         0x0002
#define SER_STX         0x0004
#define SER_SRX         0x0008
#define SER_CTS         0x0010
#define SER_DCD         0x0020
#define SER_RI          0x0040
#define SER_DSR         0x0080

The following patch fixes the problem.
I don't understand why the changed bits are written to low part of sc->sc_msr,
I couldn't find where FreeBSD uses them, so I removed it.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to