Martin Blumenstingl fb2081e870 pwm: meson: Simplify the calculation of the pre-divider and count
Replace the loop to calculate the pre-divider and count with two
separate div64_u64() calculations. This makes the code easier to read
and improves the precision.

Three example cases:
1) 32.768kHz LPO clock for the SDIO wifi chip on Khadas VIM
   clock input: 500MHz (FCLK_DIV4)
   period: 30518ns
   duty cycle: 15259ns
old algorithm: pre_div=0, cnt=15259
new algorithm: pre_div=0, cnt=15259
(no difference in calculated values)

2) PWM LED on Khadas VIM
   clock input: 24MHz (XTAL)
   period: 7812500ns
   duty cycle: 7812500ns
old algorithm: pre_div=2, cnt=62004
new algorithm: pre_div=2, cnt=62500
Using a scope (24MHz sampling rate) shows the actual difference:
- old: 7753000ns, off by -59500ns (0.7616%)
- new: 7815000ns, off by +2500ns (0.032%)

3) Theoretical case where pre_div is different
   clock input: 24MHz (XTAL)
   period: 2730624ns
   duty cycle: 1365312ns
old algorithm: pre_div=1, cnt=32768
new algorithm: pre_div=0, cnt=65534
Using a scope (24MHz sampling rate) shows the actual difference:
- old: 2731000ns
- new: 2731000ns
(my scope is not precise enough to measure the difference if there's
any)

Suggested-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
2019-06-26 11:39:09 +02:00
..
2019-05-16 19:08:15 -07:00
2019-05-16 19:08:15 -07:00
2019-05-16 09:19:14 -07:00
2019-05-16 08:31:32 -07:00
2019-05-15 18:56:50 -07:00
2019-05-09 08:51:45 -07:00
2019-05-16 09:19:14 -07:00
2019-05-07 08:50:40 -07:00
2019-05-16 08:31:32 -07:00
2019-05-14 10:39:08 -07:00
2019-05-07 12:56:19 -07:00
2019-05-15 18:56:50 -07:00
2019-05-16 19:08:15 -07:00
2019-05-16 09:19:14 -07:00
2019-05-09 08:40:55 -07:00
2019-05-14 10:30:10 -07:00
2019-05-08 10:03:52 -07:00
2019-05-14 10:39:08 -07:00
2019-05-14 10:39:08 -07:00
2019-05-14 19:52:51 -07:00
2019-05-16 09:19:14 -07:00
2019-05-16 09:19:14 -07:00
2019-05-16 09:19:14 -07:00
2019-05-16 11:57:16 -07:00
2019-05-16 09:19:14 -07:00
2019-05-14 14:12:59 -07:00
2019-05-07 13:39:22 -07:00
2019-05-16 08:31:32 -07:00
2019-05-15 18:44:52 -07:00