diff options
author | Harald Welte <laforge@openmoko.org> | 2008-06-30 17:40:25 -0400 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2008-07-15 08:14:46 -0400 |
commit | 679f0f8abd7187baaff40a47fe4733ae4c24cc9a (patch) | |
tree | 23e88d30350c7babd10424c668047c37406b0e0a /drivers/mmc/host/s3cmci.c | |
parent | be518018c6b9224c02284fb243207ef741c31ec6 (diff) |
MMC: S3C24XX MMC/SD driver write fixes
This patch is a workaround of some S3C2410 MMC chip bug
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc/host/s3cmci.c')
-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; |