aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-usb/cxusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/dvb-usb/cxusb.c')
-rw-r--r--drivers/media/dvb/dvb-usb/cxusb.c106
1 files changed, 70 insertions, 36 deletions
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index a76f431d6a26..7f610da8cca8 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -347,7 +347,7 @@ static void cxusb_d680_dmb_drain_message(struct dvb_usb_device *d)
347 347
348static void cxusb_d680_dmb_drain_video(struct dvb_usb_device *d) 348static void cxusb_d680_dmb_drain_video(struct dvb_usb_device *d)
349{ 349{
350 struct usb_data_stream_properties *p = &d->props.adapter[0].stream; 350 struct usb_data_stream_properties *p = &d->props.adapter[0].fe[0].stream;
351 const int timeout = 100; 351 const int timeout = 100;
352 const int junk_len = p->u.bulk.buffersize; 352 const int junk_len = p->u.bulk.buffersize;
353 u8 *junk; 353 u8 *junk;
@@ -725,7 +725,7 @@ static struct max2165_config mygica_d689_max2165_cfg = {
725/* Callbacks for DVB USB */ 725/* Callbacks for DVB USB */
726static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap) 726static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap)
727{ 727{
728 dvb_attach(simple_tuner_attach, adap->fe[0], 728 dvb_attach(simple_tuner_attach, adap->fe_adap[0].fe,
729 &adap->dev->i2c_adap, 0x61, 729 &adap->dev->i2c_adap, 0x61,
730 TUNER_PHILIPS_FMD1216ME_MK3); 730 TUNER_PHILIPS_FMD1216ME_MK3);
731 return 0; 731 return 0;
@@ -733,27 +733,27 @@ static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap)
733 733
734static int cxusb_dee1601_tuner_attach(struct dvb_usb_adapter *adap) 734static int cxusb_dee1601_tuner_attach(struct dvb_usb_adapter *adap)
735{ 735{
736 dvb_attach(dvb_pll_attach, adap->fe[0], 0x61, 736 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x61,
737 NULL, DVB_PLL_THOMSON_DTT7579); 737 NULL, DVB_PLL_THOMSON_DTT7579);
738 return 0; 738 return 0;
739} 739}
740 740
741static int cxusb_lgz201_tuner_attach(struct dvb_usb_adapter *adap) 741static int cxusb_lgz201_tuner_attach(struct dvb_usb_adapter *adap)
742{ 742{
743 dvb_attach(dvb_pll_attach, adap->fe[0], 0x61, NULL, DVB_PLL_LG_Z201); 743 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x61, NULL, DVB_PLL_LG_Z201);
744 return 0; 744 return 0;
745} 745}
746 746
747static int cxusb_dtt7579_tuner_attach(struct dvb_usb_adapter *adap) 747static int cxusb_dtt7579_tuner_attach(struct dvb_usb_adapter *adap)
748{ 748{
749 dvb_attach(dvb_pll_attach, adap->fe[0], 0x60, 749 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60,
750 NULL, DVB_PLL_THOMSON_DTT7579); 750 NULL, DVB_PLL_THOMSON_DTT7579);
751 return 0; 751 return 0;
752} 752}
753 753
754static int cxusb_lgh064f_tuner_attach(struct dvb_usb_adapter *adap) 754static int cxusb_lgh064f_tuner_attach(struct dvb_usb_adapter *adap)
755{ 755{
756 dvb_attach(simple_tuner_attach, adap->fe[0], 756 dvb_attach(simple_tuner_attach, adap->fe_adap[0].fe,
757 &adap->dev->i2c_adap, 0x61, TUNER_LG_TDVS_H06XF); 757 &adap->dev->i2c_adap, 0x61, TUNER_LG_TDVS_H06XF);
758 return 0; 758 return 0;
759} 759}
@@ -795,9 +795,9 @@ static int cxusb_dvico_xc3028_tuner_attach(struct dvb_usb_adapter *adap)
795 }; 795 };
796 796
797 /* FIXME: generalize & move to common area */ 797 /* FIXME: generalize & move to common area */
798 adap->fe[0]->callback = dvico_bluebird_xc2028_callback; 798 adap->fe_adap[0].fe->callback = dvico_bluebird_xc2028_callback;
799 799
800 fe = dvb_attach(xc2028_attach, adap->fe[0], &cfg); 800 fe = dvb_attach(xc2028_attach, adap->fe_adap[0].fe, &cfg);
801 if (fe == NULL || fe->ops.tuner_ops.set_config == NULL) 801 if (fe == NULL || fe->ops.tuner_ops.set_config == NULL)
802 return -EIO; 802 return -EIO;
803 803
@@ -808,7 +808,7 @@ static int cxusb_dvico_xc3028_tuner_attach(struct dvb_usb_adapter *adap)
808 808
809static int cxusb_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap) 809static int cxusb_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap)
810{ 810{
811 dvb_attach(mxl5005s_attach, adap->fe[0], 811 dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
812 &adap->dev->i2c_adap, &aver_a868r_tuner); 812 &adap->dev->i2c_adap, &aver_a868r_tuner);
813 return 0; 813 return 0;
814} 814}
@@ -816,7 +816,7 @@ static int cxusb_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap)
816static int cxusb_d680_dmb_tuner_attach(struct dvb_usb_adapter *adap) 816static int cxusb_d680_dmb_tuner_attach(struct dvb_usb_adapter *adap)
817{ 817{
818 struct dvb_frontend *fe; 818 struct dvb_frontend *fe;
819 fe = dvb_attach(mxl5005s_attach, adap->fe[0], 819 fe = dvb_attach(mxl5005s_attach, adap->fe_adap[0].fe,
820 &adap->dev->i2c_adap, &d680_dmb_tuner); 820 &adap->dev->i2c_adap, &d680_dmb_tuner);
821 return (fe == NULL) ? -EIO : 0; 821 return (fe == NULL) ? -EIO : 0;
822} 822}
@@ -824,7 +824,7 @@ static int cxusb_d680_dmb_tuner_attach(struct dvb_usb_adapter *adap)
824static int cxusb_mygica_d689_tuner_attach(struct dvb_usb_adapter *adap) 824static int cxusb_mygica_d689_tuner_attach(struct dvb_usb_adapter *adap)
825{ 825{
826 struct dvb_frontend *fe; 826 struct dvb_frontend *fe;
827 fe = dvb_attach(max2165_attach, adap->fe[0], 827 fe = dvb_attach(max2165_attach, adap->fe_adap[0].fe,
828 &adap->dev->i2c_adap, &mygica_d689_max2165_cfg); 828 &adap->dev->i2c_adap, &mygica_d689_max2165_cfg);
829 return (fe == NULL) ? -EIO : 0; 829 return (fe == NULL) ? -EIO : 0;
830} 830}
@@ -837,7 +837,7 @@ static int cxusb_cx22702_frontend_attach(struct dvb_usb_adapter *adap)
837 837
838 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, &b, 1); 838 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, &b, 1);
839 839
840 if ((adap->fe[0] = dvb_attach(cx22702_attach, &cxusb_cx22702_config, 840 if ((adap->fe_adap[0].fe = dvb_attach(cx22702_attach, &cxusb_cx22702_config,
841 &adap->dev->i2c_adap)) != NULL) 841 &adap->dev->i2c_adap)) != NULL)
842 return 0; 842 return 0;
843 843
@@ -851,7 +851,7 @@ static int cxusb_lgdt3303_frontend_attach(struct dvb_usb_adapter *adap)
851 851
852 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0); 852 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0);
853 853
854 if ((adap->fe[0] = dvb_attach(lgdt330x_attach, &cxusb_lgdt3303_config, 854 if ((adap->fe_adap[0].fe = dvb_attach(lgdt330x_attach, &cxusb_lgdt3303_config,
855 &adap->dev->i2c_adap)) != NULL) 855 &adap->dev->i2c_adap)) != NULL)
856 return 0; 856 return 0;
857 857
@@ -860,9 +860,9 @@ static int cxusb_lgdt3303_frontend_attach(struct dvb_usb_adapter *adap)
860 860
861static int cxusb_aver_lgdt3303_frontend_attach(struct dvb_usb_adapter *adap) 861static int cxusb_aver_lgdt3303_frontend_attach(struct dvb_usb_adapter *adap)
862{ 862{
863 adap->fe[0] = dvb_attach(lgdt330x_attach, &cxusb_aver_lgdt3303_config, 863 adap->fe_adap[0].fe = dvb_attach(lgdt330x_attach, &cxusb_aver_lgdt3303_config,
864 &adap->dev->i2c_adap); 864 &adap->dev->i2c_adap);
865 if (adap->fe[0] != NULL) 865 if (adap->fe_adap[0].fe != NULL)
866 return 0; 866 return 0;
867 867
868 return -EIO; 868 return -EIO;
@@ -876,7 +876,7 @@ static int cxusb_mt352_frontend_attach(struct dvb_usb_adapter *adap)
876 876
877 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0); 877 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0);
878 878
879 if ((adap->fe[0] = dvb_attach(mt352_attach, &cxusb_mt352_config, 879 if ((adap->fe_adap[0].fe = dvb_attach(mt352_attach, &cxusb_mt352_config,
880 &adap->dev->i2c_adap)) != NULL) 880 &adap->dev->i2c_adap)) != NULL)
881 return 0; 881 return 0;
882 882
@@ -890,9 +890,9 @@ static int cxusb_dee1601_frontend_attach(struct dvb_usb_adapter *adap)
890 890
891 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0); 891 cxusb_ctrl_msg(adap->dev, CMD_DIGITAL, NULL, 0, NULL, 0);
892 892
893 if (((adap->fe[0] = dvb_attach(mt352_attach, &cxusb_dee1601_config, 893 if (((adap->fe_adap[0].fe = dvb_attach(mt352_attach, &cxusb_dee1601_config,
894 &adap->dev->i2c_adap)) != NULL) || 894 &adap->dev->i2c_adap)) != NULL) ||
895 ((adap->fe[0] = dvb_attach(zl10353_attach, 895 ((adap->fe_adap[0].fe = dvb_attach(zl10353_attach,
896 &cxusb_zl10353_dee1601_config, 896 &cxusb_zl10353_dee1601_config,
897 &adap->dev->i2c_adap)) != NULL)) 897 &adap->dev->i2c_adap)) != NULL))
898 return 0; 898 return 0;
@@ -917,7 +917,7 @@ static int cxusb_dualdig4_frontend_attach(struct dvb_usb_adapter *adap)
917 cxusb_bluebird_gpio_pulse(adap->dev, 0x01, 1); 917 cxusb_bluebird_gpio_pulse(adap->dev, 0x01, 1);
918 cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1); 918 cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
919 919
920 if ((adap->fe[0] = dvb_attach(zl10353_attach, 920 if ((adap->fe_adap[0].fe = dvb_attach(zl10353_attach,
921 &cxusb_zl10353_xc3028_config_no_i2c_gate, 921 &cxusb_zl10353_xc3028_config_no_i2c_gate,
922 &adap->dev->i2c_adap)) == NULL) 922 &adap->dev->i2c_adap)) == NULL)
923 return -EIO; 923 return -EIO;
@@ -1031,9 +1031,9 @@ static int cxusb_dualdig4_rev2_frontend_attach(struct dvb_usb_adapter *adap)
1031 return -ENODEV; 1031 return -ENODEV;
1032 } 1032 }
1033 1033
1034 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 1034 adap->fe_adap[0].fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
1035 &cxusb_dualdig4_rev2_config); 1035 &cxusb_dualdig4_rev2_config);
1036 if (adap->fe[0] == NULL) 1036 if (adap->fe_adap[0].fe == NULL)
1037 return -EIO; 1037 return -EIO;
1038 1038
1039 return 0; 1039 return 0;
@@ -1084,15 +1084,15 @@ static int cxusb_dualdig4_rev2_tuner_attach(struct dvb_usb_adapter *adap)
1084{ 1084{
1085 struct dib0700_adapter_state *st = adap->priv; 1085 struct dib0700_adapter_state *st = adap->priv;
1086 struct i2c_adapter *tun_i2c = 1086 struct i2c_adapter *tun_i2c =
1087 dib7000p_get_i2c_master(adap->fe[0], 1087 dib7000p_get_i2c_master(adap->fe_adap[0].fe,
1088 DIBX000_I2C_INTERFACE_TUNER, 1); 1088 DIBX000_I2C_INTERFACE_TUNER, 1);
1089 1089
1090 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c, 1090 if (dvb_attach(dib0070_attach, adap->fe_adap[0].fe, tun_i2c,
1091 &dib7070p_dib0070_config) == NULL) 1091 &dib7070p_dib0070_config) == NULL)
1092 return -ENODEV; 1092 return -ENODEV;
1093 1093
1094 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params; 1094 st->set_param_save = adap->fe_adap[0].fe->ops.tuner_ops.set_params;
1095 adap->fe[0]->ops.tuner_ops.set_params = dib7070_set_param_override; 1095 adap->fe_adap[0].fe->ops.tuner_ops.set_params = dib7070_set_param_override;
1096 return 0; 1096 return 0;
1097} 1097}
1098 1098
@@ -1108,12 +1108,12 @@ static int cxusb_nano2_frontend_attach(struct dvb_usb_adapter *adap)
1108 cxusb_bluebird_gpio_pulse(adap->dev, 0x01, 1); 1108 cxusb_bluebird_gpio_pulse(adap->dev, 0x01, 1);
1109 cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1); 1109 cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
1110 1110
1111 if ((adap->fe[0] = dvb_attach(zl10353_attach, 1111 if ((adap->fe_adap[0].fe = dvb_attach(zl10353_attach,
1112 &cxusb_zl10353_xc3028_config, 1112 &cxusb_zl10353_xc3028_config,
1113 &adap->dev->i2c_adap)) != NULL) 1113 &adap->dev->i2c_adap)) != NULL)
1114 return 0; 1114 return 0;
1115 1115
1116 if ((adap->fe[0] = dvb_attach(mt352_attach, 1116 if ((adap->fe_adap[0].fe = dvb_attach(mt352_attach,
1117 &cxusb_mt352_xc3028_config, 1117 &cxusb_mt352_xc3028_config,
1118 &adap->dev->i2c_adap)) != NULL) 1118 &adap->dev->i2c_adap)) != NULL)
1119 return 0; 1119 return 0;
@@ -1150,7 +1150,7 @@ static int cxusb_d680_dmb_frontend_attach(struct dvb_usb_adapter *adap)
1150 usb_clear_halt(d->udev, 1150 usb_clear_halt(d->udev,
1151 usb_rcvbulkpipe(d->udev, d->props.generic_bulk_ctrl_endpoint)); 1151 usb_rcvbulkpipe(d->udev, d->props.generic_bulk_ctrl_endpoint));
1152 usb_clear_halt(d->udev, 1152 usb_clear_halt(d->udev,
1153 usb_rcvbulkpipe(d->udev, d->props.adapter[0].stream.endpoint)); 1153 usb_rcvbulkpipe(d->udev, d->props.adapter[0].fe[0].stream.endpoint));
1154 1154
1155 /* Drain USB pipes to avoid hang after reboot */ 1155 /* Drain USB pipes to avoid hang after reboot */
1156 for (n = 0; n < 5; n++) { 1156 for (n = 0; n < 5; n++) {
@@ -1172,8 +1172,8 @@ static int cxusb_d680_dmb_frontend_attach(struct dvb_usb_adapter *adap)
1172 msleep(100); 1172 msleep(100);
1173 1173
1174 /* Attach frontend */ 1174 /* Attach frontend */
1175 adap->fe[0] = dvb_attach(lgs8gxx_attach, &d680_lgs8gl5_cfg, &d->i2c_adap); 1175 adap->fe_adap[0].fe = dvb_attach(lgs8gxx_attach, &d680_lgs8gl5_cfg, &d->i2c_adap);
1176 if (adap->fe[0] == NULL) 1176 if (adap->fe_adap[0].fe == NULL)
1177 return -EIO; 1177 return -EIO;
1178 1178
1179 return 0; 1179 return 0;
@@ -1207,7 +1207,7 @@ static int cxusb_mygica_d689_frontend_attach(struct dvb_usb_adapter *adap)
1207 usb_clear_halt(d->udev, 1207 usb_clear_halt(d->udev,
1208 usb_rcvbulkpipe(d->udev, d->props.generic_bulk_ctrl_endpoint)); 1208 usb_rcvbulkpipe(d->udev, d->props.generic_bulk_ctrl_endpoint));
1209 usb_clear_halt(d->udev, 1209 usb_clear_halt(d->udev,
1210 usb_rcvbulkpipe(d->udev, d->props.adapter[0].stream.endpoint)); 1210 usb_rcvbulkpipe(d->udev, d->props.adapter[0].fe[0].stream.endpoint));
1211 1211
1212 1212
1213 /* Reset the tuner */ 1213 /* Reset the tuner */
@@ -1223,9 +1223,9 @@ static int cxusb_mygica_d689_frontend_attach(struct dvb_usb_adapter *adap)
1223 msleep(100); 1223 msleep(100);
1224 1224
1225 /* Attach frontend */ 1225 /* Attach frontend */
1226 adap->fe[0] = dvb_attach(atbm8830_attach, &mygica_d689_atbm8830_cfg, 1226 adap->fe_adap[0].fe = dvb_attach(atbm8830_attach, &mygica_d689_atbm8830_cfg,
1227 &d->i2c_adap); 1227 &d->i2c_adap);
1228 if (adap->fe[0] == NULL) 1228 if (adap->fe_adap[0].fe == NULL)
1229 return -EIO; 1229 return -EIO;
1230 1230
1231 return 0; 1231 return 0;
@@ -1383,6 +1383,8 @@ static struct dvb_usb_device_properties cxusb_medion_properties = {
1383 .num_adapters = 1, 1383 .num_adapters = 1,
1384 .adapter = { 1384 .adapter = {
1385 { 1385 {
1386 .num_frontends = 1,
1387 .fe = {{
1386 .streaming_ctrl = cxusb_streaming_ctrl, 1388 .streaming_ctrl = cxusb_streaming_ctrl,
1387 .frontend_attach = cxusb_cx22702_frontend_attach, 1389 .frontend_attach = cxusb_cx22702_frontend_attach,
1388 .tuner_attach = cxusb_fmd1216me_tuner_attach, 1390 .tuner_attach = cxusb_fmd1216me_tuner_attach,
@@ -1397,7 +1399,7 @@ static struct dvb_usb_device_properties cxusb_medion_properties = {
1397 } 1399 }
1398 } 1400 }
1399 }, 1401 },
1400 1402 }},
1401 }, 1403 },
1402 }, 1404 },
1403 .power_ctrl = cxusb_power_ctrl, 1405 .power_ctrl = cxusb_power_ctrl,
@@ -1429,6 +1431,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_lgh064f_properties = {
1429 .num_adapters = 1, 1431 .num_adapters = 1,
1430 .adapter = { 1432 .adapter = {
1431 { 1433 {
1434 .num_frontends = 1,
1435 .fe = {{
1432 .streaming_ctrl = cxusb_streaming_ctrl, 1436 .streaming_ctrl = cxusb_streaming_ctrl,
1433 .frontend_attach = cxusb_lgdt3303_frontend_attach, 1437 .frontend_attach = cxusb_lgdt3303_frontend_attach,
1434 .tuner_attach = cxusb_lgh064f_tuner_attach, 1438 .tuner_attach = cxusb_lgh064f_tuner_attach,
@@ -1444,6 +1448,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_lgh064f_properties = {
1444 } 1448 }
1445 } 1449 }
1446 }, 1450 },
1451 }},
1447 }, 1452 },
1448 }, 1453 },
1449 1454
@@ -1483,6 +1488,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_dee1601_properties = {
1483 .num_adapters = 1, 1488 .num_adapters = 1,
1484 .adapter = { 1489 .adapter = {
1485 { 1490 {
1491 .num_frontends = 1,
1492 .fe = {{
1486 .streaming_ctrl = cxusb_streaming_ctrl, 1493 .streaming_ctrl = cxusb_streaming_ctrl,
1487 .frontend_attach = cxusb_dee1601_frontend_attach, 1494 .frontend_attach = cxusb_dee1601_frontend_attach,
1488 .tuner_attach = cxusb_dee1601_tuner_attach, 1495 .tuner_attach = cxusb_dee1601_tuner_attach,
@@ -1497,6 +1504,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_dee1601_properties = {
1497 } 1504 }
1498 } 1505 }
1499 }, 1506 },
1507 }},
1500 }, 1508 },
1501 }, 1509 },
1502 1510
@@ -1544,6 +1552,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_lgz201_properties = {
1544 .num_adapters = 2, 1552 .num_adapters = 2,
1545 .adapter = { 1553 .adapter = {
1546 { 1554 {
1555 .num_frontends = 1,
1556 .fe = {{
1547 .streaming_ctrl = cxusb_streaming_ctrl, 1557 .streaming_ctrl = cxusb_streaming_ctrl,
1548 .frontend_attach = cxusb_mt352_frontend_attach, 1558 .frontend_attach = cxusb_mt352_frontend_attach,
1549 .tuner_attach = cxusb_lgz201_tuner_attach, 1559 .tuner_attach = cxusb_lgz201_tuner_attach,
@@ -1559,6 +1569,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_lgz201_properties = {
1559 } 1569 }
1560 } 1570 }
1561 }, 1571 },
1572 }},
1562 }, 1573 },
1563 }, 1574 },
1564 .power_ctrl = cxusb_bluebird_power_ctrl, 1575 .power_ctrl = cxusb_bluebird_power_ctrl,
@@ -1596,6 +1607,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_dtt7579_properties = {
1596 .num_adapters = 1, 1607 .num_adapters = 1,
1597 .adapter = { 1608 .adapter = {
1598 { 1609 {
1610 .num_frontends = 1,
1611 .fe = {{
1599 .streaming_ctrl = cxusb_streaming_ctrl, 1612 .streaming_ctrl = cxusb_streaming_ctrl,
1600 .frontend_attach = cxusb_mt352_frontend_attach, 1613 .frontend_attach = cxusb_mt352_frontend_attach,
1601 .tuner_attach = cxusb_dtt7579_tuner_attach, 1614 .tuner_attach = cxusb_dtt7579_tuner_attach,
@@ -1611,6 +1624,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_dtt7579_properties = {
1611 } 1624 }
1612 } 1625 }
1613 }, 1626 },
1627 }},
1614 }, 1628 },
1615 }, 1629 },
1616 .power_ctrl = cxusb_bluebird_power_ctrl, 1630 .power_ctrl = cxusb_bluebird_power_ctrl,
@@ -1645,6 +1659,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_dualdig4_properties = {
1645 .num_adapters = 1, 1659 .num_adapters = 1,
1646 .adapter = { 1660 .adapter = {
1647 { 1661 {
1662 .num_frontends = 1,
1663 .fe = {{
1648 .streaming_ctrl = cxusb_streaming_ctrl, 1664 .streaming_ctrl = cxusb_streaming_ctrl,
1649 .frontend_attach = cxusb_dualdig4_frontend_attach, 1665 .frontend_attach = cxusb_dualdig4_frontend_attach,
1650 .tuner_attach = cxusb_dvico_xc3028_tuner_attach, 1666 .tuner_attach = cxusb_dvico_xc3028_tuner_attach,
@@ -1659,6 +1675,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_dualdig4_properties = {
1659 } 1675 }
1660 } 1676 }
1661 }, 1677 },
1678 }},
1662 }, 1679 },
1663 }, 1680 },
1664 1681
@@ -1695,6 +1712,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_properties = {
1695 .num_adapters = 1, 1712 .num_adapters = 1,
1696 .adapter = { 1713 .adapter = {
1697 { 1714 {
1715 .num_frontends = 1,
1716 .fe = {{
1698 .streaming_ctrl = cxusb_streaming_ctrl, 1717 .streaming_ctrl = cxusb_streaming_ctrl,
1699 .frontend_attach = cxusb_nano2_frontend_attach, 1718 .frontend_attach = cxusb_nano2_frontend_attach,
1700 .tuner_attach = cxusb_dvico_xc3028_tuner_attach, 1719 .tuner_attach = cxusb_dvico_xc3028_tuner_attach,
@@ -1709,6 +1728,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_properties = {
1709 } 1728 }
1710 } 1729 }
1711 }, 1730 },
1731 }},
1712 }, 1732 },
1713 }, 1733 },
1714 1734
@@ -1747,6 +1767,8 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope
1747 .num_adapters = 1, 1767 .num_adapters = 1,
1748 .adapter = { 1768 .adapter = {
1749 { 1769 {
1770 .num_frontends = 1,
1771 .fe = {{
1750 .streaming_ctrl = cxusb_streaming_ctrl, 1772 .streaming_ctrl = cxusb_streaming_ctrl,
1751 .frontend_attach = cxusb_nano2_frontend_attach, 1773 .frontend_attach = cxusb_nano2_frontend_attach,
1752 .tuner_attach = cxusb_dvico_xc3028_tuner_attach, 1774 .tuner_attach = cxusb_dvico_xc3028_tuner_attach,
@@ -1761,6 +1783,7 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope
1761 } 1783 }
1762 } 1784 }
1763 }, 1785 },
1786 }},
1764 }, 1787 },
1765 }, 1788 },
1766 1789
@@ -1796,6 +1819,8 @@ static struct dvb_usb_device_properties cxusb_aver_a868r_properties = {
1796 .num_adapters = 1, 1819 .num_adapters = 1,
1797 .adapter = { 1820 .adapter = {
1798 { 1821 {
1822 .num_frontends = 1,
1823 .fe = {{
1799 .streaming_ctrl = cxusb_aver_streaming_ctrl, 1824 .streaming_ctrl = cxusb_aver_streaming_ctrl,
1800 .frontend_attach = cxusb_aver_lgdt3303_frontend_attach, 1825 .frontend_attach = cxusb_aver_lgdt3303_frontend_attach,
1801 .tuner_attach = cxusb_mxl5003s_tuner_attach, 1826 .tuner_attach = cxusb_mxl5003s_tuner_attach,
@@ -1810,7 +1835,7 @@ static struct dvb_usb_device_properties cxusb_aver_a868r_properties = {
1810 } 1835 }
1811 } 1836 }
1812 }, 1837 },
1813 1838 }},
1814 }, 1839 },
1815 }, 1840 },
1816 .power_ctrl = cxusb_aver_power_ctrl, 1841 .power_ctrl = cxusb_aver_power_ctrl,
@@ -1839,10 +1864,12 @@ struct dvb_usb_device_properties cxusb_bluebird_dualdig4_rev2_properties = {
1839 .num_adapters = 1, 1864 .num_adapters = 1,
1840 .adapter = { 1865 .adapter = {
1841 { 1866 {
1867 .size_of_priv = sizeof(struct dib0700_adapter_state),
1868 .num_frontends = 1,
1869 .fe = {{
1842 .streaming_ctrl = cxusb_streaming_ctrl, 1870 .streaming_ctrl = cxusb_streaming_ctrl,
1843 .frontend_attach = cxusb_dualdig4_rev2_frontend_attach, 1871 .frontend_attach = cxusb_dualdig4_rev2_frontend_attach,
1844 .tuner_attach = cxusb_dualdig4_rev2_tuner_attach, 1872 .tuner_attach = cxusb_dualdig4_rev2_tuner_attach,
1845 .size_of_priv = sizeof(struct dib0700_adapter_state),
1846 /* parameter for the MPEG2-data transfer */ 1873 /* parameter for the MPEG2-data transfer */
1847 .stream = { 1874 .stream = {
1848 .type = USB_BULK, 1875 .type = USB_BULK,
@@ -1854,6 +1881,7 @@ struct dvb_usb_device_properties cxusb_bluebird_dualdig4_rev2_properties = {
1854 } 1881 }
1855 } 1882 }
1856 }, 1883 },
1884 }},
1857 }, 1885 },
1858 }, 1886 },
1859 1887
@@ -1889,6 +1917,8 @@ static struct dvb_usb_device_properties cxusb_d680_dmb_properties = {
1889 .num_adapters = 1, 1917 .num_adapters = 1,
1890 .adapter = { 1918 .adapter = {
1891 { 1919 {
1920 .num_frontends = 1,
1921 .fe = {{
1892 .streaming_ctrl = cxusb_d680_dmb_streaming_ctrl, 1922 .streaming_ctrl = cxusb_d680_dmb_streaming_ctrl,
1893 .frontend_attach = cxusb_d680_dmb_frontend_attach, 1923 .frontend_attach = cxusb_d680_dmb_frontend_attach,
1894 .tuner_attach = cxusb_d680_dmb_tuner_attach, 1924 .tuner_attach = cxusb_d680_dmb_tuner_attach,
@@ -1904,6 +1934,7 @@ static struct dvb_usb_device_properties cxusb_d680_dmb_properties = {
1904 } 1934 }
1905 } 1935 }
1906 }, 1936 },
1937 }},
1907 }, 1938 },
1908 }, 1939 },
1909 1940
@@ -1940,6 +1971,8 @@ static struct dvb_usb_device_properties cxusb_mygica_d689_properties = {
1940 .num_adapters = 1, 1971 .num_adapters = 1,
1941 .adapter = { 1972 .adapter = {
1942 { 1973 {
1974 .num_frontends = 1,
1975 .fe = {{
1943 .streaming_ctrl = cxusb_d680_dmb_streaming_ctrl, 1976 .streaming_ctrl = cxusb_d680_dmb_streaming_ctrl,
1944 .frontend_attach = cxusb_mygica_d689_frontend_attach, 1977 .frontend_attach = cxusb_mygica_d689_frontend_attach,
1945 .tuner_attach = cxusb_mygica_d689_tuner_attach, 1978 .tuner_attach = cxusb_mygica_d689_tuner_attach,
@@ -1955,6 +1988,7 @@ static struct dvb_usb_device_properties cxusb_mygica_d689_properties = {
1955 } 1988 }
1956 } 1989 }
1957 }, 1990 },
1991 }},
1958 }, 1992 },
1959 }, 1993 },
1960 1994