[PATCH 2/3] media: dvb-frontends: cx24116: handle command I2C failures
From: Nikhil Gurudasani
Date: Sun Jul 19 2026 - 21:11:41 EST
cx24116_cmd_execute() ignores command and execute-register write errors.
It also treats a negative execute-register read as a busy value until a
generic timeout is reported. In addition, the polling counter reuses the
command-write index, so longer commands receive fewer retries.
Return I2C failures immediately and use a fresh bounded polling counter.
Fixes: 0d46748c3f87 ("V4L/DVB (8986): cx24116: Adding DVB-S2 demodulator support")
Signed-off-by: Nikhil Gurudasani <nikhilgurudasani314@xxxxxxxxx>
---
drivers/media/dvb-frontends/cx24116.c | 28 ++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/drivers/media/dvb-frontends/cx24116.c b/drivers/media/dvb-frontends/cx24116.c
index 04b8f2fba4b0..39af918cb59f 100644
--- a/drivers/media/dvb-frontends/cx24116.c
+++ b/drivers/media/dvb-frontends/cx24116.c
@@ -533,22 +533,28 @@ static int cx24116_cmd_execute(struct dvb_frontend *fe, struct cx24116_cmd *cmd)
/* Write the command */
for (i = 0; i < cmd->len ; i++) {
dprintk("%s: 0x%02x == 0x%02x\n", __func__, i, cmd->args[i]);
- cx24116_writereg(state, i, cmd->args[i]);
+ ret = cx24116_writereg(state, i, cmd->args[i]);
+ if (ret)
+ return ret;
}
/* Start execution and wait for cmd to terminate */
- cx24116_writereg(state, CX24116_REG_EXECUTE, 0x01);
- while (cx24116_readreg(state, CX24116_REG_EXECUTE)) {
+ ret = cx24116_writereg(state, CX24116_REG_EXECUTE, 0x01);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < 65; i++) {
+ ret = cx24116_readreg(state, CX24116_REG_EXECUTE);
+ if (ret < 0)
+ return ret;
+ if (!ret)
+ return 0;
+
msleep(10);
- if (i++ > 64) {
- /* Avoid looping forever if the firmware does
- not respond */
- printk(KERN_WARNING "%s() Firmware not responding\n",
- __func__);
- return -EREMOTEIO;
- }
}
- return 0;
+
+ dev_warn(&state->i2c->dev, "Firmware not responding\n");
+ return -EREMOTEIO;
}
static int cx24116_load_firmware(struct dvb_frontend *fe,
--
2.43.0