From: Peng Fan Date: Thu, 18 Oct 2018 12:28:35 +0000 (+0200) Subject: mmc: fsl_esdhc: add uclass clk support X-Git-Tag: v2018.11-rc3~6^2~26 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3cb1450380229d1def6c70a3748ee0dcaef7ab29;p=oweals%2Fu-boot.git mmc: fsl_esdhc: add uclass clk support When CONIFG_CLK is enabled, use uclass clk api to handle the clock. Signed-off-by: Peng Fan Reviewed-by: Anatolij Gustschin Cc: Jaehoon Chung Cc: Stefano Babic --- diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 220f4f74a8..3cdfa7f5a6 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -121,6 +122,7 @@ struct esdhc_soc_data { struct fsl_esdhc_priv { struct fsl_esdhc *esdhc_regs; unsigned int sdhc_clk; + struct clk per_clk; unsigned int clock; unsigned int mode; unsigned int bus_width; @@ -1496,10 +1498,26 @@ static int fsl_esdhc_probe(struct udevice *dev) init_clk_usdhc(dev->seq); - priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + dev->seq); - if (priv->sdhc_clk <= 0) { - dev_err(dev, "Unable to get clk for %s\n", dev->name); - return -EINVAL; + if (IS_ENABLED(CONFIG_CLK)) { + /* Assigned clock already set clock */ + ret = clk_get_by_name(dev, "per", &priv->per_clk); + if (ret) { + printf("Failed to get per_clk\n"); + return ret; + } + ret = clk_enable(&priv->per_clk); + if (ret) { + printf("Failed to enable per_clk\n"); + return ret; + } + + priv->sdhc_clk = clk_get_rate(&priv->per_clk); + } else { + priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + dev->seq); + if (priv->sdhc_clk <= 0) { + dev_err(dev, "Unable to get clk for %s\n", dev->name); + return -EINVAL; + } } ret = fsl_esdhc_init(priv, plat);