From patchwork Mon Mar 30 03:31:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Walter Lozano X-Patchwork-Id: 244500 List-Id: U-Boot discussion From: walter.lozano at collabora.com (Walter Lozano) Date: Mon, 30 Mar 2020 00:31:53 -0300 Subject: [RFC 2/7] mmc: fsl_esdhc_imx: add ofdata_to_platdata support In-Reply-To: <20200330033158.26751-1-walter.lozano@collabora.com> References: <20200330033158.26751-1-walter.lozano@collabora.com> Message-ID: <20200330033158.26751-3-walter.lozano@collabora.com> Signed-off-by: Walter Lozano --- drivers/mmc/fsl_esdhc_imx.c | 71 ++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/drivers/mmc/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c index 761a4b46e9..049a1b6ea8 100644 --- a/drivers/mmc/fsl_esdhc_imx.c +++ b/drivers/mmc/fsl_esdhc_imx.c @@ -1379,41 +1379,20 @@ __weak void init_clk_usdhc(u32 index) { } -static int fsl_esdhc_probe(struct udevice *dev) -{ - struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); - struct fsl_esdhc_plat *plat = dev_get_platdata(dev); - struct fsl_esdhc_priv *priv = dev_get_priv(dev); +static int fsl_esdhc_ofdata_to_platdata(struct udevice *dev){ + #if !CONFIG_IS_ENABLED(OF_PLATDATA) - const void *fdt = gd->fdt_blob; - int node = dev_of_offset(dev); - fdt_addr_t addr; -#else - struct dtd_fsl_imx6q_usdhc *dtplat = &plat->dtplat; -#endif - struct esdhc_soc_data *data = - (struct esdhc_soc_data *)dev_get_driver_data(dev); + struct fsl_esdhc_priv *priv = dev_get_priv(dev); #if CONFIG_IS_ENABLED(DM_REGULATOR) struct udevice *vqmmc_dev; + int ret; #endif + const void *fdt = gd->fdt_blob; + int node = dev_of_offset(dev); + + fdt_addr_t addr; unsigned int val; - struct mmc *mmc; -#if !CONFIG_IS_ENABLED(BLK) - struct blk_desc *bdesc; -#endif - int ret; -#if CONFIG_IS_ENABLED(OF_PLATDATA) - priv->esdhc_regs = map_sysmem(dtplat->reg[0], dtplat->reg[1]); - val = plat->dtplat.bus_width; - if (val == 8) - priv->bus_width = 8; - else if (val == 4) - priv->bus_width = 4; - else - priv->bus_width = 1; - priv->non_removable = 1; -#else addr = dev_read_addr(dev); if (addr == FDT_ADDR_T_NONE) return -EINVAL; @@ -1483,8 +1462,40 @@ static int fsl_esdhc_probe(struct udevice *dev) } #endif #endif + return 0; +} + +static int fsl_esdhc_probe(struct udevice *dev) +{ + struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); + struct fsl_esdhc_plat *plat = dev_get_platdata(dev); + struct fsl_esdhc_priv *priv = dev_get_priv(dev); + struct esdhc_soc_data *data = + (struct esdhc_soc_data *)dev_get_driver_data(dev); + struct mmc *mmc; +#if !CONFIG_IS_ENABLED(BLK) + struct blk_desc *bdesc; +#endif + int ret; + +#if CONFIG_IS_ENABLED(OF_PLATDATA) + struct dtd_fsl_imx6q_usdhc *dtplat = &plat->dtplat; + unsigned int val; + + priv->esdhc_regs = map_sysmem(dtplat->reg[0], dtplat->reg[1]); + val = plat->dtplat.bus_width; + if (val == 8) + priv->bus_width = 8; + else if (val == 4) + priv->bus_width = 4; + else + priv->bus_width = 1; + priv->non_removable = 1; +#endif + if (data) priv->flags = data->flags; + /* * TODO: * Because lack of clk driver, if SDHC clk is not enabled, @@ -1664,6 +1675,7 @@ U_BOOT_DRIVER(fsl_esdhc) = { .name = "fsl-esdhc-mmc", .id = UCLASS_MMC, .of_match = fsl_esdhc_ids, + .ofdata_to_platdata = fsl_esdhc_ofdata_to_platdata, .ops = &fsl_esdhc_ops, #if CONFIG_IS_ENABLED(BLK) .bind = fsl_esdhc_bind, @@ -1677,6 +1689,7 @@ U_BOOT_DRIVER(fsl_esdhc) = { U_BOOT_DRIVER(fsl_usdhc) = { .name = "fsl_imx6q_usdhc", .id = UCLASS_MMC, + .ofdata_to_platdata = fsl_esdhc_ofdata_to_platdata, .ops = &fsl_esdhc_ops, #if CONFIG_IS_ENABLED(BLK) .bind = fsl_esdhc_bind,