diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/host/s3cmci.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c index c6a4d3cadf2b..4db5bd7c0494 100644 --- a/drivers/mmc/host/s3cmci.c +++ b/drivers/mmc/host/s3cmci.c | |||
@@ -461,9 +461,19 @@ static irqreturn_t s3cmci_irq(int irq, void *dev_id) | |||
461 | 461 | ||
462 | if (mci_csta & S3C2410_SDICMDSTAT_CRCFAIL) { | 462 | if (mci_csta & S3C2410_SDICMDSTAT_CRCFAIL) { |
463 | if (cmd->flags & MMC_RSP_CRC) { | 463 | if (cmd->flags & MMC_RSP_CRC) { |
464 | cmd->error = -EILSEQ; | 464 | if (host->mrq->cmd->flags & MMC_RSP_136) { |
465 | host->status = "error: bad command crc"; | 465 | dbg(host, dbg_irq, |
466 | goto fail_transfer; | 466 | "fixup: ignore CRC fail with long rsp\n"); |
467 | } else { | ||
468 | /* note, we used to fail the transfer | ||
469 | * here, but it seems that this is just | ||
470 | * the hardware getting it wrong. | ||
471 | * | ||
472 | * cmd->error = -EILSEQ; | ||
473 | * host->status = "error: bad command crc"; | ||
474 | * goto fail_transfer; | ||
475 | */ | ||
476 | } | ||
467 | } | 477 | } |
468 | 478 | ||
469 | mci_cclear |= S3C2410_SDICMDSTAT_CRCFAIL; | 479 | mci_cclear |= S3C2410_SDICMDSTAT_CRCFAIL; |