On Thu, Jan 14, 2021 at 09:48:04PM +0100, Uwe Kleine-König wrote: > With an input clk rate bigger than 2000000000, scaler would have been > zero which then would have resulted in a division by zero. > > Also the originally implemented algorithm divided by the result of a > division. This nearly always looses precision. Consider a requested period > of 1000000 ns. With an input clock frequency of 32786885 Hz the hardware > was configured with an actual period of 983869.007 ns (PERIOD = 32258) > while the hardware can provide 1000003.508 ns (PERIOD = 32787). > And note if the input clock frequency was 32786886 Hz instead, the hardware > was configured to 1016656.477 ns (PERIOD = 33333) while the optimal > setting results in 1000003.477 ns (PERIOD = 32787). > > This patch implements proper range checking and only divides once for > the calculation of period (and similar for duty_cycle). > > Signed-off-by: Uwe Kleine-König > --- > Hello, > > changes since v2 (Message-Id: > 20201222221319.2101107-1-u.kleine-koenig@pengutronix.de): > > - Add my calculation to the comment explaining the max_period formula > as discussed with Lino. > > Best regards > Uwe > > drivers/pwm/pwm-bcm2835.c | 35 +++++++++++++++++++++++++++-------- > 1 file changed, 27 insertions(+), 8 deletions(-) Florian, Lino, care to give a Reviewed-by and/or Tested-by on this? Thierry