Re: [U-Boot] [PATCH 15/27] dm: mmc: sdhci: Refactor configuration setup to support DM

2016-07-03 Thread Simon Glass
On 12 June 2016 at 23:30, Simon Glass  wrote:
> Move the configuration setting into a separate function which can be used by
> the driver-model code.
>
> Signed-off-by: Simon Glass 
> ---
>
>  drivers/mmc/sdhci.c | 107 
> +---
>  1 file changed, 59 insertions(+), 48 deletions(-)

Applied to u-boot-dm/next.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 15/27] dm: mmc: sdhci: Refactor configuration setup to support DM

2016-06-12 Thread Simon Glass
Move the configuration setting into a separate function which can be used by
the driver-model code.

Signed-off-by: Simon Glass 
---

 drivers/mmc/sdhci.c | 107 +---
 1 file changed, 59 insertions(+), 48 deletions(-)

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 5c71ab8..6e786c8 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -9,6 +9,7 @@
  */
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -478,73 +479,83 @@ static const struct mmc_ops sdhci_ops = {
.init   = sdhci_init,
 };
 
-int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
+int sdhci_setup_cfg(struct mmc_config *cfg, const char *name, int buswidth,
+   uint caps, u32 max_clk, u32 min_clk, uint version,
+   uint quirks, uint host_caps)
 {
-   unsigned int caps;
-
-   host->cfg.name = host->name;
-   host->cfg.ops = _ops;
-
-   caps = sdhci_readl(host, SDHCI_CAPABILITIES);
-#ifdef CONFIG_MMC_SDMA
-   if (!(caps & SDHCI_CAN_DO_SDMA)) {
-   printf("%s: Your controller doesn't support SDMA!!\n",
-  __func__);
-   return -1;
-   }
+   cfg->name = name;
+#ifndef CONFIG_DM_MMC_OPS
+   cfg->ops = _ops;
 #endif
-
if (max_clk)
-   host->cfg.f_max = max_clk;
+   cfg->f_max = max_clk;
else {
-   if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
-   host->cfg.f_max = (caps & SDHCI_CLOCK_V3_BASE_MASK)
-   >> SDHCI_CLOCK_BASE_SHIFT;
+   if (version >= SDHCI_SPEC_300)
+   cfg->f_max = (caps & SDHCI_CLOCK_V3_BASE_MASK) >>
+   SDHCI_CLOCK_BASE_SHIFT;
else
-   host->cfg.f_max = (caps & SDHCI_CLOCK_BASE_MASK)
-   >> SDHCI_CLOCK_BASE_SHIFT;
-   host->cfg.f_max *= 100;
-   }
-   if (host->cfg.f_max == 0) {
-   printf("%s: Hardware doesn't specify base clock frequency\n",
-  __func__);
-   return -1;
+   cfg->f_max = (caps & SDHCI_CLOCK_BASE_MASK) >>
+   SDHCI_CLOCK_BASE_SHIFT;
+   cfg->f_max *= 100;
}
+   if (cfg->f_max == 0)
+   return -EINVAL;
if (min_clk)
-   host->cfg.f_min = min_clk;
+   cfg->f_min = min_clk;
else {
-   if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
-   host->cfg.f_min = host->cfg.f_max /
-   SDHCI_MAX_DIV_SPEC_300;
+   if (version >= SDHCI_SPEC_300)
+   cfg->f_min = cfg->f_max / SDHCI_MAX_DIV_SPEC_300;
else
-   host->cfg.f_min = host->cfg.f_max /
-   SDHCI_MAX_DIV_SPEC_200;
+   cfg->f_min = cfg->f_max / SDHCI_MAX_DIV_SPEC_200;
}
-
-   host->cfg.voltages = 0;
+   cfg->voltages = 0;
if (caps & SDHCI_CAN_VDD_330)
-   host->cfg.voltages |= MMC_VDD_32_33 | MMC_VDD_33_34;
+   cfg->voltages |= MMC_VDD_32_33 | MMC_VDD_33_34;
if (caps & SDHCI_CAN_VDD_300)
-   host->cfg.voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
+   cfg->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
if (caps & SDHCI_CAN_VDD_180)
-   host->cfg.voltages |= MMC_VDD_165_195;
+   cfg->voltages |= MMC_VDD_165_195;
 
-   if (host->quirks & SDHCI_QUIRK_BROKEN_VOLTAGE)
-   host->cfg.voltages |= host->voltages;
-
-   host->cfg.host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT;
-   if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
+   cfg->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT;
+   if (version >= SDHCI_SPEC_300) {
if (caps & SDHCI_CAN_DO_8BIT)
-   host->cfg.host_caps |= MMC_MODE_8BIT;
+   cfg->host_caps |= MMC_MODE_8BIT;
}
 
-   if (host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)
-   host->cfg.host_caps &= ~(MMC_MODE_HS | MMC_MODE_HS_52MHz);
+   if (quirks & SDHCI_QUIRK_NO_HISPD_BIT)
+   cfg->host_caps &= ~(MMC_MODE_HS | MMC_MODE_HS_52MHz);
+
+   if (host_caps)
+   cfg->host_caps |= host_caps;
 
-   if (host->host_caps)
-   host->cfg.host_caps |= host->host_caps;
+   cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
 
-   host->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
+   return 0;
+}
+
+int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
+{
+   unsigned int caps;
+
+   caps = sdhci_readl(host, SDHCI_CAPABILITIES);
+#ifdef CONFIG_MMC_SDMA
+   if (!(caps & SDHCI_CAN_DO_SDMA)) {
+   printf("%s: Your controller doesn't support SDMA!!\n",
+