All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
@ 2015-01-29 13:15 Irina Tirdea
  2015-01-30  4:03 ` Viorel Suman
  0 siblings, 1 reply; 7+ messages in thread
From: Irina Tirdea @ 2015-01-29 13:15 UTC (permalink / raw)
  To: Jonathan Cameron, linux-iio
  Cc: linux-kernel, Srinivas Pandruvada, Irina Tirdea

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.

Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
 drivers/iio/gyro/bmg160.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
index 60451b3..814eb20 100644
--- a/drivers/iio/gyro/bmg160.c
+++ b/drivers/iio/gyro/bmg160.c
@@ -115,6 +115,7 @@ enum bmg160_axis {
 	AXIS_X,
 	AXIS_Y,
 	AXIS_Z,
+	AXIS_MAX,
 };
 
 static const struct {
@@ -820,20 +821,21 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
 	struct iio_dev *indio_dev = pf->indio_dev;
 	struct bmg160_data *data = iio_priv(indio_dev);
 	int bit, ret, i = 0;
+	s16 values[AXIS_MAX];
 
 	mutex_lock(&data->mutex);
-	for_each_set_bit(bit, indio_dev->buffer->scan_mask,
-			 indio_dev->masklength) {
-		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(data->client, BMG160_REG_XOUT_L,
+					    sizeof(values), (u8 *) values);
+	if (ret < 0) {
+		mutex_unlock(&data->mutex);
+		goto err;
 	}
 	mutex_unlock(&data->mutex);
 
+	for_each_set_bit(bit, indio_dev->buffer->scan_mask,
+			 indio_dev->masklength)
+		data->buffer[i++] = values[bit];
+
 	iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
 					   data->timestamp);
 err:
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
  2015-01-29 13:15 [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler Irina Tirdea
@ 2015-01-30  4:03 ` Viorel Suman
  2015-02-04 17:27   ` Jonathan Cameron
  0 siblings, 1 reply; 7+ messages in thread
From: Viorel Suman @ 2015-01-30  4:03 UTC (permalink / raw)
  To: Irina Tirdea
  Cc: Jonathan Cameron, linux-iio, linux-kernel, Srinivas Pandruvada

[-- Attachment #1: Type: text/plain, Size: 2918 bytes --]

Hi,

You might need more space in "values" buffer, for more details please check
the
"iio_push_to_buffers_with_timestamp" description and implementation.

Regards,
Viorel


On Thu, Jan 29, 2015 at 3:15 PM, Irina Tirdea <irina.tirdea@intel.com>
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.
>
> Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
> Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
> ---
>  drivers/iio/gyro/bmg160.c | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> index 60451b3..814eb20 100644
> --- a/drivers/iio/gyro/bmg160.c
> +++ b/drivers/iio/gyro/bmg160.c
> @@ -115,6 +115,7 @@ enum bmg160_axis {
>         AXIS_X,
>         AXIS_Y,
>         AXIS_Z,
> +       AXIS_MAX,
>  };
>
>  static const struct {
> @@ -820,20 +821,21 @@ static irqreturn_t bmg160_trigger_handler(int irq,
> void *p)
>         struct iio_dev *indio_dev = pf->indio_dev;
>         struct bmg160_data *data = iio_priv(indio_dev);
>         int bit, ret, i = 0;
> +       s16 values[AXIS_MAX];
>
>         mutex_lock(&data->mutex);
> -       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> -                        indio_dev->masklength) {
> -               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(data->client,
> BMG160_REG_XOUT_L,
> +                                           sizeof(values), (u8 *) values);
> +       if (ret < 0) {
> +               mutex_unlock(&data->mutex);
> +               goto err;
>         }
>         mutex_unlock(&data->mutex);
>
> +       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> +                        indio_dev->masklength)
> +               data->buffer[i++] = values[bit];
> +
>         iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
>                                            data->timestamp);
>  err:
> --
> 1.9.1
>
> --
> 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
>

[-- Attachment #2: Type: text/html, Size: 4103 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
  2015-01-30  4:03 ` Viorel Suman
@ 2015-02-04 17:27   ` Jonathan Cameron
  2015-02-04 20:39       ` Pandruvada, Srinivas
  0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2015-02-04 17:27 UTC (permalink / raw)
  To: Viorel Suman, Irina Tirdea; +Cc: linux-iio, linux-kernel, Srinivas Pandruvada

On 30/01/15 04:03, Viorel Suman wrote:
> Hi,
> 
> You might need more space in "values" buffer, for more details please check the
> "iio_push_to_buffers_with_timestamp" description and implementation.
Whilst that function is a little 'odd', this patch doesn't change the use
of buffer (simply how it if filled).  The buffer is 16bytes long
(8 x s16) so should be fine (4 x 16 bit and 1 x 64 bit).

More problematically, we have using a new smbus capability here
(to read it one transaction).  It's one you can check for, so I'm guessing
we aren't guaranteed it is present.
I2C_FUNC_SMBUS_READ_I2C_BLOCK 
 
