diff options
Diffstat (limited to 'drivers/mmc/core/mmc.c')
-rw-r--r-- | drivers/mmc/core/mmc.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 66c4a59fee5..3ea58ce773f 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c | |||
@@ -375,7 +375,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
375 | struct mmc_card *oldcard) | 375 | struct mmc_card *oldcard) |
376 | { | 376 | { |
377 | struct mmc_card *card; | 377 | struct mmc_card *card; |
378 | int err; | 378 | int err, ddr = 0; |
379 | u32 cid[4]; | 379 | u32 cid[4]; |
380 | unsigned int max_dtr; | 380 | unsigned int max_dtr; |
381 | 381 | ||
@@ -518,32 +518,32 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
518 | mmc_set_clock(host, max_dtr); | 518 | mmc_set_clock(host, max_dtr); |
519 | 519 | ||
520 | /* | 520 | /* |
521 | * Activate DDR50 mode (if supported). | 521 | * Indicate DDR mode (if supported). |
522 | */ | 522 | */ |
523 | if (mmc_card_highspeed(card)) { | 523 | if (mmc_card_highspeed(card)) { |
524 | if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_8V) | 524 | if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_8V) |
525 | && (host->caps & (MMC_CAP_1_8V_DDR))) | 525 | && (host->caps & (MMC_CAP_1_8V_DDR))) |
526 | mmc_card_set_ddr_mode(card); | 526 | ddr = 1; |
527 | else if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_2V) | 527 | else if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_2V) |
528 | && (host->caps & (MMC_CAP_1_2V_DDR))) | 528 | && (host->caps & (MMC_CAP_1_2V_DDR))) |
529 | mmc_card_set_ddr_mode(card); | 529 | ddr = 1; |
530 | } | 530 | } |
531 | 531 | ||
532 | /* | 532 | /* |
533 | * Activate wide bus (if supported). | 533 | * Activate wide bus and DDR (if supported). |
534 | */ | 534 | */ |
535 | if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) && | 535 | if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) && |
536 | (host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) { | 536 | (host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) { |
537 | unsigned ext_csd_bit, bus_width; | 537 | unsigned ext_csd_bit, bus_width; |
538 | 538 | ||
539 | if (host->caps & MMC_CAP_8_BIT_DATA) { | 539 | if (host->caps & MMC_CAP_8_BIT_DATA) { |
540 | if (mmc_card_ddr_mode(card)) | 540 | if (ddr) |
541 | ext_csd_bit = EXT_CSD_DDR_BUS_WIDTH_8; | 541 | ext_csd_bit = EXT_CSD_DDR_BUS_WIDTH_8; |
542 | else | 542 | else |
543 | ext_csd_bit = EXT_CSD_BUS_WIDTH_8; | 543 | ext_csd_bit = EXT_CSD_BUS_WIDTH_8; |
544 | bus_width = MMC_BUS_WIDTH_8; | 544 | bus_width = MMC_BUS_WIDTH_8; |
545 | } else { | 545 | } else { |
546 | if (mmc_card_ddr_mode(card)) | 546 | if (ddr) |
547 | ext_csd_bit = EXT_CSD_DDR_BUS_WIDTH_4; | 547 | ext_csd_bit = EXT_CSD_DDR_BUS_WIDTH_4; |
548 | else | 548 | else |
549 | ext_csd_bit = EXT_CSD_BUS_WIDTH_4; | 549 | ext_csd_bit = EXT_CSD_BUS_WIDTH_4; |
@@ -557,12 +557,13 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, | |||
557 | goto free_card; | 557 | goto free_card; |
558 | 558 | ||
559 | if (err) { | 559 | if (err) { |
560 | printk(KERN_WARNING "%s: switch to bus width %d " | 560 | printk(KERN_WARNING "%s: switch to bus width %d ddr %d " |
561 | "failed\n", mmc_hostname(card->host), | 561 | "failed\n", mmc_hostname(card->host), |
562 | 1 << bus_width); | 562 | 1 << bus_width, ddr); |
563 | err = 0; | 563 | err = 0; |
564 | } else { | 564 | } else { |
565 | mmc_set_bus_width(card->host, bus_width); | 565 | mmc_card_set_ddr_mode(card); |
566 | mmc_set_bus_width_ddr(card->host, bus_width, ddr); | ||
566 | } | 567 | } |
567 | } | 568 | } |
568 | 569 | ||