|
@@ -305,6 +305,24 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
|
|
|
return -ECOMM;
|
|
|
}
|
|
|
|
|
|
+#if defined(CONFIG_DM_MMC) && defined(MMC_SUPPORTS_TUNING)
|
|
|
+static int sdhci_execute_tuning(struct udevice *dev, uint opcode)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+ struct mmc *mmc = mmc_get_mmc_dev(dev);
|
|
|
+ struct sdhci_host *host = mmc->priv;
|
|
|
+
|
|
|
+ debug("%s\n", __func__);
|
|
|
+
|
|
|
+ if (host->ops->platform_execute_tuning) {
|
|
|
+ err = host->ops->platform_execute_tuning(mmc, opcode);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#endif
|
|
|
static int sdhci_set_clock(struct mmc *mmc, unsigned int clock)
|
|
|
{
|
|
|
struct sdhci_host *host = mmc->priv;
|
|
@@ -329,6 +347,9 @@ static int sdhci_set_clock(struct mmc *mmc, unsigned int clock)
|
|
|
if (clock == 0)
|
|
|
return 0;
|
|
|
|
|
|
+ if (host->ops->set_delay)
|
|
|
+ host->ops->set_delay(host);
|
|
|
+
|
|
|
if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
|
|
|
/*
|
|
|
* Check if the Host Controller supports Programmable Clock
|
|
@@ -521,6 +542,9 @@ int sdhci_probe(struct udevice *dev)
|
|
|
const struct dm_mmc_ops sdhci_ops = {
|
|
|
.send_cmd = sdhci_send_command,
|
|
|
.set_ios = sdhci_set_ios,
|
|
|
+#ifdef MMC_SUPPORTS_TUNING
|
|
|
+ .execute_tuning = sdhci_execute_tuning,
|
|
|
+#endif
|
|
|
};
|
|
|
#else
|
|
|
static const struct mmc_ops sdhci_ops = {
|