Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 56663
b: refs/heads/master
c: 5c4e472
h: refs/heads/master
i:
  56661: 4f9f11a
  56659: 62745d7
  56655: 89df533
v: v3
  • Loading branch information
Aubrey Li authored and Linus Torvalds committed May 21, 2007
1 parent e8de395 commit a55367f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9d7b6677ac35fdfee93e8f50589e04bcc95649c1
refs/heads/master: 5c4e472b0af57553f9584e0b33c491b168ac1dff
28 changes: 17 additions & 11 deletions trunk/drivers/serial/bfin_5xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,24 +240,30 @@ static void bfin_serial_tx_chars(struct bfin_serial_port *uart)
bfin_serial_stop_tx(&uart->port);
}

static irqreturn_t bfin_serial_int(int irq, void *dev_id)
static irqreturn_t bfin_serial_rx_int(int irq, void *dev_id)
{
struct bfin_serial_port *uart = dev_id;

spin_lock(&uart->port.lock);
while ((UART_GET_IIR(uart) & IIR_STATUS) == IIR_RX_READY)
bfin_serial_rx_chars(uart);
spin_unlock(&uart->port.lock);
return IRQ_HANDLED;
}

static irqreturn_t bfin_serial_tx_int(int irq, void *dev_id)
{
struct bfin_serial_port *uart = dev_id;
unsigned short status;

spin_lock(&uart->port.lock);
status = UART_GET_IIR(uart);
do {
if ((status & IIR_STATUS) == IIR_TX_READY)
bfin_serial_tx_chars(uart);
if ((status & IIR_STATUS) == IIR_RX_READY)
bfin_serial_rx_chars(uart);
status = UART_GET_IIR(uart);
} while (status & (IIR_TX_READY | IIR_RX_READY));
while ((UART_GET_IIR(uart) & IIR_STATUS) == IIR_TX_READY)
bfin_serial_tx_chars(uart);
spin_unlock(&uart->port.lock);
return IRQ_HANDLED;
}


static void bfin_serial_do_work(struct work_struct *work)
{
struct bfin_serial_port *uart = container_of(work, struct bfin_serial_port, cts_workqueue);
Expand Down Expand Up @@ -545,14 +551,14 @@ static int bfin_serial_startup(struct uart_port *port)
add_timer(&(uart->rx_dma_timer));
#else
if (request_irq
(uart->port.irq, bfin_serial_int, IRQF_DISABLED,
(uart->port.irq, bfin_serial_rx_int, IRQF_DISABLED,
"BFIN_UART_RX", uart)) {
printk(KERN_NOTICE "Unable to attach BlackFin UART RX interrupt\n");
return -EBUSY;
}

if (request_irq
(uart->port.irq+1, bfin_serial_int, IRQF_DISABLED,
(uart->port.irq+1, bfin_serial_tx_int, IRQF_DISABLED,
"BFIN_UART_TX", uart)) {
printk(KERN_NOTICE "Unable to attach BlackFin UART TX interrupt\n");
free_irq(uart->port.irq, uart);
Expand Down

0 comments on commit a55367f

Please sign in to comment.