|
@@ -1012,13 +1012,8 @@ static int mmc_select_hs(struct mmc_card *card)
|
|
|
|
|
|
err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
|
|
EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
|
|
- card->ext_csd.generic_cmd6_time, 0,
|
|
|
|
- true, false, true);
|
|
|
|
- if (!err) {
|
|
|
|
- mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
|
|
|
|
- err = mmc_switch_status(card);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ card->ext_csd.generic_cmd6_time, MMC_TIMING_MMC_HS,
|
|
|
|
+ true, true, true);
|
|
if (err)
|
|
if (err)
|
|
pr_warn("%s: switch to high-speed failed, err:%d\n",
|
|
pr_warn("%s: switch to high-speed failed, err:%d\n",
|
|
mmc_hostname(card->host), err);
|
|
mmc_hostname(card->host), err);
|
|
@@ -1268,16 +1263,23 @@ static int mmc_select_hs400es(struct mmc_card *card)
|
|
goto out_err;
|
|
goto out_err;
|
|
|
|
|
|
/* Switch card to HS mode */
|
|
/* Switch card to HS mode */
|
|
- err = mmc_select_hs(card);
|
|
|
|
- if (err)
|
|
|
|
|
|
+ err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
|
|
+ EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
|
|
|
|
+ card->ext_csd.generic_cmd6_time, 0,
|
|
|
|
+ true, false, true);
|
|
|
|
+ if (err) {
|
|
|
|
+ pr_err("%s: switch to hs for hs400es failed, err:%d\n",
|
|
|
|
+ mmc_hostname(host), err);
|
|
goto out_err;
|
|
goto out_err;
|
|
|
|
+ }
|
|
|
|
|
|
- mmc_set_clock(host, card->ext_csd.hs_max_dtr);
|
|
|
|
-
|
|
|
|
|
|
+ mmc_set_timing(host, MMC_TIMING_MMC_HS);
|
|
err = mmc_switch_status(card);
|
|
err = mmc_switch_status(card);
|
|
if (err)
|
|
if (err)
|
|
goto out_err;
|
|
goto out_err;
|
|
|
|
|
|
|
|
+ mmc_set_clock(host, card->ext_csd.hs_max_dtr);
|
|
|
|
+
|
|
/* Switch card to DDR with strobe bit */
|
|
/* Switch card to DDR with strobe bit */
|
|
val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE;
|
|
val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE;
|
|
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|