• Fabio Estevam's avatar
    serial: imx: Fix the RTS GPIO polarity in RS485 mode · 1a613626
    Fabio Estevam authored
    On a board that needs to drive RTS GPIO high in order to enable the
    transmission of a RS485 transceiver the following description is
    passed in the devide tree:
    
    &uart4 {
            pinctrl-names = "default";
            pinctrl-0 = <&pinctrl_uart4>;
            rts-gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>;
            status = "okay";
    };
    
    and userspace configures the uart port as follows:
    
    /* enable RS485 mode: */
    rs485conf.flags |= SER_RS485_ENABLED;
    
    /* set logical level for RTS pin equal to 1 when sending: */
    rs485conf.flags |= SER_RS485_RTS_ON_SEND;
    
    /* set logical level for RTS pin equal to 0 after sending: */
    rs485conf.flags &= ~(SER_RS485_RTS_AFTER_SEND);
    
    However the RTS GPIO polarity observed in the oscilloscope is inverted.
    
    When the SER_RS485_RTS_ON_SEND flag is set the imx_port_rts_active()
    function should be called and following the same logic when
    SER_RS485_RTS_AFTER_SEND flag is cleared the imx_port_rts_inactive()
    should be called.
    
    Do such logic change so that RS485 communication in half duplex can
    work successfully when the RTS GPIO pin is passed via device tree.
    Signed-off-by: default avatarFabio Estevam <fabio.estevam@nxp.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    1a613626
imx.c 62.1 KB