|
@@ -270,9 +270,11 @@ static void at91_twi_write_next_byte(struct at91_twi_dev *dev)
|
|
|
writeb_relaxed(*dev->buf, dev->base + AT91_TWI_THR);
|
|
writeb_relaxed(*dev->buf, dev->base + AT91_TWI_THR);
|
|
|
|
|
|
|
|
/* send stop when last byte has been written */
|
|
/* send stop when last byte has been written */
|
|
|
- if (--dev->buf_len == 0)
|
|
|
|
|
|
|
+ if (--dev->buf_len == 0) {
|
|
|
if (!dev->use_alt_cmd)
|
|
if (!dev->use_alt_cmd)
|
|
|
at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
|
|
at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
|
|
|
|
|
+ at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_TXRDY);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
dev_dbg(dev->dev, "wrote 0x%x, to go %zu\n", *dev->buf, dev->buf_len);
|
|
dev_dbg(dev->dev, "wrote 0x%x, to go %zu\n", *dev->buf, dev->buf_len);
|
|
|
|
|
|
|
@@ -690,9 +692,8 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev)
|
|
|
} else {
|
|
} else {
|
|
|
at91_twi_write_next_byte(dev);
|
|
at91_twi_write_next_byte(dev);
|
|
|
at91_twi_write(dev, AT91_TWI_IER,
|
|
at91_twi_write(dev, AT91_TWI_IER,
|
|
|
- AT91_TWI_TXCOMP |
|
|
|
|
|
- AT91_TWI_NACK |
|
|
|
|
|
- AT91_TWI_TXRDY);
|
|
|
|
|
|
|
+ AT91_TWI_TXCOMP | AT91_TWI_NACK |
|
|
|
|
|
+ (dev->buf_len ? AT91_TWI_TXRDY : 0));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|