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.duf...@intel.com>
Signed-off-by: cduffinx <cooperx.duf...@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;
 };
 
-- 
2.25.1

Reply via email to