From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Irina Tirdea
<irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>,
linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Srinivas Pandruvada
<srinivas.pandruvada-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Peter Meerwald <pmeerw-jW+XmwGofnusTnJN9+BGXg@public.gmane.org>
Subject: Re: [PATCH v3 6/8] iio: gyro: bmg160: optimize i2c transfers in trigger handler
Date: Sun, 05 Jul 2015 13:08:15 +0100 [thread overview]
Message-ID: <55991E2F.5020901@kernel.org> (raw)
In-Reply-To: <1435916017-12859-7-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
On 03/07/15 10:33, Irina Tirdea 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 bmg160 driver does
> one i2c transfer for each axis. This has an impact on the frequency
> of the gyroscope at high sample rates due to additional delays
> introduced by the i2c bus at each transfer.
>
> Reading all axis values in one i2c transfer reduces the delays
> introduced by the i2c bus. Uses i2c_smbus_read_i2c_block_data_or_emulated
> that will fallback to reading each axis as a separate word in case i2c
> block read is not supported.
>
> Signed-off-by: Irina Tirdea <irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Acked-by: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Obviously you'll ideally pick up Ack's from the driver authors /maintainers
as well.
Jonathan
> ---
> drivers/iio/gyro/bmg160.c | 18 ++++++++----------
> 1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> index 4b423f2..04e15e9 100644
> --- a/drivers/iio/gyro/bmg160.c
> +++ b/drivers/iio/gyro/bmg160.c
> @@ -784,6 +784,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 \
> @@ -822,19 +823,16 @@ 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;
> + int ret = 0;
>
> mutex_lock(&data->mutex);
> - for (bit = 0; bit < AXIS_MAX; bit++) {
> - ret = i2c_smbus_read_word_data(data->client,
> - BMG160_AXIS_TO_REG(bit));
> - if (ret < 0) {
> - mutex_unlock(&data->mutex);
> - goto err;
> - }
> - data->buffer[i++] = ret;
> - }
> + ret = i2c_smbus_read_i2c_block_data_or_emulated(data->client,
> + BMG160_REG_XOUT_L,
> + AXIS_MAX * 2,
> + (u8 *)data->buffer);
> mutex_unlock(&data->mutex);
> + if (ret < 0)
> + goto err;
>
> iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
> data->timestamp);
>
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron <jic23@kernel.org>
To: Irina Tirdea <irina.tirdea@intel.com>,
Wolfram Sang <wsa@the-dreams.de>,
linux-iio@vger.kernel.org, linux-i2c@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
Srinivas Pandruvada <srinivas.pandruvada@intel.com>,
Peter Meerwald <pmeerw@pmeerw.net>
Subject: Re: [PATCH v3 6/8] iio: gyro: bmg160: optimize i2c transfers in trigger handler
Date: Sun, 05 Jul 2015 13:08:15 +0100 [thread overview]
Message-ID: <55991E2F.5020901@kernel.org> (raw)
In-Reply-To: <1435916017-12859-7-git-send-email-irina.tirdea@intel.com>
On 03/07/15 10:33, Irina Tirdea 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 bmg160 driver does
> one i2c transfer for each axis. This has an impact on the frequency
> of the gyroscope at high sample rates due to additional delays
> introduced by the i2c bus at each transfer.
>
> Reading all axis values in one i2c transfer reduces the delays
> introduced by the i2c bus. Uses i2c_smbus_read_i2c_block_data_or_emulated
> that will fallback to reading each axis as a separate word in case i2c
> block read is not supported.
>
> Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Acked-by: Jonathan Cameron <jic23@kernel.org>
Obviously you'll ideally pick up Ack's from the driver authors /maintainers
as well.
Jonathan
> ---
> drivers/iio/gyro/bmg160.c | 18 ++++++++----------
> 1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> index 4b423f2..04e15e9 100644
> --- a/drivers/iio/gyro/bmg160.c
> +++ b/drivers/iio/gyro/bmg160.c
> @@ -784,6 +784,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 \
> @@ -822,19 +823,16 @@ 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;
> + int ret = 0;
>
> mutex_lock(&data->mutex);
> - for (bit = 0; bit < AXIS_MAX; bit++) {
> - ret = i2c_smbus_read_word_data(data->client,
> - BMG160_AXIS_TO_REG(bit));
> - if (ret < 0) {
> - mutex_unlock(&data->mutex);
> - goto err;
> - }
> - data->buffer[i++] = ret;
> - }
> + ret = i2c_smbus_read_i2c_block_data_or_emulated(data->client,
> + BMG160_REG_XOUT_L,
> + AXIS_MAX * 2,
> + (u8 *)data->buffer);
> mutex_unlock(&data->mutex);
> + if (ret < 0)
> + goto err;
>
> iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
> data->timestamp);
>
next prev parent reply other threads:[~2015-07-05 12:08 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-03 9:33 [PATCH v3 0/8] Add support for best effort block read emulation Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-1-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-03 9:33 ` [PATCH v3 1/8] i2c: core: " Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-2-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-05 11:58 ` Jonathan Cameron
2015-07-05 11:58 ` Jonathan Cameron
[not found] ` <55991BE7.6050705-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2015-07-10 17:14 ` Tirdea, Irina
2015-07-10 17:14 ` Tirdea, Irina
2015-07-10 17:14 ` Tirdea, Irina
[not found] ` <1F3AC3675D538145B1661F571FE1805F2F067FA4-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-07-11 17:40 ` Jonathan Cameron
2015-07-11 17:40 ` Jonathan Cameron
2015-08-01 19:53 ` Wolfram Sang
2015-08-01 19:53 ` Wolfram Sang
2015-08-04 13:51 ` Tirdea, Irina
2015-08-04 13:51 ` Tirdea, Irina
2015-08-04 13:51 ` Tirdea, Irina
2015-07-03 9:33 ` [PATCH v3 2/8] eeprom: at24: use i2c_smbus_read_i2c_block_data_or_emulated Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-3-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-01 19:57 ` Wolfram Sang
2015-08-01 19:57 ` Wolfram Sang
2015-08-04 13:52 ` Tirdea, Irina
2015-08-04 13:52 ` Tirdea, Irina
2015-07-03 9:33 ` [PATCH v3 3/8] iio: accel: bmc150: use available_scan_masks Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-4-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-05 12:10 ` Jonathan Cameron
2015-07-05 12:10 ` Jonathan Cameron
2015-07-03 9:33 ` [PATCH v3 4/8] iio: accel: bmc150: optimize i2c transfers in trigger handler Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
2015-07-05 12:06 ` Jonathan Cameron
2015-07-03 9:33 ` [PATCH v3 6/8] iio: gyro: bmg160: " Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-7-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-05 12:08 ` Jonathan Cameron [this message]
2015-07-05 12:08 ` Jonathan Cameron
2015-07-10 17:31 ` Tirdea, Irina
2015-07-10 17:31 ` Tirdea, Irina
[not found] ` <1F3AC3675D538145B1661F571FE1805F2F068001-pww93C2UFcwu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-07-10 17:46 ` Pandruvada, Srinivas
2015-07-10 17:46 ` Pandruvada, Srinivas
2015-07-10 17:46 ` Pandruvada, Srinivas
2015-07-03 9:33 ` [PATCH v3 8/8] iio: accel: kxcjk-1013: " Irina Tirdea
2015-07-03 9:33 ` Irina Tirdea
[not found] ` <1435916017-12859-9-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-05 12:11 ` Jonathan Cameron
2015-07-05 12:11 ` Jonathan Cameron
2015-07-03 9:33 ` [PATCH v3 5/8] iio: gyro: bmg160: use available_scan_masks Irina Tirdea
2015-07-03 9:33 ` [PATCH v3 7/8] iio: accel: kxcjk-1013: " Irina Tirdea
[not found] ` <1435916017-12859-8-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-07-05 12:10 ` Jonathan Cameron
2015-07-05 12:10 ` 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=55991E2F.5020901@kernel.org \
--to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=pmeerw-jW+XmwGofnusTnJN9+BGXg@public.gmane.org \
--cc=srinivas.pandruvada-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.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 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.