]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
i2c: k1: check for transfer error
authorAlex Elder <elder@riscstar.com>
Mon, 16 Jun 2025 12:51:36 +0000 (07:51 -0500)
committerWolfram Sang <wsa+renesas@sang-engineering.com>
Sat, 21 Jun 2025 20:17:02 +0000 (22:17 +0200)
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>
Cc: <stable@vger.kernel.org> # v6.15+
Reviewed-by: Troy Mitchell <troymitchell988@gmail.com>
Link: https://lore.kernel.org/r/20250616125137.1555453-1-elder@riscstar.com
Signed-off-by: Andi Shyti <andi@smida.it>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
drivers/i2c/busses/i2c-k1.c

index 5965b4cf6220e43c3db5add69ed48191ceb2d767..b68a21fff0b56b59fe2032ccb7ca6953423aad32 100644 (file)
@@ -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