diff options
author | Alexey Neyman <stilor@att.net> | 2013-11-05 22:40:36 -0500 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2013-11-08 14:14:09 -0500 |
commit | 0a8fd09ca9d4564a1f906b530ea08415a61cff58 (patch) | |
tree | 63c938b268beb01c2d866aac322a60d142f931af /drivers/mmc | |
parent | 4d22378221bd0ed69c2e99408d31c108d72aeb80 (diff) |
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.c | 8 |
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: | |||
2501 | result = IRQ_HANDLED; | 2501 | result = IRQ_HANDLED; |
2502 | 2502 | ||
2503 | intmask = sdhci_readl(host, SDHCI_INT_STATUS); | 2503 | intmask = sdhci_readl(host, SDHCI_INT_STATUS); |
2504 | |||
2505 | /* | ||
2506 | * If we know we'll call the driver to signal SDIO IRQ, disregard | ||
2507 | * further indications of Card Interrupt in the status to avoid a | ||
2508 | * needless loop. | ||
2509 | */ | ||
2510 | if (cardint) | ||
2511 | intmask &= ~SDHCI_INT_CARD_INT; | ||
2504 | if (intmask && --max_loops) | 2512 | if (intmask && --max_loops) |
2505 | goto again; | 2513 | goto again; |
2506 | out: | 2514 | out: |