Skip to content

Commit 838c0a4

Browse files
changhuangliangbebarino
authored andcommitted
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>
1 parent 9003600 commit 838c0a4

8 files changed

+27
-73
lines changed

drivers/clk/starfive/clk-starfive-jh7100-audio.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,6 @@ static const struct jh71x0_clk_data jh7100_audclk_data[] = {
8484
JH7100_AUDCLK_AUDIO_12288),
8585
};
8686

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-
9887
static int jh7100_audclk_probe(struct platform_device *pdev)
9988
{
10089
struct jh71x0_clk_priv *priv;
@@ -106,6 +95,7 @@ static int jh7100_audclk_probe(struct platform_device *pdev)
10695
return -ENOMEM;
10796

10897
spin_lock_init(&priv->rmw_lock);
98+
priv->num_reg = JH7100_AUDCLK_END;
10999
priv->dev = &pdev->dev;
110100
priv->base = devm_platform_ioremap_resource(pdev, 0);
111101
if (IS_ERR(priv->base))
@@ -146,7 +136,7 @@ static int jh7100_audclk_probe(struct platform_device *pdev)
146136
return ret;
147137
}
148138

149-
return devm_of_clk_add_hw_provider(priv->dev, jh7100_audclk_get, priv);
139+
return devm_of_clk_add_hw_provider(priv->dev, jh71x0_clk_get, priv);
150140
}
151141

152142
static const struct of_device_id jh7100_audclk_match[] = {

drivers/clk/starfive/clk-starfive-jh7110-aon.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,6 @@ static const struct jh71x0_clk_data jh7110_aonclk_data[] = {
5454
JH71X0_GATE(JH7110_AONCLK_RTC_CAL, "rtc_cal", 0, JH7110_AONCLK_OSC),
5555
};
5656

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-
6857
static int jh7110_aoncrg_probe(struct platform_device *pdev)
6958
{
7059
struct jh71x0_clk_priv *priv;
@@ -78,6 +67,7 @@ static int jh7110_aoncrg_probe(struct platform_device *pdev)
7867
return -ENOMEM;
7968

8069
spin_lock_init(&priv->rmw_lock);
70+
priv->num_reg = JH7110_AONCLK_END;
8171
priv->dev = &pdev->dev;
8272
priv->base = devm_platform_ioremap_resource(pdev, 0);
8373
if (IS_ERR(priv->base))
@@ -127,7 +117,7 @@ static int jh7110_aoncrg_probe(struct platform_device *pdev)
127117
return ret;
128118
}
129119

130-
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_aonclk_get, priv);
120+
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv);
131121
if (ret)
132122
return ret;
133123

drivers/clk/starfive/clk-starfive-jh7110-isp.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,6 @@ static inline int jh7110_isp_top_rst_init(struct jh71x0_clk_priv *priv)
7575
return reset_control_deassert(top_rsts);
7676
}
7777

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-
8978
#ifdef CONFIG_PM
9079
static int jh7110_ispcrg_suspend(struct device *dev)
9180
{
@@ -126,6 +115,7 @@ static int jh7110_ispcrg_probe(struct platform_device *pdev)
126115
return -ENOMEM;
127116

128117
spin_lock_init(&priv->rmw_lock);
118+
priv->num_reg = JH7110_ISPCLK_END;
129119
priv->dev = &pdev->dev;
130120
priv->base = devm_platform_ioremap_resource(pdev, 0);
131121
if (IS_ERR(priv->base))
@@ -186,7 +176,7 @@ static int jh7110_ispcrg_probe(struct platform_device *pdev)
186176
goto err_exit;
187177
}
188178

189-
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_ispclk_get, priv);
179+
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv);
190180
if (ret)
191181
goto err_exit;
192182

