]> Pileus Git - ~andy/linux/commitdiff
V4L/DVB (13987): [STV090x] Quit processing if the tuner did not lock
authorOliver Endriss <o.endriss@gmx.de>
Sun, 10 Jan 2010 18:39:45 +0000 (15:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 26 Feb 2010 18:10:38 +0000 (15:10 -0300)
Exit stv090x_algo() if the tuner did not lock. This might happen due to
missing signal or invalid/incomplete tuning parameters.

Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Manu Abraham <abraham.manu@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/frontends/stv090x.c

index cc487f6bdcee150d1980299e3aa77bf6e571c3eb..a5bae404701cba9bc35f3c507210d9c88434c093 100644 (file)
@@ -3256,21 +3256,21 @@ static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state)
 
        msleep(50);
 
-       if (stv090x_i2c_gate_ctrl(fe, 1) < 0)
-               goto err;
-
        if (state->config->tuner_get_status) {
+               if (stv090x_i2c_gate_ctrl(fe, 1) < 0)
+                       goto err;
                if (state->config->tuner_get_status(fe, &reg) < 0)
                        goto err_gateoff;
-       }
-
-       if (reg)
-               dprintk(FE_DEBUG, 1, "Tuner phase locked");
-       else
-               dprintk(FE_DEBUG, 1, "Tuner unlocked");
+               if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
+                       goto err;
 
-       if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
-               goto err;
+               if (reg)
+                       dprintk(FE_DEBUG, 1, "Tuner phase locked");
+               else {
+                       dprintk(FE_DEBUG, 1, "Tuner unlocked");
+                       return STV090x_NOCARRIER;
+               }
+       }
 
        msleep(10);
        agc1_power = MAKEWORD16(STV090x_READ_DEMOD(state, AGCIQIN1),