* [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@kernel.org Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, Tirdea, Irina, viorel.suman@gmail.com 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 0 siblings, 0 replies; 7+ messages in thread From: Pandruvada, Srinivas @ 2015-02-04 20:39 UTC (permalink / raw) To: jic23@kernel.org Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, Tirdea, Irina, viorel.suman@gmail.com [-- 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 @ 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@kernel.org Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, viorel.suman@gmail.com 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
* 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@kernel.org Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, viorel.suman@gmail.com [-- 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
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.