mm/memory-failure.c: move set_migratetype_isolate() outside get_any_page()
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-ti-qspi.c
index e12d962a289f61823b673098fce9e49dc8da94f7..0b71270fbf67ba671dd43f116db48de30076514c 100644 (file)
@@ -41,9 +41,6 @@ struct ti_qspi_regs {
 struct ti_qspi {
        struct completion       transfer_complete;
 
-       /* IRQ synchronization */
-       spinlock_t              lock;
-
        /* list synchronization */
        struct mutex            list_lock;
 
@@ -57,7 +54,6 @@ struct ti_qspi {
        u32 spi_max_frequency;
        u32 cmd;
        u32 dc;
-       u32 stat;
 };
 
 #define QSPI_PID                       (0x0)
@@ -397,13 +393,12 @@ static irqreturn_t ti_qspi_isr(int irq, void *dev_id)
 {
        struct ti_qspi *qspi = dev_id;
        u16 int_stat;
+       u32 stat;
 
        irqreturn_t ret = IRQ_HANDLED;
 
-       spin_lock(&qspi->lock);
-
        int_stat = ti_qspi_read(qspi, QSPI_INTR_STATUS_ENABLED_CLEAR);
-       qspi->stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG);
+       stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG);
 
        if (!int_stat) {
                dev_dbg(qspi->dev, "No IRQ triggered\n");
@@ -411,35 +406,14 @@ static irqreturn_t ti_qspi_isr(int irq, void *dev_id)
                goto out;
        }
 
-       ret = IRQ_WAKE_THREAD;
-
-       ti_qspi_write(qspi, QSPI_WC_INT_DISABLE, QSPI_INTR_ENABLE_CLEAR_REG);
        ti_qspi_write(qspi, QSPI_WC_INT_DISABLE,
                                QSPI_INTR_STATUS_ENABLED_CLEAR);
-
+       if (stat & WC)
+               complete(&qspi->transfer_complete);
 out:
-       spin_unlock(&qspi->lock);
-
        return ret;
 }
 
-static irqreturn_t ti_qspi_threaded_isr(int this_irq, void *dev_id)
-{
-       struct ti_qspi *qspi = dev_id;
-       unsigned long flags;
-
-       spin_lock_irqsave(&qspi->lock, flags);
-
-       if (qspi->stat & WC)
-               complete(&qspi->transfer_complete);
-
-       spin_unlock_irqrestore(&qspi->lock, flags);
-
-       ti_qspi_write(qspi, QSPI_WC_INT_EN, QSPI_INTR_ENABLE_SET_REG);
-
-       return IRQ_HANDLED;
-}
-
 static int ti_qspi_runtime_resume(struct device *dev)
 {
        struct ti_qspi      *qspi;
@@ -472,7 +446,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
        if (!master)
                return -ENOMEM;
 
-       master->mode_bits = SPI_CPOL | SPI_CPHA;
+       master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD;
 
        master->bus_num = -1;
        master->flags = SPI_MASTER_HALF_DUPLEX;
@@ -499,7 +473,6 @@ static int ti_qspi_probe(struct platform_device *pdev)
                return irq;
        }
 
-       spin_lock_init(&qspi->lock);
        mutex_init(&qspi->list_lock);
 
        qspi->base = devm_ioremap_resource(&pdev->dev, r);
@@ -508,8 +481,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
                goto free_master;
        }
 
-       ret = devm_request_threaded_irq(&pdev->dev, irq, ti_qspi_isr,
-                       ti_qspi_threaded_isr, 0,
+       ret = devm_request_irq(&pdev->dev, irq, ti_qspi_isr, 0,
                        dev_name(&pdev->dev), qspi);
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to register ISR for IRQ %d\n",
@@ -532,7 +504,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
        if (!of_property_read_u32(np, "spi-max-frequency", &max_freq))
                qspi->spi_max_frequency = max_freq;
 
-       ret = spi_register_master(master);
+       ret = devm_spi_register_master(&pdev->dev, master);
        if (ret)
                goto free_master;
 
@@ -547,7 +519,7 @@ static int ti_qspi_remove(struct platform_device *pdev)
 {
        struct  ti_qspi *qspi = platform_get_drvdata(pdev);
 
-       spi_unregister_master(qspi->master);
+       ti_qspi_write(qspi, QSPI_WC_INT_DISABLE, QSPI_INTR_ENABLE_CLEAR_REG);
 
        return 0;
 }
@@ -558,7 +530,7 @@ static const struct dev_pm_ops ti_qspi_pm_ops = {
 
 static struct platform_driver ti_qspi_driver = {
        .probe  = ti_qspi_probe,
-       .remove = ti_qspi_remove,
+       .remove = ti_qspi_remove,
        .driver = {
                .name   = "ti,dra7xxx-qspi",
                .owner  = THIS_MODULE,