diff options
-rw-r--r-- | drivers/mmc/mmc.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index ee8863c123e3..766bc54406e5 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c | |||
@@ -475,7 +475,7 @@ static u32 mmc_select_voltage(struct mmc_host *host, u32 ocr) | |||
475 | if (bit) { | 475 | if (bit) { |
476 | bit -= 1; | 476 | bit -= 1; |
477 | 477 | ||
478 | ocr = 3 << bit; | 478 | ocr &= 3 << bit; |
479 | 479 | ||
480 | host->ios.vdd = bit; | 480 | host->ios.vdd = bit; |
481 | mmc_set_ios(host); | 481 | mmc_set_ios(host); |
@@ -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 |