aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2012-07-31 20:30:40 -0400
committerChris Ball <cjb@laptop.org>2012-09-04 13:58:08 -0400
commit9b2026a12511439d906a5d8d302ae285ebe7378a (patch)
treef0c80f878b8290163dd9bc0d4d3371765effdd33
parent182c90815993452f1902837cc342ac2c05ef13f5 (diff)
mmc: dw_mmc: correct mishandling error interrupt
Datasheet of SYNOPSYS mentions that DTO(Data Transfer Over) interrupt will be raised even if some error interrupts, however it is actually found that DTO does not occur. SYNOPSYS has confirmed this issue. Current implementation defers the call of tasklet_schedule until DTO when the error interrupts is happened. This patch fixes error handling. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Acked-by: Jaehoon Chung <jh80.chung@samsung.com> Acked-by: Will Newton <will.newton@imgtec.com> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/host/dw_mmc.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 7baed457dc3b..1a5db20133ee 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -1580,9 +1580,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
1580 host->data_status = pending; 1580 host->data_status = pending;
1581 smp_wmb(); 1581 smp_wmb();
1582 set_bit(EVENT_DATA_ERROR, &host->pending_events); 1582 set_bit(EVENT_DATA_ERROR, &host->pending_events);
1583 if (!(pending & (SDMMC_INT_DTO | SDMMC_INT_DCRC | 1583 tasklet_schedule(&host->tasklet);
1584 SDMMC_INT_SBE | SDMMC_INT_EBE)))
1585 tasklet_schedule(&host->tasklet);
1586 } 1584 }
1587 1585
1588 if (pending & SDMMC_INT_DATA_OVER) { 1586 if (pending & SDMMC_INT_DATA_OVER) {