forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
kernel/drivers/clk/sprd/common.c
....@@ -40,7 +40,8 @@
4040 const struct sprd_clk_desc *desc)
4141 {
4242 void __iomem *base;
43
- struct device_node *node = pdev->dev.of_node;
43
+ struct device *dev = &pdev->dev;
44
+ struct device_node *node = dev->of_node, *np;
4445 struct regmap *regmap;
4546
4647 if (of_find_property(node, "sprd,syscon", NULL)) {
....@@ -49,11 +50,22 @@
4950 pr_err("%s: failed to get syscon regmap\n", __func__);
5051 return PTR_ERR(regmap);
5152 }
53
+ } else if (of_device_is_compatible(np = of_get_parent(node), "syscon") ||
54
+ (of_node_put(np), 0)) {
55
+ regmap = device_node_to_regmap(np);
56
+ of_node_put(np);
57
+ if (IS_ERR(regmap)) {
58
+ dev_err(dev, "failed to get regmap from its parent.\n");
59
+ return PTR_ERR(regmap);
60
+ }
5261 } else {
53
- base = of_iomap(node, 0);
62
+ base = devm_platform_ioremap_resource(pdev, 0);
63
+ if (IS_ERR(base))
64
+ return PTR_ERR(base);
65
+
5466 regmap = devm_regmap_init_mmio(&pdev->dev, base,
5567 &sprdclk_regmap_config);
56
- if (IS_ERR_OR_NULL(regmap)) {
68
+ if (IS_ERR(regmap)) {
5769 pr_err("failed to init regmap\n");
5870 return PTR_ERR(regmap);
5971 }