Explicitely ignore messages with length zero. This also allows to remove some now unneeded checks during message processing. Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html