Pārlūkot izejas kodu

ARM: S3C: PWM fix for low duty cycle

The pwm hardware only checks the compare register after a decrement,
so the pin never toggles if tcmp = tcnt.

This happens when a very low duty cycle is requested. Fix it by always
ensuring that tcmp < tcnt.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Peter Korsgaard 16 gadi atpakaļ
vecāks
revīzija
165f5f6419
1 mainītis faili ar 4 papildinājumiem un 0 dzēšanām
  1. 4 0
      arch/arm/plat-s3c24xx/pwm.c

+ 4 - 0
arch/arm/plat-s3c24xx/pwm.c

@@ -246,6 +246,10 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
 
 	tcmp = duty_ns / tin_ns;
 	tcmp = tcnt - tcmp;
+	/* the pwm hw only checks the compare register after a decrement,
+	   so the pin never toggles if tcmp = tcnt */
+	if (tcmp == tcnt)
+		tcmp--;
 
 	pwm_dbg(pwm, "tin_ns=%lu, tcmp=%ld/%lu\n", tin_ns, tcmp, tcnt);