Skip to content

Commit ecb1f1f

Browse files
mszyprowSylwester Nawrocki
authored andcommitted
clk: samsung: Convert common drivers to the new clk_hw API
Clock providers should use the new struct clk_hw based API, so convert Samsung clock providers and their helper functions to the new approach. Signed-off-by: Marek Szyprowski <[email protected]> Reviewed-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Sylwester Nawrocki <[email protected]>
1 parent 7288de7 commit ecb1f1f

File tree

5 files changed

+92
-105
lines changed

5 files changed

+92
-105
lines changed

drivers/clk/samsung/clk-cpu.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,6 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
411411
struct exynos_cpuclk *cpuclk;
412412
struct clk_init_data init;
413413
struct clk *parent_clk;
414-
struct clk *clk;
415414
int ret = 0;
416415

417416
cpuclk = kzalloc(sizeof(*cpuclk), GFP_KERNEL);
@@ -464,14 +463,13 @@ int __init exynos_register_cpu_clock(struct samsung_clk_provider *ctx,
464463
goto unregister_clk_nb;
465464
}
466465

467-
clk = clk_register(NULL, &cpuclk->hw);
468-
if (IS_ERR(clk)) {
466+
ret = clk_hw_register(NULL, &cpuclk->hw);
467+
if (ret) {
469468
pr_err("%s: could not register cpuclk %s\n", __func__, name);
470-
ret = PTR_ERR(clk);
471469
goto free_cpuclk_data;
472470
}
473471

474-
samsung_clk_add_lookup(ctx, clk, lookup_id);
472+
samsung_clk_add_lookup(ctx, &cpuclk->hw, lookup_id);
475473
return 0;
476474

477475
free_cpuclk_data:

drivers/clk/samsung/clk-pll.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,6 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
12441244
void __iomem *base)
12451245
{
12461246
struct samsung_clk_pll *pll;
1247-
struct clk *clk;
12481247
struct clk_init_data init;
12491248
int ret, len;
12501249

@@ -1376,20 +1375,21 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
13761375
pll->lock_reg = base + pll_clk->lock_offset;
13771376
pll->con_reg = base + pll_clk->con_offset;
13781377

1379-
clk = clk_register(NULL, &pll->hw);
1380-
if (IS_ERR(clk)) {
1381-
pr_err("%s: failed to register pll clock %s : %ld\n",
1382-
__func__, pll_clk->name, PTR_ERR(clk));
1378+
ret = clk_hw_register(NULL, &pll->hw);
1379+
if (ret) {
1380+
pr_err("%s: failed to register pll clock %s : %d\n",
1381+
__func__, pll_clk->name, ret);
13831382
kfree(pll);
13841383
return;
13851384
}
13861385

1387-
samsung_clk_add_lookup(ctx, clk, pll_clk->id);
1386+
samsung_clk_add_lookup(ctx, &pll->hw, pll_clk->id);
13881387

13891388
if (!pll_clk->alias)
13901389
return;
13911390

1392-
ret = clk_register_clkdev(clk, pll_clk->alias, pll_clk->dev_name);
1391+
ret = clk_hw_register_clkdev(&pll->hw, pll_clk->alias,
1392+
pll_clk->dev_name);
13931393
if (ret)
13941394
pr_err("%s: failed to register lookup for %s : %d",
13951395
__func__, pll_clk->name, ret);

drivers/clk/samsung/clk-s3c2410-dclk.c

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ static const struct clk_ops s3c24xx_clkout_ops = {
9090
.determine_rate = __clk_mux_determine_rate,
9191
};
9292

93-
static struct clk *s3c24xx_register_clkout(struct device *dev, const char *name,
94-
const char **parent_names, u8 num_parents,
93+
static struct clk_hw *s3c24xx_register_clkout(struct device *dev,
94+
const char *name, const char **parent_names, u8 num_parents,
9595
u8 shift, u32 mask)
9696
{
9797
struct s3c24xx_clkout *clkout;
98-
struct clk *clk;
9998
struct clk_init_data init;
99+
int ret;
100100

101101
/* allocate the clkout */
102102
clkout = kzalloc(sizeof(*clkout), GFP_KERNEL);
@@ -113,9 +113,11 @@ static struct clk *s3c24xx_register_clkout(struct device *dev, const char *name,
113113
clkout->mask = mask;
114114
clkout->hw.init = &init;
115115

116-
clk = clk_register(dev, &clkout->hw);
116+
ret = clk_hw_register(dev, &clkout->hw);
117+
if (ret)
118+
return ERR_PTR(ret);
117119

118-
return clk;
120+
return &clkout->hw;
119121
}
120122

121123
/*
@@ -125,11 +127,12 @@ static struct clk *s3c24xx_register_clkout(struct device *dev, const char *name,
125127
struct s3c24xx_dclk {
126128
struct device *dev;
127129
void __iomem *base;
128-
struct clk_onecell_data clk_data;
129130
struct notifier_block dclk0_div_change_nb;
130131
struct notifier_block dclk1_div_change_nb;
131132
spinlock_t dclk_lock;
132133
unsigned long reg_save;
134+
/* clk_data must be the last entry in the structure */
135+
struct clk_hw_onecell_data clk_data;
133136
};
134137

135138
#define to_s3c24xx_dclk0(x) \
@@ -240,28 +243,23 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev)
240243
{
241244
struct s3c24xx_dclk *s3c24xx_dclk;
242245
struct resource *mem;
243-
struct clk **clk_table;
244246
struct s3c24xx_dclk_drv_data *dclk_variant;
247+
struct clk_hw **clk_table;
245248
int ret, i;
246249

247-
s3c24xx_dclk = devm_kzalloc(&pdev->dev, sizeof(*s3c24xx_dclk),
248-
GFP_KERNEL);
250+
s3c24xx_dclk = devm_kzalloc(&pdev->dev, sizeof(*s3c24xx_dclk) +
251+
sizeof(*s3c24xx_dclk->clk_data.hws) * DCLK_MAX_CLKS,
252+
GFP_KERNEL);
249253
if (!s3c24xx_dclk)
250254
return -ENOMEM;
251255

256+
clk_table = s3c24xx_dclk->clk_data.hws;
257+
252258
s3c24xx_dclk->dev = &pdev->dev;
259+
s3c24xx_dclk->clk_data.num = DCLK_MAX_CLKS;
253260
platform_set_drvdata(pdev, s3c24xx_dclk);
254261
spin_lock_init(&s3c24xx_dclk->dclk_lock);
255262

256-
clk_table = devm_kzalloc(&pdev->dev,
257-
sizeof(struct clk *) * DCLK_MAX_CLKS,
258-
GFP_KERNEL);
259-
if (!clk_table)
260-
return -ENOMEM;
261-
262-
s3c24xx_dclk->clk_data.clks = clk_table;
263-
s3c24xx_dclk->clk_data.clk_num = DCLK_MAX_CLKS;
264-
265263
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
266264
s3c24xx_dclk->base = devm_ioremap_resource(&pdev->dev, mem);
267265
if (IS_ERR(s3c24xx_dclk->base))
@@ -271,29 +269,29 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev)
271269
platform_get_device_id(pdev)->driver_data;
272270

273271

274-
clk_table[MUX_DCLK0] = clk_register_mux(&pdev->dev, "mux_dclk0",
272+
clk_table[MUX_DCLK0] = clk_hw_register_mux(&pdev->dev, "mux_dclk0",
275273
dclk_variant->mux_parent_names,
276274
dclk_variant->mux_num_parents, 0,
277275
s3c24xx_dclk->base, 1, 1, 0,
278276
&s3c24xx_dclk->dclk_lock);
279-
clk_table[MUX_DCLK1] = clk_register_mux(&pdev->dev, "mux_dclk1",
277+
clk_table[MUX_DCLK1] = clk_hw_register_mux(&pdev->dev, "mux_dclk1",
280278
dclk_variant->mux_parent_names,
281279
dclk_variant->mux_num_parents, 0,
282280
s3c24xx_dclk->base, 17, 1, 0,
283281
&s3c24xx_dclk->dclk_lock);
284282

285-
clk_table[DIV_DCLK0] = clk_register_divider(&pdev->dev, "div_dclk0",
283+
clk_table[DIV_DCLK0] = clk_hw_register_divider(&pdev->dev, "div_dclk0",
286284
"mux_dclk0", 0, s3c24xx_dclk->base,
287285
4, 4, 0, &s3c24xx_dclk->dclk_lock);
288-
clk_table[DIV_DCLK1] = clk_register_divider(&pdev->dev, "div_dclk1",
286+
clk_table[DIV_DCLK1] = clk_hw_register_divider(&pdev->dev, "div_dclk1",
289287
"mux_dclk1", 0, s3c24xx_dclk->base,
290288
20, 4, 0, &s3c24xx_dclk->dclk_lock);
291289

292-
clk_table[GATE_DCLK0] = clk_register_gate(&pdev->dev, "gate_dclk0",
290+
clk_table[GATE_DCLK0] = clk_hw_register_gate(&pdev->dev, "gate_dclk0",
293291
"div_dclk0", CLK_SET_RATE_PARENT,
294292
s3c24xx_dclk->base, 0, 0,
295293
&s3c24xx_dclk->dclk_lock);
296-
clk_table[GATE_DCLK1] = clk_register_gate(&pdev->dev, "gate_dclk1",
294+
clk_table[GATE_DCLK1] = clk_hw_register_gate(&pdev->dev, "gate_dclk1",
297295
"div_dclk1", CLK_SET_RATE_PARENT,
298296
s3c24xx_dclk->base, 16, 0,
299297
&s3c24xx_dclk->dclk_lock);
@@ -312,15 +310,16 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev)
312310
goto err_clk_register;
313311
}
314312

315-
ret = clk_register_clkdev(clk_table[MUX_DCLK0], "dclk0", NULL);
313+
ret = clk_hw_register_clkdev(clk_table[MUX_DCLK0], "dclk0", NULL);
316314
if (!ret)
317-
ret = clk_register_clkdev(clk_table[MUX_DCLK1], "dclk1", NULL);
315+
ret = clk_hw_register_clkdev(clk_table[MUX_DCLK1], "dclk1",
316+
NULL);
318317
if (!ret)
319-
ret = clk_register_clkdev(clk_table[MUX_CLKOUT0],
320-
"clkout0", NULL);
318+
ret = clk_hw_register_clkdev(clk_table[MUX_CLKOUT0],
319+
"clkout0", NULL);
321320
if (!ret)
322-
ret = clk_register_clkdev(clk_table[MUX_CLKOUT1],
323-
"clkout1", NULL);
321+
ret = clk_hw_register_clkdev(clk_table[MUX_CLKOUT1],
322+
"clkout1", NULL);
324323
if (ret) {
325324
dev_err(&pdev->dev, "failed to register aliases, %d\n", ret);
326325
goto err_clk_register;
@@ -332,42 +331,42 @@ static int s3c24xx_dclk_probe(struct platform_device *pdev)
332331
s3c24xx_dclk->dclk1_div_change_nb.notifier_call =
333332
s3c24xx_dclk1_div_notify;
334333

335-
ret = clk_notifier_register(clk_table[DIV_DCLK0],
334+
ret = clk_notifier_register(clk_table[DIV_DCLK0]->clk,
336335
&s3c24xx_dclk->dclk0_div_change_nb);
337336
if (ret)
338337
goto err_clk_register;
339338

340-
ret = clk_notifier_register(clk_table[DIV_DCLK1],
339+
ret = clk_notifier_register(clk_table[DIV_DCLK1]->clk,
341340
&s3c24xx_dclk->dclk1_div_change_nb);
342341
if (ret)
343342
goto err_dclk_notify;
344343

345344
return 0;
346345

347346
err_dclk_notify:
348-
clk_notifier_unregister(clk_table[DIV_DCLK0],
347+
clk_notifier_unregister(clk_table[DIV_DCLK0]->clk,
349348
&s3c24xx_dclk->dclk0_div_change_nb);
350349
err_clk_register:
351350
for (i = 0; i < DCLK_MAX_CLKS; i++)
352351
if (clk_table[i] && !IS_ERR(clk_table[i]))
353-
clk_unregister(clk_table[i]);
352+
clk_hw_unregister(clk_table[i]);
354353

355354
return ret;
356355
}
357356

358357
static int s3c24xx_dclk_remove(struct platform_device *pdev)
359358
{
360359
struct s3c24xx_dclk *s3c24xx_dclk = platform_get_drvdata(pdev);
361-
struct clk **clk_table = s3c24xx_dclk->clk_data.clks;
360+
struct clk_hw **clk_table = s3c24xx_dclk->clk_data.hws;
362361
int i;
363362

364-
clk_notifier_unregister(clk_table[DIV_DCLK1],
363+
clk_notifier_unregister(clk_table[DIV_DCLK1]->clk,
365364
&s3c24xx_dclk->dclk1_div_change_nb);
366-
clk_notifier_unregister(clk_table[DIV_DCLK0],
365+
clk_notifier_unregister(clk_table[DIV_DCLK0]->clk,
367366
&s3c24xx_dclk->dclk0_div_change_nb);
368367

369368
for (i = 0; i < DCLK_MAX_CLKS; i++)
370-
clk_unregister(clk_table[i]);
369+
clk_hw_unregister(clk_table[i]);
371370

372371
return 0;
373372
}

0 commit comments

Comments
 (0)