aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/mmc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/mmc.c')
-rw-r--r--drivers/mmc/mmc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index ee8863c123e3..ec8168ac75b1 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1178,14 +1178,29 @@ static void mmc_rescan(void *data)
1178{ 1178{
1179 struct mmc_host *host = data; 1179 struct mmc_host *host = data;
1180 struct list_head *l, *n; 1180 struct list_head *l, *n;
1181 unsigned char power_mode;
1181 1182
1182 mmc_claim_host(host); 1183 mmc_claim_host(host);
1183 1184
1184 if (host->ios.power_mode == MMC_POWER_ON) 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)
1185 mmc_check_cards(host); 1191 mmc_check_cards(host);
1186 1192
1187 mmc_setup(host); 1193 mmc_setup(host);
1188 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
1189 if (!list_empty(&host->cards)) { 1204 if (!list_empty(&host->cards)) {
1190 /* 1205 /*
1191 * (Re-)calculate the fastest clock rate which the 1206 * (Re-)calculate the fastest clock rate which the