summaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2013-11-06 07:40:36 +0400
committerChris Ball <cjb@laptop.org>2013-11-08 23:14:09 +0400
commit0a8fd09ca9d4564a1f906b530ea08415a61cff58 (patch)
tree63c938b268beb01c2d866aac322a60d142f931af /drivers/mmc
parent4d22378221bd0ed69c2e99408d31c108d72aeb80 (diff)
downloadlinux-0a8fd09ca9d4564a1f906b530ea08415a61cff58.tar.xz
mmc: sdhci: Avoid needless loop while handling SDIO interrupts in sdhci_irq
Ignore Card Interrupt bit in the interrupt status if we already know that mmc_signal_sdio_irq() is going to be called at the end of sdhci_irq(). This avoids a needless loop in sdhci_irq() repeatedly reading interrupt status and doing nothing. Signed-off-by: Alexey Neyman <stilor@att.net> Acked-by: Dong Aisheng <b29396@freescale.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/sdhci.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 6785fb1dc5c6..bd8a0982aec3 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2501,6 +2501,14 @@ again:
result = IRQ_HANDLED;
intmask = sdhci_readl(host, SDHCI_INT_STATUS);
+
+ /*
+ * If we know we'll call the driver to signal SDIO IRQ, disregard
+ * further indications of Card Interrupt in the status to avoid a
+ * needless loop.
+ */
+ if (cardint)
+ intmask &= ~SDHCI_INT_CARD_INT;
if (intmask && --max_loops)
goto again;
out: