[media] DiBcom: correct warnings
[pandora-kernel.git] / drivers / media / dvb / dvb-usb / dib0700_devices.c
index d0ea5b6..d82740a 100644 (file)
@@ -101,7 +101,7 @@ static int bristol_frontend_attach(struct dvb_usb_adapter *adap)
                }
        }
        st->mt2060_if1[adap->id] = 1220;
-       return (adap->fe = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap,
+       return (adap->fe_adap[0].fe = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap,
                (10 + adap->id) << 1, &bristol_dib3000mc_config[adap->id])) == NULL ? -ENODEV : 0;
 }
 
@@ -118,15 +118,16 @@ static int eeprom_read(struct i2c_adapter *adap,u8 adrs,u8 *pval)
 static int bristol_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct i2c_adapter *prim_i2c = &adap->dev->i2c_adap;
-       struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1);
+       struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe_adap[0].fe, 1);
        s8 a;
        int if1=1220;
        if (adap->dev->udev->descriptor.idVendor  == cpu_to_le16(USB_VID_HAUPPAUGE) &&
                adap->dev->udev->descriptor.idProduct == cpu_to_le16(USB_PID_HAUPPAUGE_NOVA_T_500_2)) {
                if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a;
        }
-       return dvb_attach(mt2060_attach,adap->fe, tun_i2c,&bristol_mt2060_config[adap->id],
-               if1) == NULL ? -ENODEV : 0;
+       return dvb_attach(mt2060_attach, adap->fe_adap[0].fe, tun_i2c,
+                         &bristol_mt2060_config[adap->id], if1) == NULL ?
+                         -ENODEV : 0;
 }
 
 /* STK7700D: Pinnacle/Terratec/Hauppauge Dual DVB-T Diversity */
@@ -279,10 +280,12 @@ static int stk7700P2_frontend_attach(struct dvb_usb_adapter *adap)
                }
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1),
-                               &stk7700d_dib7000p_mt2266_config[adap->id]);
+       adap->fe_adap[0].fe =
+               dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,
+                          0x80 + (adap->id << 1),
+                          &stk7700d_dib7000p_mt2266_config[adap->id]);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
@@ -306,17 +309,19 @@ static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
                }
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1),
-                               &stk7700d_dib7000p_mt2266_config[adap->id]);
+       adap->fe_adap[0].fe =
+               dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,
+                          0x80 + (adap->id << 1),
+                          &stk7700d_dib7000p_mt2266_config[adap->id]);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int stk7700d_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct i2c_adapter *tun_i2c;
-       tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
-       return dvb_attach(mt2266_attach, adap->fe, tun_i2c,
+       tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+       return dvb_attach(mt2266_attach, adap->fe_adap[0].fe, tun_i2c,
                &stk7700d_mt2266_config[adap->id]) == NULL ? -ENODEV : 0;
 }
 
@@ -396,8 +401,8 @@ static int stk7700ph_xc3028_callback(void *ptr, int component,
        switch (command) {
        case XC2028_TUNER_RESET:
                /* Send the tuner in then out of reset */
-               dib7000p_set_gpio(adap->fe, 8, 0, 0); msleep(10);
-               dib7000p_set_gpio(adap->fe, 8, 0, 1);
+               dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 0); msleep(10);
+               dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
                break;
        case XC2028_RESET_CLK:
                break;
@@ -447,25 +452,25 @@ static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap)
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
                &stk7700ph_dib7700_xc3028_config);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int stk7700ph_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct i2c_adapter *tun_i2c;
 
-       tun_i2c = dib7000p_get_i2c_master(adap->fe,
+       tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe,
                DIBX000_I2C_INTERFACE_TUNER, 1);
 
        stk7700ph_xc3028_config.i2c_adap = tun_i2c;
 
        /* FIXME: generalize & move to common area */
-       adap->fe->callback = stk7700ph_xc3028_callback;
+       adap->fe_adap[0].fe->callback = stk7700ph_xc3028_callback;
 
-       return dvb_attach(xc2028_attach, adap->fe, &stk7700ph_xc3028_config)
+       return dvb_attach(xc2028_attach, adap->fe_adap[0].fe, &stk7700ph_xc3028_config)
                == NULL ? -ENODEV : 0;
 }
 
@@ -685,12 +690,12 @@ static int stk7700p_frontend_attach(struct dvb_usb_adapter *adap)
        st->mt2060_if1[0] = 1220;
 
        if (dib7000pc_detection(&adap->dev->i2c_adap)) {
-               adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000p_config);
+               adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000p_config);
                st->is_dib7000pc = 1;
        } else
-               adap->fe = dvb_attach(dib7000m_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000m_config);
+               adap->fe_adap[0].fe = dvb_attach(dib7000m_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000m_config);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static struct mt2060_config stk7700p_mt2060_config = {
@@ -709,11 +714,11 @@ static int stk7700p_tuner_attach(struct dvb_usb_adapter *adap)
                if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a;
        }
        if (st->is_dib7000pc)
-               tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+               tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
        else
-               tun_i2c = dib7000m_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+               tun_i2c = dib7000m_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
 
-       return dvb_attach(mt2060_attach, adap->fe, tun_i2c, &stk7700p_mt2060_config,
+       return dvb_attach(mt2060_attach, adap->fe_adap[0].fe, tun_i2c, &stk7700p_mt2060_config,
                if1) == NULL ? -ENODEV : 0;
 }
 
