• Uwe Kleine-König's avatar
    pwm: atmel: Improve duty cycle calculation in .apply() · 8035e6c6
    Uwe Kleine-König authored
    In the calculation of the register value determining the duty cycle the
    requested period is used instead of the actually implemented period which
    results in suboptimal settings.
    
    The following example assumes an input clock of 133333333 Hz on one of
    the SoCs with 16 bit period.
    
    When the following state is to be applied:
    
            .period = 414727681
            .duty_cycle = 652806
    
    the following register values used to be  calculated:
    
            PRES = 10
            CPRD = 54000
            CDTY = 53916
    
    which yields an actual duty cycle of a bit more than 645120 ns.
    
    The setting
    
            PRES = 10
            CPRD = 54000
            CDTY = 53915
    
    however yields a duty of 652800 ns which is between the current result
    and the requested value and so is a better approximation.
    
    The reason for this error is that for the calculation of CDTY the
    requested period was used instead of the actually implemented one.
    Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
    8035e6c6
pwm-atmel.c 12.1 KB