diff options
Diffstat (limited to 'drivers/mmc/core/mmc.c')
-rw-r--r-- | drivers/mmc/core/mmc.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index e0bfa9515c8a..a6b5fe9d3969 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
@@ -416,12 +416,17 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
416 | (host->caps & MMC_CAP_MMC_HIGHSPEED)) { | 416 | (host->caps & MMC_CAP_MMC_HIGHSPEED)) { |
417 | err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, | 417 | err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, |
418 | EXT_CSD_HS_TIMING, 1); | 418 | EXT_CSD_HS_TIMING, 1); |
419 | if (err) | 419 | if (err && err != -EBADMSG) |
420 | goto free_card; | 420 | goto free_card; |
421 | 421 | ||
422 | mmc_card_set_highspeed(card); | 422 | if (err) { |
423 | 423 | printk(KERN_WARNING "%s: switch to highspeed failed\n", | |
424 | mmc_set_timing(card->host, MMC_TIMING_MMC_HS); | 424 | mmc_hostname(card->host)); |
425 | err = 0; | ||
426 | } else { | ||
427 | mmc_card_set_highspeed(card); | ||
428 | mmc_set_timing(card->host, MMC_TIMING_MMC_HS); | ||
429 | } | ||
425 | } | 430 | } |
426 | 431 | ||
427 | /* | 432 | /* |
@@ -456,10 +461,17 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
456 | err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, | 461 | err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, |
457 | EXT_CSD_BUS_WIDTH, ext_csd_bit); | 462 | EXT_CSD_BUS_WIDTH, ext_csd_bit); |
458 | 463 | ||
459 | if (err) | 464 | if (err && err != -EBADMSG) |
460 | goto free_card; | 465 | goto free_card; |
461 | 466 | ||
462 | mmc_set_bus_width(card->host, bus_width); | 467 | if (err) { |
468 | printk(KERN_WARNING "%s: switch to bus width %d " | ||
469 | "failed\n", mmc_hostname(card->host), | ||
470 | 1 << bus_width); | ||
471 | err = 0; | ||
472 | } else { | ||
473 | mmc_set_bus_width(card->host, bus_width); | ||
474 | } | ||
463 | } | 475 | } |
464 | 476 | ||
465 | if (!oldcard) | 477 | if (!oldcard) |