From: jic23@cam.ac.uk (Jonathan Cameron)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver.
Date: Thu, 20 Oct 2011 10:19:15 +0100 [thread overview]
Message-ID: <4E9FE793.3050208@cam.ac.uk> (raw)
In-Reply-To: <20111020104919.303e3133@skate>
On 10/20/11 09:49, Thomas Petazzoni wrote:
> Le Thu, 20 Oct 2011 09:33:29 +0100,
> Jonathan Cameron <jic23@cam.ac.uk> a ?crit :
>
>>> * Should we have some low-level ADC driver in arch/arm/mach-at91/ that
>>> allows to request/release/access the ADC channels, this driver
>>> providing an internal kernel API used by the IIO ADC driver and the
>>> touchscreen driver ?
>> That's definitely not going to go down well against moves to move everything
>> that looks like a driver out of the arch directories. An equivalent somewhere
>> else might work though.
>
> Yes, of course if this needs to be implemented, it should be in some
> other location than arch/arm, but not sure where (which is basically
> the discussion that was started some time ago).
>
>> Agreed. This is currently up in the air. The current state of those IIO
>> hooks is that they do pull only. Push based capture is tricky as for IIO
>> we want to control the triggering of the push at a far finer scale than
>> makes sense for input. I'm not yet clear how these two will play together.
>
> My IIO knowledge is still too limited to understand what's the problem
> with exposing an API for push-based capture.
I'll give a quick summary:
Push in IIO is done from a trigger (imagine an oscilloscope). Those triggers
may be supplied by a dataready signal or from somewhere entirely different.
Also multiple devices can be triggered by the same signal. Thus the dataready
from one chip can trigger a whole load of others.
Right now filtering functions prevent some devices from using anything other than
their own trigger. Setting defaults is also possible. If anything is then registered
to receive the data the trigger cannot be changed anyway so that will work here.
The other bit that makes it complex is the data flow.
This is done in the form of scans of a set of channels. The description of these
are more or less available to the core. Note the scan you get may well have
more channels in it than you explicitly requested.
These scans are then pushed into one of a set of different buffers. Note
All of the scan is currently pushed. That makes sense if you only have one
user of the data. Right now the pushing is done by the individual drivers
but this could pass through the core.
So things that stand in the way of more general use:
1) Userspace controlled triggers (apply to whole ADC) - can lock these down if
say a touchscreen driver is using the device.
2) Single output stream of data.
3) Note there is deliberately no metadata in the stream. It is all out of band.
Push to one driver is easy. Anything else needs a demux that is aware of the
stream contents. This bit doesn't exist and looks non trivial. The real
trick is going to be keeping it light and fast (or entirely out of the
way when not needed.)
At some point I'll have a play with rerouting the data so such a demux
can sit in the current flow (can use it to kill off unwanted channels).
>
>> If we sit something underneath the IIO and input drivers (or use the lower
>> portions of IIO to do this) then the intent would be to have a fully generic
>> input touchscreen driver on top. I'm not sure that's possible.
>
> I am not sure it's possible to make the touchscreen driver generic. On
> the G45, the ADC IP has some generic ADC registers, but also some
> touchscreen-specific registers. So the touchscreen driver probably
> cannot be completely generic and some cooperation between the AT91 ADC
> driver and the AT91 touchscreen driver might be needed. I'd have to
> look into more details on how the AT91 touchscreen thing works to
> provide some more details here.
>
>> For example are the switches on the G45's adc (from datasheet) something that
>> all/many similar touch screen controllers have?
>
> I have no idea.
>
> However, I have also seen a platform (SuperH 2A) where ADC channels are
> used for keypad handling. 4 ADCs channels, each connected to 4 keys,
> each having a different resistor. Depending on the voltage measured at
> the ADC, you're capable of knowing which key of the 4x4 keypad is
> pressed. This is a different situation where the ADC values need to be
> used by another in-kernel driver.
That one is much easier to handle and indeed not that uncommon a hack.
It really is just using the ADCs to get a value. Hence with suitable
descriptive map it's easy to write a generic driver for it.
Even easier if it's simply polled ;)
>
> Regards,
>
> Thomas
next prev parent reply other threads:[~2011-10-20 9:19 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-19 16:18 [PATCH] AT91: Add a driver for the ADC Maxime Ripard
2011-10-19 16:18 ` [PATCH 1/3] ARM: AT91: Add platform data for the ADCs Maxime Ripard
2011-10-19 16:18 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-10-19 16:42 ` Jonathan Cameron
2011-10-19 18:23 ` Maxime Ripard
2011-10-20 7:05 ` Thomas Petazzoni
2011-10-20 8:33 ` Jonathan Cameron
2011-10-20 8:49 ` Thomas Petazzoni
2011-10-20 9:19 ` Jonathan Cameron [this message]
2011-10-20 9:52 ` Mark Brown
2011-10-20 7:09 ` Lars-Peter Clausen
2011-10-21 17:54 ` Maxime Ripard
2011-10-21 17:55 ` Lars-Peter Clausen
2011-10-23 9:08 ` Jean-Christophe PLAGNIOL-VILLARD
2011-10-24 8:21 ` Maxime Ripard
2011-10-19 16:18 ` [PATCH 3/3] ARM: AT91: Add the ADC to the sam9g20ek board Maxime Ripard
2011-10-20 6:28 ` Alexander Stein
2011-10-21 17:47 ` Maxime Ripard
2011-10-20 7:14 ` Thomas Petazzoni
2011-11-03 10:11 ` [PATCHv2] AT91: Add a driver for the ADC Maxime Ripard
2011-11-03 10:11 ` [PATCH 1/3] ARM: AT91: Add platform data for the ADCs Maxime Ripard
2011-11-03 11:27 ` Linus Walleij
2011-11-03 16:27 ` Maxime Ripard
2011-11-03 16:38 ` Linus Walleij
2011-11-03 18:05 ` Jean-Christophe PLAGNIOL-VILLARD
2011-11-04 10:27 ` Jonathan Cameron
2011-11-04 10:36 ` Jonathan Cameron
2011-11-04 10:34 ` Jonathan Cameron
2011-11-04 15:22 ` Maxime Ripard
2011-11-04 16:28 ` Jonathan Cameron
2011-11-03 10:11 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-04 10:27 ` Jonathan Cameron
2011-11-04 16:29 ` Maxime Ripard
2011-11-04 16:40 ` Jonathan Cameron
2011-11-03 10:11 ` [PATCH 3/3] ARM: AT91: Add the ADC to the sam9g20ek board Maxime Ripard
2011-11-04 10:33 ` Jonathan Cameron
2011-11-04 11:25 ` Maxime Ripard
2011-11-04 15:52 ` Linus Walleij
2011-11-04 16:32 ` Jonathan Cameron
2011-11-07 16:08 ` [PATCHv3] AT91: Add a driver for the ADC Maxime Ripard
2011-11-07 16:08 ` [PATCH 1/3] ARM: AT91: Add platform data for the ADCs Maxime Ripard
2011-11-07 16:27 ` Jonathan Cameron
2011-11-08 13:19 ` Thomas Petazzoni
2011-11-07 16:08 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-08 13:30 ` Thomas Petazzoni
2011-11-07 16:08 ` [PATCH 3/3] ARM: AT91: Add the ADC to the sam9g20ek board Maxime Ripard
2011-11-09 10:19 ` [PATCHv4] AT91: Add a driver for the ADC Maxime Ripard
2011-11-09 10:19 ` [PATCH 1/3] ARM: AT91: Add platform data for the ADCs Maxime Ripard
2011-11-09 10:19 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-10 17:35 ` Jonathan Cameron
2011-11-11 12:34 ` Jonathan Cameron
2011-11-14 9:59 ` Maxime Ripard
2011-11-14 9:06 ` Maxime Ripard
2011-11-09 10:19 ` [PATCH 3/3] ARM: AT91: Add the ADC to the sam9g20ek board Maxime Ripard
2011-11-10 17:37 ` Jonathan Cameron
-- strict thread matches above, loose matches on Subject: below --
2011-11-14 10:06 [PATCHv5] AT91: Add a driver for the ADC Maxime Ripard
2011-11-14 10:06 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-14 11:30 ` Nicolas Ferre
2011-11-14 11:37 ` Marek Vasut
2011-11-14 14:23 ` Maxime Ripard
2011-11-14 17:30 [PATCH v6] AT91: Add a driver for the ADC Maxime Ripard
2011-11-14 17:30 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-14 21:32 ` Jonathan Cameron
2011-11-15 10:23 ` Maxime Ripard
2011-11-15 10:54 [PATCH v7] AT91: Add a driver for the ADC Maxime Ripard
2011-11-15 10:54 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-16 15:39 ` Maxime Ripard
2011-11-18 10:12 [PATCH v8] AT91: Add a driver for the ADC Maxime Ripard
2011-11-18 10:12 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-24 11:27 [PATCH v9] AT91: Add a driver for the ADC Maxime Ripard
2011-11-24 11:27 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-24 14:28 ` Jean-Christophe PLAGNIOL-VILLARD
2011-11-30 9:14 [PATCH v11] AT91: Add a driver for the ADC Maxime Ripard
2011-11-30 9:15 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-11-30 17:40 ` Arnd Bergmann
2011-12-02 13:17 [PATCH v12] AT91: Add a driver for the ADC Maxime Ripard
2011-12-02 13:17 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2011-12-14 10:01 [PATCH v13] AT91: Add a driver for the ADC Maxime Ripard
2011-12-14 10:01 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2012-01-16 21:36 [PATCH RESEND v13] AT91: Add a driver for the ADC Maxime Ripard
2012-01-16 21:36 ` [PATCH 2/3] ARM: AT91: IIO: Add AT91 ADC driver Maxime Ripard
2012-01-17 17:35 ` Arnd Bergmann
2012-01-17 19:08 ` Maxime Ripard
2012-01-18 10:27 ` Nicolas Ferre
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=4E9FE793.3050208@cam.ac.uk \
--to=jic23@cam.ac.uk \
--cc=linux-arm-kernel@lists.infradead.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 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).