From 69151e532c97f983b498ea03e20b1598a5487318 Mon Sep 17 00:00:00 2001 From: Shinya Kuribayashi Date: Fri, 6 Nov 2009 21:51:00 +0900 Subject: i2c-designware: Disable TX_EMPTY when all i2c_msg msgs has been processed Currently we disable TX_EMPTY interrupt when buf_len is zero, but this is wrong. (buf_len == 0) means that all transmit data in the current i2c_msg message has been sent out, but that doesn't necessarily mean all i2c_msg messages have been processed. TX_EMPTY interrupt is used as the driving force of DW I2C transactions, so we need to keep it enabled as long as i2c_msg messages are available. Signed-off-by: Shinya Kuribayashi Signed-off-by: Ben Dooks --- drivers/i2c/busses/i2c-designware.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'drivers') diff --git a/drivers/i2c/busses/i2c-designware.c b/drivers/i2c/busses/i2c-designware.c index f184d822d3d..6acbe846e9c 100644 --- a/drivers/i2c/busses/i2c-designware.c +++ b/drivers/i2c/busses/i2c-designware.c @@ -415,12 +415,17 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev) /* more bytes to be written */ dev->status |= STATUS_WRITE_IN_PROGRESS; break; - } else { + } else dev->status &= ~STATUS_WRITE_IN_PROGRESS; - intr_mask &= ~DW_IC_INTR_TX_EMPTY; - } } + /* + * If i2c_msg index search is completed, we don't need TX_EMPTY + * interrupt any more. + */ + if (dev->msg_write_idx == dev->msgs_num) + intr_mask &= ~DW_IC_INTR_TX_EMPTY; + writel(intr_mask, dev->base + DW_IC_INTR_MASK); } -- cgit v1.2.3