i2c: img-scb: add handle for stop detected interrupt
Stop Detected interrupt is triggered when a Stop bit is detected on the bus, which indicates the end of the current transfer. When the end of a transfer is indicated by the Stop Detected interrupt, drain the FIFO and signal completion for the transaction. Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
Родитель
a8c5a8d8c9
Коммит
dd29207e6c
|
@ -152,6 +152,7 @@
|
||||||
#define INT_TRANSACTION_DONE BIT(15)
|
#define INT_TRANSACTION_DONE BIT(15)
|
||||||
#define INT_SLAVE_EVENT BIT(16)
|
#define INT_SLAVE_EVENT BIT(16)
|
||||||
#define INT_TIMING BIT(18)
|
#define INT_TIMING BIT(18)
|
||||||
|
#define INT_STOP_DETECTED BIT(19)
|
||||||
|
|
||||||
#define INT_FIFO_FULL_FILLING (INT_FIFO_FULL | INT_FIFO_FILLING)
|
#define INT_FIFO_FULL_FILLING (INT_FIFO_FULL | INT_FIFO_FILLING)
|
||||||
|
|
||||||
|
@ -175,7 +176,8 @@
|
||||||
INT_WRITE_ACK_ERR | \
|
INT_WRITE_ACK_ERR | \
|
||||||
INT_FIFO_FULL | \
|
INT_FIFO_FULL | \
|
||||||
INT_FIFO_FILLING | \
|
INT_FIFO_FILLING | \
|
||||||
INT_FIFO_EMPTY)
|
INT_FIFO_EMPTY | \
|
||||||
|
INT_STOP_DETECTED)
|
||||||
|
|
||||||
#define INT_ENABLE_MASK_WAITSTOP (INT_SLAVE_EVENT | \
|
#define INT_ENABLE_MASK_WAITSTOP (INT_SLAVE_EVENT | \
|
||||||
INT_ADDR_ACK_ERR | \
|
INT_ADDR_ACK_ERR | \
|
||||||
|
@ -865,6 +867,13 @@ static unsigned int img_i2c_auto(struct img_i2c *i2c,
|
||||||
|
|
||||||
mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1));
|
mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1));
|
||||||
|
|
||||||
|
if (int_status & INT_STOP_DETECTED) {
|
||||||
|
/* Drain remaining data in FIFO and complete transaction */
|
||||||
|
if (i2c->msg.flags & I2C_M_RD)
|
||||||
|
img_i2c_read_fifo(i2c);
|
||||||
|
return ISR_COMPLETE(0);
|
||||||
|
}
|
||||||
|
|
||||||
if (i2c->msg.flags & I2C_M_RD) {
|
if (i2c->msg.flags & I2C_M_RD) {
|
||||||
if (int_status & INT_FIFO_FULL_FILLING) {
|
if (int_status & INT_FIFO_FULL_FILLING) {
|
||||||
img_i2c_read_fifo(i2c);
|
img_i2c_read_fifo(i2c);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче