On Sat, Jul 08, 2023 at 05:56:50PM +0300, Jarkko Sonninen wrote: > Exar devices like XR21B1411 can control an RS485 transceiver by > automatically asserting the RTS#/RS485 pin before sending data > and deasserting it when the last stop bit has been transmitted. > The polarity of the RST#/RS485 signal is configurable and the > hardware also supports half-duplex turn-around delay and > address matching mode. > > Add support for enabling and disabling RS-485 mode and > configuring the RST#/RS485 signal polarity using the TIOCGRS485 > and TIOCSRS485 ioctls. Support for half-duplex turn-around delay > and address matching mode are left unimplemented for now. > > User enables RS-485 mode by setting SER_RS485_ENABLED flag in > struct serial_rs485 flags. User should also set either > SER_RS485_RTS_ON_SEND or SER_RS485_RTS_AFTER_SEND to select the > behaviour of the RTS#/RS485 pin. Setting SER_RS485_RTS_AFTER_SEND > will drive RTS#/RS485 high during transmission. As this is the > typical application described by Exar, it is selected when > user sets neither or both flags. > > Signed-off-by: Jarkko Sonninen <kasper@xxxxxx> > --- > Changes in v3: > - In this version only rs485.flags are stored to state. > - There is no locking as only one bit of the flags is used. > - ioctl returns -ENOIOCTLCMD as the actual error handling is in tty code. > Changes in v4: > - Store struct rs485 to data > - Add mutex to protect data->rs485. > - Implement SER_RS485_RTS_ON_SEND or SER_RS485_RTS_AFTER_SEND flags > - SER_RS485_RTS_ON_SEND is the default like in serial_core.c > Change in v5: > - Use tty->termios_rwsem semaphore instead of own mutex > - Set SER_RS485_RTS_AFTER_SEND as the default > - Fix XR_GPIO_MODE_RS485_TX_H setting with SER_RS485_RTS_ON_SEND > - Add missing __user directives I've applied this one now but with the small change I just mentioned that makes SER_RS485_RTS_ON_SEND determine SER_RS485_RTS_AFTER_SEND. Since this sets SER_RS485_RTS_AFTER_SEND when neither flag is set, I believe you get the behaviour you preferred (even if SER_RS485_RTS_AFTER_SEND is now cleared when both flags are set). Let me know otherwise and we'll discuss it. Here's the result: https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git/commit/?h=usb-next&id=974e2f6a0554685493cc44406bc7d8ba0a3b0e33 Thanks for sticking with. I think the end result looks really good. Johan