aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorKevin Hilman <khilman@deeprootsystems.com>2009-04-06 08:01:19 -0400
committerPierre Ossman <pierre@ossman.eu>2009-04-08 14:35:55 -0400
commit00adadc12196c7b3e8923729e728162267e98ff7 (patch)
tree721b4f4bb77767c0928fd98b322b433c8dc217a7 /drivers
parent32710e8fd537adeb53f98dec92e4a77caac512f5 (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')
-rw-r--r--drivers/mmc/host/omap_hsmmc.c4
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);