mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-03 15:52:00 +00:00
mmc: sdhci: clean up sdio interrupt enable handling
We don't need to change the SDHCI_SDIO_IRQ_ENABLED flag when we're merely receiving an interrupt - IRQ handling thread in the MMC core will either re-enable or disable the interrupt via the enable_sdio_irq callback, which will update this status appropriately. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Tested-by: Markus Pargmann <mpa@pengutronix.de> Tested-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Chris Ball <chris@printf.net>
This commit is contained in:
parent
41005003bc
commit
ef104333a2
@ -1711,24 +1711,14 @@ static int sdhci_get_ro(struct mmc_host *mmc)
|
||||
|
||||
static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
|
||||
{
|
||||
if (host->flags & SDHCI_DEVICE_DEAD)
|
||||
goto out;
|
||||
|
||||
if (enable)
|
||||
host->flags |= SDHCI_SDIO_IRQ_ENABLED;
|
||||
else
|
||||
host->flags &= ~SDHCI_SDIO_IRQ_ENABLED;
|
||||
|
||||
/* SDIO IRQ will be enabled as appropriate in runtime resume */
|
||||
if (host->runtime_suspended)
|
||||
goto out;
|
||||
|
||||
if (enable)
|
||||
sdhci_unmask_irqs(host, SDHCI_INT_CARD_INT);
|
||||
else
|
||||
sdhci_mask_irqs(host, SDHCI_INT_CARD_INT);
|
||||
out:
|
||||
mmiowb();
|
||||
if (!(host->flags & SDHCI_DEVICE_DEAD) || host->runtime_suspended) {
|
||||
if (enable)
|
||||
sdhci_unmask_irqs(host, SDHCI_INT_CARD_INT);
|
||||
else
|
||||
sdhci_mask_irqs(host, SDHCI_INT_CARD_INT);
|
||||
mmiowb();
|
||||
}
|
||||
}
|
||||
|
||||
static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
|
||||
@ -1736,9 +1726,18 @@ static void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
|
||||
struct sdhci_host *host = mmc_priv(mmc);
|
||||
unsigned long flags;
|
||||
|
||||
sdhci_runtime_pm_get(host);
|
||||
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
if (enable)
|
||||
host->flags |= SDHCI_SDIO_IRQ_ENABLED;
|
||||
else
|
||||
host->flags &= ~SDHCI_SDIO_IRQ_ENABLED;
|
||||
|
||||
sdhci_enable_sdio_irq_nolock(host, enable);
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
|
||||
sdhci_runtime_pm_put(host);
|
||||
}
|
||||
|
||||
static int sdhci_do_start_signal_voltage_switch(struct sdhci_host *host,
|
||||
@ -2726,7 +2725,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host)
|
||||
host->runtime_suspended = false;
|
||||
|
||||
/* Enable SDIO IRQ */
|
||||
if ((host->flags & SDHCI_SDIO_IRQ_ENABLED))
|
||||
if (host->flags & SDHCI_SDIO_IRQ_ENABLED)
|
||||
sdhci_enable_sdio_irq_nolock(host, true);
|
||||
|
||||
/* Enable Card Detection */
|
||||
|
Loading…
Reference in New Issue
Block a user