lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 351/376] pwm: jz4740: Enhance precision in calculation of duty cycle
    Date
    From: Paul Cercueil <paul@crapouillou.net>

    commit 9017dc4fbd59c09463019ce494cfe36d654495a8 upstream.

    Calculating the hardware value for the duty from the hardware value of
    the period resulted in a precision loss versus calculating it from the
    clock rate directly.

    (Also remove a cast that doesn't really need to be here)

    Fixes: f6b8a5700057 ("pwm: Add Ingenic JZ4740 support")
    Cc: <stable@vger.kernel.org>
    Suggested-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Paul Cercueil <paul@crapouillou.net>
    Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/pwm/pwm-jz4740.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/drivers/pwm/pwm-jz4740.c
    +++ b/drivers/pwm/pwm-jz4740.c
    @@ -158,11 +158,11 @@ static int jz4740_pwm_apply(struct pwm_c
    /* Calculate period value */
    tmp = (unsigned long long)rate * state->period;
    do_div(tmp, NSEC_PER_SEC);
    - period = (unsigned long)tmp;
    + period = tmp;

    /* Calculate duty value */
    - tmp = (unsigned long long)period * state->duty_cycle;
    - do_div(tmp, state->period);
    + tmp = (unsigned long long)rate * state->duty_cycle;
    + do_div(tmp, NSEC_PER_SEC);
    duty = period - tmp;

    if (duty >= period)

    \
     
     \ /
      Last update: 2020-06-19 17:36    [W:4.341 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site