port->port.private_data = NULL;
 }
 
+static inline void exar_misc_clear(struct exar8250 *priv)
+{
+       /* Clear all PCI interrupts by reading INT0. No effect on IIR */
+       readb(priv->virt + UART_EXAR_INT0);
+
+       /* Clear INT0 for Expansion Interface slave ports, too */
+       if (priv->board->num_ports > 8)
+               readb(priv->virt + 0x2000 + UART_EXAR_INT0);
+}
+
 /*
  * These Exar UARTs have an extra interrupt indicator that could fire for a
  * few interrupts that are not presented/cleared through IIR.  One of which is
  */
 static irqreturn_t exar_misc_handler(int irq, void *data)
 {
-       struct exar8250 *priv = data;
-
-       /* Clear all PCI interrupts by reading INT0. No effect on IIR */
-       readb(priv->virt + UART_EXAR_INT0);
-
-       /* Clear INT0 for Expansion Interface slave ports, too */
-       if (priv->board->num_ports > 8)
-               readb(priv->virt + 0x2000 + UART_EXAR_INT0);
+       exar_misc_clear(data);
 
        return IRQ_HANDLED;
 }
        if (rc)
                return rc;
 
+       /* Clear interrupts */
+       exar_misc_clear(priv);
+
        for (i = 0; i < nr_ports && i < maxnr; i++) {
                rc = board->setup(priv, pcidev, &uart, i);
                if (rc) {
        struct exar8250 *priv = dev_get_drvdata(dev);
        unsigned int i;
 
+       exar_misc_clear(priv);
+
        for (i = 0; i < priv->nr; i++)
                if (priv->line[i] >= 0)
                        serial8250_resume_port(priv->line[i]);
 
 
 #include "8250.h"
 
-/*
- * These are definitions for the Exar XR17V35X and XR17(C|D)15X
- */
-#define UART_EXAR_INT0         0x80
-
 /* Nuvoton NPCM timeout register */
 #define UART_NPCM_TOR          7
 #define UART_NPCM_TOIE         BIT(7)  /* Timeout Interrupt Enable */
        serial_port_in(port, UART_RX);
        serial_port_in(port, UART_IIR);
        serial_port_in(port, UART_MSR);
-       if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
-               serial_port_in(port, UART_EXAR_INT0);
 
        /*
         * At this point, there's no way the LSR could still be 0xff;
        serial_port_in(port, UART_RX);
        serial_port_in(port, UART_IIR);
        serial_port_in(port, UART_MSR);
-       if ((port->type == PORT_XR17V35X) || (port->type == PORT_XR17D15X))
-               serial_port_in(port, UART_EXAR_INT0);
        up->lsr_saved_flags = 0;
        up->msr_saved_flags = 0;