mmc: am654_sdhci: Add a platform specific set_control_reg() callback
authorFaiz Abbas <faiz_abbas@ti.com>
Mon, 10 Jun 2019 19:13:41 +0000 (00:43 +0530)
committerTom Rini <trini@konsulko.com>
Wed, 17 Jul 2019 15:12:08 +0000 (11:12 -0400)
Add a platform specific set_control_reg() callback to help switch to
UHS speed modes.

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
drivers/mmc/am654_sdhci.c

index b9a7924d4e2017bae29612427cf5257c794c0f3d..fe633aa39aad6dddbf727c10ba6468c94d9b9ae8 100644 (file)
@@ -75,6 +75,21 @@ struct am654_sdhci_plat {
        bool dll_on;
 };
 
+static void am654_sdhci_set_control_reg(struct sdhci_host *host)
+{
+       struct mmc *mmc = (struct mmc *)host->mmc;
+       u32 reg;
+
+       if (IS_SD(host->mmc) &&
+           mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
+               reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
+               reg |= SDHCI_CTRL_VDD_180;
+               sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
+       }
+
+       sdhci_set_uhs_timing(host);
+}
+
 static int am654_sdhci_set_ios_post(struct sdhci_host *host)
 {
        struct udevice *dev = host->mmc->dev;
@@ -143,7 +158,8 @@ static int am654_sdhci_set_ios_post(struct sdhci_host *host)
 }
 
 const struct sdhci_ops am654_sdhci_ops = {
-       .set_ios_post = &am654_sdhci_set_ios_post,
+       .set_ios_post           = &am654_sdhci_set_ios_post,
+       .set_control_reg        = &am654_sdhci_set_control_reg,
 };
 
 int am654_sdhci_init(struct am654_sdhci_plat *plat)