diff options
Diffstat (limited to 'drivers/mmc')
| -rw-r--r-- | drivers/mmc/core/sdio.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index 06b64085a355..7d8ba64b0170 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c | |||
| @@ -224,7 +224,7 @@ static int sdio_enable_hs(struct mmc_card *card) | |||
| 224 | * we're trying to reinitialise. | 224 | * we're trying to reinitialise. |
| 225 | */ | 225 | */ |
| 226 | static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, | 226 | static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, |
| 227 | struct mmc_card *oldcard) | 227 | struct mmc_card *oldcard, int powered_resume) |
| 228 | { | 228 | { |
| 229 | struct mmc_card *card; | 229 | struct mmc_card *card; |
| 230 | int err; | 230 | int err; |
| @@ -235,9 +235,11 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, | |||
| 235 | /* | 235 | /* |
| 236 | * Inform the card of the voltage | 236 | * Inform the card of the voltage |
| 237 | */ | 237 | */ |
| 238 | err = mmc_send_io_op_cond(host, host->ocr, &ocr); | 238 | if (!powered_resume) { |
| 239 | if (err) | 239 | err = mmc_send_io_op_cond(host, host->ocr, &ocr); |
| 240 | goto err; | 240 | if (err) |
| 241 | goto err; | ||
| 242 | } | ||
| 241 | 243 | ||
| 242 | /* | 244 | /* |
| 243 | * For SPI, enable CRC as appropriate. | 245 | * For SPI, enable CRC as appropriate. |
| @@ -262,7 +264,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, | |||
| 262 | /* | 264 | /* |
| 263 | * For native busses: set card RCA and quit open drain mode. | 265 | * For native busses: set card RCA and quit open drain mode. |
| 264 | */ | 266 | */ |
| 265 | if (!mmc_host_is_spi(host)) { | 267 | if (!powered_resume && !mmc_host_is_spi(host)) { |
| 266 | err = mmc_send_relative_addr(host, &card->rca); | 268 | err = mmc_send_relative_addr(host, &card->rca); |
| 267 | if (err) | 269 | if (err) |
| 268 | goto remove; | 270 | goto remove; |
| @@ -273,7 +275,7 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr, | |||
| 273 | /* | 275 | /* |
| 274 | * Select card, as all following commands rely on that. | 276 | * Select card, as all following commands rely on that. |
| 275 | */ | 277 | */ |
| 276 | if (!mmc_host_is_spi(host)) { | 278 | if (!powered_resume && !mmc_host_is_spi(host)) { |
| 277 | err = mmc_select_card(card); | 279 | err = mmc_select_card(card); |
| 278 | if (err) | 280 | if (err) |
| 279 | goto remove; | 281 | goto remove; |
| @@ -437,7 +439,8 @@ static int mmc_sdio_resume(struct mmc_host *host) | |||
| 437 | 439 | ||
| 438 | /* Basic card reinitialization. */ | 440 | /* Basic card reinitialization. */ |
| 439 | mmc_claim_host(host); | 441 | mmc_claim_host(host); |
| 440 | err = mmc_sdio_init_card(host, host->ocr, host->card); | 442 | err = mmc_sdio_init_card(host, host->ocr, host->card, |
| 443 | (host->pm_flags & MMC_PM_KEEP_POWER)); | ||
| 441 | mmc_release_host(host); | 444 | mmc_release_host(host); |
| 442 | 445 | ||
| 443 | /* | 446 | /* |
| @@ -507,7 +510,7 @@ int mmc_attach_sdio(struct mmc_host *host, u32 ocr) | |||
| 507 | /* | 510 | /* |
| 508 | * Detect and init the card. | 511 | * Detect and init the card. |
| 509 | */ | 512 | */ |
| 510 | err = mmc_sdio_init_card(host, host->ocr, NULL); | 513 | err = mmc_sdio_init_card(host, host->ocr, NULL, 0); |
| 511 | if (err) | 514 | if (err) |
| 512 | goto err; | 515 | goto err; |
| 513 | card = host->card; | 516 | card = host->card; |
