From: Lee Jones <lee.jones@linaro.org>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, kernel@stlinux.com,
maxime.coquelin@st.com, linux-pwm@vger.kernel.org,
ajitpal.singh@st.com
Subject: Re: [RESEND 02/11] pwm: sysfs: Add PWM Capture support
Date: Wed, 13 Apr 2016 10:40:50 +0100 [thread overview]
Message-ID: <20160413094050.GO8094@x1> (raw)
In-Reply-To: <20160412101550.GB18882@ulmo.ba.sec>
On Tue, 12 Apr 2016, Thierry Reding wrote:
> On Wed, Mar 02, 2016 at 03:32:00PM +0000, Lee Jones wrote:
> > Allow a user to read PWM Capture results from /sysfs. First,
> > the user must tell PWM Capture which channel they wish to
> > read from:
> >
> > $ echo 2 > $PWMCHIP/capture
> >
> > To start a capture and read the result, simply read the file:
> >
> > $ cat $PWMCHIP/capture
> >
> > The output format is left to the device.
> >
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> > drivers/pwm/sysfs.c | 28 ++++++++++++++++++++++++++++
> > 1 file changed, 28 insertions(+)
> >
> > diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c
> > index 9c90886..3572ef4 100644
> > --- a/drivers/pwm/sysfs.c
> > +++ b/drivers/pwm/sysfs.c
> > @@ -23,6 +23,8 @@
> > #include <linux/kdev_t.h>
> > #include <linux/pwm.h>
> >
> > +static int capture_channel;
>
> Can't do that, this is very racy because it isn't protected by any lock.
> Fortunately I don't think the global variable is at all necessary. See
> below.
>
> > +
> > struct pwm_export {
> > struct device child;
> > struct pwm_device *pwm;
> > @@ -167,16 +169,42 @@ static ssize_t polarity_store(struct device *child,
> > return ret ? : size;
> > }
> >
> > +static ssize_t capture_show(struct device *child,
> > + struct device_attribute *attr,
> > + char *buf)
> > +{
> > + struct pwm_device *pwm = child_to_pwm_device(child);
> > +
> > + return pwm_capture(pwm, capture_channel, buf);
> > +}
> > +
> > +static ssize_t capture_store(struct device *child,
> > + struct device_attribute *attr,
> > + const char *buf, size_t size)
> > +{
> > + int val, ret;
> > +
> > + ret = kstrtoint(buf, 0, &val);
> > + if (ret)
> > + return ret;
> > +
> > + capture_channel = val;
> > +
> > + return size;
> > +}
> > +
> > static DEVICE_ATTR_RW(period);
> > static DEVICE_ATTR_RW(duty_cycle);
> > static DEVICE_ATTR_RW(enable);
> > static DEVICE_ATTR_RW(polarity);
> > +static DEVICE_ATTR_RW(capture);
>
> These are all per-PWM attributes and the specific PWM device that they
> are associated with can be retrieved using child_to_pwm_device(child)
> (see the other attributes' implementation for examples). So I don't
> think the capture attribute needs to be writable at all. You already
> implement capture_show() in almost the right way, and if you drop the
> channel parameter from pwm_capture() as I suggested in my reply to patch
> 1/11 this should resolve itself automatically.
>
> Of course capture_show() would become slightly more beefy if we return a
> standard result structure rather than leave it up to the drivers to fill
> out the sysfs string. The good thing is that it will be common code and
> therefore the sysfs interface would return the same format regardless of
> the driver.
>
> Perhaps something like
>
> struct pwm_device *pwm = child_to_pwm_device(child);
> struct pwm_capture result;
>
> err = pwm_capture(pwm, &result);
> if (err < 0)
> return err;
>
> return sprintf(buf, "%u %u\n", result.duty_cycle, result.period);
>
> would work?
Same reply as 1/11. Now I know that we should be treating each of our
channels, as *completely* separate devices, I think this method seems
reasonable.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
WARNING: multiple messages have this Message-ID (diff)
From: lee.jones@linaro.org (Lee Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [RESEND 02/11] pwm: sysfs: Add PWM Capture support
Date: Wed, 13 Apr 2016 10:40:50 +0100 [thread overview]
Message-ID: <20160413094050.GO8094@x1> (raw)
In-Reply-To: <20160412101550.GB18882@ulmo.ba.sec>
On Tue, 12 Apr 2016, Thierry Reding wrote:
> On Wed, Mar 02, 2016 at 03:32:00PM +0000, Lee Jones wrote:
> > Allow a user to read PWM Capture results from /sysfs. First,
> > the user must tell PWM Capture which channel they wish to
> > read from:
> >
> > $ echo 2 > $PWMCHIP/capture
> >
> > To start a capture and read the result, simply read the file:
> >
> > $ cat $PWMCHIP/capture
> >
> > The output format is left to the device.
> >
> > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > ---
> > drivers/pwm/sysfs.c | 28 ++++++++++++++++++++++++++++
> > 1 file changed, 28 insertions(+)
> >
> > diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c
> > index 9c90886..3572ef4 100644
> > --- a/drivers/pwm/sysfs.c
> > +++ b/drivers/pwm/sysfs.c
> > @@ -23,6 +23,8 @@
> > #include <linux/kdev_t.h>
> > #include <linux/pwm.h>
> >
> > +static int capture_channel;
>
> Can't do that, this is very racy because it isn't protected by any lock.
> Fortunately I don't think the global variable is at all necessary. See
> below.
>
> > +
> > struct pwm_export {
> > struct device child;
> > struct pwm_device *pwm;
> > @@ -167,16 +169,42 @@ static ssize_t polarity_store(struct device *child,
> > return ret ? : size;
> > }
> >
> > +static ssize_t capture_show(struct device *child,
> > + struct device_attribute *attr,
> > + char *buf)
> > +{
> > + struct pwm_device *pwm = child_to_pwm_device(child);
> > +
> > + return pwm_capture(pwm, capture_channel, buf);
> > +}
> > +
> > +static ssize_t capture_store(struct device *child,
> > + struct device_attribute *attr,
> > + const char *buf, size_t size)
> > +{
> > + int val, ret;
> > +
> > + ret = kstrtoint(buf, 0, &val);
> > + if (ret)
> > + return ret;
> > +
> > + capture_channel = val;
> > +
> > + return size;
> > +}
> > +
> > static DEVICE_ATTR_RW(period);
> > static DEVICE_ATTR_RW(duty_cycle);
> > static DEVICE_ATTR_RW(enable);
> > static DEVICE_ATTR_RW(polarity);
> > +static DEVICE_ATTR_RW(capture);
>
> These are all per-PWM attributes and the specific PWM device that they
> are associated with can be retrieved using child_to_pwm_device(child)
> (see the other attributes' implementation for examples). So I don't
> think the capture attribute needs to be writable at all. You already
> implement capture_show() in almost the right way, and if you drop the
> channel parameter from pwm_capture() as I suggested in my reply to patch
> 1/11 this should resolve itself automatically.
>
> Of course capture_show() would become slightly more beefy if we return a
> standard result structure rather than leave it up to the drivers to fill
> out the sysfs string. The good thing is that it will be common code and
> therefore the sysfs interface would return the same format regardless of
> the driver.
>
> Perhaps something like
>
> struct pwm_device *pwm = child_to_pwm_device(child);
> struct pwm_capture result;
>
> err = pwm_capture(pwm, &result);
> if (err < 0)
> return err;
>
> return sprintf(buf, "%u %u\n", result.duty_cycle, result.period);
>
> would work?
Same reply as 1/11. Now I know that we should be treating each of our
channels, as *completely* separate devices, I think this method seems
reasonable.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2016-04-13 9:40 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-02 15:31 [RESEND 00/11] pwm: Add support for PWM Capture Lee Jones
2016-03-02 15:31 ` Lee Jones
2016-03-02 15:31 ` [RESEND 01/11] pwm: Add PWM Capture support Lee Jones
2016-03-02 15:31 ` Lee Jones
2016-03-02 15:31 ` Lee Jones
2016-04-12 10:08 ` Thierry Reding
2016-04-12 10:08 ` Thierry Reding
2016-04-13 9:36 ` Lee Jones
2016-04-13 9:36 ` Lee Jones
2016-04-13 14:50 ` Thierry Reding
2016-04-13 14:50 ` Thierry Reding
2016-03-02 15:32 ` [RESEND 02/11] pwm: sysfs: " Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 10:15 ` Thierry Reding
2016-04-12 10:15 ` Thierry Reding
2016-04-13 9:40 ` Lee Jones [this message]
2016-04-13 9:40 ` Lee Jones
2016-03-02 15:32 ` [RESEND 03/11] pwm: sti: Reorganise register names in preparation for new functionality Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` [RESEND 04/11] pwm: sti: Only request clock rate when you need to Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` [RESEND 05/11] pwm: sti: Supply PWM Capture register addresses and bit locations Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` [RESEND 06/11] pwm: sti: Supply PWM Capture clock handling Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-03-02 15:32 ` [RESEND 07/11] pwm: sti: Initialise PWM Capture channel data Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 10:29 ` Thierry Reding
2016-04-12 10:29 ` Thierry Reding
2016-04-15 12:39 ` Lee Jones
2016-04-15 12:39 ` Lee Jones
2016-04-15 14:22 ` Thierry Reding
2016-04-15 14:22 ` Thierry Reding
2016-04-15 14:31 ` Lee Jones
2016-04-15 14:31 ` Lee Jones
2016-04-15 13:11 ` Lee Jones
2016-04-15 13:11 ` Lee Jones
2016-04-15 14:23 ` Thierry Reding
2016-04-15 14:23 ` Thierry Reding
2016-03-02 15:32 ` [RESEND 08/11] pwm: sti: Add support for PWM Capture IRQs Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 10:35 ` Thierry Reding
2016-04-12 10:35 ` Thierry Reding
2016-04-13 10:05 ` Lee Jones
2016-04-13 10:05 ` Lee Jones
2016-04-13 15:16 ` Thierry Reding
2016-04-13 15:16 ` Thierry Reding
2016-03-02 15:32 ` [RESEND 09/11] pwm: sti: Add PWM Capture call-back Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 10:53 ` Thierry Reding
2016-04-12 10:53 ` Thierry Reding
2016-04-13 10:25 ` Lee Jones
2016-04-13 10:25 ` Lee Jones
2016-04-13 15:22 ` Thierry Reding
2016-04-13 15:22 ` Thierry Reding
2016-04-15 8:29 ` Lee Jones
2016-04-15 8:29 ` Lee Jones
2016-04-15 14:20 ` Thierry Reding
2016-04-15 14:20 ` Thierry Reding
2016-03-02 15:32 ` [RESEND 10/11] pwm: sti: Enable PWM Capture Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 10:56 ` Thierry Reding
2016-04-12 10:56 ` Thierry Reding
2016-03-02 15:32 ` [RESEND 11/11] pwm: sti: Take the opportunity to conduct a little house keeping Lee Jones
2016-03-02 15:32 ` Lee Jones
2016-04-12 7:28 ` [RESEND 00/11] pwm: Add support for PWM Capture Lee Jones
2016-04-12 7:28 ` Lee Jones
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=20160413094050.GO8094@x1 \
--to=lee.jones@linaro.org \
--cc=ajitpal.singh@st.com \
--cc=kernel@stlinux.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=maxime.coquelin@st.com \
--cc=thierry.reding@gmail.com \
/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.