From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Baruch Siach <baruch@tkos.co.il>, Andrew Lunn <andrew@lunn.ch>,
Sascha Hauer <s.hauer@pengutronix.de>,
linux-pwm@vger.kernel.org,
Linus Walleij <linus.walleij@linaro.org>,
Chris Packham <chris.packham@alliedtelesis.co.nz>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
Thierry Reding <thierry.reding@gmail.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
linux-gpio@vger.kernel.org,
Ralph Sennhauser <ralph.sennhauser@gmail.com>,
Lee Jones <lee.jones@linaro.org>,
Gregory Clement <gregory.clement@bootlin.com>,
linux-arm-kernel@lists.infradead.org,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Subject: Re: [PATCH v3 5/5] gpio: mvebu: document zero pwm duty cycle limitation
Date: Thu, 14 Jan 2021 22:28:02 +0000 [thread overview]
Message-ID: <20210114222802.GY1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <20210114202545.7wnc5ikeffc45xk5@pengutronix.de>
On Thu, Jan 14, 2021 at 09:25:45PM +0100, Uwe Kleine-König wrote:
> Hello Baruch,
>
> On Thu, Jan 14, 2021 at 08:57:37PM +0200, Baruch Siach wrote:
> > Add a comment on why the code never sets on/off registers to zero.
> >
> > Reported-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
> > Analyzed-by: Russell King <linux@armlinux.org.uk>
> > Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> > ---
> > drivers/gpio/gpio-mvebu.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
> > index 6b017854ce61..09780944bef9 100644
> > --- a/drivers/gpio/gpio-mvebu.c
> > +++ b/drivers/gpio/gpio-mvebu.c
> > @@ -706,6 +706,10 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> > do_div(val, NSEC_PER_SEC);
> > if (val > UINT_MAX)
> > return -EINVAL;
> > + /*
> > + * Zero on/off values don't work as expected. Experimentation shows
> > + * that zero value is treated as 2^32. This behavior is not documented.
> > + */
>
> This is too easy. The right thing to do is to adapt .apply and
> .get_state to use this new information.
What exactly do you expect the changes to be?
Bear in mind that the hardware is not capable of atomically updating
e.g. the duty cycle without affecting the period, because any change
in duty cycle needs the "on" and "off" durations to be separately
programmed, and there's a chance that the hardware could start using
either value mid-update.
Also, disabling "blink" mode to achieve a steady output (for 0% or 100%
duty cycle) would require further investigation to find out how the
hardware behaves at the moment where blink mode is disabled: does the
output retain its current state (does the bit in the output register
toggle with the blink) or does it revert to the value in the output
register that was programmed before blink mode was enabled.
Again, none of that is documented, so would need experimentation with
the hardware to work out how to achieve it.
And then if you want even more complexity, I suppose we could try and
read the current state of the pin, add a delay, recheck it and try and
work out the optimal place to disable the blink mode.
Exactly how far do you want to go with this?
All of this is likely getting rediculously complicated for the use
cases of it today that don't need it. Yes, it's annoying that we can't
achieve 0% or 100% duty cycle with this hardware that was never
designed as a PWM without jumping through a lot of hoops but currently
settle for a minimum pulse width of 4ns at each end of the range.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
next prev parent reply other threads:[~2021-01-14 22:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-14 18:57 [PATCH v3 0/5] gpio: mvebu: pwm fixes and improvements Baruch Siach
2021-01-14 18:57 ` [PATCH v3 1/5] gpio: mvebu: fix pwm .get_state period calculation Baruch Siach
2021-01-14 18:57 ` [PATCH v3 2/5] gpio: mvebu: improve pwm period calculation accuracy Baruch Siach
2021-01-14 18:57 ` [PATCH v3 3/5] gpio: mvebu: make pwm .get_state closer to idempotent Baruch Siach
2021-01-14 18:57 ` [PATCH v3 4/5] gpio: mvebu: don't limit pwm period/duty_cycle to UINT_MAX Baruch Siach
2021-01-14 18:57 ` [PATCH v3 5/5] gpio: mvebu: document zero pwm duty cycle limitation Baruch Siach
2021-01-14 20:25 ` Uwe Kleine-König
2021-01-14 22:28 ` Russell King - ARM Linux admin [this message]
2021-01-15 10:53 ` Uwe Kleine-König
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=20210114222802.GY1551@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=andrew@lunn.ch \
--cc=baruch@tkos.co.il \
--cc=bgolaszewski@baylibre.com \
--cc=chris.packham@alliedtelesis.co.nz \
--cc=gregory.clement@bootlin.com \
--cc=lee.jones@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=ralph.sennhauser@gmail.com \
--cc=s.hauer@pengutronix.de \
--cc=sebastian.hesselbarth@gmail.com \
--cc=thierry.reding@gmail.com \
--cc=thomas.petazzoni@bootlin.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).