mmc: meson-gx: improve interrupt handling

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>
This commit is contained in:
Heiner Kallweit 2017-02-07 22:34:51 +01:00 committed by Ulf Hansson
parent 690f90b628
commit 92763b997e

View File

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