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

Heiner Kallweit hkallweit1 at gmail.com
Wed Mar 8 14:03:46 PST 2017


Am 08.03.2017 um 08:53 schrieb Ben Dooks:
> Probably a bad idea. Zero data could just be an address is there check
> 
Thanks for pointing out.

> On 8 Mar 2017 06:51, "Heiner Kallweit" <hkallweit1 at gmail.com <mailto:hkallweit1 at gmail.com>> wrote:
> 
>     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 <mailto: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
> 
> 
> 
>     _______________________________________________
>     linux-amlogic mailing list
>     linux-amlogic at lists.infradead.org <mailto:linux-amlogic at lists.infradead.org>
>     http://lists.infradead.org/mailman/listinfo/linux-amlogic <http://lists.infradead.org/mailman/listinfo/linux-amlogic>
> 




More information about the linux-amlogic mailing list