struct stv090x_state *state = fe->demodulator_priv;
        u32 reg;
 
+       if (state->config->tuner_init) {
+               if (state->config->tuner_sleep(fe) < 0)
+                       goto err_gateoff;
+       }
+
        dprintk(FE_DEBUG, 1, "Set %s to sleep",
                state->device == STV0900 ? "STV0900" : "STV0903");
 
                goto err;
 
        return 0;
+
+err_gateoff:
+       stv090x_i2c_gate_ctrl(state, 0);
 err:
        dprintk(FE_ERROR, 1, "I/O error");
        return -1;
 
        bool diseqc_envelope_mode;
 
        int (*tuner_init) (struct dvb_frontend *fe);
+       int (*tuner_sleep) (struct dvb_frontend *fe);
        int (*tuner_set_mode) (struct dvb_frontend *fe, enum tuner_mode mode);
        int (*tuner_set_frequency) (struct dvb_frontend *fe, u32 frequency);
        int (*tuner_get_frequency) (struct dvb_frontend *fe, u32 *frequency);
 
                .frequency_max  = 2150000,
                .frequency_step = 0,
        },
-
-       .init                   = stv6110x_init,
-       .sleep                  = stv6110x_sleep,
        .release                = stv6110x_release
 };
 
 static struct stv6110x_devctl stv6110x_ctl = {
        .tuner_init             = stv6110x_init,
+       .tuner_sleep            = stv6110x_sleep,
        .tuner_set_mode         = stv6110x_set_mode,
        .tuner_set_frequency    = stv6110x_set_frequency,
        .tuner_get_frequency    = stv6110x_get_frequency,
 
 
 struct stv6110x_devctl {
        int (*tuner_init) (struct dvb_frontend *fe);
+       int (*tuner_sleep) (struct dvb_frontend *fe);
        int (*tuner_set_mode) (struct dvb_frontend *fe, enum tuner_mode mode);
        int (*tuner_set_frequency) (struct dvb_frontend *fe, u32 frequency);
        int (*tuner_get_frequency) (struct dvb_frontend *fe, u32 *frequency);
 
        .repeater_level         = STV090x_RPTLEVEL_16,
 
        .tuner_init             = NULL,
+       .tuner_sleep            = NULL,
        .tuner_set_mode         = NULL,
        .tuner_set_frequency    = NULL,
        .tuner_get_frequency    = NULL,
                                                 &budget->i2c_adap);
 
                                tt1600_stv090x_config.tuner_init          = ctl->tuner_init;
+                               tt1600_stv090x_config.tuner_sleep         = ctl->tuner_sleep;
                                tt1600_stv090x_config.tuner_set_mode      = ctl->tuner_set_mode;
                                tt1600_stv090x_config.tuner_set_frequency = ctl->tuner_set_frequency;
                                tt1600_stv090x_config.tuner_get_frequency = ctl->tuner_get_frequency;