mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
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 <shinya.kuribayashi@necel.com> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
parent
201d6a70b7
commit
69151e532c
1 changed files with 8 additions and 3 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue