Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69151e53 authored by Shinya Kuribayashi's avatar Shinya Kuribayashi Committed by Ben Dooks
Browse files

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: default avatarShinya Kuribayashi <shinya.kuribayashi@necel.com>
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 201d6a70
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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);
}