linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>,
	abhijit <abhijitnaik27@gmail.com>,
	linux-iio@vger.kernel.org,
	Patrick Vasseur <patrick.vasseur@c-s.fr>,
	Michael Hennerich <hennerich@blackfin.uclinux.org>
Subject: IIO Channel Sequencer Handling.  was Re: AD7923 sequencer functionality implementation in Kernel
Date: Mon, 09 Mar 2015 13:49:02 +0000	[thread overview]
Message-ID: <54FDA4CE.5070500@kernel.org> (raw)
In-Reply-To: <54FDA14D.3010803@metafoo.de>

On 09/03/15 13:34, Lars-Peter Clausen wrote:
> On 03/09/2015 02:15 PM, Jonathan Cameron wrote:
>> On 09/03/15 05:28, abhijit wrote:
>>> Hi All,
>>>
>>> We are using AD7923 driver as reference for one of our customer's ADC IP
>>>
>>> The ADC that we are using, has sequencer functionality. In current state of AD7923 driver, there is no support for sequencer functionality.
>>>
>>> Can you please let me know whether the IIO driver team is coming up with design for sequencer functionality of the device.
>> Cc'd Lars, Michael and Patrick.  Looks like a fairly standard sequencer.
>> Just a question of whether anyone has already looked at it.
> 
> I've been tormenting my head now for a while how to properly model
> sequencers in IIO, but haven't come to a conclusion yet.
> 
> The problem is you have one physical channel but a configurable
> amount of logical channels. The ADC will cycle through the selected
> channels one after another.
Ah I'd failed to register we don't have a convenient hardware buffer like
the Maxim parts do.  On those you are cycling but the driver can read
them all at the same time. Obviously the timestamps are less than
great as a result.
> 
> IIO on the other hand expects that all channels that are selected are
> actually converted at the same time. E.g. you have to supply all the
> selected channels at the same time to iio_buffer_push_data() and also
> metadata, like the timestamps, is expected to be supplied only once
> for every set of samples and not for every individual logical
> channel.
Hmm. Could add some more info to the timestamp to let us associate
it with a channel I suppose..  Bit fiddly though.

Not ideal. 
> 
> Furthermore things like the output data rate of each channel depend
> on the number of selected channels. So if you configure the sample
> rate and then change the number of selected channels you potentially
> end up with a different sample rate than initially selected.
For that we can rely on the standard ABI statement that a write to any
attribute can change the value read from any other and just report
the change via the sampling_frequency attribute.  I know that approach
is ugly, but we can't hope to have a coherent way of coping with all
the weird interactions we see on devices.

Short of adding lots of meta data, I guess the easiest would be to
fake what we do in the maxim drivers (with their sequencers feeding
into a fifo) and construct a 'scan' of whatever channels we are reading
with a rather fuzzy timestamp.

We could specify known offsets from the timestamp for the individual
channels.  These ought to be well specified.  Thus a single timestamp
could be used to specify all the individual elements of the scans
timing and have userspace reconstruct whatever timing info it wants.

This functionality would also be useful for clock equipped devices
where we timestamp on the dataready.  Clearly the sample and hold
is usually at least a few ADC clocks before the interrupt.

So would a new infomask element called *_timestampoffset
(positive or negative depending on whether we timestamp on a trigger
 of the sequence or at the end of it) solve that issue?

(just thinking as a type so may well have missed something vital
and haven't written a terribly coherent argument.
> 
> - Lars


  reply	other threads:[~2015-03-09 13:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-09  5:28 AD7923 sequencer functionality implementation in Kernel abhijit
2015-03-09 13:15 ` Jonathan Cameron
2015-03-09 13:34   ` Lars-Peter Clausen
2015-03-09 13:49     ` Jonathan Cameron [this message]
2015-03-10 13:29       ` IIO Channel Sequencer Handling. was " Lars-Peter Clausen
2015-03-21 11:55         ` Jonathan Cameron

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=54FDA4CE.5070500@kernel.org \
    --to=jic23@kernel.org \
    --cc=abhijitnaik27@gmail.com \
    --cc=hennerich@blackfin.uclinux.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=patrick.vasseur@c-s.fr \
    /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).