Jonathan
> 
> Regards,
> Viorel
> 
> 
> On Thu, Jan 29, 2015 at 3:15 PM, Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>> 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.
> 
>     Signed-off-by: Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>>
>     Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com <mailto:srinivas.pandruvada@linux.intel.com>>
>     ---
>      drivers/iio/gyro/bmg160.c | 20 +++++++++++---------
>      1 file changed, 11 insertions(+), 9 deletions(-)
> 
>     diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
>     index 60451b3..814eb20 100644
>     --- a/drivers/iio/gyro/bmg160.c
>     +++ b/drivers/iio/gyro/bmg160.c
>     @@ -115,6 +115,7 @@ enum bmg160_axis {
>             AXIS_X,
>             AXIS_Y,
>             AXIS_Z,
>     +       AXIS_MAX,
>      };
> 
>      static const struct {
>     @@ -820,20 +821,21 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
>             struct iio_dev *indio_dev = pf->indio_dev;
>             struct bmg160_data *data = iio_priv(indio_dev);
>             int bit, ret, i = 0;
>     +       s16 values[AXIS_MAX];
> 
>             mutex_lock(&data->mutex);
>     -       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
>     -                        indio_dev->masklength) {
>     -               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(data->client, BMG160_REG_XOUT_L,
>     +                                           sizeof(values), (u8 *) values);
>     +       if (ret < 0) {
>     +               mutex_unlock(&data->mutex);
>     +               goto err;
>             }
>             mutex_unlock(&data->mutex);
> 
>     +       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
>     +                        indio_dev->masklength)
>     +               data->buffer[i++] = values[bit];
>     +
>             iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
>                                                data->timestamp);
>      err:
>     --
>     1.9.1
> 
>     --
>     To unsubscribe from this list: send the line "unsubscribe linux-iio" in
>     the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>     More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
  2015-02-04 17:27   ` Jonathan Cameron
@ 2015-02-04 20:39       ` Pandruvada, Srinivas
  0 siblings, 0 replies; 7+ messages in thread
From: Pandruvada, Srinivas @ 2015-02-04 20:39 UTC (permalink / raw)
  To: jic23; +Cc: linux-kernel, linux-iio, Tirdea, Irina, viorel.suman

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 4369 bytes --]