@@ -843,33 +848,33 @@ static int dib7770_set_param_override(struct dvb_frontend *fe,
 static int dib7770p_tuner_attach(struct dvb_usb_adapter *adap)
 {
         struct dib0700_adapter_state *st = adap->priv;
-        struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe,
+        struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe,
                         DIBX000_I2C_INTERFACE_TUNER, 1);
 
-        if (dvb_attach(dib0070_attach, adap->fe, tun_i2c,
-                                &dib7770p_dib0070_config) == NULL)
+        if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c,
+                       &dib7770p_dib0070_config) == NULL)
                 return -ENODEV;
 
-        st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-        adap->fe->ops.tuner_ops.set_params = dib7770_set_param_override;
+        st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+        adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7770_set_param_override;
         return 0;
 }
 
 static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+       struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
 
        if (adap->id == 0) {
-               if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, &dib7070p_dib0070_config[0]) == NULL)
+               if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c, &dib7070p_dib0070_config[0]) == NULL)
                        return -ENODEV;
        } else {
-               if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, &dib7070p_dib0070_config[1]) == NULL)
+               if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c, &dib7070p_dib0070_config[1]) == NULL)
                        return -ENODEV;
        }
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib7070_set_param_override;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7070_set_param_override;
        return 0;
 }
 
@@ -878,26 +883,26 @@ static int stk7700p_pid_filter(struct dvb_usb_adapter *adapter, int index,
 {
        struct dib0700_state *st = adapter->dev->priv;
        if (st->is_dib7000pc)
-               return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
-       return dib7000m_pid_filter(adapter->fe, index, pid, onoff);
+               return dib7000p_pid_filter(adapter->fe_adap[0].fe, index, pid, onoff);
+       return dib7000m_pid_filter(adapter->fe_adap[0].fe, index, pid, onoff);
 }
 
 static int stk7700p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
 {
        struct dib0700_state *st = adapter->dev->priv;
        if (st->is_dib7000pc)
-               return dib7000p_pid_filter_ctrl(adapter->fe, onoff);
-       return dib7000m_pid_filter_ctrl(adapter->fe, onoff);
+               return dib7000p_pid_filter_ctrl(adapter->fe_adap[0].fe, onoff);
+       return dib7000m_pid_filter_ctrl(adapter->fe_adap[0].fe, onoff);
 }
 
 static int stk70x0p_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
 {
-    return dib7000p_pid_filter(adapter->fe, index, pid, onoff);
+       return dib7000p_pid_filter(adapter->fe_adap[0].fe, index, pid, onoff);
 }
 
 static int stk70x0p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
 {
-    return dib7000p_pid_filter_ctrl(adapter->fe, onoff);
+       return dib7000p_pid_filter_ctrl(adapter->fe_adap[0].fe, onoff);
 }
 
 static struct dibx000_bandwidth_config dib7070_bw_config_12_mhz = {
@@ -955,9 +960,9 @@ static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap)
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
                &dib7070p_dib7000p_config);
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 /* STK7770P */
@@ -1007,9 +1012,9 @@ static int stk7770p_frontend_attach(struct dvb_usb_adapter *adap)
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
                &dib7770p_dib7000p_config);
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 /* DIB807x generic */
@@ -1225,34 +1230,34 @@ static int dib807x_set_param_override(struct dvb_frontend *fe,
 static int dib807x_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe,
+       struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe_adap[0].fe,
                        DIBX000_I2C_INTERFACE_TUNER, 1);
 
        if (adap->id == 0) {
-               if (dvb_attach(dib0070_attach, adap->fe, tun_i2c,
+               if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c,
                                &dib807x_dib0070_config[0]) == NULL)
                        return -ENODEV;
        } else {
-               if (dvb_attach(dib0070_attach, adap->fe, tun_i2c,
+               if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c,
                                &dib807x_dib0070_config[1]) == NULL)
                        return -ENODEV;
        }
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib807x_set_param_override;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib807x_set_param_override;
        return 0;
 }
 
 static int stk80xx_pid_filter(struct dvb_usb_adapter *adapter, int index,
        u16 pid, int onoff)
 {
-       return dib8000_pid_filter(adapter->fe, index, pid, onoff);
+       return dib8000_pid_filter(adapter->fe_adap[0].fe, index, pid, onoff);
 }
 
 static int stk80xx_pid_filter_ctrl(struct dvb_usb_adapter *adapter,
                int onoff)
 {
-       return dib8000_pid_filter_ctrl(adapter->fe, onoff);
+       return dib8000_pid_filter_ctrl(adapter->fe_adap[0].fe, onoff);
 }
 
 /* STK807x */
@@ -1276,10 +1281,10 @@ static int stk807x_frontend_attach(struct dvb_usb_adapter *adap)
        dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18,
                                0x80);
 
-       adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
+       adap->fe_adap[0].fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
                              &dib807x_dib8000_config[0]);
 
-       return adap->fe == NULL ?  -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ?  -ENODEV : 0;
 }
 
 /* STK807xPVR */
@@ -1305,10 +1310,10 @@ static int stk807xpvr_frontend_attach0(struct dvb_usb_adapter *adap)
        /* initialize IC 0 */
        dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x22, 0x80);
 
