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