ATP and Transcend cards failing repeatedly in the card select command
(CMD7) due to illegal instruction after CMD2. Doing an extra status inquiry
when leaving the card identification mode seems to fix this problem.
The attached patch does the extra probing in mmc_setup() during
low clock which is perhaps an overkill. One could do it also in
mmc_rescan() after switching back to higher clock.
Signed-off-by: Jarkko Lavinen <[email protected]>
Index: linux-2.6.15-mmc_omap/drivers/mmc/mmc.c
===================================================================
--- linux-2.6.15-mmc_omap.orig/drivers/mmc/mmc.c 2006-01-30 10:29:29.000000000 -0400
+++ linux-2.6.15-mmc_omap/drivers/mmc/mmc.c 2006-01-30 10:29:31.000000000 -0400
@@ -1087,6 +1087,14 @@ static void mmc_setup(struct mmc_host *h
*/
host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
host->ops->set_ios(host, &host->ios);
+
+ /*
+ * Some already detected cards get confused in the card identification
+ * mode and futher commands can fail. Doing an extra status inquiry
+ * after the identification mode seems to get cards back to their
+ * senses.
+ */
+ mmc_check_cards(host);
mmc_read_csds(host);