On Wed, 2015-02-04 at 17:27 +0000, Jonathan Cameron wrote:
> On 30/01/15 04:03, Viorel Suman wrote:
> > Hi,
> > 
> > You might need more space in "values" buffer, for more details please check the
> > "iio_push_to_buffers_with_timestamp" description and implementation.
> Whilst that function is a little 'odd', this patch doesn't change the use
> of buffer (simply how it if filled).  The buffer is 16bytes long
> (8 x s16) so should be fine (4 x 16 bit and 1 x 64 bit).
> 
> More problematically, we have using a new smbus capability here
> (to read it one transaction).  It's one you can check for, so I'm guessing
> we aren't guaranteed it is present.
> I2C_FUNC_SMBUS_READ_I2C_BLOCK 
Good catch. We should add
  if (i2c_check_functionality(client->adapter,
I2C_FUNC_SMBUS_READ_I2C_BLOCK) in probe and use this otherwise revert to
old method.

Thanks,
Srinivas

>  
> Jonathan
> > 
> > Regards,
> > Viorel
> > 
> > 
> > On Thu, Jan 29, 2015 at 3:15 PM, Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>> 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.
> > 
> >     Signed-off-by: Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>>
> >     Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com <mailto:srinivas.pandruvada@linux.intel.com>>
> >     ---
> >      drivers/iio/gyro/bmg160.c | 20 +++++++++++---------
> >      1 file changed, 11 insertions(+), 9 deletions(-)
> > 
> >     diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> >     index 60451b3..814eb20 100644
> >     --- a/drivers/iio/gyro/bmg160.c
> >     +++ b/drivers/iio/gyro/bmg160.c
> >     @@ -115,6 +115,7 @@ enum bmg160_axis {
> >             AXIS_X,
> >             AXIS_Y,
> >             AXIS_Z,
> >     +       AXIS_MAX,
> >      };
> > 
> >      static const struct {
> >     @@ -820,20 +821,21 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
> >             struct iio_dev *indio_dev = pf->indio_dev;
> >             struct bmg160_data *data = iio_priv(indio_dev);
> >             int bit, ret, i = 0;
> >     +       s16 values[AXIS_MAX];
> > 
> >             mutex_lock(&data->mutex);
> >     -       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> >     -                        indio_dev->masklength) {
> >     -               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(data->client, BMG160_REG_XOUT_L,
> >     +                                           sizeof(values), (u8 *) values);
> >     +       if (ret < 0) {
> >     +               mutex_unlock(&data->mutex);
> >     +               goto err;
> >             }
> >             mutex_unlock(&data->mutex);
> > 
> >     +       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> >     +                        indio_dev->masklength)
> >     +               data->buffer[i++] = values[bit];
> >     +
> >             iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
> >                                                data->timestamp);
> >      err:
> >     --
> >     1.9.1
> > 
> >     --
> >     To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> >     the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
> >     More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 
> > 
> 

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
@ 2015-02-04 20:39       ` Pandruvada, Srinivas
  0 siblings, 0 replies; 7+ messages in thread
From: Pandruvada, Srinivas @ 2015-02-04 20:39 UTC (permalink / raw)
  To: jic23; +Cc: linux-kernel, linux-iio, Tirdea, Irina, viorel.suman

T24gV2VkLCAyMDE1LTAyLTA0IGF0IDE3OjI3ICswMDAwLCBKb25hdGhhbiBDYW1lcm9uIHdyb3Rl
Og0KPiBPbiAzMC8wMS8xNSAwNDowMywgVmlvcmVsIFN1bWFuIHdyb3RlOg0KPiA+IEhpLA0KPiA+
IA0KPiA+IFlvdSBtaWdodCBuZWVkIG1vcmUgc3BhY2UgaW4gInZhbHVlcyIgYnVmZmVyLCBmb3Ig
bW9yZSBkZXRhaWxzIHBsZWFzZSBjaGVjayB0aGUNCj4gPiAiaWlvX3B1c2hfdG9fYnVmZmVyc193
aXRoX3RpbWVzdGFtcCIgZGVzY3JpcHRpb24gYW5kIGltcGxlbWVudGF0aW9uLg0KPiBXaGlsc3Qg
dGhhdCBmdW5jdGlvbiBpcyBhIGxpdHRsZSAnb2RkJywgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5n
ZSB0aGUgdXNlDQo+IG9mIGJ1ZmZlciAoc2ltcGx5IGhvdyBpdCBpZiBmaWxsZWQpLiAgVGhlIGJ1
ZmZlciBpcyAxNmJ5dGVzIGxvbmcNCj4gKDggeCBzMTYpIHNvIHNob3VsZCBiZSBmaW5lICg0IHgg
MTYgYml0IGFuZCAxIHggNjQgYml0KS4NCj4gDQo+IE1vcmUgcHJvYmxlbWF0aWNhbGx5LCB3ZSBo
YXZlIHVzaW5nIGEgbmV3IHNtYnVzIGNhcGFiaWxpdHkgaGVyZQ0KPiAodG8gcmVhZCBpdCBvbmUg
dHJhbnNhY3Rpb24pLiAgSXQncyBvbmUgeW91IGNhbiBjaGVjayBmb3IsIHNvIEknbSBndWVzc2lu
Zw0KPiB3ZSBhcmVuJ3QgZ3VhcmFudGVlZCBpdCBpcyBwcmVzZW50Lg0KPiBJMkNfRlVOQ19TTUJV
U19SRUFEX0kyQ19CTE9DSyANCkdvb2QgY2F0Y2guIFdlIHNob3VsZCBhZGQNCiAgaWYgKGkyY19j
aGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwNCkkyQ19GVU5DX1NNQlVTX1JFQURf
STJDX0JMT0NLKSBpbiBwcm9iZSBhbmQgdXNlIHRoaXMgb3RoZXJ3aXNlIHJldmVydCB0bw0Kb2xk
IG1ldGhvZC4NCg0KVGhhbmtzLA0KU3Jpbml2YXMNCg0KPiAgDQo+IEpvbmF0aGFuDQo+ID4gDQo+
ID4gUmVnYXJkcywNCj4gPiBWaW9yZWwNCj4gPiANCj4gPiANCj4gPiBPbiBUaHUsIEphbiAyOSwg
MjAxNSBhdCAzOjE1IFBNLCBJcmluYSBUaXJkZWEgPGlyaW5hLnRpcmRlYUBpbnRlbC5jb20gPG1h
aWx0bzppcmluYS50aXJkZWFAaW50ZWwuY29tPj4gd3JvdGU6DQo+ID4gDQo+ID4gICAgIFNvbWUg
aTJjIGJ1c3NlcyAoZS5nLjogU3lub3BzeXMgRGVzaWduV2FyZSBJMkMgYWRhcHRlcikgbmVlZCB0
bw0KPiA+ICAgICBlbmFibGUvZGlzYWJsZSB0aGUgYnVzIGF0IGVhY2ggaTJjIHRyYW5zZmVyIGFu
ZCBtdXN0IHdhaXQgZm9yDQo+ID4gICAgIHRoZSBlbmFibGUvZGlzYWJsZSB0byBoYXBwZW4gYmVm
b3JlIHNlbmRpbmcgdGhlIGRhdGEuDQo+ID4gDQo+ID4gICAgIFdoZW4gcmVhZGluZyBkYXRhIGlu
IHRoZSB0cmlnZ2VyIGhhbmRsZXIsIHRoZSBibWcxNjAgZHJpdmVyIGRvZXMNCj4gPiAgICAgb25l
IGkyYyB0cmFuc2ZlciBmb3IgZWFjaCBheGlzLiBUaGlzIGhhcyBhbiBpbXBhY3Qgb24gdGhlIGZy
ZXF1ZW5jeQ0KPiA+ICAgICBvZiB0aGUgZ3lyb3Njb3BlIGF0IGhpZ2ggc2FtcGxlIHJhdGVzIGR1
ZSB0byBhZGRpdGlvbmFsIGRlbGF5cw0KPiA+ICAgICBpbnRyb2R1Y2VkIGJ5IHRoZSBpMmMgYnVz
IGF0IGVhY2ggdHJhbnNmZXIuDQo+ID4gDQo+ID4gICAgIFJlYWRpbmcgYWxsIGF4aXMgdmFsdWVz
IGluIG9uZSBpMmMgdHJhbnNmZXIgcmVkdWNlcyB0aGUgZGVsYXlzDQo+ID4gICAgIGludHJvZHVj
ZWQgYnkgdGhlIGkyYyBidXMuDQo+ID4gDQo+ID4gICAgIFNpZ25lZC1vZmYtYnk6IElyaW5hIFRp
cmRlYSA8aXJpbmEudGlyZGVhQGludGVsLmNvbSA8bWFpbHRvOmlyaW5hLnRpcmRlYUBpbnRlbC5j
b20+Pg0KPiA+ICAgICBSZXZpZXdlZC1ieTogU3Jpbml2YXMgUGFuZHJ1dmFkYSA8c3Jpbml2YXMu
cGFuZHJ1dmFkYUBsaW51eC5pbnRlbC5jb20gPG1haWx0bzpzcmluaXZhcy5wYW5kcnV2YWRhQGxp
bnV4LmludGVsLmNvbT4+DQo+ID4gICAgIC0tLQ0KPiA+ICAgICAgZHJpdmVycy9paW8vZ3lyby9i
bWcxNjAuYyB8IDIwICsrKysrKysrKysrLS0tLS0tLS0tDQo+ID4gICAgICAxIGZpbGUgY2hhbmdl
ZCwgMTEgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkNCj4gPiANCj4gPiAgICAgZGlmZiAt
LWdpdCBhL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMgYi9kcml2ZXJzL2lpby9neXJvL2JtZzE2
MC5jDQo+ID4gICAgIGluZGV4IDYwNDUxYjMuLjgxNGViMjAgMTAwNjQ0DQo+ID4gICAgIC0tLSBh
L2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMNCj4gPiAgICAgKysrIGIvZHJpdmVycy9paW8vZ3ly
by9ibWcxNjAuYw0KPiA+ICAgICBAQCAtMTE1LDYgKzExNSw3IEBAIGVudW0gYm1nMTYwX2F4aXMg
ew0KPiA+ICAgICAgICAgICAgIEFYSVNfWCwNCj4gPiAgICAgICAgICAgICBBWElTX1ksDQo+ID4g
ICAgICAgICAgICAgQVhJU19aLA0KPiA+ICAgICArICAgICAgIEFYSVNfTUFYLA0KPiA+ICAgICAg
fTsNCj4gPiANCj4gPiAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KPiA+ICAgICBAQCAtODIw
LDIwICs4MjEsMjEgQEAgc3RhdGljIGlycXJldHVybl90IGJtZzE2MF90cmlnZ2VyX2hhbmRsZXIo
aW50IGlycSwgdm9pZCAqcCkNCj4gPiAgICAgICAgICAgICBzdHJ1Y3QgaWlvX2RldiAqaW5kaW9f
ZGV2ID0gcGYtPmluZGlvX2RldjsNCj4gPiAgICAgICAgICAgICBzdHJ1Y3QgYm1nMTYwX2RhdGEg
KmRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0KPiA+ICAgICAgICAgICAgIGludCBiaXQsIHJl
dCwgaSA9IDA7DQo+ID4gICAgICsgICAgICAgczE2IHZhbHVlc1tBWElTX01BWF07DQo+ID4gDQo+
ID4gICAgICAgICAgICAgbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOw0KPiA+ICAgICAtICAgICAg
IGZvcl9lYWNoX3NldF9iaXQoYml0LCBpbmRpb19kZXYtPmJ1ZmZlci0+c2Nhbl9tYXNrLA0KPiA+
ICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgaW5kaW9fZGV2LT5tYXNrbGVuZ3RoKSB7DQo+
ID4gICAgIC0gICAgICAgICAgICAgICByZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoZGF0
YS0+Y2xpZW50LA0KPiA+ICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJNRzE2MF9BWElTX1RPX1JFRyhiaXQpKTsNCj4gPiAgICAgLSAgICAgICAgICAg
ICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gICAgIC0gICAgICAgICAgICAgICAgICAgICAgIG11dGV4
X3VubG9jaygmZGF0YS0+bXV0ZXgpOw0KPiA+ICAgICAtICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGVycjsNCj4gPiAgICAgLSAgICAgICAgICAgICAgIH0NCj4gPiAgICAgLSAgICAgICAgICAg
ICAgIGRhdGEtPmJ1ZmZlcltpKytdID0gcmV0Ow0KPiA+ICAgICArICAgICAgIHJldCA9IGkyY19z
bWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRhdGEtPmNsaWVudCwgQk1HMTYwX1JFR19YT1VUX0ws
DQo+ID4gICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKHZhbHVlcyksICh1OCAqKSB2YWx1ZXMpOw0KPiA+ICAgICArICAgICAgIGlmIChyZXQgPCAw
KSB7DQo+ID4gICAgICsgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsN
Cj4gPiAgICAgKyAgICAgICAgICAgICAgIGdvdG8gZXJyOw0KPiA+ICAgICAgICAgICAgIH0NCj4g
PiAgICAgICAgICAgICBtdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsNCj4gPiANCj4gPiAgICAg
KyAgICAgICBmb3JfZWFjaF9zZXRfYml0KGJpdCwgaW5kaW9fZGV2LT5idWZmZXItPnNjYW5fbWFz
aywNCj4gPiAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGlvX2Rldi0+bWFza2xlbmd0
aCkNCj4gPiAgICAgKyAgICAgICAgICAgICAgIGRhdGEtPmJ1ZmZlcltpKytdID0gdmFsdWVzW2Jp
dF07DQo+ID4gICAgICsNCj4gPiAgICAgICAgICAgICBpaW9fcHVzaF90b19idWZmZXJzX3dpdGhf
dGltZXN0YW1wKGluZGlvX2RldiwgZGF0YS0+YnVmZmVyLA0KPiA+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dGltZXN0YW1wKTsNCj4gPiAgICAg
IGVycjoNCj4gPiAgICAgLS0NCj4gPiAgICAgMS45LjENCj4gPiANCj4gPiAgICAgLS0NCj4gPiAg
ICAgVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2Ny
aWJlIGxpbnV4LWlpbyIgaW4NCj4gPiAgICAgdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y
ZG9tb0B2Z2VyLmtlcm5lbC5vcmcgPG1haWx0bzptYWpvcmRvbW9Admdlci5rZXJuZWwub3JnPg0K
PiA+ICAgICBNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21h
am9yZG9tby1pbmZvLmh0bWwNCj4gPiANCj4gPiANCj4gDQoNCg==

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
  2015-02-04 20:39       ` Pandruvada, Srinivas
