From: Jonathan Cameron <jic23@kernel.org>
To: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Cc: Irina Tirdea <irina.tirdea@intel.com>,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Octavian Purdila <octavian.purdila@intel.com>,
Markus Pargmann <mpa@pengutronix.de>,
Srinivas Pandruvada <srinivas.pandruvada@intel.com>
Subject: Re: [PATCH 4/6] iio: accel: bmg160: optimize transfers in trigger handler
Date: Mon, 28 Mar 2016 15:14:43 +0100 [thread overview]
Message-ID: <56F93C53.6070606@kernel.org> (raw)
In-Reply-To: <alpine.DEB.2.02.1603281158290.4312@pmeerw.net>
On 28/03/16 11:09, Peter Meerwald-Stadler wrote:
>
>>> 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
Good spot. It's also a gyroscope, not an accelerometer... I just fixed this
up and repushed out testing.
>
>>> 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@intel.com>
>> 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)
>
> this optimizes for the common case, ok;
>
> wondering if adding
> .endianness = IIO_LE
> is actually an unrelated fix
Good point, when I first read the code I assumed we were moving from an i2c_word
read to a bulk read, thus necessitating this addition. However, we aren't as it
was previously as an i2c_bulk read of 2 bytes...
Irina, could you confirm if this was broken before your patches?
I'll leave this as is, perhaps we need an additional fix patch specifying LE to
put out as a fix.
>
>> Again, fingers crossed this doesn't break anything significant.
>>
>> Applied,
>>
>> Thanks,
>>
>> Jonathan
>>> ---
>>> drivers/iio/gyro/bmg160_core.c | 17 ++++++-----------
>>> 1 file changed, 6 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
>>> index 8d6e5b1..43570b8 100644
>>> --- a/drivers/iio/gyro/bmg160_core.c
>>> +++ b/drivers/iio/gyro/bmg160_core.c
>>> @@ -734,6 +734,7 @@ static const struct iio_event_spec bmg160_event = {
>>> .sign = 's', \
>>> .realbits = 16, \
>>> .storagebits = 16, \
>>> + .endianness = IIO_LE, \
>>> }, \
>>> .event_spec = &bmg160_event, \
>>> .num_event_specs = 1 \
>>> @@ -773,20 +774,14 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
>>> struct iio_poll_func *pf = p;
>>> struct iio_dev *indio_dev = pf->indio_dev;
>>> struct bmg160_data *data = iio_priv(indio_dev);
>>> - int bit, ret, i = 0;
>>> - unsigned int val;
>>> + int ret;
>>>
>>> mutex_lock(&data->mutex);
>>> - for (bit = 0; bit < AXIS_MAX; bit++) {
>>> - ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(bit),
>>> - &val, 2);
>>> - if (ret < 0) {
>>> - mutex_unlock(&data->mutex);
>>> - goto err;
>>> - }
>>> - data->buffer[i++] = ret;
>>> - }
>>> + ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L,
>>> + data->buffer, AXIS_MAX * 2);
>>> mutex_unlock(&data->mutex);
>>> + if (ret < 0)
>>> + goto err;
>>>
>>> iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
>>> pf->timestamp);
>>>
>>
>
next prev parent reply other threads:[~2016-03-28 14:14 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-24 9:29 [PATCH 0/6] Driver optimizations in trigger handler Irina Tirdea
2016-03-24 9:29 ` [PATCH 1/6] iio: accel: bmc150: use available_scan_masks Irina Tirdea
2016-03-28 9:51 ` Jonathan Cameron
2016-03-24 9:29 ` [PATCH 2/6] iio: accel: bmc150: optimize transfers in trigger handler Irina Tirdea
2016-03-28 9:53 ` Jonathan Cameron
2016-03-24 9:29 ` [PATCH 3/6] iio: gyro: bmg160: use available_scan_masks Irina Tirdea
2016-03-28 9:54 ` Jonathan Cameron
2016-03-24 9:29 ` [PATCH 4/6] iio: accel: bmg160: optimize transfers in trigger handler Irina Tirdea
2016-03-28 9:57 ` Jonathan Cameron
2016-03-28 10:09 ` Peter Meerwald-Stadler
2016-03-28 14:14 ` Jonathan Cameron [this message]
2016-03-28 16:03 ` Tirdea, Irina
2016-03-28 16:10 ` Jonathan Cameron
2016-03-28 16:05 ` Tirdea, Irina
2016-03-28 16:05 ` Tirdea, Irina
2016-03-24 9:29 ` [PATCH 5/6] iio: accel: kxcjk-1013: use available_scan_masks Irina Tirdea
2016-03-28 9:58 ` Jonathan Cameron
2016-03-24 9:29 ` [PATCH 6/6] iio: accel: kxcjk-1013: optimize i2c transfers in trigger handler Irina Tirdea
2016-03-28 9:59 ` 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=56F93C53.6070606@kernel.org \
--to=jic23@kernel.org \
--cc=irina.tirdea@intel.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mpa@pengutronix.de \
--cc=octavian.purdila@intel.com \
--cc=pmeerw@pmeerw.net \
--cc=srinivas.pandruvada@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.