From: Markus Pargmann <mpa@pengutronix.de>
To: Jonathan Cameron <jic23@kernel.org>
Cc: Irina Tirdea <irina.tirdea@intel.com>,
Wolfram Sang <wsa@the-dreams.de>,
linux-iio@vger.kernel.org, linux-i2c@vger.kernel.org,
linux-kernel@vger.kernel.org,
Srinivas Pandruvada <srinivas.pandruvada@intel.com>,
Peter Meerwald <pmeerw@pmeerw.net>
Subject: Re: [PATCH v5 6/8] iio: gyro: bmg160: optimize i2c transfers in trigger handler
Date: Mon, 17 Aug 2015 11:09:43 +0200 [thread overview]
Message-ID: <20150817090943.GO19600@pengutronix.de> (raw)
In-Reply-To: <55D056DF.5020201@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 3955 bytes --]
On Sun, Aug 16, 2015 at 10:24:47AM +0100, Jonathan Cameron wrote:
> On 12/08/15 15:31, 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>
> > Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> Note, that in the meantime the bmg160 driver just went all regmap
> on us (as part of adding SPI support - though that step hasn't
> happened yet). Hence we'll need a means of telling regmap about this
> possibility.
Perhaps this is covered by a regmap_bulk_read()?
The series[1] I am working on implements a i2c smbus block data regmap
bus driver. Regmap should then automatically do a block read in
regmap_bulk_read.
Patch 15 introduces the i2c block data regmap bus driver[2].
I am only implementing this so I don't break bmc150 behavior. I do not
have the hardware available to test this regmap driver so it would be great
if someone else could test one of the next versions of this bus driver.
Best regards,
Markus
[1] http://thread.gmane.org/gmane.linux.kernel/2018643
[2] http://thread.gmane.org/gmane.linux.kernel/2018639
>
> > ---
> > 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 b2a6ccb..1ff306d 100644
> > --- a/drivers/iio/gyro/bmg160.c
> > +++ b/drivers/iio/gyro/bmg160.c
> > @@ -772,6 +772,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 \
> > @@ -809,19 +810,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,
> > pf->timestamp);
> >
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2015-08-17 9:09 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-12 14:31 [PATCH v5 0/8] Add support for best effort block read emulation Irina Tirdea
[not found] ` <1439389900-10108-1-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-12 14:31 ` [PATCH v5 1/8] i2c: core: " Irina Tirdea
[not found] ` <1439389900-10108-2-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-14 18:23 ` Wolfram Sang
2015-08-12 14:31 ` [PATCH v5 2/8] eeprom: at24: use i2c_smbus_read_i2c_block_data_or_emulated Irina Tirdea
[not found] ` <1439389900-10108-3-git-send-email-irina.tirdea-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-14 18:24 ` Wolfram Sang
2015-08-15 12:56 ` Jonathan Cameron
2015-08-12 14:31 ` [PATCH v5 3/8] iio: accel: bmc150: use available_scan_masks Irina Tirdea
2015-08-12 14:31 ` [PATCH v5 4/8] iio: accel: bmc150: optimize i2c transfers in trigger handler Irina Tirdea
2015-08-12 14:31 ` [PATCH v5 5/8] iio: gyro: bmg160: use available_scan_masks Irina Tirdea
2015-08-12 14:31 ` [PATCH v5 6/8] iio: gyro: bmg160: optimize i2c transfers in trigger handler Irina Tirdea
2015-08-16 9:24 ` Jonathan Cameron
2015-08-17 9:09 ` Markus Pargmann [this message]
[not found] ` <20150817090943.GO19600-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2015-08-17 9:48 ` Tirdea, Irina
2015-08-21 10:21 ` Wolfram Sang
2015-08-21 15:59 ` Pandruvada, Srinivas
[not found] ` <1440172701.4081.1.camel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-08-22 4:02 ` Wolfram Sang
2015-08-22 17:29 ` Jonathan Cameron
2015-08-24 11:49 ` Wolfram Sang
[not found] ` <55D056DF.5020201-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2015-08-17 9:34 ` Tirdea, Irina
2015-08-12 14:31 ` [PATCH v5 7/8] iio: accel: kxcjk-1013: use available_scan_masks Irina Tirdea
2015-08-12 14:31 ` [PATCH v5 8/8] iio: accel: kxcjk-1013: optimize i2c transfers in trigger handler Irina Tirdea
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=20150817090943.GO19600@pengutronix.de \
--to=mpa@pengutronix.de \
--cc=irina.tirdea@intel.com \
--cc=jic23@kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
--cc=srinivas.pandruvada@intel.com \
--cc=wsa@the-dreams.de \
/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).