2006-01-31 14:19:36

by Anderson Briglia

[permalink] [raw]
Subject: [patch 5/5] MMC OMAP driver

This patch by Tuukka Tikkanen provides a write work-around for broken
MMC cards that set READY_FOR_DATA when it's not set.

Signed-off-by: Tuukka Tikkanen

Index: linux-2.6.15-mmc_omap/drivers/mmc/Kconfig
===================================================================
--- linux-2.6.15-mmc_omap.orig/drivers/mmc/Kconfig 2006-01-26 17:03:43.000000000 -0400
+++ linux-2.6.15-mmc_omap/drivers/mmc/Kconfig 2006-01-26 17:04:57.000000000 -0400
@@ -29,6 +29,14 @@ config MMC_BLOCK
mount the filesystem. Almost everyone wishing MMC support
should say Y or M here.

+config MMC_BLOCK_BROKEN_RFD
+ boolean "Write work-around for incompatible cards"
+ depends on MMC_BLOCK
+ default n
+ help
+ Say y here if your MMC card fails write operations. Some cards
+ lie about being ready to receive data while they actually are not.
+
config MMC_ARMMMCI
tristate "ARM AMBA Multimedia Card Interface support"
depends on ARM_AMBA && MMC
Index: linux-2.6.15-mmc_omap/drivers/mmc/mmc_block.c
===================================================================
--- linux-2.6.15-mmc_omap.orig/drivers/mmc/mmc_block.c 2006-01-26 17:04:52.000000000 -0400
+++ linux-2.6.15-mmc_omap/drivers/mmc/mmc_block.c 2006-01-26 17:04:57.000000000 -0400
@@ -234,6 +234,13 @@ static int mmc_blk_issue_rq(struct mmc_q
req->rq_disk->disk_name, err);
goto cmd_err;
}
+#ifdef CONFIG_MMC_BLOCK_BROKEN_RFD
+ /* Work-around for broken cards setting READY_FOR_DATA
+ * when not actually ready.
+ */
+ if (R1_CURRENT_STATE(cmd.resp[0]) == 7)
+ cmd.resp[0] &= ~R1_READY_FOR_DATA;
+#endif
} while (!(cmd.resp[0] & R1_READY_FOR_DATA));

#if 0


2006-01-31 15:31:09

by Pierre Ossman

[permalink] [raw]
Subject: Re: [patch 5/5] MMC OMAP driver

Anderson Briglia wrote:
> + if (R1_CURRENT_STATE(cmd.resp[0]) == 7)

Please use a define so I don't have to reach for a MMC spec when reading
this.

Rgds
Pierre