drivers/gpio/gpio-pxa.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-)
The clock is never released after probe(). Schedule devm actions for
putting and disabling the clock.
Reported-by: Hulk Robot <hulkci@huawei.com>
Reported-by: Signed-off-by: Yuan Can <yuancan@huawei.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
---
drivers/gpio/gpio-pxa.c | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
index c7fbfa3ae43b..73a83b493b2e 100644
--- a/drivers/gpio/gpio-pxa.c
+++ b/drivers/gpio/gpio-pxa.c
@@ -610,6 +610,20 @@ static int pxa_gpio_probe_dt(struct platform_device *pdev,
#define pxa_gpio_probe_dt(pdev, pchip) (-1)
#endif
+static void pxa_gpio_clk_put(void *data)
+{
+ struct clk *clk = data;
+
+ clk_put(clk);
+}
+
+static void pxa_gpio_clk_disable_unprepare(void *data)
+{
+ struct clk *clk = data;
+
+ clk_disable_unprepare(clk);
+}
+
static int pxa_gpio_probe(struct platform_device *pdev)
{
struct pxa_gpio_chip *pchip;
@@ -667,18 +681,24 @@ static int pxa_gpio_probe(struct platform_device *pdev)
PTR_ERR(clk));
return PTR_ERR(clk);
}
+
+ ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk);
+ if (ret)
+ return ret;
+
ret = clk_prepare_enable(clk);
- if (ret) {
- clk_put(clk);
+ if (ret)
+ return ret;
+
+ ret = devm_add_action_or_reset(&pdev->dev,
+ pxa_gpio_clk_disable_unprepare, clk);
+ if (ret)
return ret;
- }
/* Initialize GPIO chips */
ret = pxa_init_gpio_chip(pchip, pxa_last_gpio + 1, gpio_reg_base);
- if (ret) {
- clk_put(clk);
+ if (ret)
return ret;
- }
/* clear all GPIO edge detects */
for_each_gpio_bank(gpio, c, pchip) {
--
2.34.1
On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > The clock is never released after probe(). Schedule devm actions for > putting and disabling the clock. ... > Reported-by: Signed-off-by: Yuan Can <yuancan@huawei.com> Me puzzled. ... > + ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk); > + if (ret) > + return ret; > + > ret = clk_prepare_enable(clk); > + if (ret) > + return ret; > + > + ret = devm_add_action_or_reset(&pdev->dev, > + pxa_gpio_clk_disable_unprepare, clk); > + if (ret) > return ret; Can we use recently introduced clk APIs for that? Maybe Stephen has an immutable branch you may reuse? -- With Best Regards, Andy Shevchenko
On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko <andy.shevchenko@gmail.com> wrote: s> > On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > > > The clock is never released after probe(). Schedule devm actions for > > putting and disabling the clock. > > ... > > > Reported-by: Signed-off-by: Yuan Can <yuancan@huawei.com> > > Me puzzled. > Yuan Can sent the following patch: https://patchwork.ozlabs.org/project/linux-gpio/patch/20220704130323.104294-1-yuancan@huawei.com/ I responded that it was not complete and sent this instead. > > ... > > > + ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk); > > + if (ret) > > + return ret; > > + > > ret = clk_prepare_enable(clk); > > + if (ret) > > + return ret; > > + > > + ret = devm_add_action_or_reset(&pdev->dev, > > + pxa_gpio_clk_disable_unprepare, clk); > > + if (ret) > > return ret; > > Can we use recently introduced clk APIs for that? Maybe Stephen has an > immutable branch you may reuse? Sure, sounds good! Stephen, would you mind providing me with a branch for that? Bart > > -- > With Best Regards, > Andy Shevchenko
On Wed, Jul 6, 2022 at 2:11 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko > <andy.shevchenko@gmail.com> wrote: > > On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: ... > > > Reported-by: Signed-off-by: Yuan Can <yuancan@huawei.com> > > > > Me puzzled. > > Yuan Can sent the following patch: > https://patchwork.ozlabs.org/project/linux-gpio/patch/20220704130323.104294-1-yuancan@huawei.com/ > > I responded that it was not complete and sent this instead. I understand that, I am puzzled with Reported-by: followed by SoB. What is this format? Is it something new and documented? -- With Best Regards, Andy Shevchenko
On Wed, Jul 6, 2022 at 2:32 PM Andy Shevchenko <andy.shevchenko@gmail.com> wrote: > > On Wed, Jul 6, 2022 at 2:11 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko > > <andy.shevchenko@gmail.com> wrote: > > > On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > > ... > > > > > Reported-by: Signed-off-by: Yuan Can <yuancan@huawei.com> > > > > > > Me puzzled. > > > > Yuan Can sent the following patch: > > https://patchwork.ozlabs.org/project/linux-gpio/patch/20220704130323.104294-1-yuancan@huawei.com/ > > > > I responded that it was not complete and sent this instead. > > I understand that, I am puzzled with Reported-by: followed by SoB. > What is this format? Is it something new and documented? > Ah! No, it's just my brain on not enough coffee I suppose. Thanks, I'll fix it. Bart
© 2016 - 2026 Red Hat, Inc.