All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: Lee Jones <lee.jones@linaro.org>
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 01/11] pwm: Add PWM Capture support
Date: Wed, 13 Apr 2016 16:50:24 +0200	[thread overview]
Message-ID: <20160413145024.GA29509@ulmo.ba.sec> (raw)
In-Reply-To: <20160413093605.GN8094@x1>

[-- Attachment #1: Type: text/plain, Size: 3923 bytes --]

On Wed, Apr 13, 2016 at 10:36:05AM +0100, Lee Jones wrote:
> On Tue, 12 Apr 2016, Thierry Reding wrote:
> 
> > On Wed, Mar 02, 2016 at 03:31:59PM +0000, Lee Jones wrote:
> > > Supply a PWM Capture call-back Op in order to pass back
> > > information obtained by running analysis on PWM a signal.
> > > This would normally (at least during testing) be called from
> > > the Sysfs routines with a view to printing out PWM Capture
> > > data which has been encoded into a string.
> > > 
> > > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > > ---
> > >  drivers/pwm/core.c  | 26 ++++++++++++++++++++++++++
> > >  include/linux/pwm.h | 13 +++++++++++++
> > >  2 files changed, 39 insertions(+)
> > 
> > Overall I like the concept of introducing this capture functionality.
> > 
> > However I have a couple of questions, see below.
> > 
> > > diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> > > index d24ca5f..8f4a8a9 100644
> > > --- a/drivers/pwm/core.c
> > > +++ b/drivers/pwm/core.c
> > > @@ -494,6 +494,32 @@ unlock:
> > >  EXPORT_SYMBOL_GPL(pwm_set_polarity);
> > >  
> > >  /**
> > > + * pwm_capture() - capture and report a PWM signal
> > > + * @pwm: PWM device
> > > + * @channel: PWM capture channel to use
> > > + * @buf: buffer to place output message into
> > > + *
> > > + * Returns: 0 on success or a negative error code on failure.
> > > + */
> > > +int pwm_capture(struct pwm_device *pwm, int channel, char *buf)
> > 
> > This public interface seems to be targetted specifically at sysfs. As
> > such I'm not sure if there is reason to make it public, since the code
> > is unlikely to ever be called by other users in the kernel.
> > 
> > Do you think it would be possible to make the interface more generic by
> > passing back some form of structure containing the capture result? That
> > way users within the kernel could use the result without having to go
> > and parse a string filled in by the driver. It would also be easy to
> > implement sysfs support on top of that. Another advantage is that there
> > would be a standard result structure rather than a free-form string
> > filled by drivers that can't be controlled.
> > 
> > What kind of result does the STi hardware return? Looking at the driver
> > later in the series it seems to support triggering interrupts on rising
> > and falling edges and capture some running counter at these events. If
> > the frequency of the counter increment is known, these numbers should
> > allow us to determine both the period and duty cycle of the PWM signal
> > in nanoseconds. Would it be possible to rewrite this function and the
> > driver patch to something like this:
> > 
> > 	int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result);
> > 
> > Where
> > 
> > 	struct pwm_capture {
> > 		unsigned int period;
> > 		unsigned int duty_cycle;
> > 	};
> > 
> > ?
> 
> Yes, I think that sounds feasible.
> 
> > Another thing I noticed is that the code here seems to be confusing
> > channels and devices. In the PWM subsystem a struct pwm_device
> > represents a single channel. Allowing the channel to be specified is
> > redundant at best, and confusing at worst.
> 
> On the STi platform I'm working on, we have 2 devices PWM{0,1} and
> each device has 4 separate channels [0..3].  Not all of them support
> PWM capture, but the channels are 'a thing'.  I'd need to look into it
> further, but I guess you'd like the driver to pretend we have 8
> devices?  If that's the case, what's the point in the core 'npwm'
> parameter?  Surely that's "channels per device"?

Well, it's technically "channels per _chip_". Perhaps the confusion is
with the historical naming: a PWM channel is represented by a struct
pwm_device, whereas what I think you're referring to as device (as in
"channels per device") is represented as a struct pwm_chip.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: thierry.reding@gmail.com (Thierry Reding)
To: linux-arm-kernel@lists.infradead.org
Subject: [RESEND 01/11] pwm: Add PWM Capture support
Date: Wed, 13 Apr 2016 16:50:24 +0200	[thread overview]
Message-ID: <20160413145024.GA29509@ulmo.ba.sec> (raw)
In-Reply-To: <20160413093605.GN8094@x1>

