diff options
Diffstat (limited to 'drivers/pwm/pwm-atmel.c')
-rw-r--r-- | drivers/pwm/pwm-atmel.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c index 0e4bd4e8e582..f3df529737f2 100644 --- a/drivers/pwm/pwm-atmel.c +++ b/drivers/pwm/pwm-atmel.c | |||
@@ -271,6 +271,16 @@ static void atmel_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) | |||
271 | mutex_unlock(&atmel_pwm->isr_lock); | 271 | mutex_unlock(&atmel_pwm->isr_lock); |
272 | atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm); | 272 | atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm); |
273 | 273 | ||
274 | /* | ||
275 | * Wait for the PWM channel disable operation to be effective before | ||
276 | * stopping the clock. | ||
277 | */ | ||
278 | timeout = jiffies + 2 * HZ; | ||
279 | |||
280 | while ((atmel_pwm_readl(atmel_pwm, PWM_SR) & (1 << pwm->hwpwm)) && | ||
281 | time_before(jiffies, timeout)) | ||
282 | usleep_range(10, 100); | ||
283 | |||
274 | clk_disable(atmel_pwm->clk); | 284 | clk_disable(atmel_pwm->clk); |
275 | } | 285 | } |
276 | 286 | ||