clk: sprd: support to get regmap from parent node
authorChunyan Zhang <chunyan.zhang@unisoc.com>
Wed, 4 Mar 2020 07:27:29 +0000 (15:27 +0800)
committerStephen Boyd <sboyd@kernel.org>
Wed, 25 Mar 2020 02:03:57 +0000 (19:03 -0700)
Some SC9863a clock nodes would be the child of a syscon node, clocks can
use the regmap of syscon device directly for this kind of cases.

Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com>
Link: https://lkml.kernel.org/r/20200304072730.9193-7-zhang.lyra@gmail.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/sprd/common.c

index c0af477..d620bbb 100644 (file)
@@ -40,7 +40,8 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
                         const struct sprd_clk_desc *desc)
 {
        void __iomem *base;
-       struct device_node *node = pdev->dev.of_node;
+       struct device *dev = &pdev->dev;
+       struct device_node *node = dev->of_node;
        struct regmap *regmap;
 
        if (of_find_property(node, "sprd,syscon", NULL)) {
@@ -49,6 +50,13 @@ int sprd_clk_regmap_init(struct platform_device *pdev,
                        pr_err("%s: failed to get syscon regmap\n", __func__);
                        return PTR_ERR(regmap);
                }
+       } else if (of_device_is_compatible(of_get_parent(dev->of_node),
+                          "syscon")) {
+               regmap = device_node_to_regmap(of_get_parent(dev->of_node));
+               if (IS_ERR(regmap)) {
+                       dev_err(dev, "failed to get regmap from its parent.\n");
+                       return PTR_ERR(regmap);
+               }
        } else {
                base = devm_platform_ioremap_resource(pdev, 0);
                if (IS_ERR(base))