On Wed, Apr 20, 2022 at 08:08:34PM +0200, Geert Uytterhoeven wrote: > 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> @Thierry: Assuming you agree to this patch, too: Should I resend for the checkpack warning (I'd s/\t/ /), or do you want to fixup at apply time? Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature