Skip to content

Commit c116223

Browse files
Uwe Kleine-Königthierryreding
Uwe Kleine-König
authored andcommitted
pwm: atmel-tcb: Fix resource freeing in error path and remove
Several resources were not freed in the error path and the remove function. Add the forgotten items. Fixes: 34cbcd7 ("pwm: atmel-tcb: Add sama5d2 support") Fixes: 061f857 ("pwm: atmel-tcb: Switch to new binding") Signed-off-by: Uwe Kleine-König <[email protected]> Reviewed-by: Claudiu Beznea <[email protected]> Signed-off-by: Thierry Reding <[email protected]>
1 parent 0323e8f commit c116223

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

drivers/pwm/pwm-atmel-tcb.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -449,16 +449,20 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev)
449449
tcbpwm->clk = of_clk_get_by_name(np->parent, clk_name);
450450
if (IS_ERR(tcbpwm->clk))
451451
tcbpwm->clk = of_clk_get_by_name(np->parent, "t0_clk");
452-
if (IS_ERR(tcbpwm->clk))
453-
return PTR_ERR(tcbpwm->clk);
452+
if (IS_ERR(tcbpwm->clk)) {
453+
err = PTR_ERR(tcbpwm->clk);
454+
goto err_slow_clk;
455+
}
454456

455457
match = of_match_node(atmel_tcb_of_match, np->parent);
456458
config = match->data;
457459

458460
if (config->has_gclk) {
459461
tcbpwm->gclk = of_clk_get_by_name(np->parent, "gclk");
460-
if (IS_ERR(tcbpwm->gclk))
461-
return PTR_ERR(tcbpwm->gclk);
462+
if (IS_ERR(tcbpwm->gclk)) {
463+
err = PTR_ERR(tcbpwm->gclk);
464+
goto err_clk;
465+
}
462466
}
463467

464468
tcbpwm->chip.dev = &pdev->dev;
@@ -469,7 +473,7 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev)
469473

470474
err = clk_prepare_enable(tcbpwm->slow_clk);
471475
if (err)
472-
goto err_slow_clk;
476+
goto err_gclk;
473477

474478
spin_lock_init(&tcbpwm->lock);
475479

@@ -484,6 +488,12 @@ static int atmel_tcb_pwm_probe(struct platform_device *pdev)
484488
err_disable_clk:
485489
clk_disable_unprepare(tcbpwm->slow_clk);
486490

491+
err_gclk:
492+
clk_put(tcbpwm->gclk);
493+
494+
err_clk:
495+
clk_put(tcbpwm->clk);
496+
487497
err_slow_clk:
488498
clk_put(tcbpwm->slow_clk);
489499

@@ -497,8 +507,9 @@ static void atmel_tcb_pwm_remove(struct platform_device *pdev)
497507
pwmchip_remove(&tcbpwm->chip);
498508

499509
clk_disable_unprepare(tcbpwm->slow_clk);
500-
clk_put(tcbpwm->slow_clk);
510+
clk_put(tcbpwm->gclk);
501511
clk_put(tcbpwm->clk);
512+
clk_put(tcbpwm->slow_clk);
502513
}
503514

504515
static const struct of_device_id atmel_tcb_pwm_dt_ids[] = {

0 commit comments

Comments
 (0)