diff options
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/Kconfig | 23 | ||||
-rw-r--r-- | drivers/mmc/atmel_sdhci.c | 4 | ||||
-rw-r--r-- | drivers/mmc/bcm2835_sdhci.c | 4 | ||||
-rw-r--r-- | drivers/mmc/bcmstb_sdhci.c | 3 | ||||
-rw-r--r-- | drivers/mmc/dw_mmc.c | 16 | ||||
-rw-r--r-- | drivers/mmc/msm_sdhci.c | 4 | ||||
-rw-r--r-- | drivers/mmc/pci_mmc.c | 4 | ||||
-rw-r--r-- | drivers/mmc/s5p_sdhci.c | 4 | ||||
-rw-r--r-- | drivers/mmc/sdhci-cadence.c | 3 | ||||
-rw-r--r-- | drivers/mmc/tangier_sdhci.c | 3 | ||||
-rw-r--r-- | drivers/mmc/zynq_sdhci.c | 7 |
11 files changed, 49 insertions, 26 deletions
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index 4cdae41b59..c6812f6517 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -156,6 +156,7 @@ config MMC_HS400_SUPPORT config SPL_MMC_HS400_SUPPORT bool "enable HS400 support in SPL" + select SPL_MMC_HS200_SUPPORT help The HS400 mode is support by some eMMC. The bus frequency is up to 200MHz. This mode requires tuning the IO. @@ -591,6 +592,17 @@ config MMC_SDHCI_TEGRA If unsure, say N. +config TEGRA124_MMC_DISABLE_EXT_LOOPBACK + bool "Disable external clock loopback" + depends on MMC_SDHCI_TEGRA && TEGRA124 + help + Disable the external clock loopback and use the internal one on SDMMC3 + as per the SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1 bits + being set to 0xfffd according to the TRM. + + TODO(marcel.ziswiler@toradex.com): Move to device tree controlled + approach once proper kernel integration made it mainline. + config MMC_SDHCI_ZYNQ bool "Arasan SDHCI controller support" depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL @@ -670,17 +682,6 @@ config MMC_MTK endif -config TEGRA124_MMC_DISABLE_EXT_LOOPBACK - bool "Disable external clock loopback" - depends on MMC_SDHCI_TEGRA && TEGRA124 - help - Disable the external clock loopback and use the internal one on SDMMC3 - as per the SDMMC_VENDOR_MISC_CNTRL_0 register's SDMMC_SPARE1 bits - being set to 0xfffd according to the TRM. - - TODO(marcel.ziswiler@toradex.com): Move to device tree controlled - approach once proper kernel integration made it mainline. - config FSL_ESDHC bool "Freescale/NXP eSDHC controller support" help diff --git a/drivers/mmc/atmel_sdhci.c b/drivers/mmc/atmel_sdhci.c index 4be47ba75e..d930ed8da0 100644 --- a/drivers/mmc/atmel_sdhci.c +++ b/drivers/mmc/atmel_sdhci.c @@ -88,13 +88,13 @@ static int atmel_sdhci_probe(struct udevice *dev) return -EINVAL; host->max_clk = max_clk; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, 0, ATMEL_SDHC_MIN_FREQ); if (ret) return ret; - host->mmc = &plat->mmc; - host->mmc->dev = dev; host->mmc->priv = host; upriv->mmc = host->mmc; diff --git a/drivers/mmc/bcm2835_sdhci.c b/drivers/mmc/bcm2835_sdhci.c index 08bddd410e..bf3304c4dc 100644 --- a/drivers/mmc/bcm2835_sdhci.c +++ b/drivers/mmc/bcm2835_sdhci.c @@ -214,6 +214,9 @@ static int bcm2835_sdhci_probe(struct udevice *dev) host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195; host->ops = &bcm2835_ops; + host->mmc = &plat->mmc; + host->mmc->dev = dev; + ret = sdhci_setup_cfg(&plat->cfg, host, emmc_freq, MIN_FREQ); if (ret) { debug("%s: Failed to setup SDHCI (err=%d)\n", __func__, ret); @@ -221,7 +224,6 @@ static int bcm2835_sdhci_probe(struct udevice *dev) } upriv->mmc = &plat->mmc; - host->mmc = &plat->mmc; host->mmc->priv = host; return sdhci_probe(dev); diff --git a/drivers/mmc/bcmstb_sdhci.c b/drivers/mmc/bcmstb_sdhci.c index eef46f3af1..c14f8289e6 100644 --- a/drivers/mmc/bcmstb_sdhci.c +++ b/drivers/mmc/bcmstb_sdhci.c @@ -73,6 +73,8 @@ static int sdhci_bcmstb_probe(struct udevice *dev) if (ret) return ret; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, BCMSTB_SDHCI_MAXIMUM_CLOCK_FREQUENCY, BCMSTB_SDHCI_MINIMUM_CLOCK_FREQUENCY); @@ -80,7 +82,6 @@ static int sdhci_bcmstb_probe(struct udevice *dev) return ret; upriv->mmc = &plat->mmc; - host->mmc = &plat->mmc; host->mmc->priv = host; return sdhci_probe(dev); diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 1992d61182..22f6c7eefd 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -13,6 +13,7 @@ #include <mmc.h> #include <dwmmc.h> #include <wait_bit.h> +#include <power/regulator.h> #define PAGE_SIZE 4096 @@ -493,6 +494,21 @@ static int dwmci_set_ios(struct mmc *mmc) if (host->clksel) host->clksel(host); +#if CONFIG_IS_ENABLED(DM_REGULATOR) + if (mmc->vqmmc_supply) { + int ret; + + if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) + regulator_set_value(mmc->vqmmc_supply, 1800000); + else + regulator_set_value(mmc->vqmmc_supply, 3300000); + + ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, true); + if (ret) + return ret; + } +#endif + return 0; } diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c index 51f9e0ec05..cae42ec4ac 100644 --- a/drivers/mmc/msm_sdhci.c +++ b/drivers/mmc/msm_sdhci.c @@ -141,12 +141,12 @@ static int msm_sdc_probe(struct udevice *dev) writel(caps, host->ioaddr + SDHCI_VENDOR_SPEC_CAPABILITIES0); } - ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0); host->mmc = &plat->mmc; + host->mmc->dev = dev; + ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0); if (ret) return ret; host->mmc->priv = &prv->host; - host->mmc->dev = dev; upriv->mmc = host->mmc; return sdhci_probe(dev); diff --git a/drivers/mmc/pci_mmc.c b/drivers/mmc/pci_mmc.c index 182d41637f..404264a697 100644 --- a/drivers/mmc/pci_mmc.c +++ b/drivers/mmc/pci_mmc.c @@ -33,12 +33,12 @@ static int pci_mmc_probe(struct udevice *dev) host->ioaddr = (void *)dm_pci_map_bar(dev, PCI_BASE_ADDRESS_0, PCI_REGION_MEM); host->name = dev->name; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0); if (ret) return ret; - host->mmc = &plat->mmc; host->mmc->priv = &priv->host; - host->mmc->dev = dev; upriv->mmc = host->mmc; return sdhci_probe(dev); diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c index 9dd0b865eb..53efa968cf 100644 --- a/drivers/mmc/s5p_sdhci.c +++ b/drivers/mmc/s5p_sdhci.c @@ -204,13 +204,13 @@ static int s5p_sdhci_probe(struct udevice *dev) if (ret) return ret; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, 0, 400000); if (ret) return ret; - host->mmc = &plat->mmc; host->mmc->priv = host; - host->mmc->dev = dev; upriv->mmc = host->mmc; return sdhci_probe(dev); diff --git a/drivers/mmc/sdhci-cadence.c b/drivers/mmc/sdhci-cadence.c index 4f9338f733..4736263bf2 100644 --- a/drivers/mmc/sdhci-cadence.c +++ b/drivers/mmc/sdhci-cadence.c @@ -269,12 +269,13 @@ static int sdhci_cdns_probe(struct udevice *dev) if (ret) return ret; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0); if (ret) return ret; upriv->mmc = &plat->mmc; - host->mmc = &plat->mmc; host->mmc->priv = host; return sdhci_probe(dev); diff --git a/drivers/mmc/tangier_sdhci.c b/drivers/mmc/tangier_sdhci.c index 4c33356b9f..0d6e5d6246 100644 --- a/drivers/mmc/tangier_sdhci.c +++ b/drivers/mmc/tangier_sdhci.c @@ -51,13 +51,14 @@ static int sdhci_tangier_probe(struct udevice *dev) /* MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195 */ host->voltages = MMC_VDD_165_195; + host->mmc = &plat->mmc; + host->mmc->dev = dev; ret = sdhci_setup_cfg(&plat->cfg, host, SDHCI_TANGIER_FMAX, SDHCI_TANGIER_FMIN); if (ret) return ret; upriv->mmc = &plat->mmc; - host->mmc = &plat->mmc; host->mmc->priv = host; return sdhci_probe(dev); diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index c525084250..3225a7ac93 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -242,13 +242,14 @@ static int arasan_sdhci_probe(struct udevice *dev) host->max_clk = clock; + host->mmc = &plat->mmc; + host->mmc->dev = dev; + host->mmc->priv = host; + ret = sdhci_setup_cfg(&plat->cfg, host, plat->f_max, CONFIG_ZYNQ_SDHCI_MIN_FREQ); - host->mmc = &plat->mmc; if (ret) return ret; - host->mmc->priv = host; - host->mmc->dev = dev; upriv->mmc = host->mmc; return sdhci_probe(dev); |