|
@@ -1169,6 +1169,10 @@ static int mmc_select_hs400(struct mmc_card *card)
|
|
|
/* Set host controller to HS timing */
|
|
/* Set host controller to HS timing */
|
|
|
mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
|
|
mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
|
|
|
|
|
|
|
|
|
|
+ /* Prepare host to downgrade to HS timing */
|
|
|
|
|
+ if (host->ops->hs400_downgrade)
|
|
|
|
|
+ host->ops->hs400_downgrade(host);
|
|
|
|
|
+
|
|
|
/* Reduce frequency to HS frequency */
|
|
/* Reduce frequency to HS frequency */
|
|
|
max_dtr = card->ext_csd.hs_max_dtr;
|
|
max_dtr = card->ext_csd.hs_max_dtr;
|
|
|
mmc_set_clock(host, max_dtr);
|
|
mmc_set_clock(host, max_dtr);
|
|
@@ -1209,6 +1213,9 @@ static int mmc_select_hs400(struct mmc_card *card)
|
|
|
if (err)
|
|
if (err)
|
|
|
goto out_err;
|
|
goto out_err;
|
|
|
|
|
|
|
|
|
|
+ if (host->ops->hs400_complete)
|
|
|
|
|
+ host->ops->hs400_complete(host);
|
|
|
|
|
+
|
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
out_err:
|
|
out_err:
|
|
@@ -1256,6 +1263,9 @@ int mmc_hs400_to_hs200(struct mmc_card *card)
|
|
|
|
|
|
|
|
mmc_set_timing(host, MMC_TIMING_MMC_HS);
|
|
mmc_set_timing(host, MMC_TIMING_MMC_HS);
|
|
|
|
|
|
|
|
|
|
+ if (host->ops->hs400_downgrade)
|
|
|
|
|
+ host->ops->hs400_downgrade(host);
|
|
|
|
|
+
|
|
|
err = mmc_switch_status(card);
|
|
err = mmc_switch_status(card);
|
|
|
if (err)
|
|
if (err)
|
|
|
goto out_err;
|
|
goto out_err;
|