MMC: Poll card status after rescanning cards

Some broken cards seem to process CMD1 even in stand-by state. The result is
that the card replies with ILLEGAL_COMMAND error for the next command sent
after rescanning. Currently the next command is select card, which would
return the error. But CMD7 does actually succeed and retries of the command
will timeout. The workaround is to poll card status after CMD1 to clear the
pending error.

Signed-off-by: Timo Teras <timo.teras@solidboot.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>

authored by Timo Teras and committed by Pierre Ossman 25a122fd 088406bc

+16 -1
+16 -1
drivers/mmc/mmc.c
··· 1178 { 1179 struct mmc_host *host = data; 1180 struct list_head *l, *n; 1181 1182 mmc_claim_host(host); 1183 1184 - if (host->ios.power_mode == MMC_POWER_ON) 1185 mmc_check_cards(host); 1186 1187 mmc_setup(host); 1188 1189 if (!list_empty(&host->cards)) { 1190 /*
··· 1178 { 1179 struct mmc_host *host = data; 1180 struct list_head *l, *n; 1181 + unsigned char power_mode; 1182 1183 mmc_claim_host(host); 1184 1185 + /* 1186 + * Check for removed cards and newly inserted ones. We check for 1187 + * removed cards first so we can intelligently re-select the VDD. 1188 + */ 1189 + power_mode = host->ios.power_mode; 1190 + if (power_mode == MMC_POWER_ON) 1191 mmc_check_cards(host); 1192 1193 mmc_setup(host); 1194 + 1195 + /* 1196 + * Some broken cards process CMD1 even in stand-by state. There is 1197 + * no reply, but an ILLEGAL_COMMAND error is cached and returned 1198 + * after next command. We poll for card status here to clear any 1199 + * possibly pending error. 1200 + */ 1201 + if (power_mode == MMC_POWER_ON) 1202 + mmc_check_cards(host); 1203 1204 if (!list_empty(&host->cards)) { 1205 /*