linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Jonathan Cameron <jic23@cam.ac.uk>
Cc: Ge Gao <ggao@invensense.com>, linux-iio@vger.kernel.org
Subject: Re: different data rate in IIO ?
Date: Tue, 01 May 2012 15:33:38 +0200	[thread overview]
Message-ID: <4F9FE632.3040308@metafoo.de> (raw)
In-Reply-To: <4F9FE357.6050004@cam.ac.uk>

On 05/01/2012 03:21 PM, Jonathan Cameron wrote:
> On 5/1/2012 10:19 AM, Lars-Peter Clausen wrote:
>> On 04/30/2012 10:03 PM, Ge Gao wrote:
>>> Dear all,
>>> I am currently developing a driver for a chip that has gyro,
>>> accelerometer and compass sensor together and these sensor data could
>>> come
>>> at different rate. There could be more data coming from this chip
>>> because
>>> this chip has on-chip CPU to do some data processing. The IIO
>>> subsystem is
>>> in some sense "fixed" once "enable" is 1. "Fixed" means the element and
>>> sequence inside ring buffer is fixed. For example, if MPU9150,
>>> which is a 9-axis chip, containing gyro, accelerometer and compass, is
>>> developed, the
>>> ring buffer would have byte_per_datum of 32 bytes(6 + 6 + 6  = 18; 18
>>> rounding up to 24; and 24 plus timestamp) if all sensors and all axis
>>> are
>>> enabled . So every data packet should contain this amount of data no
>>> matter what. If I have gyro running at 200 HZ, accelerometer running at
>>> 100Hz and compass running at 50 Hz, this will have problems. Because I
>>> can't provide accelerometer data and compass data for each packet. Some
>>> packets could miss data. I have to fake data for these packets,
>>> either by
>>> repeating or other non-standard ways.  Is this supposed to be?
>>> Because we
>>> could have other data item which is even slower(10HZ quaternion data,
>>> for
>>> example). This way, it will be more trouble. Because each data
>>> element has
>>> different rate, while IIO needs them at the same rate.
>>>                  The best way is to have a header for each packet to
>>> indicate what packet it is. But this way seems to violate the design
>>> goal
>>> of IIO.  That would be more like input subsystem because input subsystem
>>> uses different code type to distinguish different type of data thus
>>> allowing different data type mixed together. If such driver is written,
>>> all files under "scan_element" would be meaningless and useless.
>>>     I got some suggestions about using multiple IIO devices in one
>>> driver because one IIO device can only has one ring buffer. It could
>>> be OK
>>> to handle this. However, since IIO device allocation is to allocate the
>>> private data directly along with IIO device, it seems one IIO driver can
>>> only have one IIO device. Could IIO kernel accept such practice that one
>>> IIO
>>> driver has more than one IIO device? Or could there be some changes in
>>> the IIO code such that such scenario is taken care of in the future?
>> The multiple IIO devices approach was the first that came to my mind
>> while
>> reading your message. For the private data for these IIO devices you
>> could just
>> allocate the space for one pointer and let it point to your real
>> driver data.
> Either that or don't use iio_priv at all.  Embed the iio_dev structures
> in a containing structure.
> To do this would need the addition of some in place setup functions in
> the core that do
> the non allocation bits of iio_device_alloc and iio_device_free. 

I just wanted to write that this will get you into trouble in regard to the
'struct device' lifetime expectancies. But then I realized that we do have the
same problem already. We free the device in iio_device_free, but this will
cause might cause a use after free if something still holds a reference to the
device at this point. We should free the struct in iio_dev_release.

- Lars

  reply	other threads:[~2012-05-01 13:32 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-30 20:03 different data rate in IIO ? Ge Gao
2012-05-01  9:19 ` Lars-Peter Clausen
2012-05-01 13:21   ` Jonathan Cameron
2012-05-01 13:33     ` Lars-Peter Clausen [this message]
2012-05-01 13:50       ` Jonathan Cameron
2012-05-01 14:05         ` Lars-Peter Clausen
2012-05-01 14:15           ` Lars-Peter Clausen
2012-05-01 14:50             ` Jonathan Cameron
2012-05-01 18:03               ` Lars-Peter Clausen
2012-05-01 18:05                 ` Jonathan Cameron
2012-05-01 18:28                   ` Ge Gao
2012-05-01 22:47                     ` Kerry Keal
2012-05-02  8:29                       ` Jonathan Cameron
2012-05-02  8:32                     ` Jonathan Cameron
  -- strict thread matches above, loose matches on Subject: below --
2012-04-30 20:08 Ge Gao

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=4F9FE632.3040308@metafoo.de \
    --to=lars@metafoo.de \
    --cc=ggao@invensense.com \
    --cc=jic23@cam.ac.uk \
    --cc=linux-iio@vger.kernel.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).