diff mbox series

pwm: lpc18xx-sct: Free resources only after pwmchip_remove()

Message ID 20210327212428.136684-1-u.kleine-koenig@pengutronix.de
State Accepted
Headers show
Series pwm: lpc18xx-sct: Free resources only after pwmchip_remove() | expand

Commit Message

Uwe Kleine-König March 27, 2021, 9:24 p.m. UTC
Before pwmchip_remove() returns the PWM is expected to be functional. So
remove the pwmchip before disabling the clock.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
 drivers/pwm/pwm-lpc18xx-sct.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Vladimir Zapolskiy March 31, 2021, 8:37 p.m. UTC | #1
Hi Uwe,

On 3/27/21 11:24 PM, Uwe Kleine-König wrote:
> Before pwmchip_remove() returns the PWM is expected to be functional. So
> remove the pwmchip before disabling the clock.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>   drivers/pwm/pwm-lpc18xx-sct.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
> index 3f8e54ec28c6..b643ac61a2e7 100644
> --- a/drivers/pwm/pwm-lpc18xx-sct.c
> +++ b/drivers/pwm/pwm-lpc18xx-sct.c
> @@ -441,13 +441,15 @@ static int lpc18xx_pwm_remove(struct platform_device *pdev)
>   	struct lpc18xx_pwm_chip *lpc18xx_pwm = platform_get_drvdata(pdev);
>   	u32 val;
>   
> +	pwmchip_remove(&lpc18xx_pwm->chip);
> +
>   	val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
>   	lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL,
>   			   val | LPC18XX_PWM_CTRL_HALT);
>   
>   	clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
>   
> -	return pwmchip_remove(&lpc18xx_pwm->chip);
> +	return 0;
>   }
>   
>   static struct platform_driver lpc18xx_pwm_driver = {
> 

Acked-by: Vladimir Zapolskiy <vz@mleia.com>

A horde of PWM drivers does not satisfy the condition, please check
at least quite popular pwm-rockchip.c, pwm-sti.c, pwm-vt8500.c,
pwm-bcm2835.c etc., again, it would be preferable to see all the
drivers fixed in a single series, thank you.

--
Best wishes,
Vladimir
Uwe Kleine-König April 5, 2021, 8:16 p.m. UTC | #2
Hello Vladimir,

On Wed, Mar 31, 2021 at 11:37:37PM +0300, Vladimir Zapolskiy wrote:
> On 3/27/21 11:24 PM, Uwe Kleine-König wrote:
> > Before pwmchip_remove() returns the PWM is expected to be functional. So
> > remove the pwmchip before disabling the clock.
> > 
> > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > ---
> >   drivers/pwm/pwm-lpc18xx-sct.c | 4 +++-
> >   1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
> > index 3f8e54ec28c6..b643ac61a2e7 100644
> > --- a/drivers/pwm/pwm-lpc18xx-sct.c
> > +++ b/drivers/pwm/pwm-lpc18xx-sct.c
> > @@ -441,13 +441,15 @@ static int lpc18xx_pwm_remove(struct platform_device *pdev)
> >   	struct lpc18xx_pwm_chip *lpc18xx_pwm = platform_get_drvdata(pdev);
> >   	u32 val;
> > +	pwmchip_remove(&lpc18xx_pwm->chip);
> > +
> >   	val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
> >   	lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL,
> >   			   val | LPC18XX_PWM_CTRL_HALT);
> >   	clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
> > -	return pwmchip_remove(&lpc18xx_pwm->chip);
> > +	return 0;
> >   }
> >   static struct platform_driver lpc18xx_pwm_driver = {
> 
> Acked-by: Vladimir Zapolskiy <vz@mleia.com>

Thanks.
 
> A horde of PWM drivers does not satisfy the condition, please check
> at least quite popular pwm-rockchip.c, pwm-sti.c, pwm-vt8500.c,
> pwm-bcm2835.c etc., again, it would be preferable to see all the
> drivers fixed in a single series, thank you.

I'm aware that there are more drivers that need fixing and I will come
to them eventually. But I work on this on an on-and-off basis because
PWM driver fixing isn't the only thing I live for. So I send out a patch
whenever I finished one, I don't see a benefit to delay them just to
send them out in a series. If you want to work at fixing all drivers,
tell me, I have several other things to polish on my list.

Best regards
Uwe
Thierry Reding April 9, 2021, 12:45 p.m. UTC | #3
On Sat, Mar 27, 2021 at 10:24:28PM +0100, Uwe Kleine-König wrote:
> Before pwmchip_remove() returns the PWM is expected to be functional. So
> remove the pwmchip before disabling the clock.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> ---
>  drivers/pwm/pwm-lpc18xx-sct.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Applied, thanks.

Thierry
diff mbox series

Patch

diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
index 3f8e54ec28c6..b643ac61a2e7 100644
--- a/drivers/pwm/pwm-lpc18xx-sct.c
+++ b/drivers/pwm/pwm-lpc18xx-sct.c
@@ -441,13 +441,15 @@  static int lpc18xx_pwm_remove(struct platform_device *pdev)
 	struct lpc18xx_pwm_chip *lpc18xx_pwm = platform_get_drvdata(pdev);
 	u32 val;
 
+	pwmchip_remove(&lpc18xx_pwm->chip);
+
 	val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
 	lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL,
 			   val | LPC18XX_PWM_CTRL_HALT);
 
 	clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
 
-	return pwmchip_remove(&lpc18xx_pwm->chip);
+	return 0;
 }
 
 static struct platform_driver lpc18xx_pwm_driver = {