From: John Keeping Date: Thu, 18 Aug 2016 19:08:42 +0000 (+0100) Subject: rockchip: i2c: fix >32 byte writes X-Git-Tag: v2016.11-rc1~180 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=21d4b7d4e1786a2ccbcc5b304cf714e3778e6183;p=oweals%2Fu-boot.git rockchip: i2c: fix >32 byte writes The special handling of the chip address and register address must only happen before we send the data buffer, otherwise we will end up inserting both of these every 32 bytes. Signed-off-by: John Keeping Acked-by: Simon Glass --- diff --git a/drivers/i2c/rk_i2c.c b/drivers/i2c/rk_i2c.c index a4c0032fd8..7c701cbed0 100644 --- a/drivers/i2c/rk_i2c.c +++ b/drivers/i2c/rk_i2c.c @@ -269,9 +269,9 @@ static int rk_i2c_write(struct rk_i2c *i2c, uchar chip, uint reg, uint r_len, if ((i * 4 + j) == bytes_xferred) break; - if (i == 0 && j == 0) { + if (i == 0 && j == 0 && pbuf == buf) { txdata |= (chip << 1); - } else if (i == 0 && j <= r_len) { + } else if (i == 0 && j <= r_len && pbuf == buf) { txdata |= (reg & (0xff << ((j - 1) * 8))) << 8; } else {