diff options
Diffstat (limited to 'drivers/serial/bfin_5xx.c')
-rw-r--r-- | drivers/serial/bfin_5xx.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 64603f5bb703..e2f6b1bfac98 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -479,9 +479,9 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart) | |||
479 | void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) | 479 | void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) |
480 | { | 480 | { |
481 | int x_pos, pos; | 481 | int x_pos, pos; |
482 | unsigned long flags; | ||
483 | 482 | ||
484 | spin_lock_irqsave(&uart->port.lock, flags); | 483 | dma_disable_irq(uart->rx_dma_channel); |
484 | spin_lock_bh(&uart->port.lock); | ||
485 | 485 | ||
486 | /* 2D DMA RX buffer ring is used. Because curr_y_count and | 486 | /* 2D DMA RX buffer ring is used. Because curr_y_count and |
487 | * curr_x_count can't be read as an atomic operation, | 487 | * curr_x_count can't be read as an atomic operation, |
@@ -512,7 +512,8 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart) | |||
512 | uart->rx_dma_buf.tail = uart->rx_dma_buf.head; | 512 | uart->rx_dma_buf.tail = uart->rx_dma_buf.head; |
513 | } | 513 | } |
514 | 514 | ||
515 | spin_unlock_irqrestore(&uart->port.lock, flags); | 515 | spin_unlock_bh(&uart->port.lock); |
516 | dma_enable_irq(uart->rx_dma_channel); | ||
516 | 517 | ||
517 | mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES); | 518 | mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES); |
518 | } | 519 | } |