mmc: meson-gx: improve interrupt handling
authorHeiner Kallweit <hkallweit1@gmail.com>
Tue, 7 Feb 2017 21:34:51 +0000 (22:34 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 14 Feb 2017 08:10:56 +0000 (09:10 +0100)
Disabling and immediately re-enabling interrupts in meson_mmc_request
doesn't provide a benefit. Instead enable interrupts in probe already.
And disable interrupts in remove, this was missing so far.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/meson-gx-mmc.c

index dd7f936c974e5bcfbf0a49df9af68da99cf2c5fb..4c622ad26a7026aed08e382f63e4d369655d62ea 100644 (file)
@@ -542,11 +542,6 @@ static void meson_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
        /* Stop execution */
        writel(0, host->regs + SD_EMMC_START);
 
-       /* clear, ack, enable all interrupts */
-       writel(0, host->regs + SD_EMMC_IRQ_EN);
-       writel(IRQ_EN_MASK, host->regs + SD_EMMC_STATUS);
-       writel(IRQ_EN_MASK, host->regs + SD_EMMC_IRQ_EN);
-
        host->mrq = mrq;
 
        if (mrq->sbc)
@@ -775,6 +770,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
        /* clear, ack, enable all interrupts */
        writel(0, host->regs + SD_EMMC_IRQ_EN);
        writel(IRQ_EN_MASK, host->regs + SD_EMMC_STATUS);
+       writel(IRQ_EN_MASK, host->regs + SD_EMMC_IRQ_EN);
 
        ret = devm_request_threaded_irq(&pdev->dev, host->irq,
                                        meson_mmc_irq, meson_mmc_irq_thread,
@@ -812,6 +808,9 @@ static int meson_mmc_remove(struct platform_device *pdev)
        if (WARN_ON(!host))
                return 0;
 
+       /* disable interrupts */
+       writel(0, host->regs + SD_EMMC_IRQ_EN);
+
        if (host->bounce_buf)
                dma_free_coherent(host->dev, host->bounce_buf_size,
                                  host->bounce_buf, host->bounce_dma_addr);