| From a72eca8c155d31f33a55ebe33c9f894795a7a23e Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Mon, 16 Mar 2020 11:32:15 +0100 |
| Subject: [PATCH] pwm: renesas-tpu: Fix late Runtime PM enablement |
| |
| commit d5a3c7a4536e1329a758e14340efd0e65252bd3d upstream. |
| |
| Runtime PM should be enabled before calling pwmchip_add(), as PWM users |
| can appear immediately after the PWM chip has been added. |
| Likewise, Runtime PM should always be disabled after the removal of the |
| PWM chip, even if the latter failed. |
| |
| Fixes: 99b82abb0a35b073 ("pwm: Add Renesas TPU PWM driver") |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Thierry Reding <thierry.reding@gmail.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/pwm/pwm-renesas-tpu.c b/drivers/pwm/pwm-renesas-tpu.c |
| index 4a855a21b782..8032acc84161 100644 |
| --- a/drivers/pwm/pwm-renesas-tpu.c |
| +++ b/drivers/pwm/pwm-renesas-tpu.c |
| @@ -415,16 +415,17 @@ static int tpu_probe(struct platform_device *pdev) |
| tpu->chip.base = -1; |
| tpu->chip.npwm = TPU_CHANNEL_MAX; |
| |
| + pm_runtime_enable(&pdev->dev); |
| + |
| ret = pwmchip_add(&tpu->chip); |
| if (ret < 0) { |
| dev_err(&pdev->dev, "failed to register PWM chip\n"); |
| + pm_runtime_disable(&pdev->dev); |
| return ret; |
| } |
| |
| dev_info(&pdev->dev, "TPU PWM %d registered\n", tpu->pdev->id); |
| |
| - pm_runtime_enable(&pdev->dev); |
| - |
| return 0; |
| } |
| |
| @@ -434,12 +435,10 @@ static int tpu_remove(struct platform_device *pdev) |
| int ret; |
| |
| ret = pwmchip_remove(&tpu->chip); |
| - if (ret) |
| - return ret; |
| |
| pm_runtime_disable(&pdev->dev); |
| |
| - return 0; |
| + return ret; |
| } |
| |
| #ifdef CONFIG_OF |
| -- |
| 2.7.4 |
| |