All of lore.kernel.org
 help / color / mirror / Atom feed
From: Clemens Gruber <clemens.gruber@pqgruber.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: linux-pwm@vger.kernel.org,
	Thierry Reding <thierry.reding@gmail.com>,
	Sven Van Asbroeck <TheSven73@gmail.com>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v8 1/8] pwm: pca9685: Switch to atomic API
Date: Wed, 14 Apr 2021 21:45:32 +0200	[thread overview]
Message-ID: <YHdGXG3PbsmicK7U@workstation.tuxnet> (raw)
In-Reply-To: <20210414192131.2o4c2eia6jnjatp2@pengutronix.de>

On Wed, Apr 14, 2021 at 09:21:31PM +0200, Uwe Kleine-König wrote:
> On Wed, Apr 14, 2021 at 02:09:14PM +0200, Clemens Gruber wrote:
> > Hi Uwe,
> > 
> > On Tue, Apr 13, 2021 at 09:38:18PM +0200, Uwe Kleine-König wrote:
> > > Hello Clemens,
> > > 
> > > On Tue, Apr 13, 2021 at 02:11:38PM +0200, Clemens Gruber wrote:
> > > > On Mon, Apr 12, 2021 at 10:10:19PM +0200, Uwe Kleine-König wrote:
> > > > > On Mon, Apr 12, 2021 at 06:39:28PM +0200, Clemens Gruber wrote:
> > > > > > With your suggested round-down, the example with frequency of 200 Hz
> > > > > > would no longer result in 30 but 29 and that contradicts the datasheet.
> > > > > 
> > > > > Well, with PRESCALE = 30 we get a frequency of 196.88 Hz and with
> > > > > PRESCALE = 29 we get a frequency of 203.45 Hz. So no matter if you pick
> > > > > 29 or 30, you don't get 200 Hz. And which of the two possible values is
> > > > > the better one depends on the consumer, no matter what rounding
> > > > > algorithm the data sheet suggests. Also note that the math here contains
> > > > > surprises you don't expect at first. For example, what PRESCALE value
> > > > > would you pick to get 284 Hz? [If my mail was a video, I'd suggest to
> > > > > press Space now to pause and let you think first :-)] The data sheet's
> > > > > formula suggests:
> > > > > 
> > > > > 	round(25 MHz / (4096 * 284)) - 1 = 20
> > > > > 
> > > > > The resulting frequency when picking PRESCALE = 20 is 290.644 Hz (so an
> > > > > error of 6.644 Hz). If instead you pick PRESCALE = 21 you get 277.433 Hz
> > > > > (error = 6.567 Hz), so 21 is the better choice.
> > > > > 
> > > > > Exercise for the reader:
> > > > >  What is the correct formula to really determine the PRESCALE value that
> > > > >  yields the best approximation (i.e. minimizing
> > > > >  abs(real_freq - target_freq)) for a given target_freq?
> > > 
> > > I wonder if you tried this.
> > 
> > We could calculate both round-up and round-down and decide which one is
> > closer to "real freq" (even though that is not the actual frequency but
> > just our backwards-calculated frequency).
> 
> Yeah, the backwards-calculated frequency is the best assumption we
> have.
> 
> > But I can't give you a formula with minimized abs(real_freq-target_freq)
> > Is it a different round point than 0.5 and maybe relative to f ?
> > 
> > Please enlighten us :-)
> 
> Sorry, I cannot. I spend ~20 min today after lunch with pencil and
> paper, but without success. I was aware that it isn't trivial and this
> is the main reason I established round-down as default for new drivers
> instead of round-nearest.

Oh, I thought you already solved it. I tried too for a while but was
unsuccessful. Not trivial indeed!

But regarding you establishing round-down: Wouldn't it be even better if
the driver did what I suggested above, namely calculate backwards from
both the rounded-up as well as the rounded-down prescale value and then
write the one with the smallest abs(f_target - f_real) to the register?

Clemens

  reply	other threads:[~2021-04-14 19:45 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-12 13:27 [PATCH v8 1/8] pwm: pca9685: Switch to atomic API Clemens Gruber
2021-04-12 13:27 ` [PATCH v8 2/8] pwm: pca9685: Support hardware readout Clemens Gruber
2021-04-12 16:21   ` Uwe Kleine-König
2021-04-12 13:27 ` [PATCH v8 3/8] pwm: pca9685: Improve runtime PM behavior Clemens Gruber
2021-04-12 13:27 ` [PATCH v8 4/8] dt-bindings: pwm: Support new PWM_USAGE_POWER flag Clemens Gruber
2021-04-12 16:27   ` Uwe Kleine-König
2021-04-12 16:46     ` Clemens Gruber
2021-04-13 11:38       ` Uwe Kleine-König
2021-04-13 11:41         ` Thierry Reding
2021-04-13 11:51     ` Thierry Reding
2021-04-13 17:56       ` Uwe Kleine-König
2021-04-15 16:27         ` Thierry Reding
2021-04-16  9:32           ` Uwe Kleine-König
2021-04-16 10:45             ` Thierry Reding
2021-04-18 13:30               ` Uwe Kleine-König
2021-04-16 13:55   ` Thierry Reding
2021-04-16 15:39     ` Rob Herring
2021-04-16 15:54     ` Clemens Gruber
2021-04-17 15:44       ` Uwe Kleine-König
2021-04-12 13:27 ` [PATCH v8 5/8] pwm: core: " Clemens Gruber
2021-04-12 13:27 ` [PATCH v8 6/8] pwm: pca9685: " Clemens Gruber
2021-04-12 16:30   ` Uwe Kleine-König
2021-04-12 17:11     ` Clemens Gruber
2021-04-13 10:34       ` Uwe Kleine-König
2021-04-12 13:27 ` [PATCH v8 7/8] pwm: pca9685: Restrict period change for enabled PWMs Clemens Gruber
2021-04-17 15:46   ` Uwe Kleine-König
2021-04-12 13:27 ` [PATCH v8 8/8] pwm: pca9685: Add error messages for failed regmap calls Clemens Gruber
2021-04-17 15:47   ` Uwe Kleine-König
2021-04-12 16:18 ` [PATCH v8 1/8] pwm: pca9685: Switch to atomic API Uwe Kleine-König
2021-04-12 16:39   ` Clemens Gruber
2021-04-12 20:10     ` Uwe Kleine-König
2021-04-13 12:11       ` Clemens Gruber
2021-04-13 12:17         ` Clemens Gruber
2021-04-13 12:37         ` Thierry Reding
2021-04-13 13:06           ` Clemens Gruber
2021-04-13 19:38         ` Uwe Kleine-König
2021-04-14 12:09           ` Clemens Gruber
2021-04-14 19:21             ` Uwe Kleine-König
2021-04-14 19:45               ` Clemens Gruber [this message]
2021-04-15  6:48                 ` Uwe Kleine-König
2021-04-17 15:37 ` Uwe Kleine-König
2021-04-17 16:40   ` Clemens Gruber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YHdGXG3PbsmicK7U@workstation.tuxnet \
    --to=clemens.gruber@pqgruber.com \
    --cc=TheSven73@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.