提交 d12e3aae 编写于 作者: M Michał Mirosław 提交者: Wolfram Sang

i2c: at91: disable TXRDY interrupt after sending data

Driver was not disabling TXRDY interrupt after last TX byte.
This caused interrupt storm until transfer timeouts for slow
or broken device on the bus. The patch fixes the interrupt storm
on my SAMA5D2-based board.

Cc: stable@vger.kernel.org # 5.2.x
[v5.2 introduced file split; the patch should apply to i2c-at91.c before the split]
Fixes: fac368a0 ("i2c: at91: add new driver")
Signed-off-by: NMichał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: NLudovic Desroches <ludovic.desroches@microchip.com>
Tested-by: NRaag Jadav <raagjadav@gmail.com>
Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
上级 fd01eecd
...@@ -122,9 +122,11 @@ static void at91_twi_write_next_byte(struct at91_twi_dev *dev) ...@@ -122,9 +122,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);
...@@ -542,9 +544,8 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev) ...@@ -542,9 +544,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_TXCOMP | AT91_TWI_NACK |
AT91_TWI_NACK | (dev->buf_len ? AT91_TWI_TXRDY : 0));
AT91_TWI_TXRDY);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册