diff options
author | Peter Korsgaard <jacmet@sunsite.dk> | 2009-07-01 17:47:08 +0200 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-07-30 23:54:50 +0100 |
commit | 165f5f64199f972a21f21effc125d89ed2488e58 (patch) | |
tree | 1c476656788344f6bea3c4555711b53673f62e84 | |
parent | 9b71de49b030ad8fd4d13d38571b5c42dc9ed8dd (diff) |
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>
-rw-r--r-- | arch/arm/plat-s3c24xx/pwm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/plat-s3c24xx/pwm.c b/arch/arm/plat-s3c24xx/pwm.c index 0120b760315..82a6d4de02a 100644 --- a/arch/arm/plat-s3c24xx/pwm.c +++ b/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); |