drivers/i2c/busses/i2c-k1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
If spacemit_i2c_xfer_msg() times out waiting for a message transfer to
complete, or if the hardware reports an error, it returns a negative
error code (-ETIMEDOUT, -EAGAIN, -ENXIO. or -EIO).
The sole caller of spacemit_i2c_xfer_msg() is spacemit_i2c_xfer(),
which is the i2c_algorithm->xfer callback function. It currently
does not save the value returned by spacemit_i2c_xfer_msg().
The result is that transfer errors go unreported, and a caller
has no indication anything is wrong.
When this code was out for review, the return value *was* checked
in early versions. But for some reason, that assignment got dropped
between versions 5 and 6 of the series, perhaps related to reworking
the code to merge spacemit_i2c_xfer_core() into spacemit_i2c_xfer().
Simply assigning the value returned to "ret" fixes the problem.
Fixes: 5ea558473fa31 ("i2c: spacemit: add support for SpacemiT K1 SoC")
Signed-off-by: Alex Elder <elder@riscstar.com>
Reviewed-by: Troy Mitchell <troymitchell988@gmail.com>
---
v2: Added Troy's Reviewed-by
drivers/i2c/busses/i2c-k1.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/i2c/busses/i2c-k1.c b/drivers/i2c/busses/i2c-k1.c
index 5965b4cf6220e..b68a21fff0b56 100644
--- a/drivers/i2c/busses/i2c-k1.c
+++ b/drivers/i2c/busses/i2c-k1.c
@@ -477,7 +477,7 @@ static int spacemit_i2c_xfer(struct i2c_adapter *adapt, struct i2c_msg *msgs, in
ret = spacemit_i2c_wait_bus_idle(i2c);
if (!ret)
- spacemit_i2c_xfer_msg(i2c);
+ ret = spacemit_i2c_xfer_msg(i2c);
else if (ret < 0)
dev_dbg(i2c->dev, "i2c transfer error: %d\n", ret);
else
base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494
--
2.45.2
On Thu, Jun 12, 2025 at 05:56:25PM -0500, Alex Elder wrote: > If spacemit_i2c_xfer_msg() times out waiting for a message transfer to > complete, or if the hardware reports an error, it returns a negative > error code (-ETIMEDOUT, -EAGAIN, -ENXIO. or -EIO). > > The sole caller of spacemit_i2c_xfer_msg() is spacemit_i2c_xfer(), > which is the i2c_algorithm->xfer callback function. It currently > does not save the value returned by spacemit_i2c_xfer_msg(). > > The result is that transfer errors go unreported, and a caller > has no indication anything is wrong. > > When this code was out for review, the return value *was* checked > in early versions. But for some reason, that assignment got dropped > between versions 5 and 6 of the series, perhaps related to reworking > the code to merge spacemit_i2c_xfer_core() into spacemit_i2c_xfer(). > > Simply assigning the value returned to "ret" fixes the problem. > > Fixes: 5ea558473fa31 ("i2c: spacemit: add support for SpacemiT K1 SoC") > Signed-off-by: Alex Elder <elder@riscstar.com> > Reviewed-by: Troy Mitchell <troymitchell988@gmail.com> > --- > v2: Added Troy's Reviewed-by Hi Alex, you added the changelog, but the subject line doesn't have the "V2" suffix. Is this a mistake? - Troy > > drivers/i2c/busses/i2c-k1.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-k1.c b/drivers/i2c/busses/i2c-k1.c > index 5965b4cf6220e..b68a21fff0b56 100644 > --- a/drivers/i2c/busses/i2c-k1.c > +++ b/drivers/i2c/busses/i2c-k1.c > @@ -477,7 +477,7 @@ static int spacemit_i2c_xfer(struct i2c_adapter *adapt, struct i2c_msg *msgs, in > > ret = spacemit_i2c_wait_bus_idle(i2c); > if (!ret) > - spacemit_i2c_xfer_msg(i2c); > + ret = spacemit_i2c_xfer_msg(i2c); > else if (ret < 0) > dev_dbg(i2c->dev, "i2c transfer error: %d\n", ret); > else > > base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 > -- > 2.45.2 >
On 6/12/25 9:12 PM, Troy Mitchell wrote: > On Thu, Jun 12, 2025 at 05:56:25PM -0500, Alex Elder wrote: >> If spacemit_i2c_xfer_msg() times out waiting for a message transfer to >> complete, or if the hardware reports an error, it returns a negative >> error code (-ETIMEDOUT, -EAGAIN, -ENXIO. or -EIO). >> >> The sole caller of spacemit_i2c_xfer_msg() is spacemit_i2c_xfer(), >> which is the i2c_algorithm->xfer callback function. It currently >> does not save the value returned by spacemit_i2c_xfer_msg(). >> >> The result is that transfer errors go unreported, and a caller >> has no indication anything is wrong. >> >> When this code was out for review, the return value *was* checked >> in early versions. But for some reason, that assignment got dropped >> between versions 5 and 6 of the series, perhaps related to reworking >> the code to merge spacemit_i2c_xfer_core() into spacemit_i2c_xfer(). >> >> Simply assigning the value returned to "ret" fixes the problem. >> >> Fixes: 5ea558473fa31 ("i2c: spacemit: add support for SpacemiT K1 SoC") >> Signed-off-by: Alex Elder <elder@riscstar.com> >> Reviewed-by: Troy Mitchell <troymitchell988@gmail.com> >> --- >> v2: Added Troy's Reviewed-by > Hi Alex, you added the changelog, but the subject line > doesn't have the "V2" suffix. Is this a mistake? Yes it's a mistake. I contemplated sending an immediate "oops, this was v2!!!" but opted to wait until someone like you asked about it. This *is* version 2, and I made the updates I describe. -Alex > > - Troy > >> >> drivers/i2c/busses/i2c-k1.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/i2c/busses/i2c-k1.c b/drivers/i2c/busses/i2c-k1.c >> index 5965b4cf6220e..b68a21fff0b56 100644 >> --- a/drivers/i2c/busses/i2c-k1.c >> +++ b/drivers/i2c/busses/i2c-k1.c >> @@ -477,7 +477,7 @@ static int spacemit_i2c_xfer(struct i2c_adapter *adapt, struct i2c_msg *msgs, in >> >> ret = spacemit_i2c_wait_bus_idle(i2c); >> if (!ret) >> - spacemit_i2c_xfer_msg(i2c); >> + ret = spacemit_i2c_xfer_msg(i2c); >> else if (ret < 0) >> dev_dbg(i2c->dev, "i2c transfer error: %d\n", ret); >> else >> >> base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 >> -- >> 2.45.2 >>
© 2016 - 2025 Red Hat, Inc.