On Wed, Apr 13, 2016 at 10:36:05AM +0100, Lee Jones wrote:
> On Tue, 12 Apr 2016, Thierry Reding wrote:
> 
> > On Wed, Mar 02, 2016 at 03:31:59PM +0000, Lee Jones wrote:
> > > Supply a PWM Capture call-back Op in order to pass back
> > > information obtained by running analysis on PWM a signal.
> > > This would normally (at least during testing) be called from
> > > the Sysfs routines with a view to printing out PWM Capture
> > > data which has been encoded into a string.
> > > 
> > > Signed-off-by: Lee Jones <lee.jones@linaro.org>
> > > ---
> > >  drivers/pwm/core.c  | 26 ++++++++++++++++++++++++++
> > >  include/linux/pwm.h | 13 +++++++++++++
> > >  2 files changed, 39 insertions(+)
> > 
> > Overall I like the concept of introducing this capture functionality.
> > 
> > However I have a couple of questions, see below.
> > 
> > > diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> > > index d24ca5f..8f4a8a9 100644
> > > --- a/drivers/pwm/core.c
> > > +++ b/drivers/pwm/core.c
> > > @@ -494,6 +494,32 @@ unlock:
> > >  EXPORT_SYMBOL_GPL(pwm_set_polarity);
> > >  
> > >  /**
> > > + * pwm_capture() - capture and report a PWM signal
> > > + * @pwm: PWM device
> > > + * @channel: PWM capture channel to use
> > > + * @buf: buffer to place output message into
> > > + *
> > > + * Returns: 0 on success or a negative error code on failure.
> > > + */
> > > +int pwm_capture(struct pwm_device *pwm, int channel, char *buf)
> > 
> > This public interface seems to be targetted specifically at sysfs. As
> > such I'm not sure if there is reason to make it public, since the code
> > is unlikely to ever be called by other users in the kernel.
> > 
> > Do you think it would be possible to make the interface more generic by
> > passing back some form of structure containing the capture result? That
> > way users within the kernel could use the result without having to go
> > and parse a string filled in by the driver. It would also be easy to
> > implement sysfs support on top of that. Another advantage is that there
> > would be a standard result structure rather than a free-form string
> > filled by drivers that can't be controlled.
> > 
> > What kind of result does the STi hardware return? Looking at the driver
> > later in the series it seems to support triggering interrupts on rising
> > and falling edges and capture some running counter at these events. If
> > the frequency of the counter increment is known, these numbers should
> > allow us to determine both the period and duty cycle of the PWM signal
> > in nanoseconds. Would it be possible to rewrite this function and the
> > driver patch to something like this:
> > 
> > 	int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result);
> > 
> > Where
> > 
> > 	struct pwm_capture {
> > 		unsigned int period;
> > 		unsigned int duty_cycle;
> > 	};
> > 
> > ?
> 
> Yes, I think that sounds feasible.
> 
> > Another thing I noticed is that the code here seems to be confusing
> > channels and devices. In the PWM subsystem a struct pwm_device
> > represents a single channel. Allowing the channel to be specified is
> > redundant at best, and confusing at worst.
> 
> On the STi platform I'm working on, we have 2 devices PWM{0,1} and
> each device has 4 separate channels [0..3].  Not all of them support
> PWM capture, but the channels are 'a thing'.  I'd need to look into it
> further, but I guess you'd like the driver to pretend we have 8
> devices?  If that's the case, what's the point in the core 'npwm'
> parameter?  Surely that's "channels per device"?

Well, it's technically "channels per _chip_". Perhaps the confusion is
with the historical naming: a PWM channel is represented by a struct
pwm_device, whereas what I think you're referring to as device (as in
"channels per device") is represented as a struct pwm_chip.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160413/4e71a232/attachment.sig>

  reply	other threads:[~2016-04-13 14:50 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 [this message]
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
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=20160413145024.GA29509@ulmo.ba.sec \
    --to=thierry.reding@gmail.com \
    --cc=ajitpal.singh@st.com \
    --cc=kernel@stlinux.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=maxime.coquelin@st.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.