diff options
-rw-r--r-- | drivers/mmc/core/mmc.c | 9 | ||||
-rw-r--r-- | include/linux/mmc/host.h | 1 |
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); |