rs485->flags &= ~SER_RS485_RTS_AFTER_SEND;
        }
 
-       gpiod_set_value(port->rs485_term_gpio,
-                       rs485->flags & SER_RS485_TERMINATE_BUS);
-
        /*
         * Both serial8250_em485_init() and serial8250_em485_destroy()
         * are idempotent.
 
        memset(rs485->padding1, 0, sizeof(rs485->padding1));
 }
 
+static void uart_set_rs485_termination(struct uart_port *port,
+                                      const struct serial_rs485 *rs485)
+{
+       if (!(rs485->flags & SER_RS485_ENABLED))
+               return;
+
+       gpiod_set_value_cansleep(port->rs485_term_gpio,
+                                !!(rs485->flags & SER_RS485_TERMINATE_BUS));
+}
+
 int uart_rs485_config(struct uart_port *port)
 {
        struct serial_rs485 *rs485 = &port->rs485;
        int ret;
 
        uart_sanitize_serial_rs485(port, rs485);
+       uart_set_rs485_termination(port, rs485);
 
        ret = port->rs485_config(port, NULL, rs485);
        if (ret)
        if (ret)
                return ret;
        uart_sanitize_serial_rs485(port, &rs485);
+       uart_set_rs485_termination(port, &rs485);
 
        spin_lock_irqsave(&port->lock, flags);
        ret = port->rs485_config(port, &tty->termios, &rs485);