Skip to content

Commit 8e742c6

Browse files
Harry Austenbebarino
authored andcommitted
clk: clocking-wizard: move dynamic reconfig setup behind flag
Xilinx clocking wizard IP core's dynamic reconfiguration support is optionally enabled at build time. Use the new boolean devicetree property to indicate whether the hardware supports this feature or not. Signed-off-by: Harry Austen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent 698a3e3 commit 8e742c6

File tree

1 file changed

+38
-35
lines changed

1 file changed

+38
-35
lines changed

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

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,20 +1146,6 @@ static int clk_wzrd_probe(struct platform_device *pdev)
11461146
if (IS_ERR(clk_wzrd->base))
11471147
return PTR_ERR(clk_wzrd->base);
11481148

1149-
ret = of_property_read_u32(np, "xlnx,speed-grade", &clk_wzrd->speed_grade);
1150-
if (!ret) {
1151-
if (clk_wzrd->speed_grade < 1 || clk_wzrd->speed_grade > 3) {
1152-
dev_warn(&pdev->dev, "invalid speed grade '%d'\n",
1153-
clk_wzrd->speed_grade);
1154-
clk_wzrd->speed_grade = 0;
1155-
}
1156-
}
1157-
1158-
clk_wzrd->clk_in1 = devm_clk_get(&pdev->dev, "clk_in1");
1159-
if (IS_ERR(clk_wzrd->clk_in1))
1160-
return dev_err_probe(&pdev->dev, PTR_ERR(clk_wzrd->clk_in1),
1161-
"clk_in1 not found\n");
1162-
11631149
clk_wzrd->axi_clk = devm_clk_get_enabled(&pdev->dev, "s_axi_aclk");
11641150
if (IS_ERR(clk_wzrd->axi_clk))
11651151
return dev_err_probe(&pdev->dev, PTR_ERR(clk_wzrd->axi_clk),
@@ -1170,31 +1156,48 @@ static int clk_wzrd_probe(struct platform_device *pdev)
11701156
return -EINVAL;
11711157
}
11721158

1173-
ret = clk_wzrd_register_output_clocks(&pdev->dev, nr_outputs);
1174-
if (ret)
1175-
return ret;
1176-
1177-
clk_wzrd->clk_data.num = nr_outputs;
1178-
ret = devm_of_clk_add_hw_provider(&pdev->dev, of_clk_hw_onecell_get, &clk_wzrd->clk_data);
1179-
if (ret) {
1180-
dev_err(&pdev->dev, "unable to register clock provider\n");
1181-
return ret;
1182-
}
1159+
if (!of_property_present(np, "xlnx,static-config")) {
1160+
ret = of_property_read_u32(np, "xlnx,speed-grade", &clk_wzrd->speed_grade);
1161+
if (!ret) {
1162+
if (clk_wzrd->speed_grade < 1 || clk_wzrd->speed_grade > 3) {
1163+
dev_warn(&pdev->dev, "invalid speed grade '%d'\n",
1164+
clk_wzrd->speed_grade);
1165+
clk_wzrd->speed_grade = 0;
1166+
}
1167+
}
11831168

1184-
if (clk_wzrd->speed_grade) {
1185-
clk_wzrd->nb.notifier_call = clk_wzrd_clk_notifier;
1169+
clk_wzrd->clk_in1 = devm_clk_get(&pdev->dev, "clk_in1");
1170+
if (IS_ERR(clk_wzrd->clk_in1))
1171+
return dev_err_probe(&pdev->dev, PTR_ERR(clk_wzrd->clk_in1),
1172+
"clk_in1 not found\n");
11861173

1187-
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->clk_in1,
1188-
&clk_wzrd->nb);
1174+
ret = clk_wzrd_register_output_clocks(&pdev->dev, nr_outputs);
11891175
if (ret)
1190-
dev_warn(&pdev->dev,
1191-
"unable to register clock notifier\n");
1176+
return ret;
1177+
1178+
clk_wzrd->clk_data.num = nr_outputs;
1179+
ret = devm_of_clk_add_hw_provider(&pdev->dev, of_clk_hw_onecell_get,
1180+
&clk_wzrd->clk_data);
1181+
if (ret) {
1182+
dev_err(&pdev->dev, "unable to register clock provider\n");
1183+
return ret;
1184+
}
11921185

1193-
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->axi_clk,
1194-
&clk_wzrd->nb);
1195-
if (ret)
1196-
dev_warn(&pdev->dev,
1197-
"unable to register clock notifier\n");
1186+
if (clk_wzrd->speed_grade) {
1187+
clk_wzrd->nb.notifier_call = clk_wzrd_clk_notifier;
1188+
1189+
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->clk_in1,
1190+
&clk_wzrd->nb);
1191+
if (ret)
1192+
dev_warn(&pdev->dev,
1193+
"unable to register clock notifier\n");
1194+
1195+
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->axi_clk,
1196+
&clk_wzrd->nb);
1197+
if (ret)
1198+
dev_warn(&pdev->dev,
1199+
"unable to register clock notifier\n");
1200+
}
11981201
}
11991202

12001203
return 0;

0 commit comments

Comments
 (0)