return ret;
 }
 
+static int si2168_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
+{
+       struct i2c_client *client = fe->demodulator_priv;
+       struct si2168_dev *dev = i2c_get_clientdata(client);
+       struct si2168_cmd cmd;
+       int ret = 0;
+
+       dev_dbg(&client->dev, "%s acquire: %d\n", __func__, acquire);
+
+       /* set TS_MODE property */
+       memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6);
+       if (acquire)
+               cmd.args[4] |= dev->ts_mode;
+       else
+               cmd.args[4] |= SI2168_TS_TRISTATE;
+       if (dev->ts_clock_gapped)
+               cmd.args[4] |= 0x40;
+       cmd.wlen = 6;
+       cmd.rlen = 4;
+       ret = si2168_cmd_execute(client, &cmd);
+
+       return ret;
+}
+
 static int si2168_read_status(struct dvb_frontend *fe, enum fe_status *status)
 {
        struct i2c_client *client = fe->demodulator_priv;
 
        dev->delivery_system = c->delivery_system;
 
+       /* enable ts bus */
+       ret = si2168_ts_bus_ctrl(fe, 1);
+       if (ret)
+               goto err;
+
        return 0;
 err:
        dev_dbg(&client->dev, "failed=%d\n", ret);
        return ret;
 }
 
-static int si2168_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
-{
-       struct i2c_client *client = fe->demodulator_priv;
-       struct si2168_dev *dev = i2c_get_clientdata(client);
-       struct si2168_cmd cmd;
-       int ret = 0;
-
-       dev_dbg(&client->dev, "%s acquire: %d\n", __func__, acquire);
-
-       /* set TS_MODE property */
-       memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6);
-       if (acquire)
-               cmd.args[4] |= dev->ts_mode;
-       else
-               cmd.args[4] |= SI2168_TS_TRISTATE;
-       if (dev->ts_clock_gapped)
-               cmd.args[4] |= 0x40;
-       cmd.wlen = 6;
-       cmd.rlen = 4;
-       ret = si2168_cmd_execute(client, &cmd);
-
-       return ret;
-}
-
 static int si2168_init(struct dvb_frontend *fe)
 {
        struct i2c_client *client = fe->demodulator_priv;
                 dev->version >> 24 & 0xff, dev->version >> 16 & 0xff,
                 dev->version >> 8 & 0xff, dev->version >> 0 & 0xff);
 
+       /* set ts mode */
        ret = si2168_ts_bus_ctrl(fe, 1);
        if (ret)
                goto err;
        dev->active = false;
 
        /* tri-state data bus */
-       si2168_ts_bus_ctrl(fe, 0);
+       ret = si2168_ts_bus_ctrl(fe, 0);
+       if (ret)
+               goto err;
 
        /* Firmware B 4.0-11 or later loses warm state during sleep */
        if (dev->version > ('B' << 24 | 4 << 16 | 0 << 8 | 11 << 0))
        .init = si2168_init,
        .sleep = si2168_sleep,
 
-       .ts_bus_ctrl          = si2168_ts_bus_ctrl,
-
        .set_frontend = si2168_set_frontend,
 
        .read_status = si2168_read_status,