clk: samsung: Reduce params count in exynos_register_cpu_clock()
Pass CPU clock data structure to exynos_register_cpu_clock() instead of passing its fields separately there. That simplifies the signature of exynos_register_cpu_clock() and makes it easier to add more fields to struct samsung_cpu_clock later. This style follows the example of samsung_clk_register_pll(). No functional change. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Link: https://lore.kernel.org/r/20240224202053.25313-5-semen.protsenko@linaro.org Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
This commit is contained in:
parent
a36bda74ed
commit
84d42803e4
@ -432,16 +432,19 @@ static int exynos5433_cpuclk_notifier_cb(struct notifier_block *nb,
|
||||
|
||||
/* helper function to register a CPU clock */
|
||||
static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
|
||||
unsigned int lookup_id, const char *name,
|
||||
const struct clk_hw *parent, const struct clk_hw *alt_parent,
|
||||
unsigned long offset, const struct exynos_cpuclk_cfg_data *cfg,
|
||||
unsigned long num_cfgs, unsigned long flags)
|
||||
const struct samsung_cpu_clock *clk_data)
|
||||
{
|
||||
const struct clk_hw *parent, *alt_parent;
|
||||
struct clk_hw **hws;
|
||||
struct exynos_cpuclk *cpuclk;
|
||||
struct clk_init_data init;
|
||||
const char *parent_name;
|
||||
unsigned int num_cfgs;
|
||||
int ret = 0;
|
||||
|
||||
hws = ctx->clk_data.hws;
|
||||
parent = hws[clk_data->parent_id];
|
||||
alt_parent = hws[clk_data->alt_parent_id];
|
||||
if (IS_ERR(parent) || IS_ERR(alt_parent)) {
|
||||
pr_err("%s: invalid parent clock(s)\n", __func__);
|
||||
return -EINVAL;
|
||||
@ -453,7 +456,7 @@ static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
|
||||
|
||||
parent_name = clk_hw_get_name(parent);
|
||||
|
||||
init.name = name;
|
||||
init.name = clk_data->name;
|
||||
init.flags = CLK_SET_RATE_PARENT;
|
||||
init.parent_names = &parent_name;
|
||||
init.num_parents = 1;
|
||||
@ -461,10 +464,10 @@ static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
|
||||
|
||||
cpuclk->alt_parent = alt_parent;
|
||||
cpuclk->hw.init = &init;
|
||||
cpuclk->ctrl_base = ctx->reg_base + offset;
|
||||
cpuclk->ctrl_base = ctx->reg_base + clk_data->offset;
|
||||
cpuclk->lock = &ctx->lock;
|
||||
cpuclk->flags = flags;
|
||||
if (flags & CLK_CPU_HAS_E5433_REGS_LAYOUT)
|
||||
cpuclk->flags = clk_data->flags;
|
||||
if (clk_data->flags & CLK_CPU_HAS_E5433_REGS_LAYOUT)
|
||||
cpuclk->clk_nb.notifier_call = exynos5433_cpuclk_notifier_cb;
|
||||
else
|
||||
cpuclk->clk_nb.notifier_call = exynos_cpuclk_notifier_cb;
|
||||
@ -472,11 +475,16 @@ static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
|
||||
ret = clk_notifier_register(parent->clk, &cpuclk->clk_nb);
|
||||
if (ret) {
|
||||
pr_err("%s: failed to register clock notifier for %s\n",
|
||||
__func__, name);
|
||||
__func__, clk_data->name);
|
||||
goto free_cpuclk;
|
||||
}
|
||||
|
||||
cpuclk->cfg = kmemdup(cfg, sizeof(*cfg) * num_cfgs, GFP_KERNEL);
|
||||
/* Find count of configuration rates in cfg */
|
||||
for (num_cfgs = 0; clk_data->cfg[num_cfgs].prate != 0; )
|
||||
num_cfgs++;
|
||||
|
||||
cpuclk->cfg = kmemdup(clk_data->cfg, sizeof(*clk_data->cfg) * num_cfgs,
|
||||
GFP_KERNEL);
|
||||
if (!cpuclk->cfg) {
|
||||
ret = -ENOMEM;
|
||||
goto unregister_clk_nb;
|
||||
@ -484,11 +492,12 @@ static int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
|
||||
|
||||
ret = clk_hw_register(NULL, &cpuclk->hw);
|
||||
if (ret) {
|
||||
pr_err("%s: could not register cpuclk %s\n", __func__, name);
|
||||
pr_err("%s: could not register cpuclk %s\n", __func__,
|
||||
clk_data->name);
|
||||
goto free_cpuclk_data;
|
||||
}
|
||||
|
||||
samsung_clk_add_lookup(ctx, &cpuclk->hw, lookup_id);
|
||||
samsung_clk_add_lookup(ctx, &cpuclk->hw, clk_data->id);
|
||||
return 0;
|
||||
|
||||
free_cpuclk_data:
|
||||
@ -504,16 +513,7 @@ void __init samsung_clk_register_cpu(struct samsung_clk_provider *ctx,
|
||||
const struct samsung_cpu_clock *list, unsigned int nr_clk)
|
||||
{
|
||||
unsigned int idx;
|
||||
unsigned int num_cfgs;
|
||||
struct clk_hw **hws = ctx->clk_data.hws;
|
||||
|
||||
for (idx = 0; idx < nr_clk; idx++, list++) {
|
||||
/* find count of configuration rates in cfg */
|
||||
for (num_cfgs = 0; list->cfg[num_cfgs].prate != 0; )
|
||||
num_cfgs++;
|
||||
|
||||
exynos_register_cpu_clock(ctx, list->id, list->name,
|
||||
hws[list->parent_id], hws[list->alt_parent_id],
|
||||
list->offset, list->cfg, num_cfgs, list->flags);
|
||||
}
|
||||
for (idx = 0; idx < nr_clk; idx++)
|
||||
exynos_register_cpu_clock(ctx, &list[idx]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user