Message ID | 20230811130351.7038-1-adrian.hunter@intel.com |
---|---|
Headers | show |
Series | mmc: sdhci-pltfm: Minor clean up | expand |
On Fri, 11 Aug 2023 at 15:04, Adrian Hunter <adrian.hunter@intel.com> wrote: > > Hi > > sdhci_pltfm_unregister() does: > > clk_disable_unprepare(pltfm_host->clk) > > which prevents drivers from using devm_clk_get_enabled() or similar. > > Move it out, and where drivers are doing devm_clk_get*() immediately > followed by clk_prepare_enable(), combine them into devm_clk_get_*enabled(). > > sdhci_pltfm_register() and sdhci_pltfm_unregister() are not paired functions. > That are just helpers and effectively get renamed: > > sdhci_pltfm_register() -> sdhci_pltfm_init_and_add_host() > sdhci_pltfm_unregister() -> sdhci_pltfm_remove() > > Please note, the patches are based on top of some > "Convert to platform remove callback returning void" > patches by Yangtao Li, which were posted here: > > https://lore.kernel.org/linux-mmc/20230727070051.17778-1-frank.li@vivo.com/ > > Patches can also be found here: > > https://github.com/ahunter6/linux/commits/sdhci-pltfm-cleanup-1 > > > Adrian Hunter (16): > mmc: sdhci-pltfm: Add sdhci_pltfm_remove() > mmc: sdhci-bcm-kona: Use sdhci_pltfm_remove() > mmc: sdhci-brcmstb: Use sdhci_pltfm_remove() > mmc: sdhci-cadence: Use sdhci_pltfm_remove() > mmc: sdhci-dove: Use sdhci_pltfm_remove() > mmc: sdhci_f_sdh30: Use sdhci_pltfm_remove() > mmc: sdhci-iproc: Use sdhci_pltfm_remove() > mmc: sdhci-of-arasan: Use sdhci_pltfm_remove() > mmc: sdhci-of-at91: Use sdhci_pltfm_remove() > mmc: sdhci-of-esdhc: Use sdhci_pltfm_remove() > mmc: sdhci-of-hlwd: Use sdhci_pltfm_remove() > mmc: sdhci-of-sparx5: Use sdhci_pltfm_remove() > mmc: sdhci-pxav2: Use sdhci_pltfm_remove() > mmc: sdhci-st: Use sdhci_pltfm_remove() > mmc: sdhci-pltfm: Remove sdhci_pltfm_unregister() > mmc: sdhci-pltfm: Rename sdhci_pltfm_register() > > drivers/mmc/host/sdhci-bcm-kona.c | 12 +++++++++++- > drivers/mmc/host/sdhci-brcmstb.c | 18 +++++------------- > drivers/mmc/host/sdhci-cadence.c | 17 ++++------------- > drivers/mmc/host/sdhci-dove.c | 8 ++------ > drivers/mmc/host/sdhci-iproc.c | 14 +++----------- > drivers/mmc/host/sdhci-of-arasan.c | 4 +++- > drivers/mmc/host/sdhci-of-at91.c | 2 +- > drivers/mmc/host/sdhci-of-esdhc.c | 2 +- > drivers/mmc/host/sdhci-of-hlwd.c | 4 ++-- > drivers/mmc/host/sdhci-of-sparx5.c | 17 ++++++----------- > drivers/mmc/host/sdhci-pltfm.c | 14 ++++++-------- > drivers/mmc/host/sdhci-pltfm.h | 8 ++++---- > drivers/mmc/host/sdhci-pxav2.c | 19 ++++++------------- > drivers/mmc/host/sdhci-st.c | 4 +++- > drivers/mmc/host/sdhci_f_sdh30.c | 2 +- > 15 files changed, 58 insertions(+), 87 deletions(-) > > Applied for next, thanks! Kind regards Uffe
On Fri, Aug 11, 2023 at 9:04 AM Adrian Hunter <adrian.hunter@intel.com> wrote: > > Use sdhci_pltfm_remove() instead of sdhci_pltfm_unregister() so that > devm_clk_get_optional_enabled() can be used for pltfm_host->clk. > > This has the side effect that the order of operations on the error path > and remove path is not the same as it was before, but should be safe > nevertheless. > > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by : Kamal Dasu <kamal.dasu@broadcom.com> > --- > drivers/mmc/host/sdhci-brcmstb.c | 18 +++++------------- > 1 file changed, 5 insertions(+), 13 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c > index a2b6d8f2eeb6..c23251bb95f3 100644 > --- a/drivers/mmc/host/sdhci-brcmstb.c > +++ b/drivers/mmc/host/sdhci-brcmstb.c > @@ -264,23 +264,17 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) > > dev_dbg(&pdev->dev, "Probe found match for %s\n", match->compatible); > > - clk = devm_clk_get_optional(&pdev->dev, NULL); > + clk = devm_clk_get_optional_enabled(&pdev->dev, NULL); > if (IS_ERR(clk)) > return dev_err_probe(&pdev->dev, PTR_ERR(clk), > - "Failed to get clock from Device Tree\n"); > - > - res = clk_prepare_enable(clk); > - if (res) > - return res; > + "Failed to get and enable clock from Device Tree\n"); > > memset(&brcmstb_pdata, 0, sizeof(brcmstb_pdata)); > brcmstb_pdata.ops = match_priv->ops; > host = sdhci_pltfm_init(pdev, &brcmstb_pdata, > sizeof(struct sdhci_brcmstb_priv)); > - if (IS_ERR(host)) { > - res = PTR_ERR(host); > - goto err_clk; > - } > + if (IS_ERR(host)) > + return PTR_ERR(host); > > pltfm_host = sdhci_priv(host); > priv = sdhci_pltfm_priv(pltfm_host); > @@ -369,9 +363,7 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) > > err: > sdhci_pltfm_free(pdev); > -err_clk: > clk_disable_unprepare(base_clk); > - clk_disable_unprepare(clk); > return res; > } > > @@ -430,7 +422,7 @@ static struct platform_driver sdhci_brcmstb_driver = { > .of_match_table = of_match_ptr(sdhci_brcm_of_match), > }, > .probe = sdhci_brcmstb_probe, > - .remove_new = sdhci_pltfm_unregister, > + .remove_new = sdhci_pltfm_remove, > .shutdown = sdhci_brcmstb_shutdown, > }; > > -- > 2.34.1 >