diff options
author | Kevin Hilman <khilman@deeprootsystems.com> | 2009-04-06 08:01:19 -0400 |
---|---|---|
committer | Pierre Ossman <pierre@ossman.eu> | 2009-04-08 14:35:55 -0400 |
commit | 00adadc12196c7b3e8923729e728162267e98ff7 (patch) | |
tree | 721b4f4bb77767c0928fd98b322b433c8dc217a7 /drivers/mmc | |
parent | 32710e8fd537adeb53f98dec92e4a77caac512f5 (diff) |
omap_hsmmc: Flush posted write to IRQ
Spurious IRQs seen on MMC after 2.6.29. Flush posted write in IRQ
handler.
The interrupt line is released by clearing the error status bits
in the MMCHS_STAT register, which must occur before the interrupt
handler returns to avoid unwanted irqs. Hence the need to flush
the posted write.
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Acked-by: Tony Lindgen <tony@atomide.com>
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index d183be6f2a5f..a752788fa4e9 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c | |||
@@ -434,6 +434,8 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id) | |||
434 | if (host->mrq == NULL) { | 434 | if (host->mrq == NULL) { |
435 | OMAP_HSMMC_WRITE(host->base, STAT, | 435 | OMAP_HSMMC_WRITE(host->base, STAT, |
436 | OMAP_HSMMC_READ(host->base, STAT)); | 436 | OMAP_HSMMC_READ(host->base, STAT)); |
437 | /* Flush posted write */ | ||
438 | OMAP_HSMMC_READ(host->base, STAT); | ||
437 | return IRQ_HANDLED; | 439 | return IRQ_HANDLED; |
438 | } | 440 | } |
439 | 441 | ||
@@ -489,6 +491,8 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id) | |||
489 | } | 491 | } |
490 | 492 | ||
491 | OMAP_HSMMC_WRITE(host->base, STAT, status); | 493 | OMAP_HSMMC_WRITE(host->base, STAT, status); |
494 | /* Flush posted write */ | ||
495 | OMAP_HSMMC_READ(host->base, STAT); | ||
492 | 496 | ||
493 | if (end_cmd || (status & CC)) | 497 | if (end_cmd || (status & CC)) |
494 | mmc_omap_cmd_done(host, host->cmd); | 498 | mmc_omap_cmd_done(host, host->cmd); |