summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mmc/core/mmc.c9
-rw-r--r--include/linux/mmc/host.h1
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index bbac42cbe6aa..f4b6ca033487 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1245,7 +1245,12 @@ static int mmc_select_hs400(struct mmc_card *card)
goto out_err;
}
- if ((host->caps2 & MMC_CAP2_HS400_POST_TUNING) && host->ops->execute_tuning) {
+ if (host->ops->enhanced_strobe) {
+ mmc_host_clk_hold(host);
+ err = host->ops->enhanced_strobe(host);
+ mmc_host_clk_release(host);
+ } else if ((host->caps2 & MMC_CAP2_HS400_POST_TUNING) &&
+ host->ops->execute_tuning) {
mmc_host_clk_hold(host);
err = host->ops->execute_tuning(host,
MMC_SEND_TUNING_BLOCK_HS200);
@@ -1609,7 +1614,7 @@ static int mmc_scale_high(struct mmc_host *host)
return err;
}
- return 0;
+ return err;
}
static int mmc_set_clock_bus_speed(struct mmc_card *card, unsigned long freq)
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 6c6a699abea9..42e7b412e6f1 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -158,6 +158,7 @@ struct mmc_host_ops {
/* Prepare HS400 target operating frequency depending host driver */
int (*prepare_hs400_tuning)(struct mmc_host *host, struct mmc_ios *ios);
+ int (*enhanced_strobe)(struct mmc_host *host);
int (*select_drive_strength)(struct mmc_card *card,
unsigned int max_dtr, int host_drv,
int card_drv, int *drv_type);