mmc: mmci: Mask IRQs for all variants during runtime suspend
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>
This commit is contained in:
parent
89ca3b8819
commit
42dcc89a91
1 changed files with 11 additions and 12 deletions
|
@ -1794,35 +1794,34 @@ static void mmci_save(struct mmci_host *host)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
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 + MMCIDATACTRL);
|
||||||
writel(0, host->base + MMCIPOWER);
|
writel(0, host->base + MMCIPOWER);
|
||||||
writel(0, host->base + MMCICLOCK);
|
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)
|
static void mmci_restore(struct mmci_host *host)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
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->clk_reg, host->base + MMCICLOCK);
|
||||||
writel(host->datactrl_reg, host->base + MMCIDATACTRL);
|
writel(host->datactrl_reg, host->base + MMCIDATACTRL);
|
||||||
writel(host->pwr_reg, host->base + MMCIPOWER);
|
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)
|
static int mmci_runtime_suspend(struct device *dev)
|
||||||
|
|
Loading…
Add table
Reference in a new issue