[PATCH] media: i2c: alvium: propagate write handshake timeouts
From: Pengpeng Hou
Date: Tue Jun 23 2026 - 02:10:43 EST
alvium_write_hshake() waits for the BCRM write handshake bit to become
set and then clear again, but it ignores the return value from
read_poll_timeout(). A timeout therefore leaves ret unchanged and the
caller can observe a successful register write even though the handshake
did not complete.
Assign the polling helper return value to ret for both handshake phases
so timeouts and low-level read errors are propagated to the V4L2 control
caller.
Signed-off-by: Pengpeng Hou <pengpeng@xxxxxxxxxxx>
---
drivers/media/i2c/alvium-csi2.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/media/i2c/alvium-csi2.c b/drivers/media/i2c/alvium-csi2.c
index dd991c2ee700..9ebb2a92199a 100644
--- a/drivers/media/i2c/alvium-csi2.c
+++ b/drivers/media/i2c/alvium-csi2.c
@@ -352,11 +352,11 @@ static int alvium_write_hshake(struct alvium_dev *alvium, u32 reg, u64 val)
}
/* poll handshake bit since bit0 = 1 */
- read_poll_timeout(alvium_read, hshake_bit,
- ((hshake_bit & BCRM_HANDSHAKE_W_DONE_EN_BIT) == 1),
- 15000, 45000, true,
- alvium, REG_BCRM_WRITE_HANDSHAKE_RW,
- &hshake_bit, &ret);
+ ret = read_poll_timeout(alvium_read, hshake_bit,
+ ((hshake_bit & BCRM_HANDSHAKE_W_DONE_EN_BIT) == 1),
+ 15000, 45000, true,
+ alvium, REG_BCRM_WRITE_HANDSHAKE_RW,
+ &hshake_bit, &ret);
if (ret) {
dev_err(dev, "poll bit[0] = 1, hshake reg fail\n");
return ret;
@@ -370,11 +370,11 @@ static int alvium_write_hshake(struct alvium_dev *alvium, u32 reg, u64 val)
}
/* poll handshake bit since bit0 = 0 */
- read_poll_timeout(alvium_read, hshake_bit,
- ((hshake_bit & BCRM_HANDSHAKE_W_DONE_EN_BIT) == 0),
- 15000, 45000, true,
- alvium, REG_BCRM_WRITE_HANDSHAKE_RW,
- &hshake_bit, &ret);
+ ret = read_poll_timeout(alvium_read, hshake_bit,
+ ((hshake_bit & BCRM_HANDSHAKE_W_DONE_EN_BIT) == 0),
+ 15000, 45000, true,
+ alvium, REG_BCRM_WRITE_HANDSHAKE_RW,
+ &hshake_bit, &ret);
if (ret) {
dev_err(dev, "poll bit[0] = 0, hshake reg fail\n");
return ret;
--
2.50.1 (Apple Git-155)