Skip to content

Commit fc51bad

Browse files
Harry Austenbebarino
authored andcommitted
clk: clocking-wizard: use devres versions of clk_hw API
Use device managed versions of the clk_hw API, entirely removing the need for the driver's remove() callback and greatly simplifying the probe() function's error paths. Signed-off-by: Harry Austen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent bb48792 commit fc51bad

File tree

1 file changed

+11
-41
lines changed

1 file changed

+11
-41
lines changed

drivers/clk/xilinx/clk-xlnx-clock-wizard.c

Lines changed: 11 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ static int clk_wzrd_probe(struct platform_device *pdev)
10821082
clk_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_mul", dev_name(&pdev->dev));
10831083
if (!clk_name)
10841084
return -ENOMEM;
1085-
clk_wzrd->clks_internal[wzrd_clk_mul] = clk_hw_register_fixed_factor
1085+
clk_wzrd->clks_internal[wzrd_clk_mul] = devm_clk_hw_register_fixed_factor
10861086
(&pdev->dev, clk_name,
10871087
__clk_get_name(clk_wzrd->clk_in1),
10881088
0, mult, div);
@@ -1092,10 +1092,8 @@ static int clk_wzrd_probe(struct platform_device *pdev)
10921092
}
10931093

10941094
clk_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_mul_div", dev_name(&pdev->dev));
1095-
if (!clk_name) {
1096-
ret = -ENOMEM;
1097-
goto err_rm_int_clk;
1098-
}
1095+
if (!clk_name)
1096+
return -ENOMEM;
10991097

11001098
if (is_versal) {
11011099
edged = !!(readl(clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 20)) &
@@ -1110,30 +1108,27 @@ static int clk_wzrd_probe(struct platform_device *pdev)
11101108

11111109
clk_mul_name = clk_hw_get_name(clk_wzrd->clks_internal[wzrd_clk_mul]);
11121110
clk_wzrd->clks_internal[wzrd_clk_mul_div] =
1113-
clk_hw_register_fixed_factor(&pdev->dev, clk_name,
1114-
clk_mul_name, 0, 1, div);
1111+
devm_clk_hw_register_fixed_factor(&pdev->dev, clk_name,
1112+
clk_mul_name, 0, 1, div);
11151113
} else {
11161114
ctrl_reg = clk_wzrd->base + WZRD_CLK_CFG_REG(is_versal, 0);
1117-
clk_wzrd->clks_internal[wzrd_clk_mul_div] = clk_hw_register_divider
1115+
clk_wzrd->clks_internal[wzrd_clk_mul_div] = devm_clk_hw_register_divider
11181116
(&pdev->dev, clk_name,
11191117
clk_hw_get_name(clk_wzrd->clks_internal[wzrd_clk_mul]),
11201118
flags, ctrl_reg, 0, 8, CLK_DIVIDER_ONE_BASED |
11211119
CLK_DIVIDER_ALLOW_ZERO, &clkwzrd_lock);
11221120
}
11231121
if (IS_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div])) {
11241122
dev_err(&pdev->dev, "unable to register divider clock\n");
1125-
ret = PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div]);
1126-
goto err_rm_int_clk;
1123+
return PTR_ERR(clk_wzrd->clks_internal[wzrd_clk_mul_div]);
11271124
}
11281125

11291126
/* register div per output */
11301127
for (i = nr_outputs - 1; i >= 0 ; i--) {
11311128
clkout_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
11321129
"%s_out%d", dev_name(&pdev->dev), i);
1133-
if (!clkout_name) {
1134-
ret = -ENOMEM;
1135-
goto err_rm_int_clk;
1136-
}
1130+
if (!clkout_name)
1131+
return -ENOMEM;
11371132

11381133
if (is_versal) {
11391134
clk_wzrd->clk_data.hws[i] = clk_wzrd_ver_register_divider
@@ -1165,20 +1160,15 @@ static int clk_wzrd_probe(struct platform_device *pdev)
11651160
DIV_O, &clkwzrd_lock);
11661161
}
11671162
if (IS_ERR(clk_wzrd->clk_data.hws[i])) {
1168-
int j;
1169-
1170-
for (j = i + 1; j < nr_outputs; j++)
1171-
clk_hw_unregister(clk_wzrd->clk_data.hws[j]);
11721163
dev_err(&pdev->dev,
11731164
"unable to register divider clock\n");
1174-
ret = PTR_ERR(clk_wzrd->clk_data.hws[i]);
1175-
goto err_rm_int_clks;
1165+
return PTR_ERR(clk_wzrd->clk_data.hws[i]);
11761166
}
11771167
}
11781168

11791169
out:
11801170
clk_wzrd->clk_data.num = nr_outputs;
1181-
ret = of_clk_add_hw_provider(pdev->dev.of_node, of_clk_hw_onecell_get, &clk_wzrd->clk_data);
1171+
ret = devm_of_clk_add_hw_provider(&pdev->dev, of_clk_hw_onecell_get, &clk_wzrd->clk_data);
11821172
if (ret) {
11831173
dev_err(&pdev->dev, "unable to register clock provider\n");
11841174
return ret;
@@ -1201,25 +1191,6 @@ static int clk_wzrd_probe(struct platform_device *pdev)
12011191
}
12021192

12031193
return 0;
1204-
1205-
err_rm_int_clks:
1206-
clk_hw_unregister(clk_wzrd->clks_internal[1]);
1207-
err_rm_int_clk:
1208-
clk_hw_unregister(clk_wzrd->clks_internal[0]);
1209-
return ret;
1210-
}
1211-
1212-
static void clk_wzrd_remove(struct platform_device *pdev)
1213-
{
1214-
int i;
1215-
struct clk_wzrd *clk_wzrd = platform_get_drvdata(pdev);
1216-
1217-
of_clk_del_provider(pdev->dev.of_node);
1218-
1219-
for (i = 0; i < WZRD_NUM_OUTPUTS; i++)
1220-
clk_hw_unregister(clk_wzrd->clk_data.hws[i]);
1221-
for (i = 0; i < wzrd_clk_int_max; i++)
1222-
clk_hw_unregister(clk_wzrd->clks_internal[i]);
12231194
}
12241195

12251196
static const struct of_device_id clk_wzrd_ids[] = {
@@ -1238,7 +1209,6 @@ static struct platform_driver clk_wzrd_driver = {
12381209
.pm = &clk_wzrd_dev_pm_ops,
12391210
},
12401211
.probe = clk_wzrd_probe,
1241-
.remove = clk_wzrd_remove,
12421212
};
12431213
module_platform_driver(clk_wzrd_driver);
12441214

0 commit comments

Comments
 (0)