[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