rockchip: i2c: don't sent stop bit after each message
authorVasily Khoruzhick <anarsoul@gmail.com>
Sat, 16 Nov 2019 19:32:57 +0000 (11:32 -0800)
committerKever Yang <kever.yang@rock-chips.com>
Sat, 23 Nov 2019 14:29:49 +0000 (22:29 +0800)
That's not correct and it breaks SMBUS-style reads and and writes for
some chips (e.g. SYR82X/SYR83X).

Stop bit should be sent only after the last message.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
drivers/i2c/rk_i2c.c

index cdd94bb05a9009c07e278667f086163e97597516..32b2ee85787ef859763aeb21476aa5e0198ac2ae 100644 (file)
@@ -253,7 +253,6 @@ static int rk_i2c_read(struct rk_i2c *i2c, uchar chip, uint reg, uint r_len,
        }
 
 i2c_exit:
-       rk_i2c_send_stop_bit(i2c);
        rk_i2c_disable(i2c);
 
        return err;
@@ -332,7 +331,6 @@ static int rk_i2c_write(struct rk_i2c *i2c, uchar chip, uint reg, uint r_len,
        }
 
 i2c_exit:
-       rk_i2c_send_stop_bit(i2c);
        rk_i2c_disable(i2c);
 
        return err;
@@ -360,6 +358,9 @@ static int rockchip_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
                }
        }
 
+       rk_i2c_send_stop_bit(i2c);
+       rk_i2c_disable(i2c);
+
        return 0;
 }