]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - drivers/tty/serial/bfin_5xx.c
treewide: Convert uses of struct resource to resource_size(ptr)
[mirror_ubuntu-zesty-kernel.git] / drivers / tty / serial / bfin_5xx.c
index e381b895b04d09eded85a1e2d19615e9326a47a6..ff6979181ac5bf1b0dd3464e3c6a837062776586 100644 (file)
@@ -370,10 +370,8 @@ 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_LSR(uart) & DR)
                bfin_serial_rx_chars(uart);
-       spin_unlock(&uart->port.lock);
 
        return IRQ_HANDLED;
 }
@@ -490,9 +488,8 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
 {
        int x_pos, pos;
 
-       dma_disable_irq(uart->tx_dma_channel);
-       dma_disable_irq(uart->rx_dma_channel);
-       spin_lock_bh(&uart->port.lock);
+       dma_disable_irq_nosync(uart->rx_dma_channel);
+       spin_lock_bh(&uart->rx_lock);
 
        /* 2D DMA RX buffer ring is used. Because curr_y_count and
         * curr_x_count can't be read as an atomic operation,
@@ -523,8 +520,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
                uart->rx_dma_buf.tail = uart->rx_dma_buf.head;
        }
 
-       spin_unlock_bh(&uart->port.lock);
-       dma_enable_irq(uart->tx_dma_channel);
+       spin_unlock_bh(&uart->rx_lock);
        dma_enable_irq(uart->rx_dma_channel);
 
        mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES);
@@ -571,7 +567,7 @@ static irqreturn_t bfin_serial_dma_rx_int(int irq, void *dev_id)
        unsigned short irqstat;
        int x_pos, pos;
 
-       spin_lock(&uart->port.lock);
+       spin_lock(&uart->rx_lock);
        irqstat = get_dma_curr_irqstat(uart->rx_dma_channel);
        clear_dma_irqstat(uart->rx_dma_channel);
 
@@ -589,7 +585,7 @@ static irqreturn_t bfin_serial_dma_rx_int(int irq, void *dev_id)
                uart->rx_dma_buf.tail = uart->rx_dma_buf.head;
        }
 
-       spin_unlock(&uart->port.lock);
+       spin_unlock(&uart->rx_lock);
 
        return IRQ_HANDLED;
 }
@@ -1308,8 +1304,7 @@ static int bfin_serial_probe(struct platform_device *pdev)
                        goto out_error_free_peripherals;
                }
 
-               uart->port.membase = ioremap(res->start,
-                       res->end - res->start);
+               uart->port.membase = ioremap(res->start, resource_size(res));
                if (!uart->port.membase) {
                        dev_err(&pdev->dev, "Cannot map uart IO\n");
                        ret = -ENXIO;
@@ -1332,6 +1327,7 @@ static int bfin_serial_probe(struct platform_device *pdev)
                }
 
 #ifdef CONFIG_SERIAL_BFIN_DMA
+               spin_lock_init(&uart->rx_lock);
                uart->tx_done       = 1;
                uart->tx_count      = 0;
 
@@ -1486,7 +1482,7 @@ static int bfin_earlyprintk_probe(struct platform_device *pdev)
        }
 
        bfin_earlyprintk_port.port.membase = ioremap(res->start,
-                       res->end - res->start);
+                                                    resource_size(res));
        if (!bfin_earlyprintk_port.port.membase) {
                dev_err(&pdev->dev, "Cannot map uart IO\n");
                ret = -ENXIO;