From 838c0a41d7ed892de85329c199ac604611f8efe7 Mon Sep 17 00:00:00 2001 From: Changhuang Liang Date: Tue, 14 Jan 2025 00:13:00 -0800 Subject: [PATCH] clk: starfive: Make _clk_get become a common helper function Introduce num_reg to store the number of clocks, this helps to make _clk_get become a common helper function which called jh71x0_clk_get(). With this, it helps to simplify the code and extend the code in the future. Signed-off-by: Changhuang Liang Link: https://lore.kernel.org/r/20250114081300.36600-1-changhuang.liang@starfivetech.com Signed-off-by: Stephen Boyd --- drivers/clk/starfive/clk-starfive-jh7100-audio.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh7110-aon.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh7110-isp.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh7110-stg.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh7110-sys.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh7110-vout.c | 14 ++------------ drivers/clk/starfive/clk-starfive-jh71x0.c | 12 ++++++++++++ drivers/clk/starfive/clk-starfive-jh71x0.h | 4 +++- 8 files changed, 27 insertions(+), 73 deletions(-) diff --git a/drivers/clk/starfive/clk-starfive-jh7100-audio.c b/drivers/clk/starfive/clk-starfive-jh7100-audio.c index 1fcf4e62f347..7de23f6749aa 100644 --- a/drivers/clk/starfive/clk-starfive-jh7100-audio.c +++ b/drivers/clk/starfive/clk-starfive-jh7100-audio.c @@ -84,17 +84,6 @@ static const struct jh71x0_clk_data jh7100_audclk_data[] = { JH7100_AUDCLK_AUDIO_12288), }; -static struct clk_hw *jh7100_audclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7100_AUDCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - static int jh7100_audclk_probe(struct platform_device *pdev) { struct jh71x0_clk_priv *priv; @@ -106,6 +95,7 @@ static int jh7100_audclk_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7100_AUDCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -146,7 +136,7 @@ static int jh7100_audclk_probe(struct platform_device *pdev) return ret; } - return devm_of_clk_add_hw_provider(priv->dev, jh7100_audclk_get, priv); + return devm_of_clk_add_hw_provider(priv->dev, jh71x0_clk_get, priv); } static const struct of_device_id jh7100_audclk_match[] = { diff --git a/drivers/clk/starfive/clk-starfive-jh7110-aon.c b/drivers/clk/starfive/clk-starfive-jh7110-aon.c index 418efdad719b..6f67587f4335 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-aon.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-aon.c @@ -54,17 +54,6 @@ static const struct jh71x0_clk_data jh7110_aonclk_data[] = { JH71X0_GATE(JH7110_AONCLK_RTC_CAL, "rtc_cal", 0, JH7110_AONCLK_OSC), }; -static struct clk_hw *jh7110_aonclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7110_AONCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - static int jh7110_aoncrg_probe(struct platform_device *pdev) { struct jh71x0_clk_priv *priv; @@ -78,6 +67,7 @@ static int jh7110_aoncrg_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7110_AONCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -127,7 +117,7 @@ static int jh7110_aoncrg_probe(struct platform_device *pdev) return ret; } - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_aonclk_get, priv); + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); if (ret) return ret; diff --git a/drivers/clk/starfive/clk-starfive-jh7110-isp.c b/drivers/clk/starfive/clk-starfive-jh7110-isp.c index 8c4c3a958a9f..f3fa069db193 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-isp.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-isp.c @@ -75,17 +75,6 @@ static inline int jh7110_isp_top_rst_init(struct jh71x0_clk_priv *priv) return reset_control_deassert(top_rsts); } -static struct clk_hw *jh7110_ispclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7110_ISPCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - #ifdef CONFIG_PM static int jh7110_ispcrg_suspend(struct device *dev) { @@ -126,6 +115,7 @@ static int jh7110_ispcrg_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7110_ISPCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -186,7 +176,7 @@ static int jh7110_ispcrg_probe(struct platform_device *pdev) goto err_exit; } - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_ispclk_get, priv); + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); if (ret) goto err_exit; diff --git a/drivers/clk/starfive/clk-starfive-jh7110-stg.c b/drivers/clk/starfive/clk-starfive-jh7110-stg.c index dafcb7190592..2a5ad0e07d1d 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-stg.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-stg.c @@ -75,17 +75,6 @@ static const struct jh71x0_clk_data jh7110_stgclk_data[] = { JH71X0_GATE(JH7110_STGCLK_DMA1P_AHB, "dma1p_ahb", 0, JH7110_STGCLK_STG_AXIAHB), }; -static struct clk_hw *jh7110_stgclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7110_STGCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - static int jh7110_stgcrg_probe(struct platform_device *pdev) { struct jh71x0_clk_priv *priv; @@ -98,6 +87,7 @@ static int jh7110_stgcrg_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7110_STGCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -145,7 +135,7 @@ static int jh7110_stgcrg_probe(struct platform_device *pdev) return ret; } - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_stgclk_get, priv); + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); if (ret) return ret; diff --git a/drivers/clk/starfive/clk-starfive-jh7110-sys.c b/drivers/clk/starfive/clk-starfive-jh7110-sys.c index 17325f17696f..e9d8168d02b8 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-sys.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-sys.c @@ -323,17 +323,6 @@ static const struct jh71x0_clk_data jh7110_sysclk_data[] __initconst = { JH7110_SYSCLK_OSC), }; -static struct clk_hw *jh7110_sysclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7110_SYSCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - static void jh7110_reset_unregister_adev(void *_adev) { struct auxiliary_device *adev = _adev; @@ -425,6 +414,7 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7110_SYSCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -526,7 +516,7 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev) return ret; } - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_sysclk_get, priv); + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); if (ret) return ret; diff --git a/drivers/clk/starfive/clk-starfive-jh7110-vout.c b/drivers/clk/starfive/clk-starfive-jh7110-vout.c index 04eeed199087..bad20d5d794a 100644 --- a/drivers/clk/starfive/clk-starfive-jh7110-vout.c +++ b/drivers/clk/starfive/clk-starfive-jh7110-vout.c @@ -80,17 +80,6 @@ static int jh7110_vout_top_rst_init(struct jh71x0_clk_priv *priv) return reset_control_deassert(top_rst); } -static struct clk_hw *jh7110_voutclk_get(struct of_phandle_args *clkspec, void *data) -{ - struct jh71x0_clk_priv *priv = data; - unsigned int idx = clkspec->args[0]; - - if (idx < JH7110_VOUTCLK_END) - return &priv->reg[idx].hw; - - return ERR_PTR(-EINVAL); -} - #ifdef CONFIG_PM static int jh7110_voutcrg_suspend(struct device *dev) { @@ -131,6 +120,7 @@ static int jh7110_voutcrg_probe(struct platform_device *pdev) return -ENOMEM; spin_lock_init(&priv->rmw_lock); + priv->num_reg = JH7110_VOUTCLK_END; priv->dev = &pdev->dev; priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -193,7 +183,7 @@ static int jh7110_voutcrg_probe(struct platform_device *pdev) goto err_exit; } - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_voutclk_get, priv); + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); if (ret) goto err_exit; diff --git a/drivers/clk/starfive/clk-starfive-jh71x0.c b/drivers/clk/starfive/clk-starfive-jh71x0.c index aebc99264a0b..80e9157347eb 100644 --- a/drivers/clk/starfive/clk-starfive-jh71x0.c +++ b/drivers/clk/starfive/clk-starfive-jh71x0.c @@ -325,3 +325,15 @@ const struct clk_ops *starfive_jh71x0_clk_ops(u32 max) return &jh71x0_clk_inv_ops; } EXPORT_SYMBOL_GPL(starfive_jh71x0_clk_ops); + +struct clk_hw *jh71x0_clk_get(struct of_phandle_args *clkspec, void *data) +{ + struct jh71x0_clk_priv *priv = data; + unsigned int idx = clkspec->args[0]; + + if (idx < priv->num_reg) + return &priv->reg[idx].hw; + + return ERR_PTR(-EINVAL); +} +EXPORT_SYMBOL_GPL(jh71x0_clk_get); diff --git a/drivers/clk/starfive/clk-starfive-jh71x0.h b/drivers/clk/starfive/clk-starfive-jh71x0.h index e3f441393e48..9d5dec1d5cd1 100644 --- a/drivers/clk/starfive/clk-starfive-jh71x0.h +++ b/drivers/clk/starfive/clk-starfive-jh71x0.h @@ -117,9 +117,11 @@ struct jh71x0_clk_priv { struct clk *original_clk; struct notifier_block pll_clk_nb; struct clk_hw *pll[3]; - struct jh71x0_clk reg[]; + unsigned int num_reg; + struct jh71x0_clk reg[] __counted_by(num_reg); }; const struct clk_ops *starfive_jh71x0_clk_ops(u32 max); +struct clk_hw *jh71x0_clk_get(struct of_phandle_args *clkspec, void *data); #endif -- 2.50.1