-       adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
+       adap->fe_adap[0].fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
                              &dib807x_dib8000_config[0]);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int stk807xpvr_frontend_attach1(struct dvb_usb_adapter *adap)
@@ -1316,14 +1321,14 @@ static int stk807xpvr_frontend_attach1(struct dvb_usb_adapter *adap)
        /* initialize IC 1 */
        dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x12, 0x82);
 
-       adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82,
+       adap->fe_adap[0].fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82,
                              &dib807x_dib8000_config[1]);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 /* STK8096GP */
-struct dibx000_agc_config dib8090_agc_config[2] = {
+static struct dibx000_agc_config dib8090_agc_config[2] = {
        {
        BAND_UHF | BAND_VHF | BAND_LBAND | BAND_SBAND,
        /* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=1,
@@ -1513,7 +1518,7 @@ static int dib8096_set_param_override(struct dvb_frontend *fe,
        if (ret < 0)
                return ret;
 
-       target = (dib0090_get_wbd_offset(fe) * 8 * 18 / 33 + 1) / 2;
+       target = (dib0090_get_wbd_target(fe) * 8 * 18 / 33 + 1) / 2;
        dib8000_set_wbd_ref(fe, target);
 
 
@@ -1546,13 +1551,13 @@ static int dib8096_set_param_override(struct dvb_frontend *fe,
 static int dib809x_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+       struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
 
-       if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &dib809x_dib0090_config) == NULL)
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c, &dib809x_dib0090_config) == NULL)
                return -ENODEV;
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib8096_set_param_override;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib8096_set_param_override;
        return 0;
 }
 
@@ -1575,30 +1580,30 @@ static int stk809x_frontend_attach(struct dvb_usb_adapter *adap)
 
        dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, 0x80);
 
-       adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
+       adap->fe_adap[0].fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
 
-       return adap->fe == NULL ?  -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ?  -ENODEV : 0;
 }
 
 static int nim8096md_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
        struct i2c_adapter *tun_i2c;
-       struct dvb_frontend *fe_slave  = dib8000_get_slave_frontend(adap->fe, 1);
+       struct dvb_frontend *fe_slave  = dib8000_get_slave_frontend(adap->fe_adap[0].fe, 1);
 
        if (fe_slave) {
                tun_i2c = dib8000_get_i2c_master(fe_slave, DIBX000_I2C_INTERFACE_TUNER, 1);
                if (dvb_attach(dib0090_register, fe_slave, tun_i2c, &dib809x_dib0090_config) == NULL)
                        return -ENODEV;
-               fe_slave->dvb = adap->fe->dvb;
+               fe_slave->dvb = adap->fe_adap[0].fe->dvb;
                fe_slave->ops.tuner_ops.set_params = dib8096_set_param_override;
        }
-       tun_i2c = dib8000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1);
-       if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &dib809x_dib0090_config) == NULL)
+       tun_i2c = dib8000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_TUNER, 1);
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c, &dib809x_dib0090_config) == NULL)
                return -ENODEV;
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib8096_set_param_override;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib8096_set_param_override;
 
        return 0;
 }
@@ -1626,12 +1631,12 @@ static int nim8096md_frontend_attach(struct dvb_usb_adapter *adap)
 
        dib8000_i2c_enumeration(&adap->dev->i2c_adap, 2, 18, 0x80);
 
-       adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
-       if (adap->fe == NULL)
+       adap->fe_adap[0].fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
+       if (adap->fe_adap[0].fe == NULL)
                return -ENODEV;
 
        fe_slave = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82, &dib809x_dib8000_config[1]);
-       dib8000_set_slave_frontend(adap->fe, fe_slave);
+       dib8000_set_slave_frontend(adap->fe_adap[0].fe, fe_slave);
 
        return fe_slave == NULL ?  -ENODEV : 0;
 }
@@ -1639,12 +1644,12 @@ static int nim8096md_frontend_attach(struct dvb_usb_adapter *adap)
 /* STK9090M */
 static int dib90x0_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
 {
-       return dib9000_fw_pid_filter(adapter->fe, index, pid, onoff);
+       return dib9000_fw_pid_filter(adapter->fe_adap[0].fe, index, pid, onoff);
 }
 
 static int dib90x0_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
 {
-       return dib9000_fw_pid_filter_ctrl(adapter->fe, onoff);
+       return dib9000_fw_pid_filter_ctrl(adapter->fe_adap[0].fe, onoff);
 }
 
 static int dib90x0_tuner_reset(struct dvb_frontend *fe, int onoff)
@@ -1856,15 +1861,15 @@ static int stk9090m_frontend_attach(struct dvb_usb_adapter *adap)
        stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size;
        stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
 
-       adap->fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &stk9090m_config);
+       adap->fe_adap[0].fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &stk9090m_config);
 
-       return adap->fe == NULL ?  -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ?  -ENODEV : 0;
 }
 
 static int dib9090_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *state = adap->priv;
-       struct i2c_adapter *i2c = dib9000_get_tuner_interface(adap->fe);
+       struct i2c_adapter *i2c = dib9000_get_tuner_interface(adap->fe_adap[0].fe);
        u16 data_dib190[10] = {
                1, 0x1374,
                2, 0x01a2,
@@ -1873,13 +1878,13 @@ static int dib9090_tuner_attach(struct dvb_usb_adapter *adap)
                8, 0x0486,
        };
 
