aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/s3cmci.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@openmoko.org>2008-06-30 17:40:25 -0400
committerPierre Ossman <drzeus@drzeus.cx>2008-07-15 08:14:46 -0400
commit679f0f8abd7187baaff40a47fe4733ae4c24cc9a (patch)
tree23e88d30350c7babd10424c668047c37406b0e0a /drivers/mmc/host/s3cmci.c
parentbe518018c6b9224c02284fb243207ef741c31ec6 (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.c16
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;