On Sat Aug 8 00:04:43 2026 +0530, Punnay Sharma wrote:
> The SP8870 DVB frontend driver prematurely flags the device as
> initialized at the very beginning of the sp8870_init() routine, prior
> to requesting the firmware (dvb-fe-sp8870.fw) and executing the I2C
> upload sequence.
> 
> If request_firmware() times out or sp8870_firmware_upload() encounters
> an I2C bus error, the function aborts and returns -EIO. However,
> because `state->initialised` is already set to 1, all subsequent
> invocations of `fe->ops.init()` by the DVB core will immediately return
> 0 (success) without attempting to load the firmware again. This leaves
> the demodulator microcontroller halted and the frontend permanently dead
> until the module is forcibly reloaded.
> 
> Relocate the `state->initialised = 1` assignment to the end of
> sp8870_init(), ensuring the flag is only set after the firmware is
> successfully uploaded and the system controller is actually restarted.
> 
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: [email protected]
> Signed-off-by: Punnay Sharma <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/staging/media/av7110/sp8870.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

---

diff --git a/drivers/staging/media/av7110/sp8870.c 
b/drivers/staging/media/av7110/sp8870.c
index 340e4b22859d..aecdbd87976f 100644
--- a/drivers/staging/media/av7110/sp8870.c
+++ b/drivers/staging/media/av7110/sp8870.c
@@ -315,7 +315,6 @@ static int sp8870_init(struct dvb_frontend *fe)
        sp8870_wake_up(state);
        if (state->initialised)
                return 0;
-       state->initialised = 1;
 
        dprintk("initialising frontend...\n");
 
@@ -353,6 +352,8 @@ static int sp8870_init(struct dvb_frontend *fe)
        sp8870_writereg(state, 0x0D00, 0x010);
        sp8870_writereg(state, 0x0D01, 0x000);
 
+       state->initialised = 1;
+
        return 0;
 }
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to