RE: [PATCH 4/6] iio: accel: bmg160: optimize transfers in trigger handler

From: Tirdea, Irina
Date: Mon Mar 28 2016 - 12:05:31 EST




> -----Original Message-----
> From: Peter Meerwald-Stadler [mailto:pmeerw@xxxxxxxxxx]
> Sent: 28 March, 2016 13:09
> To: Jonathan Cameron
> Cc: Tirdea, Irina; linux-iio@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Hartmut Knaack; Lars-Peter Clausen; Purdila, Octavian;
> Markus Pargmann; Pandruvada, Srinivas
> Subject: Re: [PATCH 4/6] iio: accel: bmg160: optimize transfers in trigger handler
>
>

Thanks for the review, Peter!

> > > Some i2c busses (e.g.: Synopsys DesignWare I2C adapter) need to
> > > enable/disable the bus at each i2c transfer and must wait for
> > > the enable/disable to happen before sending the data.
> > >
> > > When reading data in the trigger handler, the bmc150 accel driver does
>
> should refer to bmg160
>
> > > one bus transfer for each axis. This has an impact on the frequency
> > > of the accelerometer at high sample rates due to additional delays
> > > introduced by the bus at each transfer.
> > >
> > > Reading all axis values in one bus transfer reduces the delays
> > > introduced by the bus.
> > >
> > > Signed-off-by: Irina Tirdea <irina.tirdea@xxxxxxxxx>
> > I forgot to highlight on the earlier driver that there is also 'technically'
> > a bit of an ABI change here because we are now exporting as LE rather than CPU
> > order. However, I 'hope' anyone actually accessing the buffered data is either
> > doing it through a nice library or hasn't hacked the endian unwinding out of
> > the generic_buffer example!
>
> the patch takes away the possibility to do buffered reads on individual
> channels (not sure if this is useful per se)

We can still read individual channels, but the demux is now handled by the iio core
(through available_scan_masks, added in the previous patch).

As Jonathan mentioned in a previous patch, this will impact performance for reading
only a subset of the available channels (since we will read all 3 axes regardless of
how many axes the user actually requested and will receive).
>
> this optimizes for the common case, ok;
>
> wondering if adding
> .endianness = IIO_LE
> is actually an unrelated fix
>

Thanks for catching this!
I already covered this point in the reply to Jonathan.

Thanks,
Irina