On 24/08/23 10:37, Adrian Hunter wrote: > On 21/08/23 09:23, Yi Yang wrote: >> Since commit 7ef9651e9792 ("clk: Provide new devm_clk helpers for >> prepared and enabled clocks"), devm_clk_get() and clk_prepare_enable() >> can now be replaced by devm_clk_get_enabled() when the driver enables >> (and possibly prepares) the clocks for the whole lifetime of the device. >> Moreover, it is no longer necessary to unprepare and disable the clocks >> explicitly. >> >> Signed-off-by: Yi Yang <yiyang13@xxxxxxxxxx> >> --- >> v2: Remove clk_disable_unprepare in dwcmshc_remove() >> --- >> drivers/mmc/host/sdhci-of-dwcmshc.c | 20 ++++++++------------ >> 1 file changed, 8 insertions(+), 12 deletions(-) >> >> diff --git a/drivers/mmc/host/sdhci-of-dwcmshc.c b/drivers/mmc/host/sdhci-of-dwcmshc.c >> index 31c1892f4ecd..08b566984733 100644 >> --- a/drivers/mmc/host/sdhci-of-dwcmshc.c >> +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c >> @@ -495,19 +495,19 @@ static int dwcmshc_probe(struct platform_device *pdev) >> priv = sdhci_pltfm_priv(pltfm_host); >> >> if (dev->of_node) { >> - pltfm_host->clk = devm_clk_get(dev, "core"); >> + pltfm_host->clk = devm_clk_get_enabled(dev, "core"); >> if (IS_ERR(pltfm_host->clk)) { >> err = PTR_ERR(pltfm_host->clk); >> - dev_err(dev, "failed to get core clk: %d\n", err); >> + dev_err(dev, "failed to get or enable core clk: %d\n", err); >> goto free_pltfm; >> } >> - err = clk_prepare_enable(pltfm_host->clk); >> - if (err) >> - goto free_pltfm; >> >> - priv->bus_clk = devm_clk_get(dev, "bus"); >> - if (!IS_ERR(priv->bus_clk)) >> - clk_prepare_enable(priv->bus_clk); >> + priv->bus_clk = devm_clk_get_enabled(dev, "bus"); >> + if (!IS_ERR(priv->bus_clk)) { > > "!" does not belong, should be "if (IS_ERR(priv->bus_clk))" instead Although previously it seemed like the clock was optional. At least the error was not considered fatal. > >> + err = PTR_ERR(priv->bus_clk); >> + dev_err(dev, "failed to get or enable bus clk: %d\n", err); >> + goto free_pltfm; >> + } >> } >> >> err = mmc_of_parse(host->mmc); >> @@ -564,8 +564,6 @@ static int dwcmshc_probe(struct platform_device *pdev) >> err_setup_host: >> sdhci_cleanup_host(host); >> err_clk: >> - clk_disable_unprepare(pltfm_host->clk); >> - clk_disable_unprepare(priv->bus_clk); >> if (rk_priv) >> clk_bulk_disable_unprepare(RK35xx_MAX_CLKS, >> rk_priv->rockchip_clks); >> @@ -583,8 +581,6 @@ static void dwcmshc_remove(struct platform_device *pdev) >> >> sdhci_remove_host(host, 0); >> >> - clk_disable_unprepare(pltfm_host->clk); >> - clk_disable_unprepare(priv->bus_clk); >> if (rk_priv) >> clk_bulk_disable_unprepare(RK35xx_MAX_CLKS, >> rk_priv->rockchip_clks); >