-       if (dvb_attach(dib0090_fw_register, adap->fe, i2c, &dib9090_dib0090_config) == NULL)
+       if (dvb_attach(dib0090_fw_register, adap->fe_adap[0].fe, i2c, &dib9090_dib0090_config) == NULL)
                return -ENODEV;
-       i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
+       i2c = dib9000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
        if (dib01x0_pmu_update(i2c, data_dib190, 10) != 0)
                return -ENODEV;
        dib0700_set_i2c_speed(adap->dev, 2000);
-       if (dib9000_firmware_post_pll_init(adap->fe) < 0)
+       if (dib9000_firmware_post_pll_init(adap->fe_adap[0].fe) < 0)
                return -ENODEV;
        release_firmware(state->frontend_firmware);
        return 0;
@@ -1925,16 +1930,16 @@ static int nim9090md_frontend_attach(struct dvb_usb_adapter *adap)
        nim9090md_config[1].microcode_B_fe_buffer = state->frontend_firmware->data;
 
        dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, 0x80);
-       adap->fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &nim9090md_config[0]);
+       adap->fe_adap[0].fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &nim9090md_config[0]);
 
-       if (adap->fe == NULL)
+       if (adap->fe_adap[0].fe == NULL)
                return -ENODEV;
 
-       i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_3_4, 0);
+       i2c = dib9000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_3_4, 0);
        dib9000_i2c_enumeration(i2c, 1, 0x12, 0x82);
 
        fe_slave = dvb_attach(dib9000_attach, i2c, 0x82, &nim9090md_config[1]);
-       dib9000_set_slave_frontend(adap->fe, fe_slave);
+       dib9000_set_slave_frontend(adap->fe_adap[0].fe, fe_slave);
 
        return fe_slave == NULL ?  -ENODEV : 0;
 }
@@ -1951,26 +1956,26 @@ static int nim9090md_tuner_attach(struct dvb_usb_adapter *adap)
                0, 0x00ef,
                8, 0x0406,
        };
-       i2c = dib9000_get_tuner_interface(adap->fe);
-       if (dvb_attach(dib0090_fw_register, adap->fe, i2c, &nim9090md_dib0090_config[0]) == NULL)
+       i2c = dib9000_get_tuner_interface(adap->fe_adap[0].fe);
+       if (dvb_attach(dib0090_fw_register, adap->fe_adap[0].fe, i2c, &nim9090md_dib0090_config[0]) == NULL)
                return -ENODEV;
