return rtl2832_rd(priv, reg, val, len);
 }
 
-#if 0 /* currently not used */
 /* write single register */
 static int rtl2832_wr_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 val)
 {
        return rtl2832_wr_regs(priv, reg, page, &val, 1);
 }
-#endif
 
 /* read single register */
 static int rtl2832_rd_reg(struct rtl2832_priv *priv, u8 reg, u8 page, u8 *val)
        if (fe->ops.tuner_ops.set_params)
                fe->ops.tuner_ops.set_params(fe);
 
+       /* PIP mode related */
+       ret = rtl2832_wr_regs(priv, 0x92, 1, "\x00\x0f\xff", 3);
+       if (ret)
+               goto err;
+
        /* If the frontend has get_if_frequency(), use it */
        if (fe->ops.tuner_ops.get_if_frequency) {
                u32 if_freq;
        if (ret)
                goto err;
 
-
        /* soft reset */
        ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
        if (ret)
        return 0;
 }
 
+int rtl2832_enable_external_ts_if(struct dvb_frontend *fe)
+{
+       struct rtl2832_priv *priv = fe->demodulator_priv;
+       int ret;
+
+       dev_dbg(&priv->i2c->dev, "%s: setting PIP mode\n", __func__);
+
+       ret = rtl2832_wr_regs(priv, 0x0c, 1, "\x5f\xff", 2);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_demod_reg(priv, DVBT_PIP_ON, 0x1);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_reg(priv, 0xbc, 0, 0x18);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_reg(priv, 0x22, 0, 0x01);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_reg(priv, 0x26, 0, 0x1f);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_reg(priv, 0x27, 0, 0xff);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_regs(priv, 0x92, 1, "\x7f\xf7\xff", 3);
+       if (ret)
+               goto err;
+
+       /* soft reset */
+       ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
+       if (ret)
+               goto err;
+
+       ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
+       if (ret)
+               goto err;
+
+       return 0;
+err:
+       dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
+       return ret;
+
+}
+EXPORT_SYMBOL(rtl2832_enable_external_ts_if);
+
 struct i2c_adapter *rtl2832_get_i2c_adapter(struct dvb_frontend *fe)
 {
        struct rtl2832_priv *priv = fe->demodulator_priv;