Message ID | 1412185241-24950-1-git-send-email-amstan@chromium.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Alex, On Wed, Oct 1, 2014 at 10:40 AM, Alexandru M Stan <amstan@chromium.org> wrote: > i2cdetect -q was broken (everything was a false positive, and no transfers were > actually being sent over i2c). The way it works is by sending a 0 length write > request and checking for NACK. This patch fixes the 0 length writes and actually > sends them. > > Reported-by: Doug Anderson <dianders@chromium.org> > Signed-off-by: Alexandru M Stan <amstan@chromium.org> > --- > drivers/i2c/busses/i2c-rk3x.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c > index b41d979..f486d0e 100644 > --- a/drivers/i2c/busses/i2c-rk3x.c > +++ b/drivers/i2c/busses/i2c-rk3x.c > @@ -238,7 +238,7 @@ static void rk3x_i2c_fill_transmit_buf(struct rk3x_i2c *i2c) > for (i = 0; i < 8; ++i) { > val = 0; > for (j = 0; j < 4; ++j) { > - if (i2c->processed == i2c->msg->len) > + if ((i2c->processed == i2c->msg->len) && (cnt != 0)) This looks good to me. Basically we still need to write the address of the device onto the bus even if there's no data. Reviewed-by: Doug Anderson <dianders@chromium.org> Tested-by: Doug Anderson <dianders@chromium.org> -Doug
Hi Alexandru, On Wednesday 01 October 2014 at 10:40:41, Alexandru M Stan wrote: > i2cdetect -q was broken (everything was a false positive, and no transfers > were actually being sent over i2c). The way it works is by sending a 0 > length write request and checking for NACK. This patch fixes the 0 length > writes and actually sends them. > > Reported-by: Doug Anderson <dianders@chromium.org> > Signed-off-by: Alexandru M Stan <amstan@chromium.org> > --- > drivers/i2c/busses/i2c-rk3x.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c > index b41d979..f486d0e 100644 > --- a/drivers/i2c/busses/i2c-rk3x.c > +++ b/drivers/i2c/busses/i2c-rk3x.c > @@ -238,7 +238,7 @@ static void rk3x_i2c_fill_transmit_buf(struct rk3x_i2c > *i2c) for (i = 0; i < 8; ++i) { > val = 0; > for (j = 0; j < 4; ++j) { > - if (i2c->processed == i2c->msg->len) > + if ((i2c->processed == i2c->msg->len) && (cnt != 0)) > break; > > if (i2c->processed == 0 && cnt == 0) Yes, looks correct and makes i2cdetect work for me on Radxa Rock. Reviewed-By: Max Schwarz <max.schwarz@online.de> Tested-By: Max Schwarz <max.schwarz@online.de> Cheers, Max
> Reviewed-By: Max Schwarz <max.schwarz@online.de> > Tested-By: Max Schwarz <max.schwarz@online.de> Checkpatch says: WARNING: 'Tested-by:' is the preferred signature form Same 'Reviewed-by:'
On Wed, Oct 01, 2014 at 10:40:41AM -0700, Alexandru M Stan wrote: > i2cdetect -q was broken (everything was a false positive, and no transfers were > actually being sent over i2c). The way it works is by sending a 0 length write > request and checking for NACK. This patch fixes the 0 length writes and actually > sends them. > > Reported-by: Doug Anderson <dianders@chromium.org> > Signed-off-by: Alexandru M Stan <amstan@chromium.org> Applied to for-current, thanks!
diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c index b41d979..f486d0e 100644 --- a/drivers/i2c/busses/i2c-rk3x.c +++ b/drivers/i2c/busses/i2c-rk3x.c @@ -238,7 +238,7 @@ static void rk3x_i2c_fill_transmit_buf(struct rk3x_i2c *i2c) for (i = 0; i < 8; ++i) { val = 0; for (j = 0; j < 4; ++j) { - if (i2c->processed == i2c->msg->len) + if ((i2c->processed == i2c->msg->len) && (cnt != 0)) break; if (i2c->processed == 0 && cnt == 0)
i2cdetect -q was broken (everything was a false positive, and no transfers were actually being sent over i2c). The way it works is by sending a 0 length write request and checking for NACK. This patch fixes the 0 length writes and actually sends them. Reported-by: Doug Anderson <dianders@chromium.org> Signed-off-by: Alexandru M Stan <amstan@chromium.org> --- drivers/i2c/busses/i2c-rk3x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)