Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1400701 > unrolled thread

[PATCH] pwm: atmel: Fix disabling of PWM channels

Started byGuillermo Rodriguez <guille.rodriguez@gmail.com>
First post2016-05-13 13:20 +0200
Last post2016-05-13 13:20 +0200
Articles 1 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [PATCH] pwm: atmel: Fix disabling of PWM channels Guillermo Rodriguez <guille.rodriguez@gmail.com> - 2016-05-13 13:20 +0200

#1400701 — [PATCH] pwm: atmel: Fix disabling of PWM channels

FromGuillermo Rodriguez <guille.rodriguez@gmail.com>
Date2016-05-13 13:20 +0200
Subject[PATCH] pwm: atmel: Fix disabling of PWM channels
Message-ID<ryjiq-2bj-13@gated-at.bofh.it>
When disabling a PWM channel, the PWM clock was being stopped
immediately after writing to PWM_DIS. As a result, the disabling
of the PWM channel did not complete properly, and the PWM output
might be left at the wrong level.

Fix this by waiting for the channel to be effectively disabled
(by checking the PWM_SR register) before disabling the clock.

Signed-off-by: Guillermo Rodriguez <guille.rodriguez@gmail.com>
---
 drivers/pwm/pwm-atmel.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
index 0e4bd4e..a714434 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)
 	mutex_unlock(&atmel_pwm->isr_lock);
 	atmel_pwm_writel(atmel_pwm, PWM_DIS, 1 << pwm->hwpwm);
 
+	/*
+	 * Wait for the PWM channel disable operation to be effective before
+	 * stopping the clock.
+	 */
+	timeout = jiffies + 2 * HZ;
+	while ((atmel_pwm_readl(atmel_pwm, PWM_SR)& (1 << pwm->hwpwm)) &&
+	       time_before(jiffies, timeout)) {
+		usleep_range(10, 100);
+	}
+
 	clk_disable(atmel_pwm->clk);
 }
 
-- 
1.7.9.5

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web