u16 lsr = up->lsr_saved_flags;
 
        lsr |= serial_in(up, UART_LSR);
-       up->lsr_saved_flags = lsr & LSR_SAVE_FLAGS;
+       up->lsr_saved_flags = lsr & up->lsr_save_mask;
 
        return lsr;
 }
 
                uart->port.rs485        = up->port.rs485;
                uart->rs485_start_tx    = up->rs485_start_tx;
                uart->rs485_stop_tx     = up->rs485_stop_tx;
+               uart->lsr_save_mask     = up->lsr_save_mask;
                uart->dma               = up->dma;
 
                /* Take tx_loadsz from fifosize if it wasn't set separately */
                        ret = 0;
                }
 
+               if (!uart->lsr_save_mask)
+                       uart->lsr_save_mask = LSR_SAVE_FLAGS;   /* Use default LSR mask */
+
                /* Initialise interrupt backoff work if required */
                if (up->overrun_backoff_time_ms > 0) {
                        uart->overrun_backoff_time_ms =