imx_uart_rts_inactive(sport, &ucr2);
                        imx_uart_writel(sport, ucr2, UCR2);
 
-                       imx_uart_start_rx(port);
+                       if (!port->rs485_rx_during_tx_gpio)
+                               imx_uart_start_rx(port);
 
                        sport->tx_state = OFF;
                }
                                imx_uart_rts_inactive(sport, &ucr2);
                        imx_uart_writel(sport, ucr2, UCR2);
 
-                       if (!(port->rs485.flags & SER_RS485_RX_DURING_TX))
+                       if (!(port->rs485.flags & SER_RS485_RX_DURING_TX) &&
+                           !port->rs485_rx_during_tx_gpio)
                                imx_uart_stop_rx(port);
 
                        sport->tx_state = WAIT_AFTER_RTS;
            rs485conf->flags & SER_RS485_RX_DURING_TX)
                imx_uart_start_rx(port);
 
+       if (port->rs485_rx_during_tx_gpio)
+               gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio,
+                                        !!(rs485conf->flags & SER_RS485_RX_DURING_TX));
+
        return 0;
 }