From: Lee Jones <lee.jones@linaro.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Samuel Ortiz <sameo@linux.intel.com>,
Jonathan Cameron <jic23@kernel.org>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Zubair Lutfullah <zubair.lutfullah@gmail.com>,
Felipe Balbi <balbi@ti.com>,
linux-iio@vger.kernel.org, linux-input@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/5] mfd: input: iio: ti_amm335x: Rework TSC/ADC synchronization
Date: Thu, 19 Dec 2013 17:18:23 +0000 [thread overview]
Message-ID: <20131219171823.GC16145@lee--X1> (raw)
In-Reply-To: <1387466911-3732-6-git-send-email-bigeasy@linutronix.de>
On Thu, 19 Dec 2013, Sebastian Andrzej Siewior wrote:
> The ADC driver always programs all possible ADC values and discards
> them except for the value IIO asked for. On the am335x-evm the driver
> programs four values and it takes 500us to gather them. Reducing the number
> of conversations down to the (required) one also reduces the busy loop down
> to 125us.
>
> This leads to another error, namely the FIFOCOUNT register is sometimes
> (like one out of 10 attempts) not updated in time leading to EBUSY.
> The next read has the FIFOCOUNT register updated.
> Checking for the ADCSTAT register for being idle isn't a good choice either.
> The problem is that if TSC is used at the same time, the HW completes the
> conversation for ADC *and* before the driver noticed it, the HW begins to
> perform a TSC conversation and so the driver never seen the HW idle. The
> next time we would have two values in the FIFO but since the driver reads
> everything we always see the current one.
> So instead of polling for the IDLE bit in ADCStatus register, we should
> check the FIFOCOUNT register. It should be one instead of zero because we
> request one value.
>
> This change in turn leads to another error. Sometimes if TSC & ADC are
> used together the TSC starts becoming interrupts even if nobody
> actually touched the touchscreen. The interrupts seem valid because TSC's
> FIFO is filled with values for each channel of the TSC. This condition stops
> after a few ADC reads but will occur again. Not good.
>
> On top of this (even without the changes I just mentioned) there is a ADC
> & TSC lockup condition which was reported to me by Jeff Lance including the
> following test case:
> A busy loop of "cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw"
> and a mug on touch screen. With this setup, the hardware will lockup after
> something between 20 minutes and it could take up to a couple of hours.
> During that lockup, the ADCSTAT register says 0x30 (or 0x70) which means
> STEP_ID = IDLE and FSM_BUSY = yes. That means the hardware says that it is
> idle and busy at the same time which is an invalid condition.
>
> For all this reasons I decided to rework this TSC/ADC part and add a
> handshake / synchronization here:
> First the ADC signals that it needs the HW and writes a 0 mask into the
> SE register. The HW (if active) will complete the current conversation
> and become idle. The TSC driver will gather the values from the FIFO
> (woken up by an interrupt) and won't "enable" another conversation.
> Instead it will wake up the ADC driver which is already waiting. The ADC
> driver will start "its" conversation and once it is done, it will
> enable the TSC steps so the TSC will work again.
>
> After this rework I haven't observed the lockup so far. Plus the busy
> loop has been reduced from 500us to 125us.
>
> The continues-read mode remains unchanged.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> drivers/iio/adc/ti_am335x_adc.c | 64 ++++++++++++++++++++++++++----------
> drivers/mfd/ti_am335x_tscadc.c | 63 +++++++++++++++++++++++++++++------
> include/linux/mfd/ti_am335x_tscadc.h | 4 +++
Assuming nothing else has changed since the answers you gave me:
Acked-by: Lee Jones <lee.jones@linaro.org>
Once we have the remaining Acks I'll happily apply this patch-set.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2013-12-19 17:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-19 15:28 am335x: IIO/ADC fixes if used together with TSC, v2 Sebastian Andrzej Siewior
2013-12-19 15:28 ` [PATCH 1/5] iio: ti_am335x_adc: Adjust the closing bracket in tiadc_read_raw() Sebastian Andrzej Siewior
2013-12-22 16:55 ` Jonathan Cameron
2014-01-06 9:36 ` Lee Jones
2013-12-19 15:28 ` [PATCH 2/5] mfd: ti_am335x_tscadc: Make am335x_tsc_se_update() local Sebastian Andrzej Siewior
2013-12-19 17:16 ` Lee Jones
2013-12-19 15:28 ` [PATCH 3/5] mfd: ti_am335x_tscadc: Don't read back REG_SE Sebastian Andrzej Siewior
[not found] ` <1387466911-3732-4-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-12-22 17:46 ` Jonathan Cameron
2014-01-06 9:35 ` Lee Jones
2014-01-06 18:10 ` Dmitry Torokhov
2013-12-19 15:28 ` [PATCH 4/5] mfd: ti_am335x: Drop am335x_tsc_se_update() from resume path Sebastian Andrzej Siewior
2013-12-22 17:48 ` Jonathan Cameron
2013-12-19 15:28 ` [PATCH 5/5] mfd: input: iio: ti_amm335x: Rework TSC/ADC synchronization Sebastian Andrzej Siewior
2013-12-19 17:18 ` Lee Jones [this message]
2013-12-19 18:53 ` Sebastian Andrzej Siewior
[not found] ` <1387466911-3732-6-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-12-19 19:01 ` Zubair Lutfullah :
2013-12-22 18:03 ` Jonathan Cameron
[not found] ` <1387466911-3732-1-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2014-01-07 8:54 ` am335x: IIO/ADC fixes if used together with TSC, v2 Lee Jones
2014-01-08 8:03 ` Dmitry Torokhov
[not found] ` <20140108080359.GA16527-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2014-01-08 8:08 ` 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=20131219171823.GC16145@lee--X1 \
--to=lee.jones@linaro.org \
--cc=balbi@ti.com \
--cc=bigeasy@linutronix.de \
--cc=dmitry.torokhov@gmail.com \
--cc=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sameo@linux.intel.com \
--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).