u32 reg;
        s32 car_step, steps, cur_step, dir, freq, timeout_lock;
-       int lock = 0;
+       int lock;
 
        if (state->srate >= 10000000)
                timeout_lock = timeout_dmd / 3;
                timeout_lock = timeout_dmd / 2;
 
        lock = stv090x_get_dmdlock(state, timeout_lock); /* cold start wait */
-       if (!lock) {
-               if (state->srate >= 10000000) {
-                       if (stv090x_chk_tmg(state)) {
-                               if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0)
-                                       goto err;
-                               if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0)
-                                       goto err;
-                               lock = stv090x_get_dmdlock(state, timeout_dmd);
-                       } else {
-                               lock = 0;
-                       }
-               } else {
-                       if (state->srate <= 4000000)
-                               car_step = 1000;
-                       else if (state->srate <= 7000000)
-                               car_step = 2000;
-                       else if (state->srate <= 10000000)
-                               car_step = 3000;
-                       else
-                               car_step = 5000;
-
-                       steps  = (state->search_range / 1000) / car_step;
-                       steps /= 2;
-                       steps  = 2 * (steps + 1);
-                       if (steps < 0)
-                               steps = 2;
-                       else if (steps > 12)
-                               steps = 12;
-
-                       cur_step = 1;
-                       dir = 1;
-
-                       if (!lock) {
-                               freq = state->frequency;
-                               state->tuner_bw = stv090x_car_width(state->srate, state->rolloff) + state->srate;
-                               while ((cur_step <= steps) && (!lock)) {
-                                       if (dir > 0)
-                                               freq += cur_step * car_step;
-                                       else
-                                               freq -= cur_step * car_step;
-
-                                       /* Setup tuner */
-                                       if (stv090x_i2c_gate_ctrl(state, 1) < 0)
-                                               goto err;
+       if (lock)
+               return lock;
 
-                                       if (state->config->tuner_set_frequency) {
-                                               if (state->config->tuner_set_frequency(fe, freq) < 0)
-                                                       goto err_gateoff;
-                                       }
+       if (state->srate >= 10000000) {
+               if (stv090x_chk_tmg(state)) {
+                       if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0)
+                               goto err;
+                       if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0)
+                               goto err;
+                       return stv090x_get_dmdlock(state, timeout_dmd);
+               }
+               return 0;
+       }
 
-                                       if (state->config->tuner_set_bandwidth) {
-                                               if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
-                                                       goto err_gateoff;
-                                       }
+       if (state->srate <= 4000000)
+               car_step = 1000;
+       else if (state->srate <= 7000000)
+               car_step = 2000;
+       else if (state->srate <= 10000000)
+               car_step = 3000;
+       else
+               car_step = 5000;
 
-                                       if (stv090x_i2c_gate_ctrl(state, 0) < 0)
-                                               goto err;
+       steps  = (state->search_range / 1000) / car_step;
+       steps /= 2;
+       steps  = 2 * (steps + 1);
+       if (steps < 0)
+               steps = 2;
+       else if (steps > 12)
+               steps = 12;
 
-                                       msleep(50);
+       cur_step = 1;
+       dir = 1;
 
-                                       if (stv090x_i2c_gate_ctrl(state, 1) < 0)
-                                               goto err;
+       freq = state->frequency;
+       state->tuner_bw = stv090x_car_width(state->srate, state->rolloff) + state->srate;
+       while ((cur_step <= steps) && (!lock)) {
+               if (dir > 0)
+                       freq += cur_step * car_step;
+               else
+                       freq -= cur_step * car_step;
 
-                                       if (state->config->tuner_get_status) {
-                                               if (state->config->tuner_get_status(fe, ®) < 0)
-                                                       goto err_gateoff;
-                                       }
+               /* Setup tuner */
+               if (stv090x_i2c_gate_ctrl(state, 1) < 0)
+                       goto err;
 
-                                       if (reg)
-                                               dprintk(FE_DEBUG, 1, "Tuner phase locked");
-                                       else
-                                               dprintk(FE_DEBUG, 1, "Tuner unlocked");
+               if (state->config->tuner_set_frequency) {
+                       if (state->config->tuner_set_frequency(fe, freq) < 0)
+                               goto err_gateoff;
+               }
 
-                                       if (stv090x_i2c_gate_ctrl(state, 0) < 0)
-                                               goto err;
+               if (state->config->tuner_set_bandwidth) {
+                       if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
+                               goto err_gateoff;
+               }
 
-                                       STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1c);
-                                       if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0x00) < 0)
-                                               goto err;
-                                       if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0x00) < 0)
-                                               goto err;
-                                       if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0)
-                                               goto err;
-                                       if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0)
-                                               goto err;
-                                       lock = stv090x_get_dmdlock(state, (timeout_dmd / 3));
+               if (stv090x_i2c_gate_ctrl(state, 0) < 0)
+                       goto err;
 
-                                       dir *= -1;
-                                       cur_step++;
-                               }
-                       }
+               msleep(50);
+
+               if (stv090x_i2c_gate_ctrl(state, 1) < 0)
+                       goto err;
+
+               if (state->config->tuner_get_status) {
+                       if (state->config->tuner_get_status(fe, ®) < 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(state, 0) < 0)
+                       goto err;
+
+               STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1c);
+               if (STV090x_WRITE_DEMOD(state, CFRINIT1, 0x00) < 0)
+                       goto err;
+               if (STV090x_WRITE_DEMOD(state, CFRINIT0, 0x00) < 0)
+                       goto err;
+               if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x1f) < 0)
+                       goto err;
+               if (STV090x_WRITE_DEMOD(state, DMDISTATE, 0x15) < 0)
+                       goto err;
+               lock = stv090x_get_dmdlock(state, (timeout_dmd / 3));
+
+               dir *= -1;
+               cur_step++;
        }
 
        return lock;