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>
/* 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);
}