drivers/clk/starfive/clk-starfive-jh7110-stg.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,6 @@ static const struct jh71x0_clk_data jh7110_stgclk_data[] = {
7575
JH71X0_GATE(JH7110_STGCLK_DMA1P_AHB, "dma1p_ahb", 0, JH7110_STGCLK_STG_AXIAHB),
7676
};
7777

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-
8978
static int jh7110_stgcrg_probe(struct platform_device *pdev)
9079
{
9180
struct jh71x0_clk_priv *priv;
@@ -98,6 +87,7 @@ static int jh7110_stgcrg_probe(struct platform_device *pdev)
9887
return -ENOMEM;
9988

10089
spin_lock_init(&priv->rmw_lock);
90+
priv->num_reg = JH7110_STGCLK_END;
10191
priv->dev = &pdev->dev;
10292
priv->base = devm_platform_ioremap_resource(pdev, 0);
10393
if (IS_ERR(priv->base))
@@ -145,7 +135,7 @@ static int jh7110_stgcrg_probe(struct platform_device *pdev)
145135
return ret;
146136
}
147137

148-
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_stgclk_get, priv);
138+
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv);
149139
if (ret)
150140
return ret;
151141

drivers/clk/starfive/clk-starfive-jh7110-sys.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -323,17 +323,6 @@ static const struct jh71x0_clk_data jh7110_sysclk_data[] __initconst = {
323323
JH7110_SYSCLK_OSC),
324324
};
325325

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-
337326
static void jh7110_reset_unregister_adev(void *_adev)
338327
{
339328
struct auxiliary_device *adev = _adev;
@@ -425,6 +414,7 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev)
425414
return -ENOMEM;
426415

427416
spin_lock_init(&priv->rmw_lock);
417+
priv->num_reg = JH7110_SYSCLK_END;
428418
priv->dev = &pdev->dev;
429419
priv->base = devm_platform_ioremap_resource(pdev, 0);
430420
if (IS_ERR(priv->base))
@@ -526,7 +516,7 @@ static int __init jh7110_syscrg_probe(struct platform_device *pdev)
526516
return ret;
527517
}
528518

529-
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_sysclk_get, priv);
519+
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv);
530520
if (ret)
531521
return ret;
532522

drivers/clk/starfive/clk-starfive-jh7110-vout.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,17 +80,6 @@ static int jh7110_vout_top_rst_init(struct jh71x0_clk_priv *priv)
8080
return reset_control_deassert(top_rst);
8181
}
8282

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-
9483
#ifdef CONFIG_PM
9584
static int jh7110_voutcrg_suspend(struct device *dev)
9685
{
@@ -131,6 +120,7 @@ static int jh7110_voutcrg_probe(struct platform_device *pdev)
131120
return -ENOMEM;
132121

133122
spin_lock_init(&priv->rmw_lock);
123+
priv->num_reg = JH7110_VOUTCLK_END;
134124
priv->dev = &pdev->dev;
135125
priv->base = devm_platform_ioremap_resource(pdev, 0);
136126
if (IS_ERR(priv->base))
@@ -193,7 +183,7 @@ static int jh7110_voutcrg_probe(struct platform_device *pdev)
193183
goto err_exit;
194184
}
195185

196-
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh7110_voutclk_get, priv);
186+
ret = devm_of_clk_add_hw_provider(&pdev->dev, jh71x0_clk_get, priv);
197187
if (ret)
198188
goto err_exit;
199189

drivers/clk/starfive/clk-starfive-jh71x0.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,15 @@ const struct clk_ops *starfive_jh71x0_clk_ops(u32 max)
325325
return &jh71x0_clk_inv_ops;
326326
}
327327
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);

drivers/clk/starfive/clk-starfive-jh71x0.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ struct jh71x0_clk_priv {
117117
struct clk *original_clk;
118118
struct notifier_block pll_clk_nb;
119119
struct clk_hw *pll[3];
120-
struct jh71x0_clk reg[];
120+
unsigned int num_reg;
121+
struct jh71x0_clk reg[] __counted_by(num_reg);
121122
};
122123

123124
const struct clk_ops *starfive_jh71x0_clk_ops(u32 max);
125+
struct clk_hw *jh71x0_clk_get(struct of_phandle_args *clkspec, void *data);
124126

125127
#endif

0 commit comments

Comments
 (0)