static irqreturn_t pnx8xxx_int(int irq, void *dev_id) { struct pnx8xxx_port *sport = dev_id; unsigned int status; spin_lock(&sport->port.lock); status = serial_in(sport, PNX8XXX_ISTAT) & serial_in(sport, PNX8XXX_IEN); if (status & (PNX8XXX_UART_INT_RX | PNX8XXX_UART_INT_BREAK)) pnx8xxx_rx_chars(sport); if (status & PNX8XXX_UART_INT_TX) pnx8xxx_tx_chars(sport); serial_out(sport, PNX8XXX_ICLR, status); spin_unlock(&sport->port.lock); return IRQ_HANDLED; }
static irqreturn_t pnx8xxx_int(int irq, void *dev_id) { struct pnx8xxx_port *sport = dev_id; unsigned int status; spin_lock(&sport->port.lock); /* Get the interrupts */ status = serial_in(sport, PNX8XXX_ISTAT) & serial_in(sport, PNX8XXX_IEN); /* Byte or break signal received */ if (status & (PNX8XXX_UART_INT_RX | PNX8XXX_UART_INT_BREAK)) pnx8xxx_rx_chars(sport); /* TX holding register empty - transmit a byte */ if (status & PNX8XXX_UART_INT_TX) pnx8xxx_tx_chars(sport); /* Clear the ISTAT register */ serial_out(sport, PNX8XXX_ICLR, status); spin_unlock(&sport->port.lock); return IRQ_HANDLED; }