[PATCH 08/12] i2c: meson: explicitly ignore messages with length zero

Heiner Kallweit hkallweit1 at gmail.com
Tue Mar 7 22:47:47 PST 2017


Explicitely ignore messages with length zero. This also allows to
remove some now unneeded checks during message processing.

Signed-off-by: Heiner Kallweit <hkallweit1 at gmail.com>
---
 drivers/i2c/busses/i2c-meson.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/i2c/busses/i2c-meson.c b/drivers/i2c/busses/i2c-meson.c
index b3b881f9..58414699 100644
--- a/drivers/i2c/busses/i2c-meson.c
+++ b/drivers/i2c/busses/i2c-meson.c
@@ -196,12 +196,10 @@ static void meson_i2c_prepare_xfer(struct meson_i2c *i2c)
 	for (i = 0; i < i2c->count - 1; i++)
 		meson_i2c_add_token(i2c, TOKEN_DATA);
 
-	if (i2c->count) {
-		if (write || i2c->pos + i2c->count < i2c->msg->len)
-			meson_i2c_add_token(i2c, TOKEN_DATA);
-		else
-			meson_i2c_add_token(i2c, TOKEN_DATA_LAST);
-	}
+	if (write || i2c->pos + i2c->count < i2c->msg->len)
+		meson_i2c_add_token(i2c, TOKEN_DATA);
+	else
+		meson_i2c_add_token(i2c, TOKEN_DATA_LAST);
 
 	if (write)
 		meson_i2c_put_data(i2c, i2c->msg->buf + i2c->pos, i2c->count);
@@ -257,11 +255,8 @@ static irqreturn_t meson_i2c_irq(int irqno, void *dev_id)
 
 	switch (i2c->state) {
 	case STATE_READ:
-		if (i2c->count > 0) {
-			meson_i2c_get_data(i2c, i2c->msg->buf + i2c->pos,
-					   i2c->count);
-			i2c->pos += i2c->count;
-		}
+		meson_i2c_get_data(i2c, i2c->msg->buf + i2c->pos, i2c->count);
+		i2c->pos += i2c->count;
 
 		if (i2c->pos >= i2c->msg->len) {
 			meson_i2c_stop(i2c);
@@ -371,6 +366,9 @@ static int meson_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	clk_enable(i2c->clk);
 
 	for (i = 0; i < num; i++) {
+		/* ignore messages with length 0 */
+		if (!msgs[i].len)
+			continue;
 		ret = meson_i2c_xfer_msg(i2c, &msgs[i], i == num - 1);
 		if (ret)
 			break;
-- 
2.12.0





More information about the linux-amlogic mailing list