mmc: export mmc_send_ext_csd()
[oweals/u-boot.git] / drivers / mmc / davinci_mmc.c
index 0d63279db00afbb31f23149b1ff3285f9211c1cc..ef5cd4e7234ff4e1f67dc18fd4efbf455540e27b 100644 (file)
 #define clear_bit(addr, val)   set_val((addr), (get_val(addr) & ~(val)))
 
 #ifdef CONFIG_DM_MMC
-struct davinci_of_data {
-       const char *name;
-       u8 version;
-};
-
 /* Davinci MMC board definitions */
 struct davinci_mmc_priv {
        struct davinci_mmc_regs *reg_base;      /* Register base address */
        uint input_clk;         /* Input clock to MMC controller */
-       uint version;           /* MMC Controller version */
        struct gpio_desc cd_gpio;       /* Card Detect GPIO */
        struct gpio_desc wp_gpio;       /* Write Protect GPIO */
 };
@@ -173,7 +167,7 @@ davinci_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *
 
        /* Clear status registers */
        mmcstatus = get_val(&regs->mmcst0);
-       fifo_words = (host->version == MMC_CTLR_VERSION_2) ? 16 : 8;
+       fifo_words = 16;
        fifo_bytes = fifo_words << 2;
 
        /* Wait for any previous busy signal to be cleared */
@@ -211,8 +205,7 @@ davinci_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *
                set_val(&regs->mmcfifoctl,
                                (MMCFIFOCTL_FIFOLEV | MMCFIFOCTL_FIFORST));
 
-               if (host->version == MMC_CTLR_VERSION_2)
-                       cmddata |= MMCCMD_DMATRIG;
+               cmddata |= MMCCMD_DMATRIG;
 
                cmddata |= MMCCMD_WDATX;
                if (data->flags == MMC_DATA_READ) {
@@ -493,19 +486,17 @@ static int davinci_mmc_probe(struct udevice *dev)
        struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
        struct davinci_mmc_plat *plat = dev_get_platdata(dev);
        struct davinci_mmc_priv *priv = dev_get_priv(dev);
-       struct mmc_config *cfg = &plat->cfg;
-       struct davinci_of_data *data =
-                       (struct davinci_of_data *)dev_get_driver_data(dev);
+       struct mmc_config *cfg = &plat->cfg;
+#ifdef CONFIG_SPL_BUILD
+       int ret;
+#endif
+
        cfg->f_min = 200000;
        cfg->f_max = 25000000;
        cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34,
        cfg->host_caps = MMC_MODE_4BIT, /* DA850 supports only 4-bit SD/MMC */
        cfg->b_max = DAVINCI_MAX_BLOCKS;
-
-       if (data) {
-               cfg->name = data->name;
-               priv->version = data->version;
-       }
+       cfg->name = "da830-mmc";
 
        priv->reg_base = (struct davinci_mmc_regs *)dev_read_addr(dev);
        priv->input_clk = clk_get(DAVINCI_MMCSD_CLKID);
@@ -518,6 +509,20 @@ static int davinci_mmc_probe(struct udevice *dev)
 
        upriv->mmc = &plat->mmc;
 
+#ifdef CONFIG_SPL_BUILD
+       /*
+        * FIXME This is a temporary workaround to enable the driver model in
+        * SPL on omapl138-lcdk. For some reason the bind() callback is not
+        * being called in SPL for MMC which breaks the mmc boot - the hack
+        * is to call mmc_bind() from probe(). We also don't have full DT
+        * support in SPL, hence the hard-coded base register address.
+        */
+       priv->reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE;
+       ret = mmc_bind(dev, &plat->mmc, &plat->cfg);
+       if (ret)
+               return ret;
+#endif
+
        return davinci_dm_mmc_init(dev);
 }
 
@@ -528,28 +533,8 @@ static int davinci_mmc_bind(struct udevice *dev)
        return mmc_bind(dev, &plat->mmc, &plat->cfg);
 }
 
-
-const struct davinci_of_data davinci_mmc_host_info[] = {
-       {
-               .name   = "dm6441-mmc",
-               .version = MMC_CTLR_VERSION_1,
-       },
-       {
-               .name   = "da830-mmc",
-               .version = MMC_CTLR_VERSION_2,
-       },
-       {},
-};
-
 static const struct udevice_id davinci_mmc_ids[] = {
-       {
-               .compatible = "ti,dm6441-mmc",
-               .data = (ulong) &davinci_mmc_host_info[MMC_CTLR_VERSION_1]
-       },
-       {
-               .compatible = "ti,da830-mmc",
-               .data = (ulong) &davinci_mmc_host_info[MMC_CTLR_VERSION_2]
-       },
+       { .compatible = "ti,da830-mmc" },
        {},
 };