temp |= (UCR2_RXEN | UCR2_TXEN);
        if (!sport->have_rtscts)
                temp |= UCR2_IRTS;
+       /*
+        * make sure the edge sensitive RTS-irq is disabled,
+        * we're using RTSD instead.
+        */
+       if (!is_imx1_uart(sport))
+               temp &= ~UCR2_RTSEN;
        writel(temp, sport->port.membase + UCR2);
 
        if (!is_imx1_uart(sport)) {
                temp = readl(sport->port.membase + UCR3);
-               temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
+
+               /*
+                * The effect of RI and DCD differs depending on the UFCR_DCEDTE
+                * bit. In DCE mode they control the outputs, in DTE mode they
+                * enable the respective irqs. At least the DCD irq cannot be
+                * cleared on i.MX25 at least, so it's not usable and must be
+                * disabled. I don't have test hardware to check if RI has the
+                * same problem but I consider this likely so it's disabled for
+                * now, too.
+                */
+               temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP |
+                       UCR3_RI | UCR3_DCD;
+
+               if (sport->dte_mode)
+                       temp &= ~(UCR3_RI | UCR3_DCD);
+
                writel(temp, sport->port.membase + UCR3);
        }