
modify the designware_i2c_xfer function to use 1 byte per address, it was set to 0 before which makes it think its reading a register type. Added offset of where it is supposed to read from. Before it was always reading from offset 0 despite specifying the offset in the higher level function.
Signed-off-by: Cooper Duffin cooperx.duffin@intel.com Signed-off-by: cduffinx cooperx.duffin@intel.com ---
drivers/i2c/designware_i2c.c | 5 +++-- drivers/i2c/i2c-uclass.c | 1 + include/i2c.h | 1 + 3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index 0b5e70af59..46f5d1e56c 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -658,8 +658,9 @@ static int designware_i2c_xfer(struct udevice *bus, struct i2c_msg *msg, for (; nmsgs > 0; nmsgs--, msg++) { debug("i2c_xfer: chip=0x%x, len=0x%x\n", msg->addr, msg->len); if (msg->flags & I2C_M_RD) { - ret = __dw_i2c_read(i2c->regs, msg->addr, 0, 0, - msg->buf, msg->len); + ret = __dw_i2c_read(i2c->regs, msg->addr, + msg->offset, 1, msg->buf, + msg->len); } else { ret = __dw_i2c_write(i2c->regs, msg->addr, 0, 0, msg->buf, msg->len); diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c index 2aa3efe8aa..455d56c3b8 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -147,6 +147,7 @@ int dm_i2c_read(struct udevice *dev, uint offset, uint8_t *buffer, int len) ptr->flags |= I2C_M_RD; ptr->len = len; ptr->buf = buffer; + ptr->offset = offset; ptr++; } msg_count = ptr - msg; diff --git a/include/i2c.h b/include/i2c.h index 0faf8542e2..f997c2537e 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -141,6 +141,7 @@ struct i2c_msg { uint addr; uint flags; uint len; + uint offset; u8 *buf; };