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 <changhuang.liang@starfivetech.com>
Link: https://lore.kernel.org/r/20250114081300.36600-1-changhuang.liang@starfivetech.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by Changhuang Liang and committed by Stephen Boyd 838c0a41 90036009

+27 -73
+2 -12
drivers/clk/starfive/clk-starfive-jh7100-audio.c
··· 84 84 JH7100_AUDCLK_AUDIO_12288), 85 85 }; 86 86 87 - static struct clk_hw *jh7100_audclk_get(struct of_phandle_args *clkspec, void *data) 88 - { 89 - struct jh71x0_clk_priv *priv = data; 90 - unsigned int idx = clkspec->args[0]; 91 - 92 - if (idx < JH7100_AUDCLK_END) 93 - return &priv->reg[idx].hw; 94 - 95 - return ERR_PTR(-EINVAL); 96 - } 97 - 98 87 static int jh7100_audclk_probe(struct platform_device *pdev) 99 88 { 100 89 struct jh71x0_clk_priv *priv; ··· 95 106 return -ENOMEM; 96 107 97 108 spin_lock_init(&priv->rmw_lock); 109 + priv->num_reg = JH7100_AUDCLK_END; 98 110 priv->dev = &pdev->dev; 99 111 priv->base = devm_platform_ioremap_resource(pdev, 0); 100 112 if (IS_ERR(priv->base)) ··· 136 146 return ret; 137 147 } 138 148 139 - return devm_of_clk_add_hw_provider(priv->dev, jh7100_audclk_get, priv); 149 + return devm_of_clk_add_hw_provider(priv->dev, jh71x0_clk_get, priv); 140 150 } 141 151 142 152 static const struct of_device_id jh7100_audclk_match[] = {
+2 -12
drivers/clk/starfive/clk-starfive-jh7110-aon.c
··· 54 54 JH71X0_GATE(JH7110_AONCLK_RTC_CAL, "rtc_cal", 0, JH7110_AONCLK_OSC), 55 55 }; 56 56 57 - static struct clk_hw *jh7110_aonclk_get(struct of_phandle_args *clkspec, void *data) 58 - { 59 - struct jh71x0_clk_priv *priv = data; 60 - unsigned int idx = clkspec->args[0]; 61 - 62 - if (idx < JH7110_AONCLK_END) 63 - return &priv->reg[idx].hw; 64 - 65 - return ERR_PTR(-EINVAL); 66 - } 67 - 68 57 static int jh7110_aoncrg_probe(struct platform_device *pdev) 69 58 { 70 59 struct jh71x0_clk_priv *priv; ··· 67 78 return -ENOMEM; 68 79 69 80 spin_lock_init(&priv->rmw_lock); 81 + priv->num_reg = JH7110_AONCLK_END; 70 82 priv->dev = &pdev->dev; 71 83 priv->base = devm_platform_ioremap_resource(pdev, 0); 72 84 if (IS_ERR(priv->base)) ··· 117 127 return ret; 118 128 } 119 129 120 - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_aonclk_get, priv); 130 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); 121 131 if (ret) 122 132 return ret; 123 133
+2 -12
drivers/clk/starfive/clk-starfive-jh7110-isp.c
··· 75 75 return reset_control_deassert(top_rsts); 76 76 } 77 77 78 - static struct clk_hw *jh7110_ispclk_get(struct of_phandle_args *clkspec, void *data) 79 - { 80 - struct jh71x0_clk_priv *priv = data; 81 - unsigned int idx = clkspec->args[0]; 82 - 83 - if (idx < JH7110_ISPCLK_END) 84 - return &priv->reg[idx].hw; 85 - 86 - return ERR_PTR(-EINVAL); 87 - } 88 - 89 78 #ifdef CONFIG_PM 90 79 static int jh7110_ispcrg_suspend(struct device *dev) 91 80 { ··· 115 126 return -ENOMEM; 116 127 117 128 spin_lock_init(&priv->rmw_lock); 129 + priv->num_reg = JH7110_ISPCLK_END; 118 130 priv->dev = &pdev->dev; 119 131 priv->base = devm_platform_ioremap_resource(pdev, 0); 120 132 if (IS_ERR(priv->base)) ··· 176 186 goto err_exit; 177 187 } 178 188 179 - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_ispclk_get, priv); 189 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); 180 190 if (ret) 181 191 goto err_exit; 182 192
+2 -12
drivers/clk/starfive/clk-starfive-jh7110-stg.c
··· 75 75 JH71X0_GATE(JH7110_STGCLK_DMA1P_AHB, "dma1p_ahb", 0, JH7110_STGCLK_STG_AXIAHB), 76 76 }; 77 77 78 - static struct clk_hw *jh7110_stgclk_get(struct of_phandle_args *clkspec, void *data) 79 - { 80 - struct jh71x0_clk_priv *priv = data; 81 - unsigned int idx = clkspec->args[0]; 82 - 83 - if (idx < JH7110_STGCLK_END) 84 - return &priv->reg[idx].hw; 85 - 86 - return ERR_PTR(-EINVAL); 87 - } 88 - 89 78 static int jh7110_stgcrg_probe(struct platform_device *pdev) 90 79 { 91 80 struct jh71x0_clk_priv *priv; ··· 87 98 return -ENOMEM; 88 99 89 100 spin_lock_init(&priv->rmw_lock); 101 + priv->num_reg = JH7110_STGCLK_END; 90 102 priv->dev = &pdev->dev; 91 103 priv->base = devm_platform_ioremap_resource(pdev, 0); 92 104 if (IS_ERR(priv->base)) ··· 135 145 return ret; 136 146 } 137 147 138 - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_stgclk_get, priv); 148 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); 139 149 if (ret) 140 150 return ret; 141 151
+2 -12
drivers/clk/starfive/clk-starfive-jh7110-sys.c
··· 323 323 JH7110_SYSCLK_OSC), 324 324 }; 325 325 326 - static struct clk_hw *jh7110_sysclk_get(struct of_phandle_args *clkspec, void *data) 327 - { 328 - struct jh71x0_clk_priv *priv = data; 329 - unsigned int idx = clkspec->args[0]; 330 - 331 - if (idx < JH7110_SYSCLK_END) 332 - return &priv->reg[idx].hw; 333 - 334 - return ERR_PTR(-EINVAL); 335 - } 336 - 337 326 static void jh7110_reset_unregister_adev(void *_adev) 338 327 { 339 328 struct auxiliary_device *adev = _adev; ··· 414 425 return -ENOMEM; 415 426 416 427 spin_lock_init(&priv->rmw_lock); 428 + priv->num_reg = JH7110_SYSCLK_END; 417 429 priv->dev = &pdev->dev; 418 430 priv->base = devm_platform_ioremap_resource(pdev, 0); 419 431 if (IS_ERR(priv->base)) ··· 516 526 return ret; 517 527 } 518 528 519 - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_sysclk_get, priv); 529 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); 520 530 if (ret) 521 531 return ret; 522 532
+2 -12
drivers/clk/starfive/clk-starfive-jh7110-vout.c
··· 80 80 return reset_control_deassert(top_rst); 81 81 } 82 82 83 - static struct clk_hw *jh7110_voutclk_get(struct of_phandle_args *clkspec, void *data) 84 - { 85 - struct jh71x0_clk_priv *priv = data; 86 - unsigned int idx = clkspec->args[0]; 87 - 88 - if (idx < JH7110_VOUTCLK_END) 89 - return &priv->reg[idx].hw; 90 - 91 - return ERR_PTR(-EINVAL); 92 - } 93 - 94 83 #ifdef CONFIG_PM 95 84 static int jh7110_voutcrg_suspend(struct device *dev) 96 85 { ··· 120 131 return -ENOMEM; 121 132 122 133 spin_lock_init(&priv->rmw_lock); 134 + priv->num_reg = JH7110_VOUTCLK_END; 123 135 priv->dev = &pdev->dev; 124 136 priv->base = devm_platform_ioremap_resource(pdev, 0); 125 137 if (IS_ERR(priv->base)) ··· 183 193 goto err_exit; 184 194 } 185 195 186 - ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_voutclk_get, priv); 196 + ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv); 187 197 if (ret) 188 198 goto err_exit; 189 199
+12
drivers/clk/starfive/clk-starfive-jh71x0.c
··· 325 325 return &jh71x0_clk_inv_ops; 326 326 } 327 327 EXPORT_SYMBOL_GPL(starfive_jh71x0_clk_ops); 328 + 329 + struct clk_hw *jh71x0_clk_get(struct of_phandle_args *clkspec, void *data) 330 + { 331 + struct jh71x0_clk_priv *priv = data; 332 + unsigned int idx = clkspec->args[0]; 333 + 334 + if (idx < priv->num_reg) 335 + return &priv->reg[idx].hw; 336 + 337 + return ERR_PTR(-EINVAL); 338 + } 339 + EXPORT_SYMBOL_GPL(jh71x0_clk_get);
+3 -1
drivers/clk/starfive/clk-starfive-jh71x0.h
··· 117 117 struct clk *original_clk; 118 118 struct notifier_block pll_clk_nb; 119 119 struct clk_hw *pll[3]; 120 - struct jh71x0_clk reg[]; 120 + unsigned int num_reg; 121 + struct jh71x0_clk reg[] __counted_by(num_reg); 121 122 }; 122 123 123 124 const struct clk_ops *starfive_jh71x0_clk_ops(u32 max); 125 + struct clk_hw *jh71x0_clk_get(struct of_phandle_args *clkspec, void *data); 124 126 125 127 #endif