[PATCH 3/3] media: dvb-frontends: cx24116: abort failed firmware writes
From: Nikhil Gurudasani
Date: Sun Jul 19 2026 - 21:12:27 EST
cx24116_writeregN() returns the I2C message count, making its successful
return value 1 instead of 0. The firmware upload loop also ignores that
return value, so a failed or short transfer does not stop the upload.
Normalize the helper to return zero on success, preserve negative adapter
errors, and stop firmware loading at the first failed chunk.
Fixes: 0d46748c3f87 ("V4L/DVB (8986): cx24116: Adding DVB-S2 demodulator support")
Signed-off-by: Nikhil Gurudasani <nikhilgurudasani314@xxxxxxxxx>
---
drivers/media/dvb-frontends/cx24116.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
index 39af918cb59f..d83acccf57e0 100644
--- a/drivers/media/dvb-frontends/cx24116.c
+++ b/drivers/media/dvb-frontends/cx24116.c
@@ -233,7 +233,9 @@ static int cx24116_writeregN(struct cx24116_state *state, int reg,
if (ret != 1) {
printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n",
__func__, ret, reg);
- ret = -EREMOTEIO;
+ ret = ret < 0 ? ret : -EREMOTEIO;
+ } else {
+ ret = 0;
}
kfree(buf);
@@ -611,8 +613,10 @@ static int cx24116_load_firmware(struct dvb_frontend *fe,
if (len > max - 1)
len = max - 1;
- cx24116_writeregN(state, 0xF7, &fw->data[fw->size - remaining],
- len);
+ ret = cx24116_writeregN(state, 0xF7,
+ &fw->data[fw->size - remaining], len);
+ if (ret)
+ return ret;
}
cx24116_writereg(state, 0xF4, 0x10);
--
2.43.0