[PATCH 01/12] clk: qcom: ipq-cmn-pll: Use devm_clk_hw_register_fixed_rate_parent_data
From: Luo Jie
Date: Fri Jul 24 2026 - 11:12:29 EST
Replace clk_hw_register_fixed_rate_parent_hw() with the managed
devm_clk_hw_register_fixed_rate_parent_data() so the fixed-rate output
clocks are automatically unregistered when the device is unbound.
Since all clocks in the driver are now registered via devm_ variants,
the remove callback 'ipq_cmn_pll_clk_remove()' and the manual
'unregister_fixed_clk' error-path loop are no longer needed and are
removed.
Signed-off-by: Luo Jie <jie.luo@xxxxxxxxxxxxxxxx>
---
drivers/clk/qcom/ipq-cmn-pll.c | 39 +++++++++------------------------------
1 file changed, 9 insertions(+), 30 deletions(-)
diff --git a/drivers/clk/qcom/ipq-cmn-pll.c b/drivers/clk/qcom/ipq-cmn-pll.c
index dafe8c1738df..4fdf78f6829e 100644
--- a/drivers/clk/qcom/ipq-cmn-pll.c
+++ b/drivers/clk/qcom/ipq-cmn-pll.c
@@ -390,13 +390,14 @@ static int ipq_cmn_pll_register_clks(struct platform_device *pdev)
/* Register the fixed rate output clocks. */
for (i = 0; i < num_clks; i++) {
- hw = clk_hw_register_fixed_rate_parent_hw(dev, fixed_clk[i].name,
- cmn_pll_hw, 0,
- fixed_clk[i].rate);
- if (IS_ERR(hw)) {
- ret = PTR_ERR(hw);
- goto unregister_fixed_clk;
- }
+ struct clk_parent_data pdata = { .hw = cmn_pll_hw };
+
+ hw = devm_clk_hw_register_fixed_rate_parent_data(dev,
+ fixed_clk[i].name,
+ &pdata, 0,
+ fixed_clk[i].rate);
+ if (IS_ERR(hw))
+ return PTR_ERR(hw);
hw_data->hws[fixed_clk[i].id] = hw;
}
@@ -410,17 +411,11 @@ static int ipq_cmn_pll_register_clks(struct platform_device *pdev)
ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, hw_data);
if (ret)
- goto unregister_fixed_clk;
+ return ret;
platform_set_drvdata(pdev, hw_data);
return 0;
-
-unregister_fixed_clk:
- while (i > 0)
- clk_hw_unregister(hw_data->hws[fixed_clk[--i].id]);
-
- return ret;
}
static int ipq_cmn_pll_clk_probe(struct platform_device *pdev)
@@ -462,21 +457,6 @@ static int ipq_cmn_pll_clk_probe(struct platform_device *pdev)
return 0;
}
-static void ipq_cmn_pll_clk_remove(struct platform_device *pdev)
-{
- struct clk_hw_onecell_data *hw_data = platform_get_drvdata(pdev);
- int i;
-
- /*
- * The clock with index CMN_PLL_CLK is unregistered by
- * device management.
- */
- for (i = 0; i < hw_data->num; i++) {
- if (i != CMN_PLL_CLK)
- clk_hw_unregister(hw_data->hws[i]);
- }
-}
-
static const struct dev_pm_ops ipq_cmn_pll_pm_ops = {
SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
};
@@ -494,7 +474,6 @@ MODULE_DEVICE_TABLE(of, ipq_cmn_pll_clk_ids);
static struct platform_driver ipq_cmn_pll_clk_driver = {
.probe = ipq_cmn_pll_clk_probe,
- .remove = ipq_cmn_pll_clk_remove,
.driver = {
.name = "ipq_cmn_pll",
.of_match_table = ipq_cmn_pll_clk_ids,
--
2.43.0