From 6b5c4c1c333c7ee542f8541342870b6afe9f1e48 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Mon, 19 Sep 2016 20:12:01 +0000 Subject: [PATCH] The ONLP_I2C_F_USE_BLOCK_READ flag can be used to request block reads from onlp_i2c_dev_read(). --- .../base/any/onlp/src/onlplib/module/inc/onlplib/i2c.h | 4 ++++ packages/base/any/onlp/src/onlplib/module/src/i2c.c | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/base/any/onlp/src/onlplib/module/inc/onlplib/i2c.h b/packages/base/any/onlp/src/onlplib/module/inc/onlplib/i2c.h index 75bbd0fa..39741014 100644 --- a/packages/base/any/onlp/src/onlplib/module/inc/onlplib/i2c.h +++ b/packages/base/any/onlp/src/onlplib/module/inc/onlplib/i2c.h @@ -61,6 +61,10 @@ */ #define ONLP_I2C_F_NO_MUX_SELECT 0x10 +/** + * Use block reads if possible. + */ +#define ONLP_I2C_F_USE_BLOCK_READ 0x20 /** * @brief Open and prepare for reading or writing. diff --git a/packages/base/any/onlp/src/onlplib/module/src/i2c.c b/packages/base/any/onlp/src/onlplib/module/src/i2c.c index f82e012e..480f7631 100644 --- a/packages/base/any/onlp/src/onlplib/module/src/i2c.c +++ b/packages/base/any/onlp/src/onlplib/module/src/i2c.c @@ -144,6 +144,7 @@ onlp_i2c_read(int bus, uint8_t addr, uint8_t offset, int size, for(i = 0; i < size; i++) { int rv = i2c_smbus_read_byte_data(fd, offset+i); + if(rv < 0) { AIM_LOG_ERROR("i2c-%d: reading address 0x%x, offset %d failed: %{errno}", bus, addr, offset+i, errno); @@ -392,7 +393,14 @@ onlp_i2c_dev_read(onlp_i2c_dev_t* dev, uint8_t offset, int size, return error; } - if( (rv = onlp_i2c_read(dev->bus, dev->addr, offset, size, rdata, flags)) < 0) { + if(flags & ONLP_I2C_F_USE_BLOCK_READ) { + rv = onlp_i2c_block_read(dev->bus, dev->addr, offset, size, rdata, flags); + } + else { + rv = onlp_i2c_read(dev->bus, dev->addr, offset, size, rdata, flags); + } + + if( rv < 0 ) { AIM_LOG_ERROR("Device %s: read() failed: %d", dev->name, rv); return rv;