#define HIGH_BITS_OFFSET       ((sizeof(long)-sizeof(int))*8)
 
+/*
+ * Max time with active RTS before/after data is sent.
+ */
+#define RS485_MAX_RTS_DELAY    100 /* msecs */
+
 static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
                                        struct ktermios *old_termios);
 static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
        if (copy_from_user(&rs485, rs485_user, sizeof(*rs485_user)))
                return -EFAULT;
 
+       /* pick sane settings if the user hasn't */
+       if (!(rs485.flags & SER_RS485_RTS_ON_SEND) ==
+           !(rs485.flags & SER_RS485_RTS_AFTER_SEND)) {
+               dev_warn_ratelimited(port->dev,
+                       "%s (%d): invalid RTS setting, using RTS_ON_SEND instead\n",
+                       port->name, port->line);
+               rs485.flags |= SER_RS485_RTS_ON_SEND;
+               rs485.flags &= ~SER_RS485_RTS_AFTER_SEND;
+       }
+
+       if (rs485.delay_rts_before_send > RS485_MAX_RTS_DELAY) {
+               rs485.delay_rts_before_send = RS485_MAX_RTS_DELAY;
+               dev_warn_ratelimited(port->dev,
+                       "%s (%d): RTS delay before sending clamped to %u ms\n",
+                       port->name, port->line, rs485.delay_rts_before_send);
+       }
+
+       if (rs485.delay_rts_after_send > RS485_MAX_RTS_DELAY) {
+               rs485.delay_rts_after_send = RS485_MAX_RTS_DELAY;
+               dev_warn_ratelimited(port->dev,
+                       "%s (%d): RTS delay after sending clamped to %u ms\n",
+                       port->name, port->line, rs485.delay_rts_after_send);
+       }
+       /* Return clean padding area to userspace */
+       memset(rs485.padding, 0, sizeof(rs485.padding));
+
        spin_lock_irqsave(&port->lock, flags);
        ret = port->rs485_config(port, &rs485);
+       if (!ret)
+               port->rs485 = rs485;
        spin_unlock_irqrestore(&port->lock, flags);
        if (ret)
                return ret;