]> git.itanic.dy.fi Git - linux-stable/commitdiff
soc: amlogic: meson-pwrc: Hold reference returned by of_get_parent()
authorLiang He <windhl@126.com>
Tue, 26 Jul 2022 07:38:41 +0000 (15:38 +0800)
committerNeil Armstrong <narmstrong@baylibre.com>
Mon, 5 Sep 2022 07:23:54 +0000 (09:23 +0200)
We should hold the reference returned by of_get_parent() and use
it to call of_node_put() for refcount balance.

Signed-off-by: Liang He <windhl@126.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Link: https://lore.kernel.org/r/20220726073841.1320509-1-windhl@126.com
drivers/soc/amlogic/meson-ee-pwrc.c
drivers/soc/amlogic/meson-gx-pwrc-vpu.c

index 2be3afe6c2e3d2970dc89bd736fee356c2d5f69e..dd5f2a13ceb52fe7ad707ef0c63e7ffdf477f621 100644 (file)
@@ -469,6 +469,7 @@ static int meson_ee_pwrc_probe(struct platform_device *pdev)
 {
        const struct meson_ee_pwrc_domain_data *match;
        struct regmap *regmap_ao, *regmap_hhi;
+       struct device_node *parent_np;
        struct meson_ee_pwrc *pwrc;
        int i, ret;
 
@@ -495,7 +496,9 @@ static int meson_ee_pwrc_probe(struct platform_device *pdev)
 
        pwrc->xlate.num_domains = match->count;
 
-       regmap_hhi = syscon_node_to_regmap(of_get_parent(pdev->dev.of_node));
+       parent_np = of_get_parent(pdev->dev.of_node);
+       regmap_hhi = syscon_node_to_regmap(parent_np);
+       of_node_put(parent_np);
        if (IS_ERR(regmap_hhi)) {
                dev_err(&pdev->dev, "failed to get HHI regmap\n");
                return PTR_ERR(regmap_hhi);
index b4615b2886254dace71994695f90d586c7938cad..312fd9afccb01c1e7dc8a86999f173733dd5eeff 100644 (file)
@@ -273,6 +273,7 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
        const struct meson_gx_pwrc_vpu *vpu_pd_match;
        struct regmap *regmap_ao, *regmap_hhi;
        struct meson_gx_pwrc_vpu *vpu_pd;
+       struct device_node *parent_np;
        struct reset_control *rstc;
        struct clk *vpu_clk;
        struct clk *vapb_clk;
@@ -291,7 +292,9 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev)
 
        memcpy(vpu_pd, vpu_pd_match, sizeof(*vpu_pd));
 
-       regmap_ao = syscon_node_to_regmap(of_get_parent(pdev->dev.of_node));
+       parent_np = of_get_parent(pdev->dev.of_node);
+       regmap_ao = syscon_node_to_regmap(parent_np);
+       of_node_put(parent_np);
        if (IS_ERR(regmap_ao)) {
                dev_err(&pdev->dev, "failed to get regmap\n");
                return PTR_ERR(regmap_ao);