-       i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
+       i2c = dib9000_get_i2c_master(adap->fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
        if (dib01x0_pmu_update(i2c, data_dib190, 10) < 0)
                return -ENODEV;
        dib0700_set_i2c_speed(adap->dev, 2000);
-       if (dib9000_firmware_post_pll_init(adap->fe) < 0)
+       if (dib9000_firmware_post_pll_init(adap->fe_adap[0].fe) < 0)
                return -ENODEV;
 
-       fe_slave = dib9000_get_slave_frontend(adap->fe, 1);
+       fe_slave = dib9000_get_slave_frontend(adap->fe_adap[0].fe, 1);
        if (fe_slave != NULL) {
-               i2c = dib9000_get_component_bus_interface(adap->fe);
+               i2c = dib9000_get_component_bus_interface(adap->fe_adap[0].fe);
                dib9000_set_i2c_adapter(fe_slave, i2c);
 
                i2c = dib9000_get_tuner_interface(fe_slave);
                if (dvb_attach(dib0090_fw_register, fe_slave, i2c, &nim9090md_dib0090_config[1]) == NULL)
                        return -ENODEV;
-               fe_slave->dvb = adap->fe->dvb;
-               dib9000_fw_set_component_bus_speed(adap->fe, 2000);
+               fe_slave->dvb = adap->fe_adap[0].fe->dvb;
+               dib9000_fw_set_component_bus_speed(adap->fe_adap[0].fe, 2000);
                if (dib9000_firmware_post_pll_init(fe_slave) < 0)
                        return -ENODEV;
        }
@@ -2074,7 +2079,7 @@ static int dib7090_agc_startup(struct dvb_frontend *fe, struct dvb_frontend_para
 
        memset(&pll, 0, sizeof(struct dibx000_bandwidth_config));
        dib0090_pwm_gain_reset(fe);
-       target = (dib0090_get_wbd_offset(fe) * 8 + 1) / 2;
+       target = (dib0090_get_wbd_target(fe) * 8 + 1) / 2;
        dib7000p_set_wbd_ref(fe, target);
 
        if (dib7090p_get_best_sampling(fe, &adc) == 0) {
@@ -2087,6 +2092,49 @@ static int dib7090_agc_startup(struct dvb_frontend *fe, struct dvb_frontend_para
        return 0;
 }
 
+static int dib7090_agc_restart(struct dvb_frontend *fe, u8 restart)
+{
+       deb_info("AGC restart callback: %d", restart);
+       if (restart == 0) /* before AGC startup */
+               dib0090_set_dc_servo(fe, 1);
+       return 0;
+}
+
+static int dib7090e_update_lna(struct dvb_frontend *fe, u16 agc_global)
+{
+       u16 agc1 = 0, agc2, wbd = 0, wbd_target, wbd_offset, threshold_agc1;
+       s16 wbd_delta;
+
+       if ((fe->dtv_property_cache.frequency) < 400000000)
+               threshold_agc1 = 25000;
+       else
+               threshold_agc1 = 30000;
+
+       wbd_target = (dib0090_get_wbd_target(fe)*8+1)/2;
+       wbd_offset = dib0090_get_wbd_offset(fe);
+       dib7000p_get_agc_values(fe, NULL, &agc1, &agc2, &wbd);
+       wbd_delta = (s16)wbd - (((s16)wbd_offset+10)*4) ;
+
+       deb_info("update lna, agc_global=%d agc1=%d agc2=%d",
+                       agc_global, agc1, agc2);
+       deb_info("update lna, wbd=%d wbd target=%d wbd offset=%d wbd delta=%d",
+                       wbd, wbd_target, wbd_offset, wbd_delta);
+
+       if ((agc1 < threshold_agc1) && (wbd_delta > 0)) {
+               dib0090_set_switch(fe, 1, 1, 1);
+               dib0090_set_vga(fe, 0);
+               dib0090_update_rframp_7090(fe, 0);
+               dib0090_update_tuning_table_7090(fe, 0);
+       } else {
+               dib0090_set_vga(fe, 1);
+               dib0090_update_rframp_7090(fe, 1);
+               dib0090_update_tuning_table_7090(fe, 1);
+               dib0090_set_switch(fe, 0, 0, 0);
+       }
+
+       return 0;
+}
+
 static struct dib0090_wbd_slope dib7090_wbd_table[] = {
        { 380,   81, 850, 64, 540,  4},
        { 860,   51, 866, 21,  375, 4},
@@ -2095,7 +2143,16 @@ static struct dib0090_wbd_slope dib7090_wbd_table[] = {
        { 0xFFFF, 0,   0, 0,   0,   0},
 };
 
-struct dibx000_agc_config dib7090_agc_config[2] = {
+static struct dib0090_wbd_slope dib7090e_wbd_table[] = {
+       { 380,   81, 850, 64, 540,      4},
+       { 700,   51, 866, 21,  320,     4},
+       { 860,   48, 666, 18,  330,     6},
+       {1700,    0, 250, 0,   100, 6},
+       {2600,    0, 250, 0,   100, 6},
+       { 0xFFFF, 0,   0, 0,   0,       0},
+};
+
+static struct dibx000_agc_config dib7090_agc_config[2] = {
        {
                .band_caps      = BAND_UHF,
                /* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=1, P_agc_inv_pwm1=0, P_agc_inv_pwm2=0,
@@ -2273,6 +2330,34 @@ static struct dib7000p_config tfe7090pvr_dib7000p_config[2] = {
        }
 };
 
+static struct dib7000p_config tfe7090e_dib7000p_config = {
+       .output_mpeg2_in_188_bytes  = 1,
+       .hostbus_diversity                      = 1,
+       .tuner_is_baseband                      = 1,
+       .update_lna                                     = dib7090e_update_lna,
+
+       .agc_config_count                       = 2,
+       .agc                                            = dib7090_agc_config,
+
+       .bw                                                     = &dib7090_clock_config_12_mhz,
+
+       .gpio_dir                                       = DIB7000P_GPIO_DEFAULT_DIRECTIONS,
+       .gpio_val                                       = DIB7000P_GPIO_DEFAULT_VALUES,
+       .gpio_pwm_pos                           = DIB7000P_GPIO_DEFAULT_PWM_POS,
+
+       .pwm_freq_div                           = 0,
+
+       .agc_control                            = dib7090_agc_restart,
+
+       .spur_protect                           = 0,
+       .disable_sample_and_hold        = 0,
+       .enable_current_mirror          = 0,
+       .diversity_delay                        = 0,
+
+       .output_mode                            = OUTMODE_MPEG2_FIFO,
+       .enMpegOutput                           = 1,
+};
+
 static const struct dib0090_config nim7090_dib0090_config = {
        .io.clock_khz = 12000,
        .io.pll_bypass = 0,
@@ -2307,6 +2392,42 @@ static const struct dib0090_config nim7090_dib0090_config = {
        .in_soc = 1,
 };
 
+static const struct dib0090_config tfe7090e_dib0090_config = {
+       .io.clock_khz = 12000,
+       .io.pll_bypass = 0,
+       .io.pll_range = 0,
+       .io.pll_prediv = 3,
+       .io.pll_loopdiv = 6,
+       .io.adc_clock_ratio = 0,
+       .io.pll_int_loop_filt = 0,
+       .reset = dib7090_tuner_sleep,
+       .sleep = dib7090_tuner_sleep,
+
+       .freq_offset_khz_uhf = 0,
+       .freq_offset_khz_vhf = 0,
+
+       .get_adc_power = dib7090_get_adc_power,
+
+       .clkouttobamse = 1,
+       .analog_output = 0,
+
+       .wbd_vhf_offset = 0,
+       .wbd_cband_offset = 0,
+       .use_pwm_agc = 1,
+       .clkoutdrive = 0,
+
+       .fref_clock_ratio = 0,
+
+       .wbd = dib7090e_wbd_table,
+
+       .ls_cfg_pad_drv = 0,
+       .data_tx_drv = 0,
+       .low_if = NULL,
+       .in_soc = 1,
+       .force_cband_input = 1,
+       .is_dib7090e = 1,
+};
+
 static const struct dib0090_config tfe7090pvr_dib0090_config[2] = {
        {
                .io.clock_khz = 12000,
@@ -2393,23 +2514,23 @@ static int nim7090_frontend_attach(struct dvb_usb_adapter *adap)
                err("%s: dib7000p_i2c_enumeration failed.  Cannot continue\n", __func__);
                return -ENODEV;
        }
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config);
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config);
 
-       return adap->fe == NULL ?  -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ?  -ENODEV : 0;
 }
 
 static int nim7090_tuner_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe);
+       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe_adap[0].fe);
 
-       if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &nim7090_dib0090_config) == NULL)
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c, &nim7090_dib0090_config) == NULL)
                return -ENODEV;
 
-       dib7000p_set_gpio(adap->fe, 8, 0, 1);
+       dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
        return 0;
 }
 
@@ -2439,11 +2560,11 @@ static int tfe7090pvr_frontend0_attach(struct dvb_usb_adapter *adap)
        }
 
        dib0700_set_i2c_speed(adap->dev, 340);
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x90, &tfe7090pvr_dib7000p_config[0]);
-       if (adap->fe == NULL)
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x90, &tfe7090pvr_dib7000p_config[0]);
+       if (adap->fe_adap[0].fe == NULL)
                return -ENODEV;
 
-       dib7090_slave_reset(adap->fe);
+       dib7090_slave_reset(adap->fe_adap[0].fe);
 
        return 0;
 }
@@ -2452,50 +2573,93 @@ static int tfe7090pvr_frontend1_attach(struct dvb_usb_adapter *adap)
 {
        struct i2c_adapter *i2c;
 
-       if (adap->dev->adapter[0].fe == NULL) {
+       if (adap->dev->adapter[0].fe_adap[0].fe == NULL) {
                err("the master dib7090 has to be initialized first");
                return -ENODEV; /* the master device has not been initialized */
        }
 
-       i2c = dib7000p_get_i2c_master(adap->dev->adapter[0].fe, DIBX000_I2C_INTERFACE_GPIO_6_7, 1);
+       i2c = dib7000p_get_i2c_master(adap->dev->adapter[0].fe_adap[0].fe, DIBX000_I2C_INTERFACE_GPIO_6_7, 1);
        if (dib7000p_i2c_enumeration(i2c, 1, 0x10, &tfe7090pvr_dib7000p_config[1]) != 0) {
                err("%s: dib7000p_i2c_enumeration failed.  Cannot continue\n", __func__);
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, i2c, 0x92, &tfe7090pvr_dib7000p_config[1]);
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, i2c, 0x92, &tfe7090pvr_dib7000p_config[1]);
        dib0700_set_i2c_speed(adap->dev, 200);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int tfe7090pvr_tuner0_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe);
+       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe_adap[0].fe);
 
-       if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &tfe7090pvr_dib0090_config[0]) == NULL)
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c, &tfe7090pvr_dib0090_config[0]) == NULL)
                return -ENODEV;
 