@ 2015-02-16 17:58         ` Tirdea, Irina
  -1 siblings, 0 replies; 7+ messages in thread
From: Tirdea, Irina @ 2015-02-16 17:58 UTC (permalink / raw)
  To: Pandruvada, Srinivas, jic23; +Cc: linux-kernel, linux-iio, viorel.suman

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 4933 bytes --]



> -----Original Message-----
> From: Pandruvada, Srinivas
> Sent: 04 February, 2015 22:39
> To: jic23@kernel.org
> Cc: linux-kernel@vger.kernel.org; linux-iio@vger.kernel.org; Tirdea, Irina; viorel.suman@gmail.com
> Subject: Re: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
> 
> On Wed, 2015-02-04 at 17:27 +0000, Jonathan Cameron wrote:
> > On 30/01/15 04:03, Viorel Suman wrote:
> > > Hi,
> > >
> > > You might need more space in "values" buffer, for more details please check the
> > > "iio_push_to_buffers_with_timestamp" description and implementation.
> > Whilst that function is a little 'odd', this patch doesn't change the use
> > of buffer (simply how it if filled).  The buffer is 16bytes long
> > (8 x s16) so should be fine (4 x 16 bit and 1 x 64 bit).
> >
> > More problematically, we have using a new smbus capability here
> > (to read it one transaction).  It's one you can check for, so I'm guessing
> > we aren't guaranteed it is present.
> > I2C_FUNC_SMBUS_READ_I2C_BLOCK
> Good catch. We should add
>   if (i2c_check_functionality(client->adapter,
> I2C_FUNC_SMBUS_READ_I2C_BLOCK) in probe and use this otherwise revert to
> old method.
> 
Thanks for the review, Jonathan and Srinivas!
Will fix this in next version.
> Thanks,
> Srinivas
> 
> >
> > Jonathan
> > >
> > > Regards,
> > > Viorel
> > >
> > >
> > > On Thu, Jan 29, 2015 at 3:15 PM, Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>> 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.
> > >
> > >     Signed-off-by: Irina Tirdea <irina.tirdea@intel.com <mailto:irina.tirdea@intel.com>>
> > >     Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com <mailto:srinivas.pandruvada@linux.intel.com>>
> > >     ---
> > >      drivers/iio/gyro/bmg160.c | 20 +++++++++++---------
> > >      1 file changed, 11 insertions(+), 9 deletions(-)
> > >
> > >     diff --git a/drivers/iio/gyro/bmg160.c b/drivers/iio/gyro/bmg160.c
> > >     index 60451b3..814eb20 100644
> > >     --- a/drivers/iio/gyro/bmg160.c
> > >     +++ b/drivers/iio/gyro/bmg160.c
> > >     @@ -115,6 +115,7 @@ enum bmg160_axis {
> > >             AXIS_X,
> > >             AXIS_Y,
> > >             AXIS_Z,
> > >     +       AXIS_MAX,
> > >      };
> > >
> > >      static const struct {
> > >     @@ -820,20 +821,21 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
> > >             struct iio_dev *indio_dev = pf->indio_dev;
> > >             struct bmg160_data *data = iio_priv(indio_dev);
> > >             int bit, ret, i = 0;
> > >     +       s16 values[AXIS_MAX];
> > >
> > >             mutex_lock(&data->mutex);
> > >     -       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> > >     -                        indio_dev->masklength) {
> > >     -               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(data->client, BMG160_REG_XOUT_L,
> > >     +                                           sizeof(values), (u8 *) values);
> > >     +       if (ret < 0) {
> > >     +               mutex_unlock(&data->mutex);
> > >     +               goto err;
> > >             }
> > >             mutex_unlock(&data->mutex);
> > >
> > >     +       for_each_set_bit(bit, indio_dev->buffer->scan_mask,
> > >     +                        indio_dev->masklength)
> > >     +               data->buffer[i++] = values[bit];
> > >     +
> > >             iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
> > >                                                data->timestamp);
> > >      err:
> > >     --
> > >     1.9.1
> > >
> > >     --
> > >     To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> > >     the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
> > >     More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > >
> > >
> >

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler
@ 2015-02-16 17:58         ` Tirdea, Irina
  0 siblings, 0 replies; 7+ messages in thread
