From: Liu Ying Date: Wed, 30 Jan 2013 04:31:55 +0000 (+0800) Subject: ENGR00242214 IMX PWM:Correct duty cycle calculation X-Git-Tag: v3.0.35-fsl~130 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=992f95a787f5e2d7247016ac51064e8cd5263d96;p=karo-tx-linux.git ENGR00242214 IMX PWM:Correct duty cycle calculation Since we've already reduced 2 cycles before writing PWMPR register, the real period cycle on PWMO is the value of period_cycles (before reducing 2). So, the following commit message of ENGR00170342, which changes the duty cycle calculation wrongly, is not reasonable: =================================================== The chip document says the counter counts up to period_cycles + 1 and then is reset to 0, so the actual period of the PWM wave is period_cycles + 2 =================================================== Revert "ENGR00170342 PWM: fix pwm output can't be set to 100% full duty" This reverts commit ac3711f7f24b94db9f78fd7e9bf134c2ecd025ab. Signed-off-by: Liu Ying (cherry picked from commit b42be77aa7842834f0fb50924546701b668d7ab9) --- diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c index b683d2eb6261..eb49057116f1 100755 --- a/arch/arm/plat-mxc/pwm.c +++ b/arch/arm/plat-mxc/pwm.c @@ -6,7 +6,7 @@ * published by the Free Software Foundation. * * Derived from pxa PWM driver by eric miao - * Copyright 2009-2012 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2009-2013 Freescale Semiconductor, Inc. All Rights Reserved. */ #include @@ -87,11 +87,7 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) prescale = period_cycles / 0x10000 + 1; period_cycles /= prescale; - /* the chip document says the counter counts up to - * period_cycles + 1 and then is reset to 0, so the - * actual period of the PWM wave is period_cycles + 2 - */ - c = (unsigned long long)(period_cycles + 2) * duty_ns; + c = (unsigned long long)period_cycles * duty_ns; do_div(c, period_ns); duty_cycles = c;