ds3000_readreg() returns negative values in case of i2c failures. The old code would simply return 0 when failing to read the 0xb2 register, misleading ds3000_initfe() into believing that the firmware had been correctly loaded. Also print out a message if the chip says a firmware is already loaded. This should make it more obvious if the chip is in a weird state. Signed-off-by: Rémi Cardona <remi.cardona@xxxxxxxxxxxx> --- drivers/media/dvb/frontends/ds3000.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/media/dvb/frontends/ds3000.c b/drivers/media/dvb/frontends/ds3000.c index 162faaf..970963c 100644 --- a/drivers/media/dvb/frontends/ds3000.c +++ b/drivers/media/dvb/frontends/ds3000.c @@ -395,8 +395,14 @@ static int ds3000_firmware_ondemand(struct dvb_frontend *fe) dprintk("%s()\n", __func__); - if (ds3000_readreg(state, 0xb2) <= 0) + ret = ds3000_readreg(state, 0xb2); + if (ret == 0) { + printk(KERN_INFO "%s: Firmware already uploaded, skipping\n", + __func__); return ret; + } else if (ret < 0) { + return ret; + } /* Load firmware */ /* request the firmware, this will block until someone uploads it */ -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html