diff mbox series

gpio: pxa: schedule a devm action for the clock struct

Message ID 20220705171835.4923-1-brgl@bgdev.pl
State New
Headers show
Series gpio: pxa: schedule a devm action for the clock struct | expand

Commit Message

Bartosz Golaszewski July 5, 2022, 5:18 p.m. UTC
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(-)

Comments

Andy Shevchenko July 6, 2022, 11:48 a.m. UTC | #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?
Bartosz Golaszewski July 6, 2022, 12:11 p.m. UTC | #2
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
Andy Shevchenko July 6, 2022, 12:31 p.m. UTC | #3
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?
Bartosz Golaszewski July 6, 2022, 3:07 p.m. UTC | #4
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
diff mbox series

Patch

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) {