Message ID | 20220705171835.4923-1-brgl@bgdev.pl |
---|---|
State | New |
Headers | show |
Series | gpio: pxa: schedule a devm action for the clock struct | expand |
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?
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?
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 --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) {
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(-)