From: Alexandre Belloni Date: Fri, 14 Mar 2014 14:19:09 +0000 (+0100) Subject: pwm: atmel: correct CDTY calculation X-Git-Tag: v3.15-rc1~73^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=916030db4399f9237beef480fee6b11dd83cacd5;p=thirdparty%2Fkernel%2Flinux.git pwm: atmel: correct CDTY calculation From the datasheet, the actual duty cycle is: (period - (1 / clk) * CDTY) / period This actually correct the polarity of the PWM and solves the issue that pwm-leds exhibits: when setting a duty cycle of 0 and then disabling a channel, the level was wrong (1 when the polarity was normal and 0 when the polarity was inversed). Signed-off-by: Alexandre Belloni Acked-by: Nicolas Ferre Signed-off-by: Thierry Reding --- diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c index 2d69e9c431ddc..0adc952cc4ef5 100644 --- a/drivers/pwm/pwm-atmel.c +++ b/drivers/pwm/pwm-atmel.c @@ -133,7 +133,7 @@ static int atmel_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, prd = div; div *= duty_ns; do_div(div, period_ns); - dty = div; + dty = prd - div; ret = clk_enable(atmel_pwm->clk); if (ret) {