aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2011-07-24 19:29:16 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-07-31 00:26:41 -0400
commitbfd4500c9abf3e70e9c563bcba5675bd302f5a4e (patch)
treebd81a12af0b18784f961a6c58755f7163eb7f16b
parent6d51477470728074cea396a0127d73c5590dd441 (diff)
[media] dvb-usb: prepare for multi-frontend support (MFE)
Change adapter FE pointer as array of FE pointers. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/dvb-usb/af9005.c2
-rw-r--r--drivers/media/dvb/dvb-usb/af9015.c22
-rw-r--r--drivers/media/dvb/dvb-usb/anysee.c46
-rw-r--r--drivers/media/dvb/dvb-usb/au6610.c6
-rw-r--r--drivers/media/dvb/dvb-usb/az6027.c10
-rw-r--r--drivers/media/dvb/dvb-usb/ce6230.c6
-rw-r--r--drivers/media/dvb/dvb-usb/cinergyT2-core.c2
-rw-r--r--drivers/media/dvb/dvb-usb/cxusb.c60
-rw-r--r--drivers/media/dvb/dvb-usb/dib0700_devices.c262
-rw-r--r--drivers/media/dvb/dvb-usb/dibusb-common.c18
-rw-r--r--drivers/media/dvb/dvb-usb/dibusb-mb.c16
-rw-r--r--drivers/media/dvb/dvb-usb/digitv.c8
-rw-r--r--drivers/media/dvb/dvb-usb/dtt200u.c2
-rw-r--r--drivers/media/dvb/dvb-usb/dtv5100.c8
-rw-r--r--drivers/media/dvb/dvb-usb/dvb-usb-dvb.c18
-rw-r--r--drivers/media/dvb/dvb-usb/dvb-usb.h2
-rw-r--r--drivers/media/dvb/dvb-usb/dw2102.c92
-rw-r--r--drivers/media/dvb/dvb-usb/ec168.c6
-rw-r--r--drivers/media/dvb/dvb-usb/friio.c4
-rw-r--r--drivers/media/dvb/dvb-usb/gl861.c6
-rw-r--r--drivers/media/dvb/dvb-usb/gp8psk.c2
-rw-r--r--drivers/media/dvb/dvb-usb/lmedm04.c28
-rw-r--r--drivers/media/dvb/dvb-usb/m920x.c14
-rw-r--r--drivers/media/dvb/dvb-usb/opera1.c6
-rw-r--r--drivers/media/dvb/dvb-usb/technisat-usb2.c24
-rw-r--r--drivers/media/dvb/dvb-usb/ttusb2.c10
-rw-r--r--drivers/media/dvb/dvb-usb/umt-010.c4
-rw-r--r--drivers/media/dvb/dvb-usb/vp702x.c2
-rw-r--r--drivers/media/dvb/dvb-usb/vp7045.c2
29 files changed, 344 insertions, 344 deletions
diff --git a/drivers/media/dvb/dvb-usb/af9005.c b/drivers/media/dvb/dvb-usb/af9005.c
index 51f6439dcfd5..753b86eafa25 100644
--- a/drivers/media/dvb/dvb-usb/af9005.c
+++ b/drivers/media/dvb/dvb-usb/af9005.c
@@ -815,7 +815,7 @@ static int af9005_frontend_attach(struct dvb_usb_adapter *adap)
815 debug_dump(buf, 8, printk); 815 debug_dump(buf, 8, printk);
816 } 816 }
817 } 817 }
818 adap->fe = af9005_fe_attach(adap->dev); 818 adap->fe[0] = af9005_fe_attach(adap->dev);
819 return 0; 819 return 0;
820} 820}
821 821
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
index d7ad05fc383b..f966b0baeaac 100644
--- a/drivers/media/dvb/dvb-usb/af9015.c
+++ b/drivers/media/dvb/dvb-usb/af9015.c
@@ -1111,10 +1111,10 @@ static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
1111 } 1111 }
1112 1112
1113 /* attach demodulator */ 1113 /* attach demodulator */
1114 adap->fe = dvb_attach(af9013_attach, &af9015_af9013_config[adap->id], 1114 adap->fe[0] = dvb_attach(af9013_attach, &af9015_af9013_config[adap->id],
1115 &adap->dev->i2c_adap); 1115 &adap->dev->i2c_adap);
1116 1116
1117 return adap->fe == NULL ? -ENODEV : 0; 1117 return adap->fe[0] == NULL ? -ENODEV : 0;
1118} 1118}
1119 1119
1120static struct mt2060_config af9015_mt2060_config = { 1120static struct mt2060_config af9015_mt2060_config = {
@@ -1188,49 +1188,49 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
1188 switch (af9015_af9013_config[adap->id].tuner) { 1188 switch (af9015_af9013_config[adap->id].tuner) {
1189 case AF9013_TUNER_MT2060: 1189 case AF9013_TUNER_MT2060:
1190 case AF9013_TUNER_MT2060_2: 1190 case AF9013_TUNER_MT2060_2:
1191 ret = dvb_attach(mt2060_attach, adap->fe, &adap->dev->i2c_adap, 1191 ret = dvb_attach(mt2060_attach, adap->fe[0], &adap->dev->i2c_adap,
1192 &af9015_mt2060_config, 1192 &af9015_mt2060_config,
1193 af9015_config.mt2060_if1[adap->id]) 1193 af9015_config.mt2060_if1[adap->id])
1194 == NULL ? -ENODEV : 0; 1194 == NULL ? -ENODEV : 0;
1195 break; 1195 break;
1196 case AF9013_TUNER_QT1010: 1196 case AF9013_TUNER_QT1010:
1197 case AF9013_TUNER_QT1010A: 1197 case AF9013_TUNER_QT1010A:
1198 ret = dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, 1198 ret = dvb_attach(qt1010_attach, adap->fe[0], &adap->dev->i2c_adap,
1199 &af9015_qt1010_config) == NULL ? -ENODEV : 0; 1199 &af9015_qt1010_config) == NULL ? -ENODEV : 0;
1200 break; 1200 break;
1201 case AF9013_TUNER_TDA18271: 1201 case AF9013_TUNER_TDA18271:
1202 ret = dvb_attach(tda18271_attach, adap->fe, 0xc0, 1202 ret = dvb_attach(tda18271_attach, adap->fe[0], 0xc0,
1203 &adap->dev->i2c_adap, 1203 &adap->dev->i2c_adap,
1204 &af9015_tda18271_config) == NULL ? -ENODEV : 0; 1204 &af9015_tda18271_config) == NULL ? -ENODEV : 0;
1205 break; 1205 break;
1206 case AF9013_TUNER_TDA18218: 1206 case AF9013_TUNER_TDA18218:
1207 ret = dvb_attach(tda18218_attach, adap->fe, 1207 ret = dvb_attach(tda18218_attach, adap->fe[0],
1208 &adap->dev->i2c_adap, 1208 &adap->dev->i2c_adap,
1209 &af9015_tda18218_config) == NULL ? -ENODEV : 0; 1209 &af9015_tda18218_config) == NULL ? -ENODEV : 0;
1210 break; 1210 break;
1211 case AF9013_TUNER_MXL5003D: 1211 case AF9013_TUNER_MXL5003D:
1212 ret = dvb_attach(mxl5005s_attach, adap->fe, 1212 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
1213 &adap->dev->i2c_adap, 1213 &adap->dev->i2c_adap,
1214 &af9015_mxl5003_config) == NULL ? -ENODEV : 0; 1214 &af9015_mxl5003_config) == NULL ? -ENODEV : 0;
1215 break; 1215 break;
1216 case AF9013_TUNER_MXL5005D: 1216 case AF9013_TUNER_MXL5005D:
1217 case AF9013_TUNER_MXL5005R: 1217 case AF9013_TUNER_MXL5005R:
1218 ret = dvb_attach(mxl5005s_attach, adap->fe, 1218 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
1219 &adap->dev->i2c_adap, 1219 &adap->dev->i2c_adap,
1220 &af9015_mxl5005_config) == NULL ? -ENODEV : 0; 1220 &af9015_mxl5005_config) == NULL ? -ENODEV : 0;
1221 break; 1221 break;
1222 case AF9013_TUNER_ENV77H11D5: 1222 case AF9013_TUNER_ENV77H11D5:
1223 ret = dvb_attach(dvb_pll_attach, adap->fe, 0xc0, 1223 ret = dvb_attach(dvb_pll_attach, adap->fe[0], 0xc0,
1224 &adap->dev->i2c_adap, 1224 &adap->dev->i2c_adap,
1225 DVB_PLL_TDA665X) == NULL ? -ENODEV : 0; 1225 DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
1226 break; 1226 break;
1227 case AF9013_TUNER_MC44S803: 1227 case AF9013_TUNER_MC44S803:
1228 ret = dvb_attach(mc44s803_attach, adap->fe, 1228 ret = dvb_attach(mc44s803_attach, adap->fe[0],
1229 &adap->dev->i2c_adap, 1229 &adap->dev->i2c_adap,
1230 &af9015_mc44s803_config) == NULL ? -ENODEV : 0; 1230 &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
1231 break; 1231 break;
1232 case AF9013_TUNER_MXL5007T: 1232 case AF9013_TUNER_MXL5007T:
1233 ret = dvb_attach(mxl5007t_attach, adap->fe, 1233 ret = dvb_attach(mxl5007t_attach, adap->fe[0],
1234 &adap->dev->i2c_adap, 1234 &adap->dev->i2c_adap,
1235 0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0; 1235 0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
1236 break; 1236 break;
diff --git a/drivers/media/dvb/dvb-usb/anysee.c b/drivers/media/dvb/dvb-usb/anysee.c
index 2cbf19a52e38..1ec88b694d29 100644
--- a/drivers/media/dvb/dvb-usb/anysee.c
+++ b/drivers/media/dvb/dvb-usb/anysee.c
@@ -488,13 +488,13 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
488 /* E30 */ 488 /* E30 */
489 489
490 /* attach demod */ 490 /* attach demod */
491 adap->fe = dvb_attach(mt352_attach, &anysee_mt352_config, 491 adap->fe[0] = dvb_attach(mt352_attach, &anysee_mt352_config,
492 &adap->dev->i2c_adap); 492 &adap->dev->i2c_adap);
493 if (adap->fe) 493 if (adap->fe[0])
494 break; 494 break;
495 495
496 /* attach demod */ 496 /* attach demod */
497 adap->fe = dvb_attach(zl10353_attach, &anysee_zl10353_config, 497 adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config,
498 &adap->dev->i2c_adap); 498 &adap->dev->i2c_adap);
499 499
500 break; 500 break;
@@ -512,7 +512,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
512 goto error; 512 goto error;
513 513
514 /* attach demod */ 514 /* attach demod */
515 adap->fe = dvb_attach(zl10353_attach, &anysee_zl10353_config, 515 adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config,
516 &adap->dev->i2c_adap); 516 &adap->dev->i2c_adap);
517 517
518 break; 518 break;
@@ -525,7 +525,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
525 goto error; 525 goto error;
526 526
527 /* attach demod */ 527 /* attach demod */
528 adap->fe = dvb_attach(tda10023_attach, &anysee_tda10023_config, 528 adap->fe[0] = dvb_attach(tda10023_attach, &anysee_tda10023_config,
529 &adap->dev->i2c_adap, 0x48); 529 &adap->dev->i2c_adap, 0x48);
530 530
531 break; 531 break;
@@ -538,7 +538,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
538 goto error; 538 goto error;
539 539
540 /* attach demod */ 540 /* attach demod */
541 adap->fe = dvb_attach(cx24116_attach, &anysee_cx24116_config, 541 adap->fe[0] = dvb_attach(cx24116_attach, &anysee_cx24116_config,
542 &adap->dev->i2c_adap); 542 &adap->dev->i2c_adap);
543 543
544 break; 544 break;
@@ -580,12 +580,12 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
580 /* attach demod */ 580 /* attach demod */
581 if (tmp == 0xc7) { 581 if (tmp == 0xc7) {
582 /* TDA18212 config */ 582 /* TDA18212 config */
583 adap->fe = dvb_attach(zl10353_attach, 583 adap->fe[0] = dvb_attach(zl10353_attach,
584 &anysee_zl10353_tda18212_config2, 584 &anysee_zl10353_tda18212_config2,
585 &adap->dev->i2c_adap); 585 &adap->dev->i2c_adap);
586 } else { 586 } else {
587 /* PLL config */ 587 /* PLL config */
588 adap->fe = dvb_attach(zl10353_attach, 588 adap->fe[0] = dvb_attach(zl10353_attach,
589 &anysee_zl10353_config, 589 &anysee_zl10353_config,
590 &adap->dev->i2c_adap); 590 &adap->dev->i2c_adap);
591 } 591 }
@@ -605,12 +605,12 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
605 /* attach demod */ 605 /* attach demod */
606 if (tmp == 0xc7) { 606 if (tmp == 0xc7) {
607 /* TDA18212 config */ 607 /* TDA18212 config */
608 adap->fe = dvb_attach(tda10023_attach, 608 adap->fe[0] = dvb_attach(tda10023_attach,
609 &anysee_tda10023_tda18212_config, 609 &anysee_tda10023_tda18212_config,
610 &adap->dev->i2c_adap, 0x48); 610 &adap->dev->i2c_adap, 0x48);
611 } else { 611 } else {
612 /* PLL config */ 612 /* PLL config */
613 adap->fe = dvb_attach(tda10023_attach, 613 adap->fe[0] = dvb_attach(tda10023_attach,
614 &anysee_tda10023_config, 614 &anysee_tda10023_config,
615 &adap->dev->i2c_adap, 0x48); 615 &adap->dev->i2c_adap, 0x48);
616 } 616 }
@@ -647,7 +647,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
647 goto error; 647 goto error;
648 648
649 /* attach demod */ 649 /* attach demod */
650 adap->fe = dvb_attach(zl10353_attach, 650 adap->fe[0] = dvb_attach(zl10353_attach,
651 &anysee_zl10353_tda18212_config, 651 &anysee_zl10353_tda18212_config,
652 &adap->dev->i2c_adap); 652 &adap->dev->i2c_adap);
653 } else { 653 } else {
@@ -670,7 +670,7 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
670 goto error; 670 goto error;
671 671
672 /* attach demod */ 672 /* attach demod */
673 adap->fe = dvb_attach(tda10023_attach, 673 adap->fe[0] = dvb_attach(tda10023_attach,
674 &anysee_tda10023_tda18212_config, 674 &anysee_tda10023_tda18212_config,
675 &adap->dev->i2c_adap, 0x48); 675 &adap->dev->i2c_adap, 0x48);
676 } 676 }
@@ -692,13 +692,13 @@ static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
692 goto error; 692 goto error;
693 693
694 /* attach demod */ 694 /* attach demod */
695 adap->fe = dvb_attach(stv0900_attach, &anysee_stv0900_config, 695 adap->fe[0] = dvb_attach(stv0900_attach, &anysee_stv0900_config,
696 &adap->dev->i2c_adap, 0); 696 &adap->dev->i2c_adap, 0);
697 697
698 break; 698 break;
699 } 699 }
700 700
701 if (!adap->fe) { 701 if (!adap->fe[0]) {
702 /* we have no frontend :-( */ 702 /* we have no frontend :-( */
703 ret = -ENODEV; 703 ret = -ENODEV;
704 err("Unsupported Anysee version. " \ 704 err("Unsupported Anysee version. " \
@@ -720,7 +720,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
720 /* E30 */ 720 /* E30 */
721 721
722 /* attach tuner */ 722 /* attach tuner */
723 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc2 >> 1), 723 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1),
724 NULL, DVB_PLL_THOMSON_DTT7579); 724 NULL, DVB_PLL_THOMSON_DTT7579);
725 725
726 break; 726 break;
@@ -728,7 +728,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
728 /* E30 Plus */ 728 /* E30 Plus */
729 729
730 /* attach tuner */ 730 /* attach tuner */
731 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc2 >> 1), 731 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1),
732 &adap->dev->i2c_adap, DVB_PLL_THOMSON_DTT7579); 732 &adap->dev->i2c_adap, DVB_PLL_THOMSON_DTT7579);
733 733
734 break; 734 break;
@@ -736,7 +736,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
736 /* E30 C Plus */ 736 /* E30 C Plus */
737 737
738 /* attach tuner */ 738 /* attach tuner */
739 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc0 >> 1), 739 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1),
740 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A); 740 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
741 741
742 break; 742 break;
@@ -744,7 +744,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
744 /* E30 S2 Plus */ 744 /* E30 S2 Plus */
745 745
746 /* attach LNB controller */ 746 /* attach LNB controller */
747 fe = dvb_attach(isl6423_attach, adap->fe, &adap->dev->i2c_adap, 747 fe = dvb_attach(isl6423_attach, adap->fe[0], &adap->dev->i2c_adap,
748 &anysee_isl6423_config); 748 &anysee_isl6423_config);
749 749
750 break; 750 break;
@@ -775,7 +775,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
775 goto error; 775 goto error;
776 776
777 /* attach tuner */ 777 /* attach tuner */
778 fe = dvb_attach(tda18212_attach, adap->fe, &adap->dev->i2c_adap, 778 fe = dvb_attach(tda18212_attach, adap->fe[0], &adap->dev->i2c_adap,
779 &anysee_tda18212_config); 779 &anysee_tda18212_config);
780 if (fe) 780 if (fe)
781 break; 781 break;
@@ -786,7 +786,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
786 goto error; 786 goto error;
787 787
788 /* attach tuner */ 788 /* attach tuner */
789 fe = dvb_attach(dvb_pll_attach, adap->fe, (0xc0 >> 1), 789 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1),
790 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A); 790 &adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
791 791
792 break; 792 break;
@@ -801,7 +801,7 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
801 goto error; 801 goto error;
802 802
803 /* attach tuner */ 803 /* attach tuner */
804 fe = dvb_attach(tda18212_attach, adap->fe, &adap->dev->i2c_adap, 804 fe = dvb_attach(tda18212_attach, adap->fe[0], &adap->dev->i2c_adap,
805 &anysee_tda18212_config); 805 &anysee_tda18212_config);
806 806
807 break; 807 break;
@@ -811,12 +811,12 @@ static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
811 /* E7 PS2 */ 811 /* E7 PS2 */
812 812
813 /* attach tuner */ 813 /* attach tuner */
814 fe = dvb_attach(stv6110_attach, adap->fe, 814 fe = dvb_attach(stv6110_attach, adap->fe[0],
815 &anysee_stv6110_config, &adap->dev->i2c_adap); 815 &anysee_stv6110_config, &adap->dev->i2c_adap);
816 816
817 if (fe) { 817 if (fe) {
818 /* attach LNB controller */ 818 /* attach LNB controller */
819 fe = dvb_attach(isl6423_attach, adap->fe, 819 fe = dvb_attach(isl6423_attach, adap->fe[0],
820 &adap->dev->i2c_adap, &anysee_isl6423_config); 820 &adap->dev->i2c_adap, &anysee_isl6423_config);
821 } 821 }
822 822
diff --git a/drivers/media/dvb/dvb-usb/au6610.c b/drivers/media/dvb/dvb-usb/au6610.c
index 2351077ff2b3..ebe6e1ffc319 100644
--- a/drivers/media/dvb/dvb-usb/au6610.c
+++ b/drivers/media/dvb/dvb-usb/au6610.c
@@ -140,9 +140,9 @@ static struct zl10353_config au6610_zl10353_config = {
140 140
141static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap) 141static int au6610_zl10353_frontend_attach(struct dvb_usb_adapter *adap)
142{ 142{
143 adap->fe = dvb_attach(zl10353_attach, &au6610_zl10353_config, 143 adap->fe[0] = dvb_attach(zl10353_attach, &au6610_zl10353_config,
144 &adap->dev->i2c_adap); 144 &adap->dev->i2c_adap);
145 if (adap->fe == NULL) 145 if (adap->fe[0] == NULL)
146 return -ENODEV; 146 return -ENODEV;
147 147
148 return 0; 148 return 0;
@@ -155,7 +155,7 @@ static struct qt1010_config au6610_qt1010_config = {
155static int au6610_qt1010_tuner_attach(struct dvb_usb_adapter *adap) 155static int au6610_qt1010_tuner_attach(struct dvb_usb_adapter *adap)
156{ 156{
157 return dvb_attach(qt1010_attach, 157 return dvb_attach(qt1010_attach,
158 adap->fe, &adap->dev->i2c_adap, 158 adap->fe[0], &adap->dev->i2c_adap,
159 &au6610_qt1010_config) == NULL ? -ENODEV : 0; 159 &au6610_qt1010_config) == NULL ? -ENODEV : 0;
160} 160}
161 161
diff --git a/drivers/media/dvb/dvb-usb/az6027.c b/drivers/media/dvb/dvb-usb/az6027.c
index 57e2444d51ab..d59430c48158 100644
--- a/drivers/media/dvb/dvb-usb/az6027.c
+++ b/drivers/media/dvb/dvb-usb/az6027.c
@@ -910,16 +910,16 @@ static int az6027_frontend_attach(struct dvb_usb_adapter *adap)
910 az6027_frontend_reset(adap); 910 az6027_frontend_reset(adap);
911 911
912 deb_info("adap = %p, dev = %p\n", adap, adap->dev); 912 deb_info("adap = %p, dev = %p\n", adap, adap->dev);
913 adap->fe = stb0899_attach(&az6027_stb0899_config, &adap->dev->i2c_adap); 913 adap->fe[0] = stb0899_attach(&az6027_stb0899_config, &adap->dev->i2c_adap);
914 914
915 if (adap->fe) { 915 if (adap->fe[0]) {
916 deb_info("found STB0899 DVB-S/DVB-S2 frontend @0x%02x", az6027_stb0899_config.demod_address); 916 deb_info("found STB0899 DVB-S/DVB-S2 frontend @0x%02x", az6027_stb0899_config.demod_address);
917 if (stb6100_attach(adap->fe, &az6027_stb6100_config, &adap->dev->i2c_adap)) { 917 if (stb6100_attach(adap->fe[0], &az6027_stb6100_config, &adap->dev->i2c_adap)) {
918 deb_info("found STB6100 DVB-S/DVB-S2 frontend @0x%02x", az6027_stb6100_config.tuner_address); 918 deb_info("found STB6100 DVB-S/DVB-S2 frontend @0x%02x", az6027_stb6100_config.tuner_address);
919 adap->fe->ops.set_voltage = az6027_set_voltage; 919 adap->fe[0]->ops.set_voltage = az6027_set_voltage;
920 az6027_ci_init(adap); 920 az6027_ci_init(adap);
921 } else { 921 } else {
922 adap->fe = NULL; 922 adap->fe[0] = NULL;
923 } 923 }
924 } else 924 } else
925 warn("no front-end attached\n"); 925 warn("no front-end attached\n");
diff --git a/drivers/media/dvb/dvb-usb/ce6230.c b/drivers/media/dvb/dvb-usb/ce6230.c
index 6d1a3041540d..5655ce411d70 100644
--- a/drivers/media/dvb/dvb-usb/ce6230.c
+++ b/drivers/media/dvb/dvb-usb/ce6230.c
@@ -186,9 +186,9 @@ static struct zl10353_config ce6230_zl10353_config = {
186static int ce6230_zl10353_frontend_attach(struct dvb_usb_adapter *adap) 186static int ce6230_zl10353_frontend_attach(struct dvb_usb_adapter *adap)
187{ 187{
188 deb_info("%s:\n", __func__); 188 deb_info("%s:\n", __func__);
189 adap->fe = dvb_attach(zl10353_attach, &ce6230_zl10353_config, 189 adap->fe[0] = dvb_attach(zl10353_attach, &ce6230_zl10353_config,
190 &adap->dev->i2c_adap); 190 &adap->dev->i2c_adap);
191 if (adap->fe == NULL) 191 if (adap->fe[0] == NULL)
192 return -ENODEV; 192 return -ENODEV;
193 return 0; 193 return 0;
194} 194}
@@ -214,7 +214,7 @@ static int ce6230_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap)
214{ 214{
215 int ret; 215 int ret;
216 deb_info("%s:\n", __func__); 216 deb_info("%s:\n", __func__);
217 ret = dvb_attach(mxl5005s_attach, adap->fe, &adap->dev->i2c_adap, 217 ret = dvb_attach(mxl5005s_attach, adap->fe[0], &adap->dev->i2c_adap,
218 &ce6230_mxl5003s_config) == NULL ? -ENODEV : 0; 218 &ce6230_mxl5003s_config) == NULL ? -ENODEV : 0;
219 return ret; 219 return ret;
220} 220}
diff --git a/drivers/media/dvb/dvb-usb/cinergyT2-core.c b/drivers/media/dvb/dvb-usb/cinergyT2-core.c
index 16f2ce2bc15a..0dd42bdbe285 100644
--- a/drivers/media/dvb/dvb-usb/cinergyT2-core.c
+++ b/drivers/media/dvb/dvb-usb/cinergyT2-core.c
@@ -69,7 +69,7 @@ static int cinergyt2_frontend_attach(struct dvb_usb_adapter *adap)
69 char state[3]; 69 char state[3];
70 int ret; 70 int ret;
71 71
72 adap->fe = cinergyt2_fe_attach(adap->dev); 72 adap->fe[0] = cinergyt2_fe_attach(adap->dev);
73 73
74 ret = dvb_usb_generic_rw(adap->dev, query, sizeof(query), state, 74 ret = dvb_usb_generic_rw(adap->dev, query, sizeof(query), state,
75 sizeof(state), 0); 75 sizeof(state), 0);
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index acb5fb2d2e73..a76f431d6a26 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -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, 728 dvb_attach(simple_tuner_attach, adap->fe[0],
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, 0x61, 736 dvb_attach(dvb_pll_attach, adap->fe[0], 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, 0x61, NULL, DVB_PLL_LG_Z201); 743 dvb_attach(dvb_pll_attach, adap->fe[0], 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, 0x60, 749 dvb_attach(dvb_pll_attach, adap->fe[0], 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, 756 dvb_attach(simple_tuner_attach, adap->fe[0],
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->callback = dvico_bluebird_xc2028_callback; 798 adap->fe[0]->callback = dvico_bluebird_xc2028_callback;
799 799
800 fe = dvb_attach(xc2028_attach, adap->fe, &cfg); 800 fe = dvb_attach(xc2028_attach, adap->fe[0], &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, 811 dvb_attach(mxl5005s_attach, adap->fe[0],
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, 819 fe = dvb_attach(mxl5005s_attach, adap->fe[0],
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, 827 fe = dvb_attach(max2165_attach, adap->fe[0],
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 = dvb_attach(cx22702_attach, &cxusb_cx22702_config, 840 if ((adap->fe[0] = 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 = dvb_attach(lgdt330x_attach, &cxusb_lgdt3303_config, 854 if ((adap->fe[0] = 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 = dvb_attach(lgdt330x_attach, &cxusb_aver_lgdt3303_config, 863 adap->fe[0] = dvb_attach(lgdt330x_attach, &cxusb_aver_lgdt3303_config,
864 &adap->dev->i2c_adap); 864 &adap->dev->i2c_adap);
865 if (adap->fe != NULL) 865 if (adap->fe[0] != 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 = dvb_attach(mt352_attach, &cxusb_mt352_config, 879 if ((adap->fe[0] = 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 = dvb_attach(mt352_attach, &cxusb_dee1601_config, 893 if (((adap->fe[0] = dvb_attach(mt352_attach, &cxusb_dee1601_config,
894 &adap->dev->i2c_adap)) != NULL) || 894 &adap->dev->i2c_adap)) != NULL) ||
895 ((adap->fe = dvb_attach(zl10353_attach, 895 ((adap->fe[0] = 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 = dvb_attach(zl10353_attach, 920 if ((adap->fe[0] = 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 = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 1034 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
1035 &cxusb_dualdig4_rev2_config); 1035 &cxusb_dualdig4_rev2_config);
1036 if (adap->fe == NULL) 1036 if (adap->fe[0] == 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, 1087 dib7000p_get_i2c_master(adap->fe[0],
1088 DIBX000_I2C_INTERFACE_TUNER, 1); 1088 DIBX000_I2C_INTERFACE_TUNER, 1);
1089 1089
1090 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, 1090 if (dvb_attach(dib0070_attach, adap->fe[0], 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->ops.tuner_ops.set_params; 1094 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
1095 adap->fe->ops.tuner_ops.set_params = dib7070_set_param_override; 1095 adap->fe[0]->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 = dvb_attach(zl10353_attach, 1111 if ((adap->fe[0] = 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 = dvb_attach(mt352_attach, 1116 if ((adap->fe[0] = 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;
@@ -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 = dvb_attach(lgs8gxx_attach, &d680_lgs8gl5_cfg, &d->i2c_adap); 1175 adap->fe[0] = dvb_attach(lgs8gxx_attach, &d680_lgs8gl5_cfg, &d->i2c_adap);
1176 if (adap->fe == NULL) 1176 if (adap->fe[0] == NULL)
1177 return -EIO; 1177 return -EIO;
1178 1178
1179 return 0; 1179 return 0;
@@ -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 = dvb_attach(atbm8830_attach, &mygica_d689_atbm8830_cfg, 1226 adap->fe[0] = dvb_attach(atbm8830_attach, &mygica_d689_atbm8830_cfg,
1227 &d->i2c_adap); 1227 &d->i2c_adap);
1228 if (adap->fe == NULL) 1228 if (adap->fe[0] == NULL)
1229 return -EIO; 1229 return -EIO;
1230 1230
1231 return 0; 1231 return 0;
diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c
index d0ea5b64f6b4..754f8ec77e05 100644
--- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
+++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
@@ -101,7 +101,7 @@ static int bristol_frontend_attach(struct dvb_usb_adapter *adap)
101 } 101 }
102 } 102 }
103 st->mt2060_if1[adap->id] = 1220; 103 st->mt2060_if1[adap->id] = 1220;
104 return (adap->fe = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap, 104 return (adap->fe[0] = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap,
105 (10 + adap->id) << 1, &bristol_dib3000mc_config[adap->id])) == NULL ? -ENODEV : 0; 105 (10 + adap->id) << 1, &bristol_dib3000mc_config[adap->id])) == NULL ? -ENODEV : 0;
106} 106}
107 107
@@ -118,14 +118,14 @@ static int eeprom_read(struct i2c_adapter *adap,u8 adrs,u8 *pval)
118static int bristol_tuner_attach(struct dvb_usb_adapter *adap) 118static int bristol_tuner_attach(struct dvb_usb_adapter *adap)
119{ 119{
120 struct i2c_adapter *prim_i2c = &adap->dev->i2c_adap; 120 struct i2c_adapter *prim_i2c = &adap->dev->i2c_adap;
121 struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1); 121 struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe[0], 1);
122 s8 a; 122 s8 a;
123 int if1=1220; 123 int if1=1220;
124 if (adap->dev->udev->descriptor.idVendor == cpu_to_le16(USB_VID_HAUPPAUGE) && 124 if (adap->dev->udev->descriptor.idVendor == cpu_to_le16(USB_VID_HAUPPAUGE) &&
125 adap->dev->udev->descriptor.idProduct == cpu_to_le16(USB_PID_HAUPPAUGE_NOVA_T_500_2)) { 125 adap->dev->udev->descriptor.idProduct == cpu_to_le16(USB_PID_HAUPPAUGE_NOVA_T_500_2)) {
126 if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a; 126 if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a;
127 } 127 }
128 return dvb_attach(mt2060_attach,adap->fe, tun_i2c,&bristol_mt2060_config[adap->id], 128 return dvb_attach(mt2060_attach,adap->fe[0], tun_i2c,&bristol_mt2060_config[adap->id],
129 if1) == NULL ? -ENODEV : 0; 129 if1) == NULL ? -ENODEV : 0;
130} 130}
131 131
@@ -279,10 +279,10 @@ static int stk7700P2_frontend_attach(struct dvb_usb_adapter *adap)
279 } 279 }
280 } 280 }
281 281
282 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1), 282 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1),
283 &stk7700d_dib7000p_mt2266_config[adap->id]); 283 &stk7700d_dib7000p_mt2266_config[adap->id]);
284 284
285 return adap->fe == NULL ? -ENODEV : 0; 285 return adap->fe[0] == NULL ? -ENODEV : 0;
286} 286}
287 287
288static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap) 288static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
@@ -306,17 +306,17 @@ static int stk7700d_frontend_attach(struct dvb_usb_adapter *adap)
306 } 306 }
307 } 307 }
308 308
309 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1), 309 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap,0x80+(adap->id << 1),
310 &stk7700d_dib7000p_mt2266_config[adap->id]); 310 &stk7700d_dib7000p_mt2266_config[adap->id]);
311 311
312 return adap->fe == NULL ? -ENODEV : 0; 312 return adap->fe[0] == NULL ? -ENODEV : 0;
313} 313}
314 314
315static int stk7700d_tuner_attach(struct dvb_usb_adapter *adap) 315static int stk7700d_tuner_attach(struct dvb_usb_adapter *adap)
316{ 316{
317 struct i2c_adapter *tun_i2c; 317 struct i2c_adapter *tun_i2c;
318 tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 318 tun_i2c = dib7000p_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
319 return dvb_attach(mt2266_attach, adap->fe, tun_i2c, 319 return dvb_attach(mt2266_attach, adap->fe[0], tun_i2c,
320 &stk7700d_mt2266_config[adap->id]) == NULL ? -ENODEV : 0; 320 &stk7700d_mt2266_config[adap->id]) == NULL ? -ENODEV : 0;
321} 321}
322 322
@@ -396,8 +396,8 @@ static int stk7700ph_xc3028_callback(void *ptr, int component,
396 switch (command) { 396 switch (command) {
397 case XC2028_TUNER_RESET: 397 case XC2028_TUNER_RESET:
398 /* Send the tuner in then out of reset */ 398 /* Send the tuner in then out of reset */
399 dib7000p_set_gpio(adap->fe, 8, 0, 0); msleep(10); 399 dib7000p_set_gpio(adap->fe[0], 8, 0, 0); msleep(10);
400 dib7000p_set_gpio(adap->fe, 8, 0, 1); 400 dib7000p_set_gpio(adap->fe[0], 8, 0, 1);
401 break; 401 break;
402 case XC2028_RESET_CLK: 402 case XC2028_RESET_CLK:
403 break; 403 break;
@@ -447,25 +447,25 @@ static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap)
447 return -ENODEV; 447 return -ENODEV;
448 } 448 }
449 449
450 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 450 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
451 &stk7700ph_dib7700_xc3028_config); 451 &stk7700ph_dib7700_xc3028_config);
452 452
453 return adap->fe == NULL ? -ENODEV : 0; 453 return adap->fe[0] == NULL ? -ENODEV : 0;
454} 454}
455 455
456static int stk7700ph_tuner_attach(struct dvb_usb_adapter *adap) 456static int stk7700ph_tuner_attach(struct dvb_usb_adapter *adap)
457{ 457{
458 struct i2c_adapter *tun_i2c; 458 struct i2c_adapter *tun_i2c;
459 459
460 tun_i2c = dib7000p_get_i2c_master(adap->fe, 460 tun_i2c = dib7000p_get_i2c_master(adap->fe[0],
461 DIBX000_I2C_INTERFACE_TUNER, 1); 461 DIBX000_I2C_INTERFACE_TUNER, 1);
462 462
463 stk7700ph_xc3028_config.i2c_adap = tun_i2c; 463 stk7700ph_xc3028_config.i2c_adap = tun_i2c;
464 464
465 /* FIXME: generalize & move to common area */ 465 /* FIXME: generalize & move to common area */
466 adap->fe->callback = stk7700ph_xc3028_callback; 466 adap->fe[0]->callback = stk7700ph_xc3028_callback;
467 467
468 return dvb_attach(xc2028_attach, adap->fe, &stk7700ph_xc3028_config) 468 return dvb_attach(xc2028_attach, adap->fe[0], &stk7700ph_xc3028_config)
469 == NULL ? -ENODEV : 0; 469 == NULL ? -ENODEV : 0;
470} 470}
471 471
@@ -685,12 +685,12 @@ static int stk7700p_frontend_attach(struct dvb_usb_adapter *adap)
685 st->mt2060_if1[0] = 1220; 685 st->mt2060_if1[0] = 1220;
686 686
687 if (dib7000pc_detection(&adap->dev->i2c_adap)) { 687 if (dib7000pc_detection(&adap->dev->i2c_adap)) {
688 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000p_config); 688 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000p_config);
689 st->is_dib7000pc = 1; 689 st->is_dib7000pc = 1;
690 } else 690 } else
691 adap->fe = dvb_attach(dib7000m_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000m_config); 691 adap->fe[0] = dvb_attach(dib7000m_attach, &adap->dev->i2c_adap, 18, &stk7700p_dib7000m_config);
692 692
693 return adap->fe == NULL ? -ENODEV : 0; 693 return adap->fe[0] == NULL ? -ENODEV : 0;
694} 694}
695 695
696static struct mt2060_config stk7700p_mt2060_config = { 696static struct mt2060_config stk7700p_mt2060_config = {
@@ -709,11 +709,11 @@ static int stk7700p_tuner_attach(struct dvb_usb_adapter *adap)
709 if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a; 709 if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a;
710 } 710 }
711 if (st->is_dib7000pc) 711 if (st->is_dib7000pc)
712 tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 712 tun_i2c = dib7000p_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
713 else 713 else
714 tun_i2c = dib7000m_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 714 tun_i2c = dib7000m_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
715 715
716 return dvb_attach(mt2060_attach, adap->fe, tun_i2c, &stk7700p_mt2060_config, 716 return dvb_attach(mt2060_attach, adap->fe[0], tun_i2c, &stk7700p_mt2060_config,
717 if1) == NULL ? -ENODEV : 0; 717 if1) == NULL ? -ENODEV : 0;
718} 718}
719 719
@@ -843,33 +843,33 @@ static int dib7770_set_param_override(struct dvb_frontend *fe,
843static int dib7770p_tuner_attach(struct dvb_usb_adapter *adap) 843static int dib7770p_tuner_attach(struct dvb_usb_adapter *adap)
844{ 844{
845 struct dib0700_adapter_state *st = adap->priv; 845 struct dib0700_adapter_state *st = adap->priv;
846 struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe, 846 struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe[0],
847 DIBX000_I2C_INTERFACE_TUNER, 1); 847 DIBX000_I2C_INTERFACE_TUNER, 1);
848 848
849 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, 849 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c,
850 &dib7770p_dib0070_config) == NULL) 850 &dib7770p_dib0070_config) == NULL)
851 return -ENODEV; 851 return -ENODEV;
852 852
853 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 853 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
854 adap->fe->ops.tuner_ops.set_params = dib7770_set_param_override; 854 adap->fe[0]->ops.tuner_ops.set_params = dib7770_set_param_override;
855 return 0; 855 return 0;
856} 856}
857 857
858static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap) 858static int dib7070p_tuner_attach(struct dvb_usb_adapter *adap)
859{ 859{
860 struct dib0700_adapter_state *st = adap->priv; 860 struct dib0700_adapter_state *st = adap->priv;
861 struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 861 struct i2c_adapter *tun_i2c = dib7000p_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
862 862
863 if (adap->id == 0) { 863 if (adap->id == 0) {
864 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, &dib7070p_dib0070_config[0]) == NULL) 864 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c, &dib7070p_dib0070_config[0]) == NULL)
865 return -ENODEV; 865 return -ENODEV;
866 } else { 866 } else {
867 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, &dib7070p_dib0070_config[1]) == NULL) 867 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c, &dib7070p_dib0070_config[1]) == NULL)
868 return -ENODEV; 868 return -ENODEV;
869 } 869 }
870 870
871 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 871 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
872 adap->fe->ops.tuner_ops.set_params = dib7070_set_param_override; 872 adap->fe[0]->ops.tuner_ops.set_params = dib7070_set_param_override;
873 return 0; 873 return 0;
874} 874}
875 875
@@ -878,26 +878,26 @@ static int stk7700p_pid_filter(struct dvb_usb_adapter *adapter, int index,
878{ 878{
879 struct dib0700_state *st = adapter->dev->priv; 879 struct dib0700_state *st = adapter->dev->priv;
880 if (st->is_dib7000pc) 880 if (st->is_dib7000pc)
881 return dib7000p_pid_filter(adapter->fe, index, pid, onoff); 881 return dib7000p_pid_filter(adapter->fe[0], index, pid, onoff);
882 return dib7000m_pid_filter(adapter->fe, index, pid, onoff); 882 return dib7000m_pid_filter(adapter->fe[0], index, pid, onoff);
883} 883}
884 884
885static int stk7700p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff) 885static int stk7700p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
886{ 886{
887 struct dib0700_state *st = adapter->dev->priv; 887 struct dib0700_state *st = adapter->dev->priv;
888 if (st->is_dib7000pc) 888 if (st->is_dib7000pc)
889 return dib7000p_pid_filter_ctrl(adapter->fe, onoff); 889 return dib7000p_pid_filter_ctrl(adapter->fe[0], onoff);
890 return dib7000m_pid_filter_ctrl(adapter->fe, onoff); 890 return dib7000m_pid_filter_ctrl(adapter->fe[0], onoff);
891} 891}
892 892
893static int stk70x0p_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff) 893static int stk70x0p_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
894{ 894{
895 return dib7000p_pid_filter(adapter->fe, index, pid, onoff); 895 return dib7000p_pid_filter(adapter->fe[0], index, pid, onoff);
896} 896}
897 897
898static int stk70x0p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff) 898static int stk70x0p_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
899{ 899{
900 return dib7000p_pid_filter_ctrl(adapter->fe, onoff); 900 return dib7000p_pid_filter_ctrl(adapter->fe[0], onoff);
901} 901}
902 902
903static struct dibx000_bandwidth_config dib7070_bw_config_12_mhz = { 903static struct dibx000_bandwidth_config dib7070_bw_config_12_mhz = {
@@ -955,9 +955,9 @@ static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap)
955 return -ENODEV; 955 return -ENODEV;
956 } 956 }
957 957
958 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 958 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
959 &dib7070p_dib7000p_config); 959 &dib7070p_dib7000p_config);
960 return adap->fe == NULL ? -ENODEV : 0; 960 return adap->fe[0] == NULL ? -ENODEV : 0;
961} 961}
962 962
963/* STK7770P */ 963/* STK7770P */
@@ -1007,9 +1007,9 @@ static int stk7770p_frontend_attach(struct dvb_usb_adapter *adap)
1007 return -ENODEV; 1007 return -ENODEV;
1008 } 1008 }
1009 1009
1010 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, 1010 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80,
1011 &dib7770p_dib7000p_config); 1011 &dib7770p_dib7000p_config);
1012 return adap->fe == NULL ? -ENODEV : 0; 1012 return adap->fe[0] == NULL ? -ENODEV : 0;
1013} 1013}
1014 1014
1015/* DIB807x generic */ 1015/* DIB807x generic */
@@ -1225,34 +1225,34 @@ static int dib807x_set_param_override(struct dvb_frontend *fe,
1225static int dib807x_tuner_attach(struct dvb_usb_adapter *adap) 1225static int dib807x_tuner_attach(struct dvb_usb_adapter *adap)
1226{ 1226{
1227 struct dib0700_adapter_state *st = adap->priv; 1227 struct dib0700_adapter_state *st = adap->priv;
1228 struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe, 1228 struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe[0],
1229 DIBX000_I2C_INTERFACE_TUNER, 1); 1229 DIBX000_I2C_INTERFACE_TUNER, 1);
1230 1230
1231 if (adap->id == 0) { 1231 if (adap->id == 0) {
1232 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, 1232 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c,
1233 &dib807x_dib0070_config[0]) == NULL) 1233 &dib807x_dib0070_config[0]) == NULL)
1234 return -ENODEV; 1234 return -ENODEV;
1235 } else { 1235 } else {
1236 if (dvb_attach(dib0070_attach, adap->fe, tun_i2c, 1236 if (dvb_attach(dib0070_attach, adap->fe[0], tun_i2c,
1237 &dib807x_dib0070_config[1]) == NULL) 1237 &dib807x_dib0070_config[1]) == NULL)
1238 return -ENODEV; 1238 return -ENODEV;
1239 } 1239 }
1240 1240
1241 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 1241 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
1242 adap->fe->ops.tuner_ops.set_params = dib807x_set_param_override; 1242 adap->fe[0]->ops.tuner_ops.set_params = dib807x_set_param_override;
1243 return 0; 1243 return 0;
1244} 1244}
1245 1245
1246static int stk80xx_pid_filter(struct dvb_usb_adapter *adapter, int index, 1246static int stk80xx_pid_filter(struct dvb_usb_adapter *adapter, int index,
1247 u16 pid, int onoff) 1247 u16 pid, int onoff)
1248{ 1248{
1249 return dib8000_pid_filter(adapter->fe, index, pid, onoff); 1249 return dib8000_pid_filter(adapter->fe[0], index, pid, onoff);
1250} 1250}
1251 1251
1252static int stk80xx_pid_filter_ctrl(struct dvb_usb_adapter *adapter, 1252static int stk80xx_pid_filter_ctrl(struct dvb_usb_adapter *adapter,
1253 int onoff) 1253 int onoff)
1254{ 1254{
1255 return dib8000_pid_filter_ctrl(adapter->fe, onoff); 1255 return dib8000_pid_filter_ctrl(adapter->fe[0], onoff);
1256} 1256}
1257 1257
1258/* STK807x */ 1258/* STK807x */
@@ -1276,10 +1276,10 @@ static int stk807x_frontend_attach(struct dvb_usb_adapter *adap)
1276 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, 1276 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18,
1277 0x80); 1277 0x80);
1278 1278
1279 adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, 1279 adap->fe[0] = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
1280 &dib807x_dib8000_config[0]); 1280 &dib807x_dib8000_config[0]);
1281 1281
1282 return adap->fe == NULL ? -ENODEV : 0; 1282 return adap->fe[0] == NULL ? -ENODEV : 0;
1283} 1283}
1284 1284
1285/* STK807xPVR */ 1285/* STK807xPVR */
@@ -1305,10 +1305,10 @@ static int stk807xpvr_frontend_attach0(struct dvb_usb_adapter *adap)
1305 /* initialize IC 0 */ 1305 /* initialize IC 0 */
1306 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x22, 0x80); 1306 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x22, 0x80);
1307 1307
1308 adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, 1308 adap->fe[0] = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80,
1309 &dib807x_dib8000_config[0]); 1309 &dib807x_dib8000_config[0]);
1310 1310
1311 return adap->fe == NULL ? -ENODEV : 0; 1311 return adap->fe[0] == NULL ? -ENODEV : 0;
1312} 1312}
1313 1313
1314static int stk807xpvr_frontend_attach1(struct dvb_usb_adapter *adap) 1314static int stk807xpvr_frontend_attach1(struct dvb_usb_adapter *adap)
@@ -1316,10 +1316,10 @@ static int stk807xpvr_frontend_attach1(struct dvb_usb_adapter *adap)
1316 /* initialize IC 1 */ 1316 /* initialize IC 1 */
1317 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x12, 0x82); 1317 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x12, 0x82);
1318 1318
1319 adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82, 1319 adap->fe[0] = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82,
1320 &dib807x_dib8000_config[1]); 1320 &dib807x_dib8000_config[1]);
1321 1321
1322 return adap->fe == NULL ? -ENODEV : 0; 1322 return adap->fe[0] == NULL ? -ENODEV : 0;
1323} 1323}
1324 1324
1325/* STK8096GP */ 1325/* STK8096GP */
@@ -1546,13 +1546,13 @@ static int dib8096_set_param_override(struct dvb_frontend *fe,
1546static int dib809x_tuner_attach(struct dvb_usb_adapter *adap) 1546static int dib809x_tuner_attach(struct dvb_usb_adapter *adap)
1547{ 1547{
1548 struct dib0700_adapter_state *st = adap->priv; 1548 struct dib0700_adapter_state *st = adap->priv;
1549 struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 1549 struct i2c_adapter *tun_i2c = dib8000_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
1550 1550
1551 if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &dib809x_dib0090_config) == NULL) 1551 if (dvb_attach(dib0090_register, adap->fe[0], tun_i2c, &dib809x_dib0090_config) == NULL)
1552 return -ENODEV; 1552 return -ENODEV;
1553 1553
1554 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 1554 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
1555 adap->fe->ops.tuner_ops.set_params = dib8096_set_param_override; 1555 adap->fe[0]->ops.tuner_ops.set_params = dib8096_set_param_override;
1556 return 0; 1556 return 0;
1557} 1557}
1558 1558
@@ -1575,30 +1575,30 @@ static int stk809x_frontend_attach(struct dvb_usb_adapter *adap)
1575 1575
1576 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, 0x80); 1576 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 1, 18, 0x80);
1577 1577
1578 adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]); 1578 adap->fe[0] = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
1579 1579
1580 return adap->fe == NULL ? -ENODEV : 0; 1580 return adap->fe[0] == NULL ? -ENODEV : 0;
1581} 1581}
1582 1582
1583static int nim8096md_tuner_attach(struct dvb_usb_adapter *adap) 1583static int nim8096md_tuner_attach(struct dvb_usb_adapter *adap)
1584{ 1584{
1585 struct dib0700_adapter_state *st = adap->priv; 1585 struct dib0700_adapter_state *st = adap->priv;
1586 struct i2c_adapter *tun_i2c; 1586 struct i2c_adapter *tun_i2c;
1587 struct dvb_frontend *fe_slave = dib8000_get_slave_frontend(adap->fe, 1); 1587 struct dvb_frontend *fe_slave = dib8000_get_slave_frontend(adap->fe[0], 1);
1588 1588
1589 if (fe_slave) { 1589 if (fe_slave) {
1590 tun_i2c = dib8000_get_i2c_master(fe_slave, DIBX000_I2C_INTERFACE_TUNER, 1); 1590 tun_i2c = dib8000_get_i2c_master(fe_slave, DIBX000_I2C_INTERFACE_TUNER, 1);
1591 if (dvb_attach(dib0090_register, fe_slave, tun_i2c, &dib809x_dib0090_config) == NULL) 1591 if (dvb_attach(dib0090_register, fe_slave, tun_i2c, &dib809x_dib0090_config) == NULL)
1592 return -ENODEV; 1592 return -ENODEV;
1593 fe_slave->dvb = adap->fe->dvb; 1593 fe_slave->dvb = adap->fe[0]->dvb;
1594 fe_slave->ops.tuner_ops.set_params = dib8096_set_param_override; 1594 fe_slave->ops.tuner_ops.set_params = dib8096_set_param_override;
1595 } 1595 }
1596 tun_i2c = dib8000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_TUNER, 1); 1596 tun_i2c = dib8000_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_TUNER, 1);
1597 if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &dib809x_dib0090_config) == NULL) 1597 if (dvb_attach(dib0090_register, adap->fe[0], tun_i2c, &dib809x_dib0090_config) == NULL)
1598 return -ENODEV; 1598 return -ENODEV;
1599 1599
1600 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 1600 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
1601 adap->fe->ops.tuner_ops.set_params = dib8096_set_param_override; 1601 adap->fe[0]->ops.tuner_ops.set_params = dib8096_set_param_override;
1602 1602
1603 return 0; 1603 return 0;
1604} 1604}
@@ -1626,12 +1626,12 @@ static int nim8096md_frontend_attach(struct dvb_usb_adapter *adap)
1626 1626
1627 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 2, 18, 0x80); 1627 dib8000_i2c_enumeration(&adap->dev->i2c_adap, 2, 18, 0x80);
1628 1628
1629 adap->fe = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]); 1629 adap->fe[0] = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x80, &dib809x_dib8000_config[0]);
1630 if (adap->fe == NULL) 1630 if (adap->fe[0] == NULL)
1631 return -ENODEV; 1631 return -ENODEV;
1632 1632
1633 fe_slave = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82, &dib809x_dib8000_config[1]); 1633 fe_slave = dvb_attach(dib8000_attach, &adap->dev->i2c_adap, 0x82, &dib809x_dib8000_config[1]);
1634 dib8000_set_slave_frontend(adap->fe, fe_slave); 1634 dib8000_set_slave_frontend(adap->fe[0], fe_slave);
1635 1635
1636 return fe_slave == NULL ? -ENODEV : 0; 1636 return fe_slave == NULL ? -ENODEV : 0;
1637} 1637}
@@ -1639,12 +1639,12 @@ static int nim8096md_frontend_attach(struct dvb_usb_adapter *adap)
1639/* STK9090M */ 1639/* STK9090M */
1640static int dib90x0_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff) 1640static int dib90x0_pid_filter(struct dvb_usb_adapter *adapter, int index, u16 pid, int onoff)
1641{ 1641{
1642 return dib9000_fw_pid_filter(adapter->fe, index, pid, onoff); 1642 return dib9000_fw_pid_filter(adapter->fe[0], index, pid, onoff);
1643} 1643}
1644 1644
1645static int dib90x0_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff) 1645static int dib90x0_pid_filter_ctrl(struct dvb_usb_adapter *adapter, int onoff)
1646{ 1646{
1647 return dib9000_fw_pid_filter_ctrl(adapter->fe, onoff); 1647 return dib9000_fw_pid_filter_ctrl(adapter->fe[0], onoff);
1648} 1648}
1649 1649
1650static int dib90x0_tuner_reset(struct dvb_frontend *fe, int onoff) 1650static int dib90x0_tuner_reset(struct dvb_frontend *fe, int onoff)
@@ -1856,15 +1856,15 @@ static int stk9090m_frontend_attach(struct dvb_usb_adapter *adap)
1856 stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size; 1856 stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size;
1857 stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data; 1857 stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
1858 1858
1859 adap->fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &stk9090m_config); 1859 adap->fe[0] = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &stk9090m_config);
1860 1860
1861 return adap->fe == NULL ? -ENODEV : 0; 1861 return adap->fe[0] == NULL ? -ENODEV : 0;
1862} 1862}
1863 1863
1864static int dib9090_tuner_attach(struct dvb_usb_adapter *adap) 1864static int dib9090_tuner_attach(struct dvb_usb_adapter *adap)
1865{ 1865{
1866 struct dib0700_adapter_state *state = adap->priv; 1866 struct dib0700_adapter_state *state = adap->priv;
1867 struct i2c_adapter *i2c = dib9000_get_tuner_interface(adap->fe); 1867 struct i2c_adapter *i2c = dib9000_get_tuner_interface(adap->fe[0]);
1868 u16 data_dib190[10] = { 1868 u16 data_dib190[10] = {
1869 1, 0x1374, 1869 1, 0x1374,
1870 2, 0x01a2, 1870 2, 0x01a2,
@@ -1873,13 +1873,13 @@ static int dib9090_tuner_attach(struct dvb_usb_adapter *adap)
1873 8, 0x0486, 1873 8, 0x0486,
1874 }; 1874 };
1875 1875
1876 if (dvb_attach(dib0090_fw_register, adap->fe, i2c, &dib9090_dib0090_config) == NULL) 1876 if (dvb_attach(dib0090_fw_register, adap->fe[0], i2c, &dib9090_dib0090_config) == NULL)
1877 return -ENODEV; 1877 return -ENODEV;
1878 i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0); 1878 i2c = dib9000_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
1879 if (dib01x0_pmu_update(i2c, data_dib190, 10) != 0) 1879 if (dib01x0_pmu_update(i2c, data_dib190, 10) != 0)
1880 return -ENODEV; 1880 return -ENODEV;
1881 dib0700_set_i2c_speed(adap->dev, 2000); 1881 dib0700_set_i2c_speed(adap->dev, 2000);
1882 if (dib9000_firmware_post_pll_init(adap->fe) < 0) 1882 if (dib9000_firmware_post_pll_init(adap->fe[0]) < 0)
1883 return -ENODEV; 1883 return -ENODEV;
1884 release_firmware(state->frontend_firmware); 1884 release_firmware(state->frontend_firmware);
1885 return 0; 1885 return 0;
@@ -1925,16 +1925,16 @@ static int nim9090md_frontend_attach(struct dvb_usb_adapter *adap)
1925 nim9090md_config[1].microcode_B_fe_buffer = state->frontend_firmware->data; 1925 nim9090md_config[1].microcode_B_fe_buffer = state->frontend_firmware->data;
1926 1926
1927 dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, 0x80); 1927 dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x20, 0x80);
1928 adap->fe = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &nim9090md_config[0]); 1928 adap->fe[0] = dvb_attach(dib9000_attach, &adap->dev->i2c_adap, 0x80, &nim9090md_config[0]);
1929 1929
1930 if (adap->fe == NULL) 1930 if (adap->fe[0] == NULL)
1931 return -ENODEV; 1931 return -ENODEV;
1932 1932
1933 i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_3_4, 0); 1933 i2c = dib9000_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_GPIO_3_4, 0);
1934 dib9000_i2c_enumeration(i2c, 1, 0x12, 0x82); 1934 dib9000_i2c_enumeration(i2c, 1, 0x12, 0x82);
1935 1935
1936 fe_slave = dvb_attach(dib9000_attach, i2c, 0x82, &nim9090md_config[1]); 1936 fe_slave = dvb_attach(dib9000_attach, i2c, 0x82, &nim9090md_config[1]);
1937 dib9000_set_slave_frontend(adap->fe, fe_slave); 1937 dib9000_set_slave_frontend(adap->fe[0], fe_slave);
1938 1938
1939 return fe_slave == NULL ? -ENODEV : 0; 1939 return fe_slave == NULL ? -ENODEV : 0;
1940} 1940}
@@ -1951,26 +1951,26 @@ static int nim9090md_tuner_attach(struct dvb_usb_adapter *adap)
1951 0, 0x00ef, 1951 0, 0x00ef,
1952 8, 0x0406, 1952 8, 0x0406,
1953 }; 1953 };
1954 i2c = dib9000_get_tuner_interface(adap->fe); 1954 i2c = dib9000_get_tuner_interface(adap->fe[0]);
1955 if (dvb_attach(dib0090_fw_register, adap->fe, i2c, &nim9090md_dib0090_config[0]) == NULL) 1955 if (dvb_attach(dib0090_fw_register, adap->fe[0], i2c, &nim9090md_dib0090_config[0]) == NULL)
1956 return -ENODEV; 1956 return -ENODEV;
1957 i2c = dib9000_get_i2c_master(adap->fe, DIBX000_I2C_INTERFACE_GPIO_1_2, 0); 1957 i2c = dib9000_get_i2c_master(adap->fe[0], DIBX000_I2C_INTERFACE_GPIO_1_2, 0);
1958 if (dib01x0_pmu_update(i2c, data_dib190, 10) < 0) 1958 if (dib01x0_pmu_update(i2c, data_dib190, 10) < 0)
1959 return -ENODEV; 1959 return -ENODEV;
1960 dib0700_set_i2c_speed(adap->dev, 2000); 1960 dib0700_set_i2c_speed(adap->dev, 2000);
1961 if (dib9000_firmware_post_pll_init(adap->fe) < 0) 1961 if (dib9000_firmware_post_pll_init(adap->fe[0]) < 0)
1962 return -ENODEV; 1962 return -ENODEV;
1963 1963
1964 fe_slave = dib9000_get_slave_frontend(adap->fe, 1); 1964 fe_slave = dib9000_get_slave_frontend(adap->fe[0], 1);
1965 if (fe_slave != NULL) { 1965 if (fe_slave != NULL) {
1966 i2c = dib9000_get_component_bus_interface(adap->fe); 1966 i2c = dib9000_get_component_bus_interface(adap->fe[0]);
1967 dib9000_set_i2c_adapter(fe_slave, i2c); 1967 dib9000_set_i2c_adapter(fe_slave, i2c);
1968 1968
1969 i2c = dib9000_get_tuner_interface(fe_slave); 1969 i2c = dib9000_get_tuner_interface(fe_slave);
1970 if (dvb_attach(dib0090_fw_register, fe_slave, i2c, &nim9090md_dib0090_config[1]) == NULL) 1970 if (dvb_attach(dib0090_fw_register, fe_slave, i2c, &nim9090md_dib0090_config[1]) == NULL)
1971 return -ENODEV; 1971 return -ENODEV;
1972 fe_slave->dvb = adap->fe->dvb; 1972 fe_slave->dvb = adap->fe[0]->dvb;
1973 dib9000_fw_set_component_bus_speed(adap->fe, 2000); 1973 dib9000_fw_set_component_bus_speed(adap->fe[0], 2000);
1974 if (dib9000_firmware_post_pll_init(fe_slave) < 0) 1974 if (dib9000_firmware_post_pll_init(fe_slave) < 0)
1975 return -ENODEV; 1975 return -ENODEV;
1976 } 1976 }
@@ -2393,23 +2393,23 @@ static int nim7090_frontend_attach(struct dvb_usb_adapter *adap)
2393 err("%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__); 2393 err("%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
2394 return -ENODEV; 2394 return -ENODEV;
2395 } 2395 }
2396 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config); 2396 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &nim7090_dib7000p_config);
2397 2397
2398 return adap->fe == NULL ? -ENODEV : 0; 2398 return adap->fe[0] == NULL ? -ENODEV : 0;
2399} 2399}
2400 2400
2401static int nim7090_tuner_attach(struct dvb_usb_adapter *adap) 2401static int nim7090_tuner_attach(struct dvb_usb_adapter *adap)
2402{ 2402{
2403 struct dib0700_adapter_state *st = adap->priv; 2403 struct dib0700_adapter_state *st = adap->priv;
2404 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe); 2404 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe[0]);
2405 2405
2406 if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &nim7090_dib0090_config) == NULL) 2406 if (dvb_attach(dib0090_register, adap->fe[0], tun_i2c, &nim7090_dib0090_config) == NULL)
2407 return -ENODEV; 2407 return -ENODEV;
2408 2408
2409 dib7000p_set_gpio(adap->fe, 8, 0, 1); 2409 dib7000p_set_gpio(adap->fe[0], 8, 0, 1);
2410 2410
2411 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 2411 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
2412 adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup; 2412 adap->fe[0]->ops.tuner_ops.set_params = dib7090_agc_startup;
2413 return 0; 2413 return 0;
2414} 2414}
2415 2415
@@ -2439,11 +2439,11 @@ static int tfe7090pvr_frontend0_attach(struct dvb_usb_adapter *adap)
2439 } 2439 }
2440 2440
2441 dib0700_set_i2c_speed(adap->dev, 340); 2441 dib0700_set_i2c_speed(adap->dev, 340);
2442 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x90, &tfe7090pvr_dib7000p_config[0]); 2442 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x90, &tfe7090pvr_dib7000p_config[0]);
2443 if (adap->fe == NULL) 2443 if (adap->fe[0] == NULL)
2444 return -ENODEV; 2444 return -ENODEV;
2445 2445
2446 dib7090_slave_reset(adap->fe); 2446 dib7090_slave_reset(adap->fe[0]);
2447 2447
2448 return 0; 2448 return 0;
2449} 2449}
@@ -2452,50 +2452,50 @@ static int tfe7090pvr_frontend1_attach(struct dvb_usb_adapter *adap)
2452{ 2452{
2453 struct i2c_adapter *i2c; 2453 struct i2c_adapter *i2c;
2454 2454
2455 if (adap->dev->adapter[0].fe == NULL) { 2455 if (adap->dev->adapter[0].fe[0] == NULL) {
2456 err("the master dib7090 has to be initialized first"); 2456 err("the master dib7090 has to be initialized first");
2457 return -ENODEV; /* the master device has not been initialized */ 2457 return -ENODEV; /* the master device has not been initialized */
2458 } 2458 }
2459 2459
2460 i2c = dib7000p_get_i2c_master(adap->dev->adapter[0].fe, DIBX000_I2C_INTERFACE_GPIO_6_7, 1); 2460 i2c = dib7000p_get_i2c_master(adap->dev->adapter[0].fe[0], DIBX000_I2C_INTERFACE_GPIO_6_7, 1);
2461 if (dib7000p_i2c_enumeration(i2c, 1, 0x10, &tfe7090pvr_dib7000p_config[1]) != 0) { 2461 if (dib7000p_i2c_enumeration(i2c, 1, 0x10, &tfe7090pvr_dib7000p_config[1]) != 0) {
2462 err("%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__); 2462 err("%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
2463 return -ENODEV; 2463 return -ENODEV;
2464 } 2464 }
2465 2465
2466 adap->fe = dvb_attach(dib7000p_attach, i2c, 0x92, &tfe7090pvr_dib7000p_config[1]); 2466 adap->fe[0] = dvb_attach(dib7000p_attach, i2c, 0x92, &tfe7090pvr_dib7000p_config[1]);
2467 dib0700_set_i2c_speed(adap->dev, 200); 2467 dib0700_set_i2c_speed(adap->dev, 200);
2468 2468
2469 return adap->fe == NULL ? -ENODEV : 0; 2469 return adap->fe[0] == NULL ? -ENODEV : 0;
2470} 2470}
2471 2471
2472static int tfe7090pvr_tuner0_attach(struct dvb_usb_adapter *adap) 2472static int tfe7090pvr_tuner0_attach(struct dvb_usb_adapter *adap)
2473{ 2473{
2474 struct dib0700_adapter_state *st = adap->priv; 2474 struct dib0700_adapter_state *st = adap->priv;
2475 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe); 2475 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe[0]);
2476 2476
2477 if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &tfe7090pvr_dib0090_config[0]) == NULL) 2477 if (dvb_attach(dib0090_register, adap->fe[0], tun_i2c, &tfe7090pvr_dib0090_config[0]) == NULL)
2478 return -ENODEV; 2478 return -ENODEV;
2479 2479
2480 dib7000p_set_gpio(adap->fe, 8, 0, 1); 2480 dib7000p_set_gpio(adap->fe[0], 8, 0, 1);
2481 2481
2482 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 2482 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
2483 adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup; 2483 adap->fe[0]->ops.tuner_ops.set_params = dib7090_agc_startup;
2484 return 0; 2484 return 0;
2485} 2485}
2486 2486
2487static int tfe7090pvr_tuner1_attach(struct dvb_usb_adapter *adap) 2487static int tfe7090pvr_tuner1_attach(struct dvb_usb_adapter *adap)
2488{ 2488{
2489 struct dib0700_adapter_state *st = adap->priv; 2489 struct dib0700_adapter_state *st = adap->priv;
2490 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe); 2490 struct i2c_adapter *tun_i2c = dib7090_get_i2c_tuner(adap->fe[0]);
2491 2491
2492 if (dvb_attach(dib0090_register, adap->fe, tun_i2c, &tfe7090pvr_dib0090_config[1]) == NULL) 2492 if (dvb_attach(dib0090_register, adap->fe[0], tun_i2c, &tfe7090pvr_dib0090_config[1]) == NULL)
2493 return -ENODEV; 2493 return -ENODEV;
2494 2494
2495 dib7000p_set_gpio(adap->fe, 8, 0, 1); 2495 dib7000p_set_gpio(adap->fe[0], 8, 0, 1);
2496 2496
2497 st->set_param_save = adap->fe->ops.tuner_ops.set_params; 2497 st->set_param_save = adap->fe[0]->ops.tuner_ops.set_params;
2498 adap->fe->ops.tuner_ops.set_params = dib7090_agc_startup; 2498 adap->fe[0]->ops.tuner_ops.set_params = dib7090_agc_startup;
2499 return 0; 2499 return 0;
2500} 2500}
2501 2501
@@ -2555,14 +2555,14 @@ static int stk7070pd_frontend_attach0(struct dvb_usb_adapter *adap)
2555 return -ENODEV; 2555 return -ENODEV;
2556 } 2556 }
2557 2557
2558 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &stk7070pd_dib7000p_config[0]); 2558 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x80, &stk7070pd_dib7000p_config[0]);
2559 return adap->fe == NULL ? -ENODEV : 0; 2559 return adap->fe[0] == NULL ? -ENODEV : 0;
2560} 2560}
2561 2561
2562static int stk7070pd_frontend_attach1(struct dvb_usb_adapter *adap) 2562static int stk7070pd_frontend_attach1(struct dvb_usb_adapter *adap)
2563{ 2563{
2564 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x82, &stk7070pd_dib7000p_config[1]); 2564 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x82, &stk7070pd_dib7000p_config[1]);
2565 return adap->fe == NULL ? -ENODEV : 0; 2565 return adap->fe[0] == NULL ? -ENODEV : 0;
2566} 2566}
2567 2567
2568/* S5H1411 */ 2568/* S5H1411 */
@@ -2617,9 +2617,9 @@ static int s5h1411_frontend_attach(struct dvb_usb_adapter *adap)
2617 dib0700_set_gpio(adap->dev, GPIO2, GPIO_OUT, 1); 2617 dib0700_set_gpio(adap->dev, GPIO2, GPIO_OUT, 1);
2618 2618
2619 /* GPIOs are initialized, do the attach */ 2619 /* GPIOs are initialized, do the attach */
2620 adap->fe = dvb_attach(s5h1411_attach, &pinnacle_801e_config, 2620 adap->fe[0] = dvb_attach(s5h1411_attach, &pinnacle_801e_config,
2621 &adap->dev->i2c_adap); 2621 &adap->dev->i2c_adap);
2622 return adap->fe == NULL ? -ENODEV : 0; 2622 return adap->fe[0] == NULL ? -ENODEV : 0;
2623} 2623}
2624 2624
2625static int dib0700_xc5000_tuner_callback(void *priv, int component, 2625static int dib0700_xc5000_tuner_callback(void *priv, int component,
@@ -2649,9 +2649,9 @@ static struct xc5000_config s5h1411_xc5000_tunerconfig = {
2649static int xc5000_tuner_attach(struct dvb_usb_adapter *adap) 2649static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
2650{ 2650{
2651 /* FIXME: generalize & move to common area */ 2651 /* FIXME: generalize & move to common area */
2652 adap->fe->callback = dib0700_xc5000_tuner_callback; 2652 adap->fe[0]->callback = dib0700_xc5000_tuner_callback;
2653 2653
2654 return dvb_attach(xc5000_attach, adap->fe, &adap->dev->i2c_adap, 2654 return dvb_attach(xc5000_attach, adap->fe[0], &adap->dev->i2c_adap,
2655 &s5h1411_xc5000_tunerconfig) 2655 &s5h1411_xc5000_tunerconfig)
2656 == NULL ? -ENODEV : 0; 2656 == NULL ? -ENODEV : 0;
2657} 2657}
@@ -2663,9 +2663,9 @@ static int dib0700_xc4000_tuner_callback(void *priv, int component,
2663 2663
2664 if (command == XC4000_TUNER_RESET) { 2664 if (command == XC4000_TUNER_RESET) {
2665 /* Reset the tuner */ 2665 /* Reset the tuner */
2666 dib7000p_set_gpio(adap->fe, 8, 0, 0); 2666 dib7000p_set_gpio(adap->fe[0], 8, 0, 0);
2667 msleep(10); 2667 msleep(10);
2668 dib7000p_set_gpio(adap->fe, 8, 0, 1); 2668 dib7000p_set_gpio(adap->fe[0], 8, 0, 1);
2669 } else { 2669 } else {
2670 err("xc4000: unknown tuner callback command: %d\n", command); 2670 err("xc4000: unknown tuner callback command: %d\n", command);
2671 return -EINVAL; 2671 return -EINVAL;
@@ -2771,11 +2771,11 @@ static int pctv340e_frontend_attach(struct dvb_usb_adapter *adap)
2771 return -ENODEV; 2771 return -ENODEV;
2772 } 2772 }
2773 2773
2774 adap->fe = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x12, 2774 adap->fe[0] = dvb_attach(dib7000p_attach, &adap->dev->i2c_adap, 0x12,
2775 &pctv_340e_config); 2775 &pctv_340e_config);
2776 st->is_dib7000pc = 1; 2776 st->is_dib7000pc = 1;
2777 2777
2778 return adap->fe == NULL ? -ENODEV : 0; 2778 return adap->fe[0] == NULL ? -ENODEV : 0;
2779} 2779}
2780 2780
2781static struct xc4000_config dib7000p_xc4000_tunerconfig = { 2781static struct xc4000_config dib7000p_xc4000_tunerconfig = {
@@ -2791,7 +2791,7 @@ static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
2791 struct i2c_adapter *tun_i2c; 2791 struct i2c_adapter *tun_i2c;
2792 2792
2793 /* The xc4000 is not on the main i2c bus */ 2793 /* The xc4000 is not on the main i2c bus */
2794 tun_i2c = dib7000p_get_i2c_master(adap->fe, 2794 tun_i2c = dib7000p_get_i2c_master(adap->fe[0],
2795 DIBX000_I2C_INTERFACE_TUNER, 1); 2795 DIBX000_I2C_INTERFACE_TUNER, 1);
2796 if (tun_i2c == NULL) { 2796 if (tun_i2c == NULL) {
2797 printk(KERN_ERR "Could not reach tuner i2c bus\n"); 2797 printk(KERN_ERR "Could not reach tuner i2c bus\n");
@@ -2799,9 +2799,9 @@ static int xc4000_tuner_attach(struct dvb_usb_adapter *adap)
2799 } 2799 }
2800 2800
2801 /* Setup the reset callback */ 2801 /* Setup the reset callback */
2802 adap->fe->callback = dib0700_xc4000_tuner_callback; 2802 adap->fe[0]->callback = dib0700_xc4000_tuner_callback;
2803 2803
2804 return dvb_attach(xc4000_attach, adap->fe, tun_i2c, 2804 return dvb_attach(xc4000_attach, adap->fe[0], tun_i2c,
2805 &dib7000p_xc4000_tunerconfig) 2805 &dib7000p_xc4000_tunerconfig)
2806 == NULL ? -ENODEV : 0; 2806 == NULL ? -ENODEV : 0;
2807} 2807}
@@ -2857,16 +2857,16 @@ static int lgdt3305_frontend_attach(struct dvb_usb_adapter *adap)
2857 dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1); 2857 dib0700_set_gpio(adap->dev, GPIO10, GPIO_OUT, 1);
2858 msleep(30); 2858 msleep(30);
2859 2859
2860 adap->fe = dvb_attach(lgdt3305_attach, 2860 adap->fe[0] = dvb_attach(lgdt3305_attach,
2861 &hcw_lgdt3305_config, 2861 &hcw_lgdt3305_config,
2862 &adap->dev->i2c_adap); 2862 &adap->dev->i2c_adap);
2863 2863
2864 return adap->fe == NULL ? -ENODEV : 0; 2864 return adap->fe[0] == NULL ? -ENODEV : 0;
2865} 2865}
2866 2866
2867static int mxl5007t_tuner_attach(struct dvb_usb_adapter *adap) 2867static int mxl5007t_tuner_attach(struct dvb_usb_adapter *adap)
2868{ 2868{
2869 return dvb_attach(mxl5007t_attach, adap->fe, 2869 return dvb_attach(mxl5007t_attach, adap->fe[0],
2870 &adap->dev->i2c_adap, 0x60, 2870 &adap->dev->i2c_adap, 0x60,
2871 &hcw_mxl5007t_config) == NULL ? -ENODEV : 0; 2871 &hcw_mxl5007t_config) == NULL ? -ENODEV : 0;
2872} 2872}
diff --git a/drivers/media/dvb/dvb-usb/dibusb-common.c b/drivers/media/dvb/dvb-usb/dibusb-common.c
index 4c2a689c820e..263235e194f9 100644
--- a/drivers/media/dvb/dvb-usb/dibusb-common.c
+++ b/drivers/media/dvb/dvb-usb/dibusb-common.c
@@ -23,7 +23,7 @@ int dibusb_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
23 if (adap->priv != NULL) { 23 if (adap->priv != NULL) {
24 struct dibusb_state *st = adap->priv; 24 struct dibusb_state *st = adap->priv;
25 if (st->ops.fifo_ctrl != NULL) 25 if (st->ops.fifo_ctrl != NULL)
26 if (st->ops.fifo_ctrl(adap->fe,onoff)) { 26 if (st->ops.fifo_ctrl(adap->fe[0],onoff)) {
27 err("error while controlling the fifo of the demod."); 27 err("error while controlling the fifo of the demod.");
28 return -ENODEV; 28 return -ENODEV;
29 } 29 }
@@ -37,7 +37,7 @@ int dibusb_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, int onof
37 if (adap->priv != NULL) { 37 if (adap->priv != NULL) {
38 struct dibusb_state *st = adap->priv; 38 struct dibusb_state *st = adap->priv;
39 if (st->ops.pid_ctrl != NULL) 39 if (st->ops.pid_ctrl != NULL)
40 st->ops.pid_ctrl(adap->fe,index,pid,onoff); 40 st->ops.pid_ctrl(adap->fe[0],index,pid,onoff);
41 } 41 }
42 return 0; 42 return 0;
43} 43}
@@ -48,7 +48,7 @@ int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
48 if (adap->priv != NULL) { 48 if (adap->priv != NULL) {
49 struct dibusb_state *st = adap->priv; 49 struct dibusb_state *st = adap->priv;
50 if (st->ops.pid_parse != NULL) 50 if (st->ops.pid_parse != NULL)
51 if (st->ops.pid_parse(adap->fe,onoff) < 0) 51 if (st->ops.pid_parse(adap->fe[0],onoff) < 0)
52 err("could not handle pid_parser"); 52 err("could not handle pid_parser");
53 } 53 }
54 return 0; 54 return 0;
@@ -254,8 +254,8 @@ int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *adap)
254 msleep(1000); 254 msleep(1000);
255 } 255 }
256 256
257 if ((adap->fe = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap, DEFAULT_DIB3000P_I2C_ADDRESS, &mod3000p_dib3000p_config)) != NULL || 257 if ((adap->fe[0] = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap, DEFAULT_DIB3000P_I2C_ADDRESS, &mod3000p_dib3000p_config)) != NULL ||
258 (adap->fe = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap, DEFAULT_DIB3000MC_I2C_ADDRESS, &mod3000p_dib3000p_config)) != NULL) { 258 (adap->fe[0] = dvb_attach(dib3000mc_attach, &adap->dev->i2c_adap, DEFAULT_DIB3000MC_I2C_ADDRESS, &mod3000p_dib3000p_config)) != NULL) {
259 if (adap->priv != NULL) { 259 if (adap->priv != NULL) {
260 struct dibusb_state *st = adap->priv; 260 struct dibusb_state *st = adap->priv;
261 st->ops.pid_parse = dib3000mc_pid_parse; 261 st->ops.pid_parse = dib3000mc_pid_parse;
@@ -309,15 +309,15 @@ int dibusb_dib3000mc_tuner_attach(struct dvb_usb_adapter *adap)
309 } 309 }
310 } 310 }
311 311
312 tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1); 312 tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe[0], 1);
313 if (dvb_attach(mt2060_attach, adap->fe, tun_i2c, &stk3000p_mt2060_config, if1) == NULL) { 313 if (dvb_attach(mt2060_attach, adap->fe[0], tun_i2c, &stk3000p_mt2060_config, if1) == NULL) {
314 /* not found - use panasonic pll parameters */ 314 /* not found - use panasonic pll parameters */
315 if (dvb_attach(dvb_pll_attach, adap->fe, 0x60, tun_i2c, DVB_PLL_ENV57H1XD5) == NULL) 315 if (dvb_attach(dvb_pll_attach, adap->fe[0], 0x60, tun_i2c, DVB_PLL_ENV57H1XD5) == NULL)
316 return -ENOMEM; 316 return -ENOMEM;
317 } else { 317 } else {
318 st->mt2060_present = 1; 318 st->mt2060_present = 1;
319 /* set the correct parameters for the dib3000p */ 319 /* set the correct parameters for the dib3000p */
320 dib3000mc_set_config(adap->fe, &stk3000p_dib3000p_config); 320 dib3000mc_set_config(adap->fe[0], &stk3000p_dib3000p_config);
321 } 321 }
322 return 0; 322 return 0;
323} 323}
diff --git a/drivers/media/dvb/dvb-usb/dibusb-mb.c b/drivers/media/dvb/dvb-usb/dibusb-mb.c
index 04d91bdd3562..c653b321e428 100644
--- a/drivers/media/dvb/dvb-usb/dibusb-mb.c
+++ b/drivers/media/dvb/dvb-usb/dibusb-mb.c
@@ -31,11 +31,11 @@ static int dibusb_dib3000mb_frontend_attach(struct dvb_usb_adapter *adap)
31 31
32 demod_cfg.demod_address = 0x8; 32 demod_cfg.demod_address = 0x8;
33 33
34 if ((adap->fe = dvb_attach(dib3000mb_attach, &demod_cfg, 34 if ((adap->fe[0] = dvb_attach(dib3000mb_attach, &demod_cfg,
35 &adap->dev->i2c_adap, &st->ops)) == NULL) 35 &adap->dev->i2c_adap, &st->ops)) == NULL)
36 return -ENODEV; 36 return -ENODEV;
37 37
38 adap->fe->ops.i2c_gate_ctrl = dib3000mb_i2c_gate_ctrl; 38 adap->fe[0]->ops.i2c_gate_ctrl = dib3000mb_i2c_gate_ctrl;
39 39
40 return 0; 40 return 0;
41} 41}
@@ -46,7 +46,7 @@ static int dibusb_thomson_tuner_attach(struct dvb_usb_adapter *adap)
46 46
47 st->tuner_addr = 0x61; 47 st->tuner_addr = 0x61;
48 48
49 dvb_attach(dvb_pll_attach, adap->fe, 0x61, &adap->dev->i2c_adap, 49 dvb_attach(dvb_pll_attach, adap->fe[0], 0x61, &adap->dev->i2c_adap,
50 DVB_PLL_TUA6010XS); 50 DVB_PLL_TUA6010XS);
51 return 0; 51 return 0;
52} 52}
@@ -57,7 +57,7 @@ static int dibusb_panasonic_tuner_attach(struct dvb_usb_adapter *adap)
57 57
58 st->tuner_addr = 0x60; 58 st->tuner_addr = 0x60;
59 59
60 dvb_attach(dvb_pll_attach, adap->fe, 0x60, &adap->dev->i2c_adap, 60 dvb_attach(dvb_pll_attach, adap->fe[0], 0x60, &adap->dev->i2c_adap,
61 DVB_PLL_TDA665X); 61 DVB_PLL_TDA665X);
62 return 0; 62 return 0;
63} 63}
@@ -78,16 +78,16 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_adapter *adap)
78 /* the Panasonic sits on I2C addrass 0x60, the Thomson on 0x61 */ 78 /* the Panasonic sits on I2C addrass 0x60, the Thomson on 0x61 */
79 msg[0].addr = msg[1].addr = st->tuner_addr = 0x60; 79 msg[0].addr = msg[1].addr = st->tuner_addr = 0x60;
80 80
81 if (adap->fe->ops.i2c_gate_ctrl) 81 if (adap->fe[0]->ops.i2c_gate_ctrl)
82 adap->fe->ops.i2c_gate_ctrl(adap->fe,1); 82 adap->fe[0]->ops.i2c_gate_ctrl(adap->fe[0],1);
83 83
84 if (i2c_transfer(&adap->dev->i2c_adap, msg, 2) != 2) { 84 if (i2c_transfer(&adap->dev->i2c_adap, msg, 2) != 2) {
85 err("tuner i2c write failed."); 85 err("tuner i2c write failed.");
86 ret = -EREMOTEIO; 86 ret = -EREMOTEIO;
87 } 87 }
88 88
89 if (adap->fe->ops.i2c_gate_ctrl) 89 if (adap->fe[0]->ops.i2c_gate_ctrl)
90 adap->fe->ops.i2c_gate_ctrl(adap->fe,0); 90 adap->fe[0]->ops.i2c_gate_ctrl(adap->fe[0],0);
91 91
92 if (b2[0] == 0xfe) { 92 if (b2[0] == 0xfe) {
93 info("This device has the Thomson Cable onboard. Which is default."); 93 info("This device has the Thomson Cable onboard. Which is default.");
diff --git a/drivers/media/dvb/dvb-usb/digitv.c b/drivers/media/dvb/dvb-usb/digitv.c
index f6344cdd360f..1e17d15bd3e9 100644
--- a/drivers/media/dvb/dvb-usb/digitv.c
+++ b/drivers/media/dvb/dvb-usb/digitv.c
@@ -137,11 +137,11 @@ static int digitv_frontend_attach(struct dvb_usb_adapter *adap)
137{ 137{
138 struct digitv_state *st = adap->dev->priv; 138 struct digitv_state *st = adap->dev->priv;
139 139
140 if ((adap->fe = dvb_attach(mt352_attach, &digitv_mt352_config, &adap->dev->i2c_adap)) != NULL) { 140 if ((adap->fe[0] = dvb_attach(mt352_attach, &digitv_mt352_config, &adap->dev->i2c_adap)) != NULL) {
141 st->is_nxt6000 = 0; 141 st->is_nxt6000 = 0;
142 return 0; 142 return 0;
143 } 143 }
144 if ((adap->fe = dvb_attach(nxt6000_attach, &digitv_nxt6000_config, &adap->dev->i2c_adap)) != NULL) { 144 if ((adap->fe[0] = dvb_attach(nxt6000_attach, &digitv_nxt6000_config, &adap->dev->i2c_adap)) != NULL) {
145 st->is_nxt6000 = 1; 145 st->is_nxt6000 = 1;
146 return 0; 146 return 0;
147 } 147 }
@@ -152,11 +152,11 @@ static int digitv_tuner_attach(struct dvb_usb_adapter *adap)
152{ 152{
153 struct digitv_state *st = adap->dev->priv; 153 struct digitv_state *st = adap->dev->priv;
154 154
155 if (!dvb_attach(dvb_pll_attach, adap->fe, 0x60, NULL, DVB_PLL_TDED4)) 155 if (!dvb_attach(dvb_pll_attach, adap->fe[0], 0x60, NULL, DVB_PLL_TDED4))
156 return -ENODEV; 156 return -ENODEV;
157 157
158 if (st->is_nxt6000) 158 if (st->is_nxt6000)
159 adap->fe->ops.tuner_ops.set_params = digitv_nxt6000_tuner_set_params; 159 adap->fe[0]->ops.tuner_ops.set_params = digitv_nxt6000_tuner_set_params;
160 160
161 return 0; 161 return 0;
162} 162}
diff --git a/drivers/media/dvb/dvb-usb/dtt200u.c b/drivers/media/dvb/dvb-usb/dtt200u.c
index ecd86eca2548..ea2a46ffbb0a 100644
--- a/drivers/media/dvb/dvb-usb/dtt200u.c
+++ b/drivers/media/dvb/dvb-usb/dtt200u.c
@@ -90,7 +90,7 @@ static int dtt200u_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
90 90
91static int dtt200u_frontend_attach(struct dvb_usb_adapter *adap) 91static int dtt200u_frontend_attach(struct dvb_usb_adapter *adap)
92{ 92{
93 adap->fe = dtt200u_fe_attach(adap->dev); 93 adap->fe[0] = dtt200u_fe_attach(adap->dev);
94 return 0; 94 return 0;
95} 95}
96 96
diff --git a/drivers/media/dvb/dvb-usb/dtv5100.c b/drivers/media/dvb/dvb-usb/dtv5100.c
index 078ce92ca436..75ed55cdd8a0 100644
--- a/drivers/media/dvb/dvb-usb/dtv5100.c
+++ b/drivers/media/dvb/dvb-usb/dtv5100.c
@@ -115,13 +115,13 @@ static struct zl10353_config dtv5100_zl10353_config = {
115 115
116static int dtv5100_frontend_attach(struct dvb_usb_adapter *adap) 116static int dtv5100_frontend_attach(struct dvb_usb_adapter *adap)
117{ 117{
118 adap->fe = dvb_attach(zl10353_attach, &dtv5100_zl10353_config, 118 adap->fe[0] = dvb_attach(zl10353_attach, &dtv5100_zl10353_config,
119 &adap->dev->i2c_adap); 119 &adap->dev->i2c_adap);
120 if (adap->fe == NULL) 120 if (adap->fe[0] == NULL)
121 return -EIO; 121 return -EIO;
122 122
123 /* disable i2c gate, or it won't work... is this safe? */ 123 /* disable i2c gate, or it won't work... is this safe? */
124 adap->fe->ops.i2c_gate_ctrl = NULL; 124 adap->fe[0]->ops.i2c_gate_ctrl = NULL;
125 125
126 return 0; 126 return 0;
127} 127}
@@ -133,7 +133,7 @@ static struct qt1010_config dtv5100_qt1010_config = {
133static int dtv5100_tuner_attach(struct dvb_usb_adapter *adap) 133static int dtv5100_tuner_attach(struct dvb_usb_adapter *adap)
134{ 134{
135 return dvb_attach(qt1010_attach, 135 return dvb_attach(qt1010_attach,
136 adap->fe, &adap->dev->i2c_adap, 136 adap->fe[0], &adap->dev->i2c_adap,
137 &dtv5100_qt1010_config) == NULL ? -ENODEV : 0; 137 &dtv5100_qt1010_config) == NULL ? -ENODEV : 0;
138} 138}
139 139
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c b/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c
index b3cb626ed56e..d8c0bd9107f3 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c
@@ -186,14 +186,14 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
186 } 186 }
187 187
188 /* re-assign sleep and wakeup functions */ 188 /* re-assign sleep and wakeup functions */
189 if (adap->props.frontend_attach(adap) == 0 && adap->fe != NULL) { 189 if (adap->props.frontend_attach(adap) == 0 && adap->fe[0] != NULL) {
190 adap->fe_init = adap->fe->ops.init; adap->fe->ops.init = dvb_usb_fe_wakeup; 190 adap->fe_init = adap->fe[0]->ops.init; adap->fe[0]->ops.init = dvb_usb_fe_wakeup;
191 adap->fe_sleep = adap->fe->ops.sleep; adap->fe->ops.sleep = dvb_usb_fe_sleep; 191 adap->fe_sleep = adap->fe[0]->ops.sleep; adap->fe[0]->ops.sleep = dvb_usb_fe_sleep;
192 192
193 if (dvb_register_frontend(&adap->dvb_adap, adap->fe)) { 193 if (dvb_register_frontend(&adap->dvb_adap, adap->fe[0])) {
194 err("Frontend registration failed."); 194 err("Frontend registration failed.");
195 dvb_frontend_detach(adap->fe); 195 dvb_frontend_detach(adap->fe[0]);
196 adap->fe = NULL; 196 adap->fe[0] = NULL;
197 return -ENODEV; 197 return -ENODEV;
198 } 198 }
199 199
@@ -208,9 +208,9 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)
208 208
209int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap) 209int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap)
210{ 210{
211 if (adap->fe != NULL) { 211 if (adap->fe[0] != NULL) {
212 dvb_unregister_frontend(adap->fe); 212 dvb_unregister_frontend(adap->fe[0]);
213 dvb_frontend_detach(adap->fe); 213 dvb_frontend_detach(adap->fe[0]);
214 } 214 }
215 return 0; 215 return 0;
216} 216}
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb.h b/drivers/media/dvb/dvb-usb/dvb-usb.h
index 7d35d078342b..2e57bffad3e3 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb.h
+++ b/drivers/media/dvb/dvb-usb/dvb-usb.h
@@ -363,7 +363,7 @@ struct dvb_usb_adapter {
363 struct dmxdev dmxdev; 363 struct dmxdev dmxdev;
364 struct dvb_demux demux; 364 struct dvb_demux demux;
365 struct dvb_net dvb_net; 365 struct dvb_net dvb_net;
366 struct dvb_frontend *fe; 366 struct dvb_frontend *fe[1];
367 int max_feed_count; 367 int max_feed_count;
368 368
369 int (*fe_init) (struct dvb_frontend *); 369 int (*fe_init) (struct dvb_frontend *);
diff --git a/drivers/media/dvb/dvb-usb/dw2102.c b/drivers/media/dvb/dvb-usb/dw2102.c
index 058b2318abed..eb5dff59251d 100644
--- a/drivers/media/dvb/dvb-usb/dw2102.c
+++ b/drivers/media/dvb/dvb-usb/dw2102.c
@@ -992,18 +992,18 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
992 struct dvb_tuner_ops *tuner_ops = NULL; 992 struct dvb_tuner_ops *tuner_ops = NULL;
993 993
994 if (demod_probe & 4) { 994 if (demod_probe & 4) {
995 d->fe = dvb_attach(stv0900_attach, &dw2104a_stv0900_config, 995 d->fe[0] = dvb_attach(stv0900_attach, &dw2104a_stv0900_config,
996 &d->dev->i2c_adap, 0); 996 &d->dev->i2c_adap, 0);
997 if (d->fe != NULL) { 997 if (d->fe[0] != NULL) {
998 if (dvb_attach(stb6100_attach, d->fe, 998 if (dvb_attach(stb6100_attach, d->fe[0],
999 &dw2104a_stb6100_config, 999 &dw2104a_stb6100_config,
1000 &d->dev->i2c_adap)) { 1000 &d->dev->i2c_adap)) {
1001 tuner_ops = &d->fe->ops.tuner_ops; 1001 tuner_ops = &d->fe[0]->ops.tuner_ops;
1002 tuner_ops->set_frequency = stb6100_set_freq; 1002 tuner_ops->set_frequency = stb6100_set_freq;
1003 tuner_ops->get_frequency = stb6100_get_freq; 1003 tuner_ops->get_frequency = stb6100_get_freq;
1004 tuner_ops->set_bandwidth = stb6100_set_bandw; 1004 tuner_ops->set_bandwidth = stb6100_set_bandw;
1005 tuner_ops->get_bandwidth = stb6100_get_bandw; 1005 tuner_ops->get_bandwidth = stb6100_get_bandw;
1006 d->fe->ops.set_voltage = dw210x_set_voltage; 1006 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1007 info("Attached STV0900+STB6100!\n"); 1007 info("Attached STV0900+STB6100!\n");
1008 return 0; 1008 return 0;
1009 } 1009 }
@@ -1011,13 +1011,13 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
1011 } 1011 }
1012 1012
1013 if (demod_probe & 2) { 1013 if (demod_probe & 2) {
1014 d->fe = dvb_attach(stv0900_attach, &dw2104_stv0900_config, 1014 d->fe[0] = dvb_attach(stv0900_attach, &dw2104_stv0900_config,
1015 &d->dev->i2c_adap, 0); 1015 &d->dev->i2c_adap, 0);
1016 if (d->fe != NULL) { 1016 if (d->fe[0] != NULL) {
1017 if (dvb_attach(stv6110_attach, d->fe, 1017 if (dvb_attach(stv6110_attach, d->fe[0],
1018 &dw2104_stv6110_config, 1018 &dw2104_stv6110_config,
1019 &d->dev->i2c_adap)) { 1019 &d->dev->i2c_adap)) {
1020 d->fe->ops.set_voltage = dw210x_set_voltage; 1020 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1021 info("Attached STV0900+STV6110A!\n"); 1021 info("Attached STV0900+STV6110A!\n");
1022 return 0; 1022 return 0;
1023 } 1023 }
@@ -1025,19 +1025,19 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
1025 } 1025 }
1026 1026
1027 if (demod_probe & 1) { 1027 if (demod_probe & 1) {
1028 d->fe = dvb_attach(cx24116_attach, &dw2104_config, 1028 d->fe[0] = dvb_attach(cx24116_attach, &dw2104_config,
1029 &d->dev->i2c_adap); 1029 &d->dev->i2c_adap);
1030 if (d->fe != NULL) { 1030 if (d->fe[0] != NULL) {
1031 d->fe->ops.set_voltage = dw210x_set_voltage; 1031 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1032 info("Attached cx24116!\n"); 1032 info("Attached cx24116!\n");
1033 return 0; 1033 return 0;
1034 } 1034 }
1035 } 1035 }
1036 1036
1037 d->fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config, 1037 d->fe[0] = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1038 &d->dev->i2c_adap); 1038 &d->dev->i2c_adap);
1039 if (d->fe != NULL) { 1039 if (d->fe[0] != NULL) {
1040 d->fe->ops.set_voltage = dw210x_set_voltage; 1040 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1041 info("Attached DS3000!\n"); 1041 info("Attached DS3000!\n");
1042 return 0; 1042 return 0;
1043 } 1043 }
@@ -1053,22 +1053,22 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter *d)
1053{ 1053{
1054 if (dw2102_properties.i2c_algo == &dw2102_serit_i2c_algo) { 1054 if (dw2102_properties.i2c_algo == &dw2102_serit_i2c_algo) {
1055 /*dw2102_properties.adapter->tuner_attach = NULL;*/ 1055 /*dw2102_properties.adapter->tuner_attach = NULL;*/
1056 d->fe = dvb_attach(si21xx_attach, &serit_sp1511lhb_config, 1056 d->fe[0] = dvb_attach(si21xx_attach, &serit_sp1511lhb_config,
1057 &d->dev->i2c_adap); 1057 &d->dev->i2c_adap);
1058 if (d->fe != NULL) { 1058 if (d->fe[0] != NULL) {
1059 d->fe->ops.set_voltage = dw210x_set_voltage; 1059 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1060 info("Attached si21xx!\n"); 1060 info("Attached si21xx!\n");
1061 return 0; 1061 return 0;
1062 } 1062 }
1063 } 1063 }
1064 1064
1065 if (dw2102_properties.i2c_algo == &dw2102_earda_i2c_algo) { 1065 if (dw2102_properties.i2c_algo == &dw2102_earda_i2c_algo) {
1066 d->fe = dvb_attach(stv0288_attach, &earda_config, 1066 d->fe[0] = dvb_attach(stv0288_attach, &earda_config,
1067 &d->dev->i2c_adap); 1067 &d->dev->i2c_adap);
1068 if (d->fe != NULL) { 1068 if (d->fe[0] != NULL) {
1069 if (dvb_attach(stb6000_attach, d->fe, 0x61, 1069 if (dvb_attach(stb6000_attach, d->fe[0], 0x61,
1070 &d->dev->i2c_adap)) { 1070 &d->dev->i2c_adap)) {
1071 d->fe->ops.set_voltage = dw210x_set_voltage; 1071 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1072 info("Attached stv0288!\n"); 1072 info("Attached stv0288!\n");
1073 return 0; 1073 return 0;
1074 } 1074 }
@@ -1077,10 +1077,10 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter *d)
1077 1077
1078 if (dw2102_properties.i2c_algo == &dw2102_i2c_algo) { 1078 if (dw2102_properties.i2c_algo == &dw2102_i2c_algo) {
1079 /*dw2102_properties.adapter->tuner_attach = dw2102_tuner_attach;*/ 1079 /*dw2102_properties.adapter->tuner_attach = dw2102_tuner_attach;*/
1080 d->fe = dvb_attach(stv0299_attach, &sharp_z0194a_config, 1080 d->fe[0] = dvb_attach(stv0299_attach, &sharp_z0194a_config,
1081 &d->dev->i2c_adap); 1081 &d->dev->i2c_adap);
1082 if (d->fe != NULL) { 1082 if (d->fe[0] != NULL) {
1083 d->fe->ops.set_voltage = dw210x_set_voltage; 1083 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1084 info("Attached stv0299!\n"); 1084 info("Attached stv0299!\n");
1085 return 0; 1085 return 0;
1086 } 1086 }
@@ -1090,9 +1090,9 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter *d)
1090 1090
1091static int dw3101_frontend_attach(struct dvb_usb_adapter *d) 1091static int dw3101_frontend_attach(struct dvb_usb_adapter *d)
1092{ 1092{
1093 d->fe = dvb_attach(tda10023_attach, &dw3101_tda10023_config, 1093 d->fe[0] = dvb_attach(tda10023_attach, &dw3101_tda10023_config,
1094 &d->dev->i2c_adap, 0x48); 1094 &d->dev->i2c_adap, 0x48);
1095 if (d->fe != NULL) { 1095 if (d->fe[0] != NULL) {
1096 info("Attached tda10023!\n"); 1096 info("Attached tda10023!\n");
1097 return 0; 1097 return 0;
1098 } 1098 }
@@ -1101,12 +1101,12 @@ static int dw3101_frontend_attach(struct dvb_usb_adapter *d)
1101 1101
1102static int zl100313_frontend_attach(struct dvb_usb_adapter *d) 1102static int zl100313_frontend_attach(struct dvb_usb_adapter *d)
1103{ 1103{
1104 d->fe = dvb_attach(mt312_attach, &zl313_config, 1104 d->fe[0] = dvb_attach(mt312_attach, &zl313_config,
1105 &d->dev->i2c_adap); 1105 &d->dev->i2c_adap);
1106 if (d->fe != NULL) { 1106 if (d->fe[0] != NULL) {
1107 if (dvb_attach(zl10039_attach, d->fe, 0x60, 1107 if (dvb_attach(zl10039_attach, d->fe[0], 0x60,
1108 &d->dev->i2c_adap)) { 1108 &d->dev->i2c_adap)) {
1109 d->fe->ops.set_voltage = dw210x_set_voltage; 1109 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1110 info("Attached zl100313+zl10039!\n"); 1110 info("Attached zl100313+zl10039!\n");
1111 return 0; 1111 return 0;
1112 } 1112 }
@@ -1119,16 +1119,16 @@ static int stv0288_frontend_attach(struct dvb_usb_adapter *d)
1119{ 1119{
1120 u8 obuf[] = {7, 1}; 1120 u8 obuf[] = {7, 1};
1121 1121
1122 d->fe = dvb_attach(stv0288_attach, &earda_config, 1122 d->fe[0] = dvb_attach(stv0288_attach, &earda_config,
1123 &d->dev->i2c_adap); 1123 &d->dev->i2c_adap);
1124 1124
1125 if (d->fe == NULL) 1125 if (d->fe[0] == NULL)
1126 return -EIO; 1126 return -EIO;
1127 1127
1128 if (NULL == dvb_attach(stb6000_attach, d->fe, 0x61, &d->dev->i2c_adap)) 1128 if (NULL == dvb_attach(stb6000_attach, d->fe[0], 0x61, &d->dev->i2c_adap))
1129 return -EIO; 1129 return -EIO;
1130 1130
1131 d->fe->ops.set_voltage = dw210x_set_voltage; 1131 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1132 1132
1133 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); 1133 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
1134 1134
@@ -1143,14 +1143,14 @@ static int ds3000_frontend_attach(struct dvb_usb_adapter *d)
1143 struct s6x0_state *st = (struct s6x0_state *)d->dev->priv; 1143 struct s6x0_state *st = (struct s6x0_state *)d->dev->priv;
1144 u8 obuf[] = {7, 1}; 1144 u8 obuf[] = {7, 1};
1145 1145
1146 d->fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config, 1146 d->fe[0] = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
1147 &d->dev->i2c_adap); 1147 &d->dev->i2c_adap);
1148 1148
1149 if (d->fe == NULL) 1149 if (d->fe[0] == NULL)
1150 return -EIO; 1150 return -EIO;
1151 1151
1152 st->old_set_voltage = d->fe->ops.set_voltage; 1152 st->old_set_voltage = d->fe[0]->ops.set_voltage;
1153 d->fe->ops.set_voltage = s660_set_voltage; 1153 d->fe[0]->ops.set_voltage = s660_set_voltage;
1154 1154
1155 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); 1155 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
1156 1156
@@ -1163,12 +1163,12 @@ static int prof_7500_frontend_attach(struct dvb_usb_adapter *d)
1163{ 1163{
1164 u8 obuf[] = {7, 1}; 1164 u8 obuf[] = {7, 1};
1165 1165
1166 d->fe = dvb_attach(stv0900_attach, &prof_7500_stv0900_config, 1166 d->fe[0] = dvb_attach(stv0900_attach, &prof_7500_stv0900_config,
1167 &d->dev->i2c_adap, 0); 1167 &d->dev->i2c_adap, 0);
1168 if (d->fe == NULL) 1168 if (d->fe[0] == NULL)
1169 return -EIO; 1169 return -EIO;
1170 1170
1171 d->fe->ops.set_voltage = dw210x_set_voltage; 1171 d->fe[0]->ops.set_voltage = dw210x_set_voltage;
1172 1172
1173 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); 1173 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
1174 1174
@@ -1204,9 +1204,9 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d)
1204 if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) 1204 if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0)
1205 err("command 0x51 transfer failed."); 1205 err("command 0x51 transfer failed.");
1206 1206
1207 d->fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, 1207 d->fe[0] = dvb_attach(ds3000_attach, &su3000_ds3000_config,
1208 &d->dev->i2c_adap); 1208 &d->dev->i2c_adap);
1209 if (d->fe == NULL) 1209 if (d->fe[0] == NULL)
1210 return -EIO; 1210 return -EIO;
1211 1211
1212 info("Attached DS3000!\n"); 1212 info("Attached DS3000!\n");
@@ -1216,14 +1216,14 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d)
1216 1216
1217static int dw2102_tuner_attach(struct dvb_usb_adapter *adap) 1217static int dw2102_tuner_attach(struct dvb_usb_adapter *adap)
1218{ 1218{
1219 dvb_attach(dvb_pll_attach, adap->fe, 0x60, 1219 dvb_attach(dvb_pll_attach, adap->fe[0], 0x60,
1220 &adap->dev->i2c_adap, DVB_PLL_OPERA1); 1220 &adap->dev->i2c_adap, DVB_PLL_OPERA1);
1221 return 0; 1221 return 0;
1222} 1222}
1223 1223
1224static int dw3101_tuner_attach(struct dvb_usb_adapter *adap) 1224static int dw3101_tuner_attach(struct dvb_usb_adapter *adap)
1225{ 1225{
1226 dvb_attach(dvb_pll_attach, adap->fe, 0x60, 1226 dvb_attach(dvb_pll_attach, adap->fe[0], 0x60,
1227 &adap->dev->i2c_adap, DVB_PLL_TUA6034); 1227 &adap->dev->i2c_adap, DVB_PLL_TUA6034);
1228 1228
1229 return 0; 1229 return 0;
diff --git a/drivers/media/dvb/dvb-usb/ec168.c b/drivers/media/dvb/dvb-usb/ec168.c
index 1ba3e5dbee10..581bdfc0b1ff 100644
--- a/drivers/media/dvb/dvb-usb/ec168.c
+++ b/drivers/media/dvb/dvb-usb/ec168.c
@@ -200,9 +200,9 @@ static struct ec100_config ec168_ec100_config = {
200static int ec168_ec100_frontend_attach(struct dvb_usb_adapter *adap) 200static int ec168_ec100_frontend_attach(struct dvb_usb_adapter *adap)
201{ 201{
202 deb_info("%s:\n", __func__); 202 deb_info("%s:\n", __func__);
203 adap->fe = dvb_attach(ec100_attach, &ec168_ec100_config, 203 adap->fe[0] = dvb_attach(ec100_attach, &ec168_ec100_config,
204 &adap->dev->i2c_adap); 204 &adap->dev->i2c_adap);
205 if (adap->fe == NULL) 205 if (adap->fe[0] == NULL)
206 return -ENODEV; 206 return -ENODEV;
207 207
208 return 0; 208 return 0;
@@ -228,7 +228,7 @@ static struct mxl5005s_config ec168_mxl5003s_config = {
228static int ec168_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap) 228static int ec168_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap)
229{ 229{
230 deb_info("%s:\n", __func__); 230 deb_info("%s:\n", __func__);
231 return dvb_attach(mxl5005s_attach, adap->fe, &adap->dev->i2c_adap, 231 return dvb_attach(mxl5005s_attach, adap->fe[0], &adap->dev->i2c_adap,
232 &ec168_mxl5003s_config) == NULL ? -ENODEV : 0; 232 &ec168_mxl5003s_config) == NULL ? -ENODEV : 0;
233} 233}
234 234
diff --git a/drivers/media/dvb/dvb-usb/friio.c b/drivers/media/dvb/dvb-usb/friio.c
index 76159aed9bb0..0e4b559720ea 100644
--- a/drivers/media/dvb/dvb-usb/friio.c
+++ b/drivers/media/dvb/dvb-usb/friio.c
@@ -403,8 +403,8 @@ static int friio_frontend_attach(struct dvb_usb_adapter *adap)
403 if (friio_initialize(adap->dev) < 0) 403 if (friio_initialize(adap->dev) < 0)
404 return -EIO; 404 return -EIO;
405 405
406 adap->fe = jdvbt90502_attach(adap->dev); 406 adap->fe[0] = jdvbt90502_attach(adap->dev);
407 if (adap->fe == NULL) 407 if (adap->fe[0] == NULL)
408 return -EIO; 408 return -EIO;
409 409
410 return 0; 410 return 0;
diff --git a/drivers/media/dvb/dvb-usb/gl861.c b/drivers/media/dvb/dvb-usb/gl861.c
index 6f596ed41761..fba24ed2e843 100644
--- a/drivers/media/dvb/dvb-usb/gl861.c
+++ b/drivers/media/dvb/dvb-usb/gl861.c
@@ -103,9 +103,9 @@ static struct zl10353_config gl861_zl10353_config = {
103static int gl861_frontend_attach(struct dvb_usb_adapter *adap) 103static int gl861_frontend_attach(struct dvb_usb_adapter *adap)
104{ 104{
105 105
106 adap->fe = dvb_attach(zl10353_attach, &gl861_zl10353_config, 106 adap->fe[0] = dvb_attach(zl10353_attach, &gl861_zl10353_config,
107 &adap->dev->i2c_adap); 107 &adap->dev->i2c_adap);
108 if (adap->fe == NULL) 108 if (adap->fe[0] == NULL)
109 return -EIO; 109 return -EIO;
110 110
111 return 0; 111 return 0;
@@ -118,7 +118,7 @@ static struct qt1010_config gl861_qt1010_config = {
118static int gl861_tuner_attach(struct dvb_usb_adapter *adap) 118static int gl861_tuner_attach(struct dvb_usb_adapter *adap)
119{ 119{
120 return dvb_attach(qt1010_attach, 120 return dvb_attach(qt1010_attach,
121 adap->fe, &adap->dev->i2c_adap, 121 adap->fe[0], &adap->dev->i2c_adap,
122 &gl861_qt1010_config) == NULL ? -ENODEV : 0; 122 &gl861_qt1010_config) == NULL ? -ENODEV : 0;
123} 123}
124 124
diff --git a/drivers/media/dvb/dvb-usb/gp8psk.c b/drivers/media/dvb/dvb-usb/gp8psk.c
index 1cb3d9a66e02..f254e13c35be 100644
--- a/drivers/media/dvb/dvb-usb/gp8psk.c
+++ b/drivers/media/dvb/dvb-usb/gp8psk.c
@@ -230,7 +230,7 @@ static int gp8psk_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
230 230
231static int gp8psk_frontend_attach(struct dvb_usb_adapter *adap) 231static int gp8psk_frontend_attach(struct dvb_usb_adapter *adap)
232{ 232{
233 adap->fe = gp8psk_fe_attach(adap->dev); 233 adap->fe[0] = gp8psk_fe_attach(adap->dev);
234 return 0; 234 return 0;
235} 235}
236 236
diff --git a/drivers/media/dvb/dvb-usb/lmedm04.c b/drivers/media/dvb/dvb-usb/lmedm04.c
index 37b146961ae2..ef5911a2d342 100644
--- a/drivers/media/dvb/dvb-usb/lmedm04.c
+++ b/drivers/media/dvb/dvb-usb/lmedm04.c
@@ -941,7 +941,7 @@ static int lme_name(struct dvb_usb_adapter *adap)
941 const char *desc = adap->dev->desc->name; 941 const char *desc = adap->dev->desc->name;
942 char *fe_name[] = {"", " LG TDQY-P001F", " SHARP:BS2F7HZ7395", 942 char *fe_name[] = {"", " LG TDQY-P001F", " SHARP:BS2F7HZ7395",
943 " SHARP:BS2F7HZ0194"}; 943 " SHARP:BS2F7HZ0194"};
944 char *name = adap->fe->ops.info.name; 944 char *name = adap->fe[0]->ops.info.name;
945 945
946 strlcpy(name, desc, 128); 946 strlcpy(name, desc, 128);
947 strlcat(name, fe_name[st->tuner_config], 128); 947 strlcat(name, fe_name[st->tuner_config], 128);
@@ -958,10 +958,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
958 st->i2c_talk_onoff = 1; 958 st->i2c_talk_onoff = 1;
959 959
960 st->i2c_gate = 4; 960 st->i2c_gate = 4;
961 adap->fe = dvb_attach(tda10086_attach, &tda10086_config, 961 adap->fe[0] = dvb_attach(tda10086_attach, &tda10086_config,
962 &adap->dev->i2c_adap); 962 &adap->dev->i2c_adap);
963 963
964 if (adap->fe) { 964 if (adap->fe[0]) {
965 info("TUN Found Frontend TDA10086"); 965 info("TUN Found Frontend TDA10086");
966 st->i2c_tuner_gate_w = 4; 966 st->i2c_tuner_gate_w = 4;
967 st->i2c_tuner_gate_r = 4; 967 st->i2c_tuner_gate_r = 4;
@@ -975,9 +975,9 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
975 } 975 }
976 976
977 st->i2c_gate = 4; 977 st->i2c_gate = 4;
978 adap->fe = dvb_attach(stv0299_attach, &sharp_z0194_config, 978 adap->fe[0] = dvb_attach(stv0299_attach, &sharp_z0194_config,
979 &adap->dev->i2c_adap); 979 &adap->dev->i2c_adap);
980 if (adap->fe) { 980 if (adap->fe[0]) {
981 info("FE Found Stv0299"); 981 info("FE Found Stv0299");
982 st->i2c_tuner_gate_w = 4; 982 st->i2c_tuner_gate_w = 4;
983 st->i2c_tuner_gate_r = 5; 983 st->i2c_tuner_gate_r = 5;
@@ -991,9 +991,9 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
991 } 991 }
992 992
993 st->i2c_gate = 5; 993 st->i2c_gate = 5;
994 adap->fe = dvb_attach(stv0288_attach, &lme_config, 994 adap->fe[0] = dvb_attach(stv0288_attach, &lme_config,
995 &adap->dev->i2c_adap); 995 &adap->dev->i2c_adap);
996 if (adap->fe) { 996 if (adap->fe[0]) {
997 info("FE Found Stv0288"); 997 info("FE Found Stv0288");
998 st->i2c_tuner_gate_w = 4; 998 st->i2c_tuner_gate_w = 4;
999 st->i2c_tuner_gate_r = 5; 999 st->i2c_tuner_gate_r = 5;
@@ -1010,15 +1010,15 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap)
1010 1010
1011 1011
1012end: if (ret) { 1012end: if (ret) {
1013 if (adap->fe) { 1013 if (adap->fe[0]) {
1014 dvb_frontend_detach(adap->fe); 1014 dvb_frontend_detach(adap->fe[0]);
1015 adap->fe = NULL; 1015 adap->fe[0] = NULL;
1016 } 1016 }
1017 adap->dev->props.rc.core.rc_codes = NULL; 1017 adap->dev->props.rc.core.rc_codes = NULL;
1018 return -ENODEV; 1018 return -ENODEV;
1019 } 1019 }
1020 1020
1021 adap->fe->ops.set_voltage = dm04_lme2510_set_voltage; 1021 adap->fe[0]->ops.set_voltage = dm04_lme2510_set_voltage;
1022 ret = lme_name(adap); 1022 ret = lme_name(adap);
1023 return ret; 1023 return ret;
1024} 1024}
@@ -1031,17 +1031,17 @@ static int dm04_lme2510_tuner(struct dvb_usb_adapter *adap)
1031 1031
1032 switch (st->tuner_config) { 1032 switch (st->tuner_config) {
1033 case TUNER_LG: 1033 case TUNER_LG:
1034 if (dvb_attach(tda826x_attach, adap->fe, 0xc0, 1034 if (dvb_attach(tda826x_attach, adap->fe[0], 0xc0,
1035 &adap->dev->i2c_adap, 1)) 1035 &adap->dev->i2c_adap, 1))
1036 ret = st->tuner_config; 1036 ret = st->tuner_config;
1037 break; 1037 break;
1038 case TUNER_S7395: 1038 case TUNER_S7395:
1039 if (dvb_attach(ix2505v_attach , adap->fe, &lme_tuner, 1039 if (dvb_attach(ix2505v_attach , adap->fe[0], &lme_tuner,
1040 &adap->dev->i2c_adap)) 1040 &adap->dev->i2c_adap))
1041 ret = st->tuner_config; 1041 ret = st->tuner_config;
1042 break; 1042 break;
1043 case TUNER_S0194: 1043 case TUNER_S0194:
1044 if (dvb_attach(dvb_pll_attach , adap->fe, 0xc0, 1044 if (dvb_attach(dvb_pll_attach , adap->fe[0], 0xc0,
1045 &adap->dev->i2c_adap, DVB_PLL_OPERA1)) 1045 &adap->dev->i2c_adap, DVB_PLL_OPERA1))
1046 ret = st->tuner_config; 1046 ret = st->tuner_config;
1047 break; 1047 break;
diff --git a/drivers/media/dvb/dvb-usb/m920x.c b/drivers/media/dvb/dvb-usb/m920x.c
index 9456792f219b..ed5c161c1c4b 100644
--- a/drivers/media/dvb/dvb-usb/m920x.c
+++ b/drivers/media/dvb/dvb-usb/m920x.c
@@ -501,7 +501,7 @@ static int m920x_mt352_frontend_attach(struct dvb_usb_adapter *adap)
501{ 501{
502 deb("%s\n",__func__); 502 deb("%s\n",__func__);
503 503
504 if ((adap->fe = dvb_attach(mt352_attach, 504 if ((adap->fe[0] = dvb_attach(mt352_attach,
505 &m920x_mt352_config, 505 &m920x_mt352_config,
506 &adap->dev->i2c_adap)) == NULL) 506 &adap->dev->i2c_adap)) == NULL)
507 return -EIO; 507 return -EIO;
@@ -513,7 +513,7 @@ static int m920x_tda10046_08_frontend_attach(struct dvb_usb_adapter *adap)
513{ 513{
514 deb("%s\n",__func__); 514 deb("%s\n",__func__);
515 515
516 if ((adap->fe = dvb_attach(tda10046_attach, 516 if ((adap->fe[0] = dvb_attach(tda10046_attach,
517 &m920x_tda10046_08_config, 517 &m920x_tda10046_08_config,
518 &adap->dev->i2c_adap)) == NULL) 518 &adap->dev->i2c_adap)) == NULL)
519 return -EIO; 519 return -EIO;
@@ -525,7 +525,7 @@ static int m920x_tda10046_0b_frontend_attach(struct dvb_usb_adapter *adap)
525{ 525{
526 deb("%s\n",__func__); 526 deb("%s\n",__func__);
527 527
528 if ((adap->fe = dvb_attach(tda10046_attach, 528 if ((adap->fe[0] = dvb_attach(tda10046_attach,
529 &m920x_tda10046_0b_config, 529 &m920x_tda10046_0b_config,
530 &adap->dev->i2c_adap)) == NULL) 530 &adap->dev->i2c_adap)) == NULL)
531 return -EIO; 531 return -EIO;
@@ -537,7 +537,7 @@ static int m920x_qt1010_tuner_attach(struct dvb_usb_adapter *adap)
537{ 537{
538 deb("%s\n",__func__); 538 deb("%s\n",__func__);
539 539
540 if (dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, &m920x_qt1010_config) == NULL) 540 if (dvb_attach(qt1010_attach, adap->fe[0], &adap->dev->i2c_adap, &m920x_qt1010_config) == NULL)
541 return -ENODEV; 541 return -ENODEV;
542 542
543 return 0; 543 return 0;
@@ -547,7 +547,7 @@ static int m920x_tda8275_60_tuner_attach(struct dvb_usb_adapter *adap)
547{ 547{
548 deb("%s\n",__func__); 548 deb("%s\n",__func__);
549 549
550 if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, NULL) == NULL) 550 if (dvb_attach(tda827x_attach, adap->fe[0], 0x60, &adap->dev->i2c_adap, NULL) == NULL)
551 return -ENODEV; 551 return -ENODEV;
552 552
553 return 0; 553 return 0;
@@ -557,7 +557,7 @@ static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap)
557{ 557{
558 deb("%s\n",__func__); 558 deb("%s\n",__func__);
559 559
560 if (dvb_attach(tda827x_attach, adap->fe, 0x61, &adap->dev->i2c_adap, NULL) == NULL) 560 if (dvb_attach(tda827x_attach, adap->fe[0], 0x61, &adap->dev->i2c_adap, NULL) == NULL)
561 return -ENODEV; 561 return -ENODEV;
562 562
563 return 0; 563 return 0;
@@ -565,7 +565,7 @@ static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap)
565 565
566static int m920x_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap) 566static int m920x_fmd1216me_tuner_attach(struct dvb_usb_adapter *adap)
567{ 567{
568 dvb_attach(simple_tuner_attach, adap->fe, 568 dvb_attach(simple_tuner_attach, adap->fe[0],
569 &adap->dev->i2c_adap, 0x61, 569 &adap->dev->i2c_adap, 0x61,
570 TUNER_PHILIPS_FMD1216ME_MK3); 570 TUNER_PHILIPS_FMD1216ME_MK3);
571 return 0; 571 return 0;
diff --git a/drivers/media/dvb/dvb-usb/opera1.c b/drivers/media/dvb/dvb-usb/opera1.c
index 2e4fab7215f5..170b1ef16fac 100644
--- a/drivers/media/dvb/dvb-usb/opera1.c
+++ b/drivers/media/dvb/dvb-usb/opera1.c
@@ -263,10 +263,10 @@ static struct stv0299_config opera1_stv0299_config = {
263 263
264static int opera1_frontend_attach(struct dvb_usb_adapter *d) 264static int opera1_frontend_attach(struct dvb_usb_adapter *d)
265{ 265{
266 if ((d->fe = 266 if ((d->fe[0] =
267 dvb_attach(stv0299_attach, &opera1_stv0299_config, 267 dvb_attach(stv0299_attach, &opera1_stv0299_config,
268 &d->dev->i2c_adap)) != NULL) { 268 &d->dev->i2c_adap)) != NULL) {
269 d->fe->ops.set_voltage = opera1_set_voltage; 269 d->fe[0]->ops.set_voltage = opera1_set_voltage;
270 return 0; 270 return 0;
271 } 271 }
272 info("not attached stv0299"); 272 info("not attached stv0299");
@@ -276,7 +276,7 @@ static int opera1_frontend_attach(struct dvb_usb_adapter *d)
276static int opera1_tuner_attach(struct dvb_usb_adapter *adap) 276static int opera1_tuner_attach(struct dvb_usb_adapter *adap)
277{ 277{
278 dvb_attach( 278 dvb_attach(
279 dvb_pll_attach, adap->fe, 0xc0>>1, 279 dvb_pll_attach, adap->fe[0], 0xc0>>1,
280 &adap->dev->i2c_adap, DVB_PLL_OPERA1 280 &adap->dev->i2c_adap, DVB_PLL_OPERA1
281 ); 281 );
282 return 0; 282 return 0;
diff --git a/drivers/media/dvb/dvb-usb/technisat-usb2.c b/drivers/media/dvb/dvb-usb/technisat-usb2.c
index 473b95ed4d52..2a89d1ef89a3 100644
--- a/drivers/media/dvb/dvb-usb/technisat-usb2.c
+++ b/drivers/media/dvb/dvb-usb/technisat-usb2.c
@@ -292,7 +292,7 @@ static void technisat_usb2_green_led_control(struct work_struct *work)
292{ 292{
293 struct technisat_usb2_state *state = 293 struct technisat_usb2_state *state =
294 container_of(work, struct technisat_usb2_state, green_led_work.work); 294 container_of(work, struct technisat_usb2_state, green_led_work.work);
295 struct dvb_frontend *fe = state->dev->adapter[0].fe; 295 struct dvb_frontend *fe = state->dev->adapter[0].fe[0];
296 296
297 if (state->power_state == 0) 297 if (state->power_state == 0)
298 goto schedule; 298 goto schedule;
@@ -505,14 +505,14 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)
505 struct usb_device *udev = a->dev->udev; 505 struct usb_device *udev = a->dev->udev;
506 int ret; 506 int ret;
507 507
508 a->fe = dvb_attach(stv090x_attach, &technisat_usb2_stv090x_config, 508 a->fe[0] = dvb_attach(stv090x_attach, &technisat_usb2_stv090x_config,
509 &a->dev->i2c_adap, STV090x_DEMODULATOR_0); 509 &a->dev->i2c_adap, STV090x_DEMODULATOR_0);
510 510
511 if (a->fe) { 511 if (a->fe[0]) {
512 struct stv6110x_devctl *ctl; 512 struct stv6110x_devctl *ctl;
513 513
514 ctl = dvb_attach(stv6110x_attach, 514 ctl = dvb_attach(stv6110x_attach,
515 a->fe, 515 a->fe[0],
516 &technisat_usb2_stv6110x_config, 516 &technisat_usb2_stv6110x_config,
517 &a->dev->i2c_adap); 517 &a->dev->i2c_adap);
518 518
@@ -532,8 +532,8 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)
532 /* call the init function once to initialize 532 /* call the init function once to initialize
533 tuner's clock output divider and demod's 533 tuner's clock output divider and demod's
534 master clock */ 534 master clock */
535 if (a->fe->ops.init) 535 if (a->fe[0]->ops.init)
536 a->fe->ops.init(a->fe); 536 a->fe[0]->ops.init(a->fe[0]);
537 537
538 if (mutex_lock_interruptible(&a->dev->i2c_mutex) < 0) 538 if (mutex_lock_interruptible(&a->dev->i2c_mutex) < 0)
539 return -EAGAIN; 539 return -EAGAIN;
@@ -548,20 +548,20 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)
548 if (ret != 0) 548 if (ret != 0)
549 err("could not set IF_CLK to external"); 549 err("could not set IF_CLK to external");
550 550
551 a->fe->ops.set_voltage = technisat_usb2_set_voltage; 551 a->fe[0]->ops.set_voltage = technisat_usb2_set_voltage;
552 552
553 /* if everything was successful assign a nice name to the frontend */ 553 /* if everything was successful assign a nice name to the frontend */
554 strlcpy(a->fe->ops.info.name, a->dev->desc->name, 554 strlcpy(a->fe[0]->ops.info.name, a->dev->desc->name,
555 sizeof(a->fe->ops.info.name)); 555 sizeof(a->fe[0]->ops.info.name));
556 } else { 556 } else {
557 dvb_frontend_detach(a->fe); 557 dvb_frontend_detach(a->fe[0]);
558 a->fe = NULL; 558 a->fe[0] = NULL;
559 } 559 }
560 } 560 }
561 561
562 technisat_usb2_set_led_timer(a->dev, 1, 1); 562 technisat_usb2_set_led_timer(a->dev, 1, 1);
563 563
564 return a->fe == NULL ? -ENODEV : 0; 564 return a->fe[0] == NULL ? -ENODEV : 0;
565} 565}
566 566
567/* Remote control */ 567/* Remote control */
diff --git a/drivers/media/dvb/dvb-usb/ttusb2.c b/drivers/media/dvb/dvb-usb/ttusb2.c
index 0d4709ff9cbb..c0f5ef56f5e9 100644
--- a/drivers/media/dvb/dvb-usb/ttusb2.c
+++ b/drivers/media/dvb/dvb-usb/ttusb2.c
@@ -195,7 +195,7 @@ static int ttusb2_frontend_tda10086_attach(struct dvb_usb_adapter *adap)
195 if (usb_set_interface(adap->dev->udev,0,3) < 0) 195 if (usb_set_interface(adap->dev->udev,0,3) < 0)
196 err("set interface to alts=3 failed"); 196 err("set interface to alts=3 failed");
197 197
198 if ((adap->fe = dvb_attach(tda10086_attach, &tda10086_config, &adap->dev->i2c_adap)) == NULL) { 198 if ((adap->fe[0] = dvb_attach(tda10086_attach, &tda10086_config, &adap->dev->i2c_adap)) == NULL) {
199 deb_info("TDA10086 attach failed\n"); 199 deb_info("TDA10086 attach failed\n");
200 return -ENODEV; 200 return -ENODEV;
201 } 201 }
@@ -207,7 +207,7 @@ static int ttusb2_frontend_tda10023_attach(struct dvb_usb_adapter *adap)
207{ 207{
208 if (usb_set_interface(adap->dev->udev, 0, 3) < 0) 208 if (usb_set_interface(adap->dev->udev, 0, 3) < 0)
209 err("set interface to alts=3 failed"); 209 err("set interface to alts=3 failed");
210 if ((adap->fe = dvb_attach(tda10023_attach, &tda10023_config, &adap->dev->i2c_adap, 0x48)) == NULL) { 210 if ((adap->fe[0] = dvb_attach(tda10023_attach, &tda10023_config, &adap->dev->i2c_adap, 0x48)) == NULL) {
211 deb_info("TDA10023 attach failed\n"); 211 deb_info("TDA10023 attach failed\n");
212 return -ENODEV; 212 return -ENODEV;
213 } 213 }
@@ -216,7 +216,7 @@ static int ttusb2_frontend_tda10023_attach(struct dvb_usb_adapter *adap)
216 216
217static int ttusb2_tuner_tda827x_attach(struct dvb_usb_adapter *adap) 217static int ttusb2_tuner_tda827x_attach(struct dvb_usb_adapter *adap)
218{ 218{
219 if (dvb_attach(tda827x_attach, adap->fe, 0x61, &adap->dev->i2c_adap, NULL) == NULL) { 219 if (dvb_attach(tda827x_attach, adap->fe[0], 0x61, &adap->dev->i2c_adap, NULL) == NULL) {
220 printk(KERN_ERR "%s: No tda827x found!\n", __func__); 220 printk(KERN_ERR "%s: No tda827x found!\n", __func__);
221 return -ENODEV; 221 return -ENODEV;
222 } 222 }
@@ -225,12 +225,12 @@ static int ttusb2_tuner_tda827x_attach(struct dvb_usb_adapter *adap)
225 225
226static int ttusb2_tuner_tda826x_attach(struct dvb_usb_adapter *adap) 226static int ttusb2_tuner_tda826x_attach(struct dvb_usb_adapter *adap)
227{ 227{
228 if (dvb_attach(tda826x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, 0) == NULL) { 228 if (dvb_attach(tda826x_attach, adap->fe[0], 0x60, &adap->dev->i2c_adap, 0) == NULL) {
229 deb_info("TDA8263 attach failed\n"); 229 deb_info("TDA8263 attach failed\n");
230 return -ENODEV; 230 return -ENODEV;
231 } 231 }
232 232
233 if (dvb_attach(lnbp21_attach, adap->fe, &adap->dev->i2c_adap, 0, 0) == NULL) { 233 if (dvb_attach(lnbp21_attach, adap->fe[0], &adap->dev->i2c_adap, 0, 0) == NULL) {
234 deb_info("LNBP21 attach failed\n"); 234 deb_info("LNBP21 attach failed\n");
235 return -ENODEV; 235 return -ENODEV;
236 } 236 }
diff --git a/drivers/media/dvb/dvb-usb/umt-010.c b/drivers/media/dvb/dvb-usb/umt-010.c
index 118aab1a3e54..ed4765a1f323 100644
--- a/drivers/media/dvb/dvb-usb/umt-010.c
+++ b/drivers/media/dvb/dvb-usb/umt-010.c
@@ -60,14 +60,14 @@ static int umt_mt352_frontend_attach(struct dvb_usb_adapter *adap)
60 umt_config.demod_init = umt_mt352_demod_init; 60 umt_config.demod_init = umt_mt352_demod_init;
61 umt_config.demod_address = 0xf; 61 umt_config.demod_address = 0xf;
62 62
63 adap->fe = dvb_attach(mt352_attach, &umt_config, &adap->dev->i2c_adap); 63 adap->fe[0] = dvb_attach(mt352_attach, &umt_config, &adap->dev->i2c_adap);
64 64
65 return 0; 65 return 0;
66} 66}
67 67
68static int umt_tuner_attach (struct dvb_usb_adapter *adap) 68static int umt_tuner_attach (struct dvb_usb_adapter *adap)
69{ 69{
70 dvb_attach(dvb_pll_attach, adap->fe, 0x61, NULL, DVB_PLL_TUA6034); 70 dvb_attach(dvb_pll_attach, adap->fe[0], 0x61, NULL, DVB_PLL_TUA6034);
71 return 0; 71 return 0;
72} 72}
73 73
diff --git a/drivers/media/dvb/dvb-usb/vp702x.c b/drivers/media/dvb/dvb-usb/vp702x.c
index 54355f84a98f..47b3462cead8 100644
--- a/drivers/media/dvb/dvb-usb/vp702x.c
+++ b/drivers/media/dvb/dvb-usb/vp702x.c
@@ -320,7 +320,7 @@ static int vp702x_frontend_attach(struct dvb_usb_adapter *adap)
320 320
321 vp702x_init_pid_filter(adap); 321 vp702x_init_pid_filter(adap);
322 322
323 adap->fe = vp702x_fe_attach(adap->dev); 323 adap->fe[0] = vp702x_fe_attach(adap->dev);
324 vp702x_usb_out_op(adap->dev, SET_TUNER_POWER_REQ, 1, 7, NULL, 0); 324 vp702x_usb_out_op(adap->dev, SET_TUNER_POWER_REQ, 1, 7, NULL, 0);
325 325
326 return 0; 326 return 0;
diff --git a/drivers/media/dvb/dvb-usb/vp7045.c b/drivers/media/dvb/dvb-usb/vp7045.c
index 3db89e3cb0bb..4264523fcf67 100644
--- a/drivers/media/dvb/dvb-usb/vp7045.c
+++ b/drivers/media/dvb/dvb-usb/vp7045.c
@@ -214,7 +214,7 @@ static int vp7045_frontend_attach(struct dvb_usb_adapter *adap)
214/* Dump the EEPROM */ 214/* Dump the EEPROM */
215/* vp7045_read_eeprom(d,buf, 255, FX2_ID_ADDR); */ 215/* vp7045_read_eeprom(d,buf, 255, FX2_ID_ADDR); */
216 216
217 adap->fe = vp7045_fe_attach(adap->dev); 217 adap->fe[0] = vp7045_fe_attach(adap->dev);
218 218
219 return 0; 219 return 0;
220} 220}