mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00
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>
This commit is contained in:
parent
9003600949
commit
838c0a41d7
@ -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[] = {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user