[media] dvb-usb: refactor MFE code for individual streaming config per frontend

refactor MFE code to allow for individual streaming configuration
for each frontend

Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Reviewed-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/drivers/media/dvb/dvb-usb/anysee.c b/drivers/media/dvb/dvb-usb/anysee.c
index d4d2420..5f2278b 100644
--- a/drivers/media/dvb/dvb-usb/anysee.c
+++ b/drivers/media/dvb/dvb-usb/anysee.c
@@ -575,7 +575,7 @@
 	};
 
 	/* detect hardware only once */
-	if (adap->fe[0] == NULL) {
+	if (adap->fe_adap[0].fe == NULL) {
 		/* Check which hardware we have.
 		 * We must do this call two times to get reliable values (hw bug).
 		 */
@@ -595,7 +595,7 @@
 	}
 
 	/* set current frondend ID for devices having two frondends */
-	if (adap->fe[0])
+	if (adap->fe_adap[0].fe)
 		state->fe_id++;
 
 	switch (state->hw) {
@@ -606,13 +606,13 @@
 			break;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(mt352_attach, &anysee_mt352_config,
+		adap->fe_adap[0].fe = dvb_attach(mt352_attach, &anysee_mt352_config,
 			&adap->dev->i2c_adap);
-		if (adap->fe[0])
+		if (adap->fe_adap[0].fe)
 			break;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config,
+		adap->fe_adap[0].fe = dvb_attach(zl10353_attach, &anysee_zl10353_config,
 			&adap->dev->i2c_adap);
 
 		break;
@@ -633,7 +633,7 @@
 			goto error;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(zl10353_attach,
+		adap->fe_adap[0].fe = dvb_attach(zl10353_attach,
 			&anysee_zl10353_config, &adap->dev->i2c_adap);
 
 		break;
@@ -649,7 +649,7 @@
 			goto error;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(tda10023_attach,
+		adap->fe_adap[0].fe = dvb_attach(tda10023_attach,
 			&anysee_tda10023_config, &adap->dev->i2c_adap, 0x48);
 
 		break;
@@ -665,7 +665,7 @@
 			goto error;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(cx24116_attach, &anysee_cx24116_config,
+		adap->fe_adap[0].fe = dvb_attach(cx24116_attach, &anysee_cx24116_config,
 			&adap->dev->i2c_adap);
 
 		break;
@@ -707,13 +707,13 @@
 			/* attach demod */
 			if (tmp == 0xc7) {
 				/* TDA18212 config */
-				adap->fe[state->fe_id] = dvb_attach(
+				adap->fe_adap[state->fe_id].fe = dvb_attach(
 					tda10023_attach,
 					&anysee_tda10023_tda18212_config,
 					&adap->dev->i2c_adap, 0x48);
 			} else {
 				/* PLL config */
-				adap->fe[state->fe_id] = dvb_attach(
+				adap->fe_adap[state->fe_id].fe = dvb_attach(
 					tda10023_attach,
 					&anysee_tda10023_config,
 					&adap->dev->i2c_adap, 0x48);
@@ -734,13 +734,13 @@
 			/* attach demod */
 			if (tmp == 0xc7) {
 				/* TDA18212 config */
-				adap->fe[state->fe_id] = dvb_attach(
+				adap->fe_adap[state->fe_id].fe = dvb_attach(
 					zl10353_attach,
 					&anysee_zl10353_tda18212_config2,
 					&adap->dev->i2c_adap);
 			} else {
 				/* PLL config */
-				adap->fe[state->fe_id] = dvb_attach(
+				adap->fe_adap[state->fe_id].fe = dvb_attach(
 					zl10353_attach,
 					&anysee_zl10353_config,
 					&adap->dev->i2c_adap);
@@ -772,7 +772,7 @@
 				goto error;
 
 			/* attach demod */
-			adap->fe[state->fe_id] = dvb_attach(tda10023_attach,
+			adap->fe_adap[state->fe_id].fe = dvb_attach(tda10023_attach,
 				&anysee_tda10023_tda18212_config,
 				&adap->dev->i2c_adap, 0x48);
 		} else {
@@ -789,7 +789,7 @@
 				goto error;
 
 			/* attach demod */
-			adap->fe[state->fe_id] = dvb_attach(zl10353_attach,
+			adap->fe_adap[state->fe_id].fe = dvb_attach(zl10353_attach,
 				&anysee_zl10353_tda18212_config,
 				&adap->dev->i2c_adap);
 		}
@@ -814,13 +814,13 @@
 			goto error;
 
 		/* attach demod */
-		adap->fe[0] = dvb_attach(stv0900_attach, &anysee_stv0900_config,
+		adap->fe_adap[0].fe = dvb_attach(stv0900_attach, &anysee_stv0900_config,
 			&adap->dev->i2c_adap, 0);
 
 		break;
 	}
 
-	if (!adap->fe[0]) {
+	if (!adap->fe_adap[0].fe) {
 		/* we have no frontend :-( */
 		ret = -ENODEV;
 		err("Unsupported Anysee version. " \
@@ -842,7 +842,7 @@
 		/* E30 */
 
 		/* attach tuner */
-		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1),
+		fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc2 >> 1),
 			NULL, DVB_PLL_THOMSON_DTT7579);
 
 		break;
@@ -850,7 +850,7 @@
 		/* E30 Plus */
 
 		/* attach tuner */
-		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1),
+		fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc2 >> 1),
 			&adap->dev->i2c_adap, DVB_PLL_THOMSON_DTT7579);
 
 		break;
@@ -858,7 +858,7 @@
 		/* E30 C Plus */
 
 		/* attach tuner */
-		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1),
+		fe = dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, (0xc0 >> 1),
 			&adap->dev->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
 
 		break;
@@ -866,7 +866,7 @@
 		/* E30 S2 Plus */
 
 		/* attach LNB controller */
-		fe = dvb_attach(isl6423_attach, adap->fe[0],
+		fe = dvb_attach(isl6423_attach, adap->fe_adap[0].fe,
 			&adap->dev->i2c_adap, &anysee_isl6423_config);
 
 		break;
@@ -883,7 +883,7 @@
 			goto error;
 
 		/* attach tuner */
-		fe = dvb_attach(tda18212_attach, adap->fe[state->fe_id],
+		fe = dvb_attach(tda18212_attach, adap->fe_adap[state->fe_id].fe,
 			&adap->dev->i2c_adap, &anysee_tda18212_config);
 		if (fe)
 			break;
@@ -894,7 +894,7 @@
 			goto error;
 
 		/* attach tuner */
-		fe = dvb_attach(dvb_pll_attach, adap->fe[state->fe_id],
+		fe = dvb_attach(dvb_pll_attach, adap->fe_adap[state->fe_id].fe,
 			(0xc0 >> 1), &adap->dev->i2c_adap,
 			DVB_PLL_SAMSUNG_DTOS403IH102A);
 
@@ -910,7 +910,7 @@
 			goto error;
 
 		/* attach tuner */
-		fe = dvb_attach(tda18212_attach, adap->fe[state->fe_id],
+		fe = dvb_attach(tda18212_attach, adap->fe_adap[state->fe_id].fe,
 			&adap->dev->i2c_adap, &anysee_tda18212_config);
 
 		break;
@@ -920,12 +920,12 @@
 		/* E7 PS2 */
 
 		/* attach tuner */
-		fe = dvb_attach(stv6110_attach, adap->fe[0],
+		fe = dvb_attach(stv6110_attach, adap->fe_adap[0].fe,
 			&anysee_stv6110_config, &adap->dev->i2c_adap);
 
 		if (fe) {
 			/* attach LNB controller */
-			fe = dvb_attach(isl6423_attach, adap->fe[0],
+			fe = dvb_attach(isl6423_attach, adap->fe_adap[0].fe,
 				&adap->dev->i2c_adap, &anysee_isl6423_config);
 		}
 
@@ -1027,8 +1027,9 @@
 	.num_adapters = 1,
 	.adapter = {
 		{
-			.num_frontends    = 2,
-			.frontend_ctrl    = anysee_frontend_ctrl,
+		.num_frontends    = 2,
+		.frontend_ctrl    = anysee_frontend_ctrl,
+		.fe = {{
 			.streaming_ctrl   = anysee_streaming_ctrl,
 			.frontend_attach  = anysee_frontend_attach,
 			.tuner_attach     = anysee_tuner_attach,
@@ -1042,6 +1043,21 @@
 					}
 				}
 			},
+		}, {
+			.streaming_ctrl   = anysee_streaming_ctrl,
+			.frontend_attach  = anysee_frontend_attach,
+			.tuner_attach     = anysee_tuner_attach,
+			.stream = {
+				.type = USB_BULK,
+				.count = 8,
+				.endpoint = 0x82,
+				.u = {
+					.bulk = {
+						.buffersize = (16*512),
+					}
+				}
+			},
+		}},
 		}
 	},