dm: treewide: Rename dev_get_platdata() to dev_get_plat()
[platform/kernel/u-boot.git] / drivers / mmc / davinci_mmc.c
index 0d63279..975a6be 100644 (file)
@@ -16,8 +16,8 @@
 #include <asm/io.h>
 #include <asm/arch/sdmmc_defs.h>
 #include <asm-generic/gpio.h>
+#include <linux/delay.h>
 
-#define DAVINCI_MAX_BLOCKS     (32)
 #define WATCHDOG_COUNT         (100000)
 
 #define get_val(addr)          REG(addr)
 #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 */
 };
-
-struct davinci_mmc_plat
-{
-       struct mmc_config cfg;
-       struct mmc mmc;
-};
 #endif
 
 /* Set davinci clock prescalar value based on the required clock in HZ */
@@ -173,7 +161,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 +199,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) {
@@ -470,7 +457,7 @@ static const struct dm_mmc_ops davinci_mmc_ops = {
 /* Called from board_mmc_init during startup. Can be called multiple times
 * depending on the number of slots available on board and controller
 */
-int davinci_mmc_init(bd_t *bis, struct davinci_mmc *host)
+int davinci_mmc_init(struct bd_info *bis, struct davinci_mmc *host)
 {
        host->cfg.name = "davinci";
        host->cfg.ops = &dmmc_ops;
@@ -491,31 +478,16 @@ int davinci_mmc_init(bd_t *bis, struct davinci_mmc *host)
 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_plat *plat = dev_get_plat(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);
-       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;
-       }
 
-       priv->reg_base = (struct davinci_mmc_regs *)dev_read_addr(dev);
+       priv->reg_base = plat->reg_base;
        priv->input_clk = clk_get(DAVINCI_MMCSD_CLKID);
-
 #if CONFIG_IS_ENABLED(DM_GPIO)
        /* These GPIOs are optional */
        gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio, GPIOD_IS_IN);
        gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio, GPIOD_IS_IN);
 #endif
-
        upriv->mmc = &plat->mmc;
 
        return davinci_dm_mmc_init(dev);
@@ -523,46 +495,49 @@ static int davinci_mmc_probe(struct udevice *dev)
 
 static int davinci_mmc_bind(struct udevice *dev)
 {
-       struct davinci_mmc_plat *plat = dev_get_platdata(dev);
+       struct davinci_mmc_plat *plat = dev_get_plat(dev);
 
        return mmc_bind(dev, &plat->mmc, &plat->cfg);
 }
 
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+static int davinci_mmc_ofdata_to_platdata(struct udevice *dev)
+{
+       struct davinci_mmc_plat *plat = dev_get_plat(dev);
+       struct mmc_config *cfg = &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,
-       },
-       {},
-};
+       plat->reg_base = (struct davinci_mmc_regs *)dev_read_addr(dev);
+       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;
+       cfg->name = "da830-mmc";
+
+       return 0;
+}
 
 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" },
        {},
 };
-
-U_BOOT_DRIVER(davinci_mmc_drv) = {
+#endif
+U_BOOT_DRIVER(ti_da830_mmc) = {
        .name = "davinci_mmc",
        .id             = UCLASS_MMC,
+#if CONFIG_IS_ENABLED(OF_CONTROL)
        .of_match       = davinci_mmc_ids,
+       .plat_auto      = sizeof(struct davinci_mmc_plat),
+       .ofdata_to_platdata = davinci_mmc_ofdata_to_platdata,
+#endif
 #if CONFIG_BLK
        .bind           = davinci_mmc_bind,
 #endif
        .probe = davinci_mmc_probe,
        .ops = &davinci_mmc_ops,
-       .platdata_auto_alloc_size = sizeof(struct davinci_mmc_plat),
-       .priv_auto_alloc_size = sizeof(struct davinci_mmc_priv),
+       .priv_auto      = sizeof(struct davinci_mmc_priv),
+#if !CONFIG_IS_ENABLED(OF_CONTROL)
+       .flags  = DM_FLAG_PRE_RELOC,
+#endif
 };
 #endif