From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Zubair Lutfullah <zubair.lutfullah@gmail.com>
Cc: jic23@cam.ac.uk, lee.jones@linaro.org, linux-iio@vger.kernel.org,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
gregkh@linuxfoundation.org
Subject: Re: [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support
Date: Wed, 28 Aug 2013 15:01:24 +0200 [thread overview]
Message-ID: <20130828130124.GC14111@linutronix.de> (raw)
In-Reply-To: <1377470724-15710-3-git-send-email-zubair.lutfullah@gmail.com>
* Zubair Lutfullah | 2013-08-25 23:45:24 [+0100]:
I am mostly happy with it. There are just two things I pointed out.
Besides that, it looks good from my side.
>diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
>index a952538..ae2202b 100644
>--- a/drivers/iio/adc/ti_am335x_adc.c
>+++ b/drivers/iio/adc/ti_am335x_adc.c
>@@ -85,7 +96,175 @@ static void tiadc_step_config(struct tiadc_device *adc_dev)
> adc_dev->channel_step[i] = steps;
> steps++;
> }
>+}
>+
>+static irqreturn_t tiadc_irq(int irq, void *private)
>+{
>+ struct iio_dev *indio_dev = private;
>+ struct tiadc_device *adc_dev = iio_priv(indio_dev);
>+ unsigned int status, config;
>+ status = tiadc_readl(adc_dev, REG_IRQSTATUS);
>+
>+ /*
>+ * ADC and touchscreen share the IRQ line.
>+ * FIFO0 interrupts are used by TSC. Handle FIFO1 IRQs here only
>+ */
>+ if (status & IRQENB_FIFO1OVRRUN) {
>+ /* FIFO Overrun. Clear flag. Disable/Enable ADC to recover */
>+ config = tiadc_readl(adc_dev, REG_CTRL);
>+ config &= ~(CNTRLREG_TSCSSENB);
>+ tiadc_writel(adc_dev, REG_CTRL, config);
>+ tiadc_writel(adc_dev, REG_IRQSTATUS, IRQENB_FIFO1OVRRUN
>+ | IRQENB_FIFO1UNDRFLW | IRQENB_FIFO1THRES);
>+ tiadc_writel(adc_dev, REG_CTRL, (config | CNTRLREG_TSCSSENB));
>+ } else if (status & IRQENB_FIFO1THRES) {
>+ /* Trigger to push FIFO data to iio buffer */
>+ tiadc_writel(adc_dev, REG_IRQCLR, IRQENB_FIFO1THRES);
>+ iio_trigger_poll(indio_dev->trig, iio_get_time_ns());
>+ } else
>+ return IRQ_NONE;
>+
>+ /* If any IRQ flags left, return none. So TSC can handle its IRQs */
>+ status = tiadc_readl(adc_dev, REG_IRQSTATUS);
>+ if (status == false)
>+ return IRQ_HANDLED;
>+ else
>+ return IRQ_NONE;
As I said in 1/2 of this series, you shouldn't do this. Both handlers of a
shared line are invoked once an interrupt is detected.
…
>+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, stepnum;
>+ u8 bit;
>+
>+ adc_dev->data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
>+ if (adc_dev->data == NULL)
>+ return -ENOMEM;
>+
>+ tiadc_step_config(indio_dev);
>+ for_each_set_bit(bit, buffer->scan_mask,
>+ adc_dev->channels) {
>+ struct iio_chan_spec const *chan = indio_dev->channels + bit;
>+ /*
>+ * There are a total of 16 steps available
>+ * that are shared between ADC and touchscreen.
>+ * We start configuring from step 16 to 0 incase of
>+ * ADC. Hence the relation between input channel
>+ * and step for ADC would be as below.
>+ */
>+ stepnum = chan->channel + 9;
>+ enb |= (1 << stepnum);
Hmm. This looks odd.
In tiadc_step_config() we do:
| steps = TOTAL_STEPS - adc_dev->channels;
|…
| for (i = 0; i < adc_dev->channels; i++) {
| chan = adc_dev->channel_line[i];
| tiadc_writel(adc_dev,
| REG_STEPCONFIG(steps),
| stepconfig
| |
| STEPCONFIG_INP(chan));
| tiadc_writel(adc_dev,
| REG_STEPDELAY(steps),
| STEPCONFIG_OPENDLY);
| adc_dev->channel_step[i]
| =
| steps;
| steps++;
| }
That means if we have only one channel we enable the last step bit /
topmost that is bit 16. For the "default" four channels we get 0x1e000
as mask which means bit 13 to 16.
If you do have only one channel with the number 4 you then
get_adc_step_mask() will compute the correct step mask but here enable
step 14 instead of step 16.
What about the following as replacement?
index 08681d3..3bfcf1b 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -65,6 +65,11 @@ static u32 get_adc_step_mask(struct tiadc_device *adc_dev)
return step_en;
}
+static u32 get_adc_step_bit(struct tiadc_device *adc_dev, int chan)
+{
+ return 1 << adc_dev->channel_step[chan];
+}
+
static void tiadc_step_config(struct iio_dev *indio_dev)
{
struct tiadc_device *adc_dev = iio_priv(indio_dev);
@@ -179,7 +187,7 @@ 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, stepnum;
+ unsigned int enb = 0;
u8 bit;
adc_dev->data = kmalloc(indio_dev->scan_bytes, GFP_KERNEL);
@@ -187,19 +195,8 @@ static int tiadc_buffer_postenable(struct iio_dev *indio_dev)
return -ENOMEM;
tiadc_step_config(indio_dev);
- for_each_set_bit(bit, buffer->scan_mask,
- adc_dev->channels) {
- struct iio_chan_spec const *chan = indio_dev->channels + bit;
- /*
- * There are a total of 16 steps available
- * that are shared between ADC and touchscreen.
- * We start configuring from step 16 to 0 incase of
- * ADC. Hence the relation between input channel
- * and step for ADC would be as below.
- */
- stepnum = chan->channel + 9;
- enb |= (1 << stepnum);
- }
+ for_each_set_bit(bit, buffer->scan_mask, adc_dev->channels)
+ enb |= get_adc_step_bit(adc_dev, bit);
adc_dev->buffer_en_ch_steps = enb;
am335x_tsc_se_set(adc_dev->mfd_tscadc, enb);
Would it work? This is untested but it could work :)
Sebastian
next prev parent reply other threads:[~2013-08-28 13:01 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-25 22:45 [PATCH V6 0/2] iio: input: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
2013-08-25 22:45 ` [PATCH 1/2] input: ti_am335x_tsc: Enable shared IRQ for TSC Zubair Lutfullah
[not found] ` <1377470724-15710-2-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-28 10:42 ` Sebastian Andrzej Siewior
2013-08-28 18:49 ` 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: ti_am335x_adc: Add continuous sampling support Zubair Lutfullah
2013-08-27 8:42 ` Lee Jones
2013-08-28 13:01 ` Sebastian Andrzej Siewior [this message]
2013-08-28 18:43 ` Zubair Lutfullah :
[not found] ` <1377470724-15710-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-28 10:31 ` [PATCH] iio: am335x-iio-adc: select triggered buffer Sebastian Andrzej Siewior
[not found] ` <20130828103134.GA14111-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-08-28 18:32 ` Zubair Lutfullah :
2013-08-28 14:18 ` [PATCH 2/2] iio: ti_am335x_adc: Add continuous sampling support Sebastian Andrzej Siewior
[not found] ` <20130828141835.GD14111-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-08-28 18:22 ` Zubair Lutfullah :
2013-08-28 16:43 ` Sebastian Andrzej Siewior
[not found] ` <20130828164308.GE14111-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-08-28 18:19 ` Zubair Lutfullah :
-- strict thread matches above, loose matches on Subject: below --
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-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
[not found] ` <522C7EDB.7090306-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-09-11 16:02 ` Zubair Lutfullah :
2013-09-17 4:44 [PATCH V9 0/2] iio: input: " 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
[not found] ` <20130918042726.GB13196-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-09-18 6:54 ` Zubair Lutfullah :
[not found] ` <20130918065406.GA13451-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
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 14:15 ` Dmitry Torokhov
[not found] ` <20130918141533.GA16424-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
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-19 5:16 ` Zubair Lutfullah :
[not found] ` <20130919051611.GA4363-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-19 5:33 ` Jonathan Cameron
2013-09-18 11:23 [PATCH V10 0/2] iio: input: " Zubair Lutfullah
2013-09-18 11:23 ` [PATCH 2/2] iio: " Zubair Lutfullah
[not found] ` <1379503383-17086-3-git-send-email-zubair.lutfullah-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-18 13:58 ` Jonathan Cameron
[not found] ` <5239B197.2040807-tko9wxEg+fIOOJlXag/Snyp2UmYkHbXO@public.gmane.org>
2013-09-19 5:24 ` Zubair Lutfullah :
[not found] ` <20130919052419.GB4363-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
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 :
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=20130828130124.GC14111@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=gregkh@linuxfoundation.org \
--cc=jic23@cam.ac.uk \
--cc=lee.jones@linaro.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=zubair.lutfullah@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 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).