From: Tirdea, Irina @ 2015-02-16 17:58 UTC (permalink / raw)
  To: Pandruvada, Srinivas, jic23; +Cc: linux-kernel, linux-iio, viorel.suman

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGFuZHJ1dmFkYSwgU3Jp
bml2YXMNCj4gU2VudDogMDQgRmVicnVhcnksIDIwMTUgMjI6MzkNCj4gVG86IGppYzIzQGtlcm5l
bC5vcmcNCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWlpb0B2Z2Vy
Lmtlcm5lbC5vcmc7IFRpcmRlYSwgSXJpbmE7IHZpb3JlbC5zdW1hbkBnbWFpbC5jb20NCj4gU3Vi
amVjdDogUmU6IFtQQVRDSF0gaWlvOiBneXJvOiBibWcxNjA6IG9wdGltaXplIGkyYyB0cmFuc2Zl
cnMgaW4gdHJpZ2dlciBoYW5kbGVyDQo+IA0KPiBPbiBXZWQsIDIwMTUtMDItMDQgYXQgMTc6Mjcg
KzAwMDAsIEpvbmF0aGFuIENhbWVyb24gd3JvdGU6DQo+ID4gT24gMzAvMDEvMTUgMDQ6MDMsIFZp
b3JlbCBTdW1hbiB3cm90ZToNCj4gPiA+IEhpLA0KPiA+ID4NCj4gPiA+IFlvdSBtaWdodCBuZWVk
IG1vcmUgc3BhY2UgaW4gInZhbHVlcyIgYnVmZmVyLCBmb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBj
aGVjayB0aGUNCj4gPiA+ICJpaW9fcHVzaF90b19idWZmZXJzX3dpdGhfdGltZXN0YW1wIiBkZXNj
cmlwdGlvbiBhbmQgaW1wbGVtZW50YXRpb24uDQo+ID4gV2hpbHN0IHRoYXQgZnVuY3Rpb24gaXMg
YSBsaXR0bGUgJ29kZCcsIHRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgdGhlIHVzZQ0KPiA+IG9m
IGJ1ZmZlciAoc2ltcGx5IGhvdyBpdCBpZiBmaWxsZWQpLiAgVGhlIGJ1ZmZlciBpcyAxNmJ5dGVz
IGxvbmcNCj4gPiAoOCB4IHMxNikgc28gc2hvdWxkIGJlIGZpbmUgKDQgeCAxNiBiaXQgYW5kIDEg
eCA2NCBiaXQpLg0KPiA+DQo+ID4gTW9yZSBwcm9ibGVtYXRpY2FsbHksIHdlIGhhdmUgdXNpbmcg
YSBuZXcgc21idXMgY2FwYWJpbGl0eSBoZXJlDQo+ID4gKHRvIHJlYWQgaXQgb25lIHRyYW5zYWN0
aW9uKS4gIEl0J3Mgb25lIHlvdSBjYW4gY2hlY2sgZm9yLCBzbyBJJ20gZ3Vlc3NpbmcNCj4gPiB3
ZSBhcmVuJ3QgZ3VhcmFudGVlZCBpdCBpcyBwcmVzZW50Lg0KPiA+IEkyQ19GVU5DX1NNQlVTX1JF
QURfSTJDX0JMT0NLDQo+IEdvb2QgY2F0Y2guIFdlIHNob3VsZCBhZGQNCj4gICBpZiAoaTJjX2No
ZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLA0KPiBJMkNfRlVOQ19TTUJVU19SRUFE
X0kyQ19CTE9DSykgaW4gcHJvYmUgYW5kIHVzZSB0aGlzIG90aGVyd2lzZSByZXZlcnQgdG8NCj4g
b2xkIG1ldGhvZC4NCj4gDQpUaGFua3MgZm9yIHRoZSByZXZpZXcsIEpvbmF0aGFuIGFuZCBTcmlu
aXZhcyENCldpbGwgZml4IHRoaXMgaW4gbmV4dCB2ZXJzaW9uLg0KPiBUaGFua3MsDQo+IFNyaW5p
dmFzDQo+IA0KPiA+DQo+ID4gSm9uYXRoYW4NCj4gPiA+DQo+ID4gPiBSZWdhcmRzLA0KPiA+ID4g
VmlvcmVsDQo+ID4gPg0KPiA+ID4NCj4gPiA+IE9uIFRodSwgSmFuIDI5LCAyMDE1IGF0IDM6MTUg
UE0sIElyaW5hIFRpcmRlYSA8aXJpbmEudGlyZGVhQGludGVsLmNvbSA8bWFpbHRvOmlyaW5hLnRp
cmRlYUBpbnRlbC5jb20+PiB3cm90ZToNCj4gPiA+DQo+ID4gPiAgICAgU29tZSBpMmMgYnVzc2Vz
IChlLmcuOiBTeW5vcHN5cyBEZXNpZ25XYXJlIEkyQyBhZGFwdGVyKSBuZWVkIHRvDQo+ID4gPiAg
ICAgZW5hYmxlL2Rpc2FibGUgdGhlIGJ1cyBhdCBlYWNoIGkyYyB0cmFuc2ZlciBhbmQgbXVzdCB3
YWl0IGZvcg0KPiA+ID4gICAgIHRoZSBlbmFibGUvZGlzYWJsZSB0byBoYXBwZW4gYmVmb3JlIHNl
bmRpbmcgdGhlIGRhdGEuDQo+ID4gPg0KPiA+ID4gICAgIFdoZW4gcmVhZGluZyBkYXRhIGluIHRo
ZSB0cmlnZ2VyIGhhbmRsZXIsIHRoZSBibWcxNjAgZHJpdmVyIGRvZXMNCj4gPiA+ICAgICBvbmUg
aTJjIHRyYW5zZmVyIGZvciBlYWNoIGF4aXMuIFRoaXMgaGFzIGFuIGltcGFjdCBvbiB0aGUgZnJl
cXVlbmN5DQo+ID4gPiAgICAgb2YgdGhlIGd5cm9zY29wZSBhdCBoaWdoIHNhbXBsZSByYXRlcyBk
dWUgdG8gYWRkaXRpb25hbCBkZWxheXMNCj4gPiA+ICAgICBpbnRyb2R1Y2VkIGJ5IHRoZSBpMmMg
YnVzIGF0IGVhY2ggdHJhbnNmZXIuDQo+ID4gPg0KPiA+ID4gICAgIFJlYWRpbmcgYWxsIGF4aXMg
dmFsdWVzIGluIG9uZSBpMmMgdHJhbnNmZXIgcmVkdWNlcyB0aGUgZGVsYXlzDQo+ID4gPiAgICAg
aW50cm9kdWNlZCBieSB0aGUgaTJjIGJ1cy4NCj4gPiA+DQo+ID4gPiAgICAgU2lnbmVkLW9mZi1i
eTogSXJpbmEgVGlyZGVhIDxpcmluYS50aXJkZWFAaW50ZWwuY29tIDxtYWlsdG86aXJpbmEudGly
ZGVhQGludGVsLmNvbT4+DQo+ID4gPiAgICAgUmV2aWV3ZWQtYnk6IFNyaW5pdmFzIFBhbmRydXZh
ZGEgPHNyaW5pdmFzLnBhbmRydXZhZGFAbGludXguaW50ZWwuY29tIDxtYWlsdG86c3Jpbml2YXMu
cGFuZHJ1dmFkYUBsaW51eC5pbnRlbC5jb20+Pg0KPiA+ID4gICAgIC0tLQ0KPiA+ID4gICAgICBk
cml2ZXJzL2lpby9neXJvL2JtZzE2MC5jIHwgMjAgKysrKysrKysrKystLS0tLS0tLS0NCj4gPiA+
ICAgICAgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pDQo+
ID4gPg0KPiA+ID4gICAgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2lpby9neXJvL2JtZzE2MC5jIGIv
ZHJpdmVycy9paW8vZ3lyby9ibWcxNjAuYw0KPiA+ID4gICAgIGluZGV4IDYwNDUxYjMuLjgxNGVi
MjAgMTAwNjQ0DQo+ID4gPiAgICAgLS0tIGEvZHJpdmVycy9paW8vZ3lyby9ibWcxNjAuYw0KPiA+
ID4gICAgICsrKyBiL2RyaXZlcnMvaWlvL2d5cm8vYm1nMTYwLmMNCj4gPiA+ICAgICBAQCAtMTE1
LDYgKzExNSw3IEBAIGVudW0gYm1nMTYwX2F4aXMgew0KPiA+ID4gICAgICAgICAgICAgQVhJU19Y
LA0KPiA+ID4gICAgICAgICAgICAgQVhJU19ZLA0KPiA+ID4gICAgICAgICAgICAgQVhJU19aLA0K
PiA+ID4gICAgICsgICAgICAgQVhJU19NQVgsDQo+ID4gPiAgICAgIH07DQo+ID4gPg0KPiA+ID4g
ICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsNCj4gPiA+ICAgICBAQCAtODIwLDIwICs4MjEsMjEg
QEAgc3RhdGljIGlycXJldHVybl90IGJtZzE2MF90cmlnZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9p
ZCAqcCkNCj4gPiA+ICAgICAgICAgICAgIHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBwZi0+
aW5kaW9fZGV2Ow0KPiA+ID4gICAgICAgICAgICAgc3RydWN0IGJtZzE2MF9kYXRhICpkYXRhID0g
aWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiA+ICAgICAgICAgICAgIGludCBiaXQsIHJldCwgaSA9
IDA7DQo+ID4gPiAgICAgKyAgICAgICBzMTYgdmFsdWVzW0FYSVNfTUFYXTsNCj4gPiA+DQo+ID4g
PiAgICAgICAgICAgICBtdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ID4gPiAgICAgLSAgICAg
ICBmb3JfZWFjaF9zZXRfYml0KGJpdCwgaW5kaW9fZGV2LT5idWZmZXItPnNjYW5fbWFzaywNCj4g
PiA+ICAgICAtICAgICAgICAgICAgICAgICAgICAgICAgaW5kaW9fZGV2LT5tYXNrbGVuZ3RoKSB7
DQo+ID4gPiAgICAgLSAgICAgICAgICAgICAgIHJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0
YShkYXRhLT5jbGllbnQsDQo+ID4gPiAgICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCTUcxNjBfQVhJU19UT19SRUcoYml0KSk7DQo+ID4gPiAgICAgLSAg
ICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gPiAgICAgLSAgICAgICAgICAgICAgICAg
ICAgICAgbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7DQo+ID4gPiAgICAgLSAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBlcnI7DQo+ID4gPiAgICAgLSAgICAgICAgICAgICAgIH0NCj4gPiA+
ICAgICAtICAgICAgICAgICAgICAgZGF0YS0+YnVmZmVyW2krK10gPSByZXQ7DQo+ID4gPiAgICAg
KyAgICAgICByZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShkYXRhLT5jbGllbnQs
IEJNRzE2MF9SRUdfWE9VVF9MLA0KPiA+ID4gICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhbHVlcyksICh1OCAqKSB2YWx1ZXMpOw0KPiA+ID4g
ICAgICsgICAgICAgaWYgKHJldCA8IDApIHsNCj4gPiA+ICAgICArICAgICAgICAgICAgICAgbXV0
ZXhfdW5sb2NrKCZkYXRhLT5tdXRleCk7DQo+ID4gPiAgICAgKyAgICAgICAgICAgICAgIGdvdG8g
ZXJyOw0KPiA+ID4gICAgICAgICAgICAgfQ0KPiA+ID4gICAgICAgICAgICAgbXV0ZXhfdW5sb2Nr
KCZkYXRhLT5tdXRleCk7DQo+ID4gPg0KPiA+ID4gICAgICsgICAgICAgZm9yX2VhY2hfc2V0X2Jp
dChiaXQsIGluZGlvX2Rldi0+YnVmZmVyLT5zY2FuX21hc2ssDQo+ID4gPiAgICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGlvX2Rldi0+bWFza2xlbmd0aCkNCj4gPiA+ICAgICArICAgICAg
ICAgICAgICAgZGF0YS0+YnVmZmVyW2krK10gPSB2YWx1ZXNbYml0XTsNCj4gPiA+ICAgICArDQo+
ID4gPiAgICAgICAgICAgICBpaW9fcHVzaF90b19idWZmZXJzX3dpdGhfdGltZXN0YW1wKGluZGlv
X2RldiwgZGF0YS0+YnVmZmVyLA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLT50aW1lc3RhbXApOw0KPiA+ID4gICAgICBlcnI6DQo+ID4g
PiAgICAgLS0NCj4gPiA+ICAgICAxLjkuMQ0KPiA+ID4NCj4gPiA+ICAgICAtLQ0KPiA+ID4gICAg
IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli
ZSBsaW51eC1paW8iIGluDQo+ID4gPiAgICAgdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9y
ZG9tb0B2Z2VyLmtlcm5lbC5vcmcgPG1haWx0bzptYWpvcmRvbW9Admdlci5rZXJuZWwub3JnPg0K
PiA+ID4gICAgIE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcv
bWFqb3Jkb21vLWluZm8uaHRtbA0KPiA+ID4NCj4gPiA+DQo+ID4NCg0K

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-02-16 17:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-29 13:15 [PATCH] iio: gyro: bmg160: optimize i2c transfers in trigger handler Irina Tirdea
2015-01-30  4:03 ` Viorel Suman
2015-02-04 17:27   ` Jonathan Cameron
2015-02-04 20:39     ` Pandruvada, Srinivas
2015-02-04 20:39       ` Pandruvada, Srinivas
2015-02-16 17:58       ` Tirdea, Irina
2015-02-16 17:58         ` Tirdea, Irina

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.