Message ID | 20230719192013.4051193-3-u.kleine-koenig@pengutronix.de |
---|---|
State | Accepted |
Headers | show |
Series | pwm: atmel-tcb: Some driver maintenance | expand |
On 19.07.2023 22:20, Uwe Kleine-König wrote: > Several resources were not freed in the error path and the remove > function. Add the forgotten items. > > Fixes: 34cbcd72588f ("pwm: atmel-tcb: Add sama5d2 support") > Fixes: 061f8572a31c ("pwm: atmel-tcb: Switch to new binding") > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev> > --- > drivers/pwm/pwm-atmel-tcb.c | 23 +++++++++++++++++------ > 1 file changed, 17 insertions(+), 6 deletions(-) > > diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c > index 613dd1810fb5..2826fc216d29 100644 > --- a/drivers/pwm/pwm-atmel-tcb.c > +++ b/drivers/pwm/pwm-atmel-tcb.c > @@ -450,16 +450,20 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) > tcbpwm->clk = of_clk_get_by_name(np->parent, clk_name); > if (IS_ERR(tcbpwm->clk)) > tcbpwm->clk = of_clk_get_by_name(np->parent, "t0_clk"); > - if (IS_ERR(tcbpwm->clk)) > - return PTR_ERR(tcbpwm->clk); > + if (IS_ERR(tcbpwm->clk)) { > + err = PTR_ERR(tcbpwm->clk); > + goto err_slow_clk; > + } > > match = of_match_node(atmel_tcb_of_match, np->parent); > config = match->data; > > if (config->has_gclk) { > tcbpwm->gclk = of_clk_get_by_name(np->parent, "gclk"); > - if (IS_ERR(tcbpwm->gclk)) > - return PTR_ERR(tcbpwm->gclk); > + if (IS_ERR(tcbpwm->gclk)) { > + err = PTR_ERR(tcbpwm->gclk); > + goto err_clk; > + } > } > > tcbpwm->chip.dev = &pdev->dev; > @@ -470,7 +474,7 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) > > err = clk_prepare_enable(tcbpwm->slow_clk); > if (err) > - goto err_slow_clk; > + goto err_gclk; > > spin_lock_init(&tcbpwm->lock); > > @@ -485,6 +489,12 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) > err_disable_clk: > clk_disable_unprepare(tcbpwm->slow_clk); > > +err_gclk: > + clk_put(tcbpwm->gclk); > + > +err_clk: > + clk_put(tcbpwm->clk); > + > err_slow_clk: > clk_put(tcbpwm->slow_clk); > > @@ -498,8 +508,9 @@ static void atmel_tcb_pwm_remove(struct platform_device *pdev) > pwmchip_remove(&tcbpwm->chip); > > clk_disable_unprepare(tcbpwm->slow_clk); > - clk_put(tcbpwm->slow_clk); > + clk_put(tcbpwm->gclk); > clk_put(tcbpwm->clk); > + clk_put(tcbpwm->slow_clk); > } > > static const struct of_device_id atmel_tcb_pwm_dt_ids[] = {
diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c index 613dd1810fb5..2826fc216d29 100644 --- a/drivers/pwm/pwm-atmel-tcb.c +++ b/drivers/pwm/pwm-atmel-tcb.c @@ -450,16 +450,20 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) tcbpwm->clk = of_clk_get_by_name(np->parent, clk_name); if (IS_ERR(tcbpwm->clk)) tcbpwm->clk = of_clk_get_by_name(np->parent, "t0_clk"); - if (IS_ERR(tcbpwm->clk)) - return PTR_ERR(tcbpwm->clk); + if (IS_ERR(tcbpwm->clk)) { + err = PTR_ERR(tcbpwm->clk); + goto err_slow_clk; + } match = of_match_node(atmel_tcb_of_match, np->parent); config = match->data; if (config->has_gclk) { tcbpwm->gclk = of_clk_get_by_name(np->parent, "gclk"); - if (IS_ERR(tcbpwm->gclk)) - return PTR_ERR(tcbpwm->gclk); + if (IS_ERR(tcbpwm->gclk)) { + err = PTR_ERR(tcbpwm->gclk); + goto err_clk; + } } tcbpwm->chip.dev = &pdev->dev; @@ -470,7 +474,7 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) err = clk_prepare_enable(tcbpwm->slow_clk); if (err) - goto err_slow_clk; + goto err_gclk; spin_lock_init(&tcbpwm->lock); @@ -485,6 +489,12 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev) err_disable_clk: clk_disable_unprepare(tcbpwm->slow_clk); +err_gclk: + clk_put(tcbpwm->gclk); + +err_clk: + clk_put(tcbpwm->clk); + err_slow_clk: clk_put(tcbpwm->slow_clk); @@ -498,8 +508,9 @@ static void atmel_tcb_pwm_remove(struct platform_device *pdev) pwmchip_remove(&tcbpwm->chip); clk_disable_unprepare(tcbpwm->slow_clk); - clk_put(tcbpwm->slow_clk); + clk_put(tcbpwm->gclk); clk_put(tcbpwm->clk); + clk_put(tcbpwm->slow_clk); } static const struct of_device_id atmel_tcb_pwm_dt_ids[] = {
Several resources were not freed in the error path and the remove function. Add the forgotten items. Fixes: 34cbcd72588f ("pwm: atmel-tcb: Add sama5d2 support") Fixes: 061f8572a31c ("pwm: atmel-tcb: Switch to new binding") Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- drivers/pwm/pwm-atmel-tcb.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-)