#endif
 };
 
+static bool is_implemented(struct uart_amba_port *uap, unsigned int reg)
+{
+       return uap->reg_lut[reg] != (u16)~0;
+}
+
 static unsigned int pl011_readw(struct uart_amba_port *uap, int index)
 {
        WARN_ON(index > REG_NR);
 static void pl011_write_lcr_h(struct uart_amba_port *uap, unsigned int lcr_h)
 {
        pl011_writew(uap, lcr_h, uap->lcrh_rx);
-       if (uap->lcrh_rx != uap->lcrh_tx) {
+       if (is_implemented(uap, REG_ST_LCRH_RX)) {
                int i;
                /*
                 * Wait 10 PCLKs before writing LCRH_TX register,
         * disable break condition and fifos
         */
        pl011_shutdown_channel(uap, uap->lcrh_rx);
-       if (uap->lcrh_rx != uap->lcrh_tx)
+       if (is_implemented(uap, REG_ST_LCRH_RX))
                pl011_shutdown_channel(uap, uap->lcrh_tx);
 }