From: "Zubair Lutfullah :" <zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Jonathan Cameron
<jic23-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org>
Cc: Zubair Lutfullah
<zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org,
dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support
Date: Thu, 19 Sep 2013 10:24:34 +0500 [thread overview]
Message-ID: <20130919052419.GB4363@gmail.com> (raw)
In-Reply-To: <5239B197.2040807-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org>
On Wed, Sep 18, 2013 at 02:58:47PM +0100, Jonathan Cameron wrote:
> On 18/09/13 12:23, Zubair Lutfullah wrote:
> >Previously the driver had only one-shot reading functionality.
> >This patch adds continuous sampling support to the driver.
> >
...
>
> Very very nearly there. Couple of suggestions in-line.
> (about 30 seconds work + testing ;)
Thank-you so much. Makes me want to put in more work and finish it :)
>
> I'm still unsure of why we need 32bit storage in the fifo
> for the data. I've proposed the changes I'd make to put it in 16 bit
> storage inline. The fact that the device is working in 32bits
> is irrelevant given we only have a 12 bit number coming out and
> it is in 12 least significant bits. I guess there might be a tiny
> cost in doing the conversion, but you kfifo will be half the size
> as a result and that seems more likely to a worthwhile gain!
>
I understand and will make the changes.
> Out of interest, are you testing this with generic_buffer.c?
> If so, what changes were necessary? Given this driver will not
> have a trigger it would be nice to update that example code to handle
> that case if it doesn't already.
I simply remove the lines like goto err_trigger etc. :p
Sneaky but works. I wasn't sure how to make the code understand its a
INDIO_BUFFER_HARDWARE..
But this is a separate discussion..
>
>
> >---
> > drivers/iio/adc/ti_am335x_adc.c | 216 +++++++++++++++++++++++++++++++++-
> > include/linux/mfd/ti_am335x_tscadc.h | 9 ++
> > 2 files changed, 220 insertions(+), 5 deletions(-)
> >
> >diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
...
> >
> > struct tiadc_device {
> > struct ti_tscadc_dev *mfd_tscadc;
> > int channels;
> > u8 channel_line[8];
> > u8 channel_step[8];
> >+ int buffer_en_ch_steps;
> >+ u32 *data;
> u16 *data;
>
> Also it might actually save memory to simply have a fixed size array
> of the maximum size used here and avoid the extra allocations for
> the cost
> of 16 bytes in here.
>
> Hence,
>
> u16 data[8];
> > };
Why data[8]? The length is dynamic.
This would be valid for the usual one sample per trigger case.
But here its continuous sampling and the hardware pushes samples
*quickly*
Dynamic allocation is needed.
...
> >+static irqreturn_t tiadc_worker_h(int irq, void *private)
> >+{
> >+ struct iio_dev *indio_dev = private;
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+ int i, k, fifo1count, read;
> >+ u32 *data = adc_dev->data;
> u16* data = adc_dev->data;
> >+
> >+ fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
> >+ for (k = 0; k < fifo1count; k = k + i) {
> >+ for (i = 0; i < (indio_dev->scan_bytes)/4; i++) {
> >+ read = tiadc_readl(adc_dev, REG_FIFO1);
> >+ data[i] = read & FIFOREAD_DATA_MASK;
> //This is a 12 bit number after the mask so will fit just fine into 16 bits.
Indeed
...
> >+
> >+static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
> >+{
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+ struct iio_buffer *buffer = indio_dev->buffer;
> >+ unsigned int enb = 0;
> >+ u8 bit;
> >+
> (can drop this if doing the array with adc_dev as suggested above)
> >+ adc_dev->data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
> >+ if (adc_dev->data == NULL)
> >+ return -ENOMEM;
As explained previously. Large array.. This is needed..
...
> >+{
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+
> >+ tiadc_step_config(indio_dev);
> (can drop this if doing the array withing adc_dev as suggested above)
> >+ kfree(adc_dev->data);
> This is also missbalanced with the preenable (which is true of quite
> a few drivers - one day I'll clean those up!)
Misbalanced? :s
> >+
> >+ return 0;
> >+}
>
Thanks for the review and feedback.
I'll resend the patches with 16 bit everything and dynamic allocation.
Zubair
>
WARNING: multiple messages have this Message-ID (diff)
From: "Zubair Lutfullah :" <zubair.lutfullah@gmail.com>
To: Jonathan Cameron <jic23@jic23.retrosnub.co.uk>
Cc: Zubair Lutfullah <zubair.lutfullah@gmail.com>,
jic23@cam.ac.uk, dmitry.torokhov@gmail.com,
linux-iio@vger.kernel.org, linux-input@vger.kernel.org,
linux-kernel@vger.kernel.org, bigeasy@linutronix.de,
gregkh@linuxfoundation.org
Subject: Re: [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support
Date: Thu, 19 Sep 2013 10:24:34 +0500 [thread overview]
Message-ID: <20130919052419.GB4363@gmail.com> (raw)
In-Reply-To: <5239B197.2040807@jic23.retrosnub.co.uk>
On Wed, Sep 18, 2013 at 02:58:47PM +0100, Jonathan Cameron wrote:
> On 18/09/13 12:23, Zubair Lutfullah wrote:
> >Previously the driver had only one-shot reading functionality.
> >This patch adds continuous sampling support to the driver.
> >
...
>
> Very very nearly there. Couple of suggestions in-line.
> (about 30 seconds work + testing ;)
Thank-you so much. Makes me want to put in more work and finish it :)
>
> I'm still unsure of why we need 32bit storage in the fifo
> for the data. I've proposed the changes I'd make to put it in 16 bit
> storage inline. The fact that the device is working in 32bits
> is irrelevant given we only have a 12 bit number coming out and
> it is in 12 least significant bits. I guess there might be a tiny
> cost in doing the conversion, but you kfifo will be half the size
> as a result and that seems more likely to a worthwhile gain!
>
I understand and will make the changes.
> Out of interest, are you testing this with generic_buffer.c?
> If so, what changes were necessary? Given this driver will not
> have a trigger it would be nice to update that example code to handle
> that case if it doesn't already.
I simply remove the lines like goto err_trigger etc. :p
Sneaky but works. I wasn't sure how to make the code understand its a
INDIO_BUFFER_HARDWARE..
But this is a separate discussion..
>
>
> >---
> > drivers/iio/adc/ti_am335x_adc.c | 216 +++++++++++++++++++++++++++++++++-
> > include/linux/mfd/ti_am335x_tscadc.h | 9 ++
> > 2 files changed, 220 insertions(+), 5 deletions(-)
> >
> >diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
...
> >
> > struct tiadc_device {
> > struct ti_tscadc_dev *mfd_tscadc;
> > int channels;
> > u8 channel_line[8];
> > u8 channel_step[8];
> >+ int buffer_en_ch_steps;
> >+ u32 *data;
> u16 *data;
>
> Also it might actually save memory to simply have a fixed size array
> of the maximum size used here and avoid the extra allocations for
> the cost
> of 16 bytes in here.
>
> Hence,
>
> u16 data[8];
> > };
Why data[8]? The length is dynamic.
This would be valid for the usual one sample per trigger case.
But here its continuous sampling and the hardware pushes samples
*quickly*
Dynamic allocation is needed.
...
> >+static irqreturn_t tiadc_worker_h(int irq, void *private)
> >+{
> >+ struct iio_dev *indio_dev = private;
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+ int i, k, fifo1count, read;
> >+ u32 *data = adc_dev->data;
> u16* data = adc_dev->data;
> >+
> >+ fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
> >+ for (k = 0; k < fifo1count; k = k + i) {
> >+ for (i = 0; i < (indio_dev->scan_bytes)/4; i++) {
> >+ read = tiadc_readl(adc_dev, REG_FIFO1);
> >+ data[i] = read & FIFOREAD_DATA_MASK;
> //This is a 12 bit number after the mask so will fit just fine into 16 bits.
Indeed
...
> >+
> >+static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
> >+{
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+ struct iio_buffer *buffer = indio_dev->buffer;
> >+ unsigned int enb = 0;
> >+ u8 bit;
> >+
> (can drop this if doing the array with adc_dev as suggested above)
> >+ adc_dev->data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
> >+ if (adc_dev->data == NULL)
> >+ return -ENOMEM;
As explained previously. Large array.. This is needed..
...
> >+{
> >+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
> >+
> >+ tiadc_step_config(indio_dev);
> (can drop this if doing the array withing adc_dev as suggested above)
> >+ kfree(adc_dev->data);
> This is also missbalanced with the preenable (which is true of quite
> a few drivers - one day I'll clean those up!)
Misbalanced? :s
> >+
> >+ return 0;
> >+}
>
Thanks for the review and feedback.
I'll resend the patches with 16 bit everything and dynamic allocation.
Zubair
>
next prev parent reply other threads:[~2013-09-19 5:24 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-18 11:23 [PATCH V10 0/2] iio: input: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
[not found] ` <1379503383-17086-1-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 11:23 ` [PATCH 1/2] input: ti_am335x_tsc: Enable shared IRQ for TSC Zubair Lutfullah
2013-09-18 11:23 ` Zubair Lutfullah
2013-09-18 11:23 ` [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
[not found] ` <1379503383-17086-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 13:58 ` Jonathan Cameron
2013-09-18 13:58 ` Jonathan Cameron
[not found] ` <5239B197.2040807-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org>
2013-09-19 5:24 ` Zubair Lutfullah : [this message]
2013-09-19 5:24 ` Zubair Lutfullah :
[not found] ` <20130919052419.GB4363-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-19 5:41 ` Jonathan Cameron
2013-09-19 5:41 ` Jonathan Cameron
2013-09-19 5:41 ` Jonathan Cameron
[not found] ` <085d9527-c80e-4307-b8b9-c008976b4be1-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2013-09-19 5:55 ` Zubair Lutfullah :
2013-09-19 5:55 ` Zubair Lutfullah :
2013-10-07 11:53 ` Testing ti_am335x_adc continuous mode (WAS: Re: [PATCH 2/2] Sebastian Andrzej Siewior
2013-10-07 11:53 ` Sebastian Andrzej Siewior
2013-10-07 12:50 ` Zubair Lutfullah :
2013-10-07 12:50 ` Zubair Lutfullah :
2013-10-07 12:59 ` Sebastian Andrzej Siewior
2013-10-07 13:18 ` Zubair Lutfullah :
2013-10-07 13:26 ` Sebastian Andrzej Siewior
-- strict thread matches above, loose matches on Subject: below --
2013-09-17 4:44 [PATCH V9 0/2] iio: input: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
2013-09-17 4:44 ` [PATCH 2/2] iio: " Zubair Lutfullah
[not found] ` <1379393047-11772-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 4:27 ` Dmitry Torokhov
2013-09-18 4:27 ` Dmitry Torokhov
[not found] ` <20130918042726.GB13196-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-09-18 6:54 ` Zubair Lutfullah :
2013-09-18 6:54 ` Zubair Lutfullah :
[not found] ` <20130918065406.GA13451-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 9:39 ` Jonathan Cameron
2013-09-18 9:39 ` Jonathan Cameron
[not found] ` <53771776-0d33-436d-9687-995ed0d6345d-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2013-09-18 11:25 ` Zubair Lutfullah :
2013-09-18 11:25 ` Zubair Lutfullah :
2013-09-18 14:15 ` Dmitry Torokhov
2013-09-18 14:15 ` Dmitry Torokhov
[not found] ` <20130918141533.GA16424-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-09-18 16:12 ` Jonathan Cameron
2013-09-18 16:12 ` Jonathan Cameron
2013-09-18 16:24 ` Dmitry Torokhov
[not found] ` <20130918162442.GA14803-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-09-18 17:05 ` Jonathan Cameron
2013-09-18 17:05 ` Jonathan Cameron
2013-09-19 5:16 ` Zubair Lutfullah :
[not found] ` <20130919051611.GA4363-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-19 5:33 ` Jonathan Cameron
2013-09-19 5:33 ` Jonathan Cameron
2013-09-01 11:17 [PATCH V8 0/2] iio: input: ti_am335x_tscadc: Add continuous sampling support to adc Zubair Lutfullah
2013-09-01 11:17 ` [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
[not found] ` <1378034277-26728-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-08 13:42 ` Jonathan Cameron
2013-09-08 13:42 ` Jonathan Cameron
[not found] ` <522C7EDB.7090306-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-09-11 16:02 ` Zubair Lutfullah :
2013-09-11 16:02 ` Zubair Lutfullah :
2013-09-01 11:07 [PATCH V7 0/2] iio: input: ti_am335x_tscadc: Add continuous sampling support to adc Zubair Lutfullah
2013-09-01 11:07 ` [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
2013-08-25 22:45 [PATCH V6 0/2] iio: input: " Zubair Lutfullah
[not found] ` <1377470724-15710-1-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-25 22:45 ` [PATCH 2/2] iio: " Zubair Lutfullah
2013-08-25 22:45 ` Zubair Lutfullah
2013-08-27 8:42 ` Lee Jones
2013-08-27 8:42 ` Lee Jones
2013-08-28 13:01 ` Sebastian Andrzej Siewior
2013-08-28 13:01 ` Sebastian Andrzej Siewior
2013-08-28 18:43 ` Zubair Lutfullah :
2013-08-29 7:49 ` Sebastian Andrzej Siewior
[not found] ` <1377470724-15710-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-28 14:18 ` Sebastian Andrzej Siewior
2013-08-28 14:18 ` Sebastian Andrzej Siewior
2013-08-28 14:18 ` Sebastian Andrzej Siewior
[not found] ` <20130828141835.GD14111-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-08-28 18:22 ` Zubair Lutfullah :
2013-08-28 18:22 ` Zubair Lutfullah :
2013-08-28 18:38 ` Sebastian Andrzej Siewior
2013-08-28 18:55 ` Zubair Lutfullah :
2013-08-28 16:43 ` Sebastian Andrzej Siewior
2013-08-28 16:43 ` Sebastian Andrzej Siewior
2013-08-28 16:43 ` Sebastian Andrzej Siewior
[not found] ` <20130828164308.GE14111-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-08-28 18:19 ` Zubair Lutfullah :
2013-08-28 18:19 ` Zubair Lutfullah :
2013-08-28 18:35 ` Sebastian Andrzej Siewior
2013-08-28 18:59 ` Zubair Lutfullah :
2013-08-29 7:56 ` Sebastian Andrzej Siewior
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=20130919052419.GB4363@gmail.com \
--to=zubair.lutfullah-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
--cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org \
--cc=jic23-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/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.