]> git.karo-electronics.de Git - linux-beck.git/commitdiff
mmc: mmci: Mask IRQs for all variants during runtime suspend
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 22 Jan 2014 23:19:38 +0000 (00:19 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 12 May 2014 10:52:34 +0000 (12:52 +0200)
In runtime suspended state, we are not expecting IRQs and thus we can
safely mask them, not only for pwrreg_nopower variants but for all.

Obviously we then also need to make sure we restore the IRQ mask while
becoming runtime resumed.

Cc: Russell King <linux@arm.linux.org.uk>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mmci.c

index 771c60ab4a320a3edc222b108c49d14a8e0076b1..0f10e3ccb9445a9d7457c6c7d9703d2c15ce15fb 100644 (file)
@@ -1794,35 +1794,34 @@ static void mmci_save(struct mmci_host *host)
 {
        unsigned long flags;
 
-       if (host->variant->pwrreg_nopower) {
-               spin_lock_irqsave(&host->lock, flags);
+       spin_lock_irqsave(&host->lock, flags);
 
-               writel(0, host->base + MMCIMASK0);
+       writel(0, host->base + MMCIMASK0);
+       if (host->variant->pwrreg_nopower) {
                writel(0, host->base + MMCIDATACTRL);
                writel(0, host->base + MMCIPOWER);
                writel(0, host->base + MMCICLOCK);
-               mmci_reg_delay(host);
-
-               spin_unlock_irqrestore(&host->lock, flags);
        }
+       mmci_reg_delay(host);
 
+       spin_unlock_irqrestore(&host->lock, flags);
 }
 
 static void mmci_restore(struct mmci_host *host)
 {
        unsigned long flags;
 
-       if (host->variant->pwrreg_nopower) {
-               spin_lock_irqsave(&host->lock, flags);
+       spin_lock_irqsave(&host->lock, flags);
 
+       if (host->variant->pwrreg_nopower) {
                writel(host->clk_reg, host->base + MMCICLOCK);
                writel(host->datactrl_reg, host->base + MMCIDATACTRL);
                writel(host->pwr_reg, host->base + MMCIPOWER);
-               writel(MCI_IRQENABLE, host->base + MMCIMASK0);
-               mmci_reg_delay(host);
-
-               spin_unlock_irqrestore(&host->lock, flags);
        }
+       writel(MCI_IRQENABLE, host->base + MMCIMASK0);
+       mmci_reg_delay(host);
+
+       spin_unlock_irqrestore(&host->lock, flags);
 }
 
 static int mmci_runtime_suspend(struct device *dev)