Messages in this thread | | | Date | Tue, 5 Jul 2022 09:22:22 +0200 | Subject | Re: [PATCH] soc: amlogic: meson-pwrc: Hold reference returned by of_get_parent() | From | Neil Armstrong <> |
| |
+ linux-amlogic, linux-arm-kernel, linux-kernel
On 05/07/2022 04:20, Liang He wrote: > 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> > --- > drivers/soc/amlogic/meson-ee-pwrc.c | 5 ++++- > drivers/soc/amlogic/meson-gx-pwrc-vpu.c | 5 ++++- > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/soc/amlogic/meson-ee-pwrc.c b/drivers/soc/amlogic/meson-ee-pwrc.c > index 2be3afe6c2e3..872ab8ba90bc 100644 > --- a/drivers/soc/amlogic/meson-ee-pwrc.c > +++ b/drivers/soc/amlogic/meson-ee-pwrc.c > @@ -470,6 +470,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 meson_ee_pwrc *pwrc; > + struct device_node *np; > int i, ret; > > match = of_device_get_match_data(&pdev->dev); > @@ -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)); > + np = of_get_parent(pdev->dev.of_node); > + regmap_hhi = syscon_node_to_regmap(np); > + of_node_put(np); > if (IS_ERR(regmap_hhi)) { > dev_err(&pdev->dev, "failed to get HHI regmap\n"); > return PTR_ERR(regmap_hhi); > diff --git a/drivers/soc/amlogic/meson-gx-pwrc-vpu.c b/drivers/soc/amlogic/meson-gx-pwrc-vpu.c > index b4615b288625..75a4e1cec416 100644 > --- a/drivers/soc/amlogic/meson-gx-pwrc-vpu.c > +++ b/drivers/soc/amlogic/meson-gx-pwrc-vpu.c > @@ -274,6 +274,7 @@ static int meson_gx_pwrc_vpu_probe(struct platform_device *pdev) > struct regmap *regmap_ao, *regmap_hhi; > struct meson_gx_pwrc_vpu *vpu_pd; > struct reset_control *rstc; > + struct device_node *np; > struct clk *vpu_clk; > struct clk *vapb_clk; > bool powered_off; > @@ -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)); > + np = of_get_parent(pdev->dev.of_node); > + regmap_ao = syscon_node_to_regmap(np); > + of_node_put(np); > if (IS_ERR(regmap_ao)) { > dev_err(&pdev->dev, "failed to get regmap\n"); > return PTR_ERR(regmap_ao);
| |