-       dib7000p_set_gpio(adap->fe, 8, 0, 1);
+       dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
        return 0;
 }
 
 static int tfe7090pvr_tuner1_attach(struct dvb_usb_adapter *adap)
 {
        struct dib0700_adapter_state *st = adap->priv;
-       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe);
+       struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe_adap[0].fe);
 
-       if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &tfe7090pvr_dib0090_config[1]) == NULL)
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c, &tfe7090pvr_dib0090_config[1]) == NULL)
                return -ENODEV;
 
-       dib7000p_set_gpio(adap->fe, 8, 0, 1);
+       dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
 
-       st->set_param_save = adap->fe->ops.tuner_ops.set_params;
-       adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup;
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
+       return 0;
+}
+
+static int tfe7090e_frontend_attach(struct dvb_usb_adapter *adap)
+{
+       dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1);
+       msleep(20);
+       dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1);
+       dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1);
+       dib0700_set_gpio(adap->dev, GPIO7, GPIO_OUT, 1);
+       dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 0);
+
+       msleep(20);
+       dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
+       msleep(20);
+       dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);
+
+       if (dib7000p_i2c_enumeration(&adap->dev->i2c_adap,
+                               1, 0x10, &tfe7090e_dib7000p_config) != 0) {
+               err("%s: dib7000p_i2c_enumeration failed.  Cannot continue\n",
+                               __func__);
+               return -ENODEV;
+       }
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,
+                       0x80, &tfe7090e_dib7000p_config);
+
+       return adap->fe_adap[0].fe == NULL ?  -ENODEV : 0;
+}
+
+static int tfe7090e_tuner_attach(struct dvb_usb_adapter *adap)
+{
+       struct dib0700_adapter_state *st = adap->priv;
+       struct i2c_adapter *tun_i2c =
+               dib7090_get_i2c_tuner(adap->fe_adap[0].fe);
+
+       if (dvb_attach(dib0090_register, adap->fe_adap[0].fe, tun_i2c,
+                               &tfe7090e_dib0090_config) == NULL)
+               return -ENODEV;
+
+       dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
+
+       st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
+       adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
        return 0;
 }
 
