i2c: at91_i2c: Wait for TXRDY after sending the first byte
authorAlan Ott <alan@softiron.com>
Wed, 29 Nov 2017 03:25:23 +0000 (22:25 -0500)
committerHeiko Schocher <hs@denx.de>
Thu, 7 Dec 2017 08:28:58 +0000 (09:28 +0100)
The driver must wait for TXRDY after each byte is pushed into
the i2c FIFO before pushing the next byte. Previously this was
not done for the first byte, causing a race condition with zeros
sometimes being sent for the next byte (which is typically the
first actual data byte).

Signed-off-by: Alan Ott <alan@softiron.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
drivers/i2c/at91_i2c.c

index d394044f80de5362d8b8a77862800093f878602c..20d09296a1320f672267b995af1286659981cf0d 100644 (file)
@@ -72,6 +72,8 @@ static int at91_i2c_xfer_msg(struct at91_i2c_bus *bus, struct i2c_msg *msg)
 
        } else {
                writel(msg->buf[0], &reg->thr);
+               ret = at91_wait_for_xfer(bus, TWI_SR_TXRDY);
+
                for (i = 1; !ret && (i < msg->len); i++) {
                        writel(msg->buf[i], &reg->thr);
                        ret = at91_wait_for_xfer(bus, TWI_SR_TXRDY);