if (state->config->tuner_set_frequency) {
                                if (state->config->tuner_set_frequency(fe, freq) < 0)
-                                       goto err;
+                                       goto err_gateoff;
                        }
 
                        if (state->config->tuner_set_bandwidth) {
                                if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
-                                       goto err;
+                                       goto err_gateoff;
                        }
 
                        if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
 
                        if (state->config->tuner_get_status) {
                                if (state->config->tuner_get_status(fe, ®) < 0)
-                                       goto err;
+                                       goto err_gateoff;
                        }
 
                        if (reg)
                srate_coarse = stv090x_get_srate(state, state->internal->mclk);
 
        return srate_coarse;
+
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
                                        if (state->config->tuner_set_frequency) {
                                                if (state->config->tuner_set_frequency(fe, freq) < 0)
-                                                       goto err;
+                                                       goto err_gateoff;
                                        }
 
                                        if (state->config->tuner_set_bandwidth) {
                                                if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
-                                                       goto err;
+                                                       goto err_gateoff;
                                        }
 
                                        if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
 
                                        if (state->config->tuner_get_status) {
                                                if (state->config->tuner_get_status(fe, ®) < 0)
-                                                       goto err;
+                                                       goto err_gateoff;
                                        }
 
                                        if (reg)
 
        return lock;
 
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
        if (state->config->tuner_get_frequency) {
                if (state->config->tuner_get_frequency(fe, &state->frequency) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
 
                if (state->config->tuner_get_frequency) {
                        if (state->config->tuner_get_frequency(fe, &state->frequency) < 0)
-                               goto err;
+                               goto err_gateoff;
                }
 
                if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
        }
 
        return STV090x_OUTOFRANGE;
+
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
                                if (state->config->tuner_set_bandwidth) {
                                        if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
-                                               goto err;
+                                               goto err_gateoff;
                                }
 
                                if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
                stv090x_set_vit_thtracq(state);
 
        return 0;
+
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
        if (state->config->tuner_set_bbgain) {
                if (state->config->tuner_set_bbgain(fe, 10) < 0) /* 10dB */
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (state->config->tuner_set_frequency) {
                if (state->config->tuner_set_frequency(fe, state->frequency) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (state->config->tuner_set_bandwidth) {
                if (state->config->tuner_set_bandwidth(fe, state->tuner_bw) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
 
        if (state->config->tuner_get_status) {
                if (state->config->tuner_get_status(fe, ®) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (reg)
        }
        return signal_state;
 
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
        if (config->tuner_set_mode) {
                if (config->tuner_set_mode(fe, TUNER_WAKE) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (config->tuner_init) {
                if (config->tuner_init(fe) < 0)
-                       goto err;
+                       goto err_gateoff;
        }
 
        if (stv090x_i2c_gate_ctrl(fe, 0) < 0)
                goto err;
 
        return 0;
+
+err_gateoff:
+       stv090x_i2c_gate_ctrl(fe, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;