@@ -2555,14 +2719,14 @@ static int stk7070pd_frontend_attach0(struct dvb_usb_adapter *adap)
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &stk7070pd_dib7000p_config[0]);
-       return adap->fe == NULL ? -ENODEV : 0;
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &stk7070pd_dib7000p_config[0]);
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int stk7070pd_frontend_attach1(struct dvb_usb_adapter *adap)
 {
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x82, &stk7070pd_dib7000p_config[1]);
-       return adap->fe == NULL ? -ENODEV : 0;
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x82, &stk7070pd_dib7000p_config[1]);
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 /* S5H1411 */
@@ -2617,9 +2781,9 @@ static int s5h1411_frontend_attach(struct dvb_usb_adapter *adap)
        dib0700_set_gpio(adap->dev, GPIO2, GPIO_OUT, 1);
 
        /* GPIOs are initialized, do the attach */
-       adap->fe = dvb_attach(s5h1411_attach, &pinnacle_801e_config,
+       adap->fe_adap[0].fe = dvb_attach(s5h1411_attach, &pinnacle_801e_config,
                              &adap->dev->i2c_adap);
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int dib0700_xc5000_tuner_callback(void *priv, int component,
@@ -2649,9 +2813,9 @@ static struct xc5000_config s5h1411_xc5000_tunerconfig = {
 static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
 {
        /* FIXME: generalize & move to common area */
-       adap->fe->callback = dib0700_xc5000_tuner_callback;
+       adap->fe_adap[0].fe->callback = dib0700_xc5000_tuner_callback;
 
-       return dvb_attach(xc5000_attach, adap->fe, &adap->dev->i2c_adap,
+       return dvb_attach(xc5000_attach, adap->fe_adap[0].fe, &adap->dev->i2c_adap,
                          &s5h1411_xc5000_tunerconfig)
                == NULL ? -ENODEV : 0;
 }
@@ -2663,9 +2827,9 @@ static int dib0700_xc4000_tuner_callback(void *priv, int component,
 
        if (command == XC4000_TUNER_RESET) {
                /* Reset the tuner */
-               dib7000p_set_gpio(adap->fe, 8, 0, 0);
+               dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 0);
                msleep(10);
-               dib7000p_set_gpio(adap->fe, 8, 0, 1);
+               dib7000p_set_gpio(adap->fe_adap[0].fe, 8, 0, 1);
        } else {
                err("xc4000: unknown tuner callback command: %d\n", command);
                return -EINVAL;
@@ -2771,11 +2935,11 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)
                return -ENODEV;
        }
 
-       adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x12,
+       adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x12,
                              &pctv_340e_config);
        st->is_dib7000pc = 1;
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static struct xc4000_config dib7000p_xc4000_tunerconfig = {
@@ -2791,7 +2955,7 @@ static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
        struct i2c_adapter *tun_i2c;
 
        /* The xc4000 is not on the main i2c bus */
-       tun_i2c = dib7000p_get_i2c_master(adap->fe,
+       tun_i2c = dib7000p_get_i2c_master(adap->fe_adap[0].fe,
                                          DIBX000_I2C_INTERFACE_TUNER, 1);
        if (tun_i2c == NULL) {
                printk(KERN_ERR "Could not reach tuner i2c bus\n");
@@ -2799,9 +2963,9 @@ static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
        }
 
        /* Setup the reset callback */
-       adap->fe->callback = dib0700_xc4000_tuner_callback;
+       adap->fe_adap[0].fe->callback = dib0700_xc4000_tuner_callback;
 
-       return dvb_attach(xc4000_attach, adap->fe, tun_i2c,
+       return dvb_attach(xc4000_attach, adap->fe_adap[0].fe, tun_i2c,
                          &dib7000p_xc4000_tunerconfig)
                == NULL ? -ENODEV : 0;
 }
@@ -2857,16 +3021,16 @@ static int lgdt3305_frontend_attach(struct dvb_usb_adapter *adap)
        dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
        msleep(30);
 
-       adap->fe = dvb_attach(lgdt3305_attach,
+       adap->fe_adap[0].fe = dvb_attach(lgdt3305_attach,
                              &hcw_lgdt3305_config,
                              &adap->dev->i2c_adap);
 
-       return adap->fe == NULL ? -ENODEV : 0;
+       return adap->fe_adap[0].fe == NULL ? -ENODEV : 0;
 }
 
 static int mxl5007t_tuner_attach(struct dvb_usb_adapter *adap)
 {
-       return dvb_attach(mxl5007t_attach, adap->fe,
+       return dvb_attach(mxl5007t_attach, adap->fe_adap[0].fe,
                          &adap->dev->i2c_adap, 0x60,
                          &hcw_mxl5007t_config) == NULL ? -ENODEV : 0;
 }
@@ -2955,6 +3119,7 @@ struct usb_device_id dib0700_usb_id_table[] = {
 /* 75 */{ USB_DEVICE(USB_VID_MEDION,    USB_PID_CREATIX_CTX1921) },
        { USB_DEVICE(USB_VID_PINNACLE,  USB_PID_PINNACLE_PCTV340E) },
        { USB_DEVICE(USB_VID_PINNACLE,  USB_PID_PINNACLE_PCTV340E_SE) },
+       { USB_DEVICE(USB_VID_DIBCOM,    USB_PID_DIBCOM_TFE7090E) },
        { 0 }           /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, dib0700_usb_id_table);
@@ -2989,6 +3154,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk7700p_pid_filter,
@@ -2997,6 +3164,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = stk7700p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+                       }},
                        },
                },
 
@@ -3050,15 +3218,21 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .frontend_attach  = bristol_frontend_attach,
                                .tuner_attach     = bristol_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+                       }},
                        }, {
+                       .num_frontends = 1,
+                       .fe = {{
                                .frontend_attach  = bristol_frontend_attach,
                                .tuner_attach     = bristol_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
+                       }},
                        }
                },
 
@@ -3084,6 +3258,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3092,7 +3268,10 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = stk7700d_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+                       }},
                        }, {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3101,6 +3280,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = stk7700d_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
+                       }},
                        }
                },
 
@@ -3143,6 +3323,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3151,6 +3333,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = stk7700d_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+                       }},
                        },
                },
 
@@ -3185,6 +3368,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3193,7 +3378,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        },
                },
@@ -3261,6 +3446,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3269,7 +3456,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        },
                },
@@ -3305,6 +3492,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3313,9 +3502,11 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        }, {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3324,7 +3515,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        }
                },
@@ -3373,6 +3564,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3381,9 +3574,11 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        }, {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3392,7 +3587,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7070p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
-
+                       }},
                                .size_of_priv     = sizeof(struct dib0700_adapter_state),
                        }
                },
@@ -3420,6 +3615,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3428,7 +3625,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = stk7700ph_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv = sizeof(struct
                                                dib0700_adapter_state),
                        },
@@ -3488,11 +3685,13 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .frontend_attach  = s5h1411_frontend_attach,
                                .tuner_attach     = xc5000_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv = sizeof(struct
                                                dib0700_adapter_state),
                        },
@@ -3524,11 +3723,13 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .frontend_attach  = lgdt3305_frontend_attach,
                                .tuner_attach     = mxl5007t_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv = sizeof(struct
                                                dib0700_adapter_state),
                        },
@@ -3550,6 +3751,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter       = stk70x0p_pid_filter,
@@ -3558,7 +3761,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib7770p_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3600,6 +3803,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter = stk80xx_pid_filter,
@@ -3608,7 +3813,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib807x_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3644,6 +3849,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter = stk80xx_pid_filter,
@@ -3652,11 +3859,13 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib807x_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
                                .pid_filter = stk80xx_pid_filter,
@@ -3665,7 +3874,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib807x_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3693,6 +3902,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3702,7 +3913,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib809x_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3730,6 +3941,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3739,7 +3952,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = dib9090_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3767,6 +3980,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3776,7 +3991,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = nim8096md_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3804,6 +4019,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3813,7 +4030,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = nim9090md_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3841,6 +4058,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3850,7 +4069,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = nim7090_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3878,6 +4097,8 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 2,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3887,11 +4108,13 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = tfe7090pvr_tuner0_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x03),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
                                        DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
                                .pid_filter_count = 32,
@@ -3901,7 +4124,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                .tuner_attach     = tfe7090pvr_tuner1_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv =
                                        sizeof(struct dib0700_adapter_state),
                        },
@@ -3929,11 +4152,13 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                .num_adapters = 1,
                .adapter = {
                        {
+                       .num_frontends = 1,
+                       .fe = {{
                                .frontend_attach  = pctv340e_frontend_attach,
                                .tuner_attach     = xc4000_tuner_attach,
 
                                DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
-
+                       }},
                                .size_of_priv = sizeof(struct
                                                dib0700_adapter_state),
                        },
@@ -3950,6 +4175,46 @@ struct dvb_usb_device_properties dib0700_devices[] = {
                                { NULL },
                        },
                },
+               .rc.core = {
+                       .rc_interval      = DEFAULT_RC_INTERVAL,
+                       .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,
+                       .module_name      = "dib0700",
+                       .rc_query         = dib0700_rc_query_old_firmware,
+                       .allowed_protos   = RC_TYPE_RC5 |
+                                           RC_TYPE_RC6 |
+                                           RC_TYPE_NEC,
+                       .change_protocol  = dib0700_change_protocol,
+               },
+       }, { DIB0700_DEFAULT_DEVICE_PROPERTIES,
+               .num_adapters = 1,
+               .adapter = {
+                       {
+                               .num_frontends = 1,
+                               .fe = {{
+                                       .caps  = DVB_USB_ADAP_HAS_PID_FILTER |
+                                               DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
+                                       .pid_filter_count = 32,
+                                       .pid_filter = stk70x0p_pid_filter,
+                                       .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
+                                       .frontend_attach  = tfe7090e_frontend_attach,
+                                       .tuner_attach     = tfe7090e_tuner_attach,
+
+                                       DIB0700_DEFAULT_STREAMING_CONFIG(0x02),
+                               } },
+
+                               .size_of_priv =
+                                       sizeof(struct dib0700_adapter_state),
+                       },
+               },
+
+               .num_device_descs = 1,
+               .devices = {
+                       {   "DiBcom TFE7090E reference design",
+                               { &dib0700_usb_id_table[78], NULL },
+                               { NULL },
+                       },
+               },
+
                .rc.core = {
                        .rc_interval      = DEFAULT_RC_INTERVAL,
                        .rc_codes         = RC_MAP_DIB0700_RC5_TABLE,