Hi Uwe, On Wed, Apr 20, 2022 at 2:12 PM Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> wrote: > The newly computed register values are intended to exactly match the > previously computed values. The main improvement is that the prescaler > is computed without a loop that involves two divisions in each step. > This uses the fact, that prescalers[i] = 1 << (2 * i). > > Assuming a moderately smart compiler, the needed number of divisions for > the case where the requested period is too big, is reduced from 5 to 2. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> Thanks for your patch! > --- a/drivers/pwm/pwm-renesas-tpu.c > +++ b/drivers/pwm/pwm-renesas-tpu.c > @@ -244,7 +244,6 @@ static void tpu_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) > static int tpu_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, > int duty_ns, int period_ns, bool enabled) > { > - static const unsigned int prescalers[] = { 1, 4, 16, 64 }; > struct tpu_pwm_device *tpd = pwm_get_chip_data(pwm); > struct tpu_device *tpu = to_tpu_device(chip); > unsigned int prescaler; > @@ -254,26 +253,47 @@ static int tpu_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, > u32 duty; > int ret; > > + clk_rate = clk_get_rate(tpu->clk); > + > + period = clk_rate / (NSEC_PER_SEC / period_ns); > + > /* > - * Pick a prescaler to avoid overflowing the counter. > - * TODO: Pick the highest acceptable prescaler. > + * Find the minimal prescaler in [0..3] such that > + * > + * period >> (2 * prescaler) < 0x10000 scripts/checkpatch.pl: WARNING: please, no space before tabs > + * > + * This could be calculated using something like: > + * > + * prescaler = max(ilog2(period) / 2, 7) - 7; WARNING: please, no space before tabs The rest LGTM, so Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds