DVB USB MFE resend with patches attached
Still didn't find all configurations for Thuderbird so I attached patches as files.
Sorry about spamming many times!
regards
Antti
Signature · 1 line
http://palosaari.fi/
Quoted 1 line
From
f42168386609556ae94c844a52f94c6292e0153bMon Sep 17 00:00:00 2001
From: Antti Palosaari <[email protected]>
Date: Tue, 26 Jul 2011 03:07:51 +0300
Subject: [PATCH 0/3] *** SUBJECT HERE ***
*** BLURB HERE ***
Antti Palosaari (3):
dvb-usb: prepare for multi-frontend support (MFE)
dvb-usb: multi-frontend support (MFE)
anysee: use multi-frontend (MFE)
drivers/media/dvb/dvb-usb/af9005.c | 2 +- drivers/media/dvb/dvb-usb/af9015.c | 22 +- drivers/media/dvb/dvb-usb/anysee.c | 321 ++++++++++++++++++--------- drivers/media/dvb/dvb-usb/anysee.h | 1 + drivers/media/dvb/dvb-usb/au6610.c | 6 +- drivers/media/dvb/dvb-usb/az6027.c | 10 +- drivers/media/dvb/dvb-usb/ce6230.c | 6 +- drivers/media/dvb/dvb-usb/cinergyT2-core.c | 2 +- drivers/media/dvb/dvb-usb/cxusb.c | 60 +++--- drivers/media/dvb/dvb-usb/dib0700_devices.c | 262 +++++++++++----------- drivers/media/dvb/dvb-usb/dibusb-common.c | 18 +- drivers/media/dvb/dvb-usb/dibusb-mb.c | 16 +- drivers/media/dvb/dvb-usb/digitv.c | 8 +- drivers/media/dvb/dvb-usb/dtt200u.c | 2 +- drivers/media/dvb/dvb-usb/dtv5100.c | 8 +- drivers/media/dvb/dvb-usb/dvb-usb-dvb.c | 85 ++++++-- drivers/media/dvb/dvb-usb/dvb-usb-init.c | 4 + drivers/media/dvb/dvb-usb/dvb-usb.h | 11 +- drivers/media/dvb/dvb-usb/dw2102.c | 92 ++++---- drivers/media/dvb/dvb-usb/ec168.c | 6 +- drivers/media/dvb/dvb-usb/friio.c | 4 +- drivers/media/dvb/dvb-usb/gl861.c | 6 +- drivers/media/dvb/dvb-usb/gp8psk.c | 2 +- drivers/media/dvb/dvb-usb/lmedm04.c | 28 ++-- drivers/media/dvb/dvb-usb/m920x.c | 14 +- drivers/media/dvb/dvb-usb/opera1.c | 6 +- drivers/media/dvb/dvb-usb/technisat-usb2.c | 24 +- drivers/media/dvb/dvb-usb/ttusb2.c | 10 +- drivers/media/dvb/dvb-usb/umt-010.c | 4 +- drivers/media/dvb/dvb-usb/vp702x.c | 2 +- drivers/media/dvb/dvb-usb/vp7045.c | 2 +- 31 files changed, 606 insertions(+), 438 deletions(-)
Signature · 1 line
1.7.6
Quoted 1 line
From
c0bcf184bff9e99f147f72647757d8bc6fc2bd41Mon Sep 17 00:00:00 2001
From: Antti Palosaari <[email protected]>
Date: Mon, 25 Jul 2011 02:29:16 +0300
Subject: [PATCH 1/3] dvb-usb: prepare for multi-frontend support (MFE)
Change adapter FE pointer as array of FE pointers.
--- drivers/media/dvb/dvb-usb/af9005.c | 2 +- drivers/media/dvb/dvb-usb/af9015.c | 22 +- drivers/media/dvb/dvb-usb/anysee.c | 46 +++--- drivers/media/dvb/dvb-usb/au6610.c | 6 +- drivers/media/dvb/dvb-usb/az6027.c | 10 +- drivers/media/dvb/dvb-usb/ce6230.c | 6 +- drivers/media/dvb/dvb-usb/cinergyT2-core.c | 2 +- drivers/media/dvb/dvb-usb/cxusb.c | 60 +++--- drivers/media/dvb/dvb-usb/dib0700_devices.c | 262 +++++++++++++------------- drivers/media/dvb/dvb-usb/dibusb-common.c | 18 +- drivers/media/dvb/dvb-usb/dibusb-mb.c | 16 +- drivers/media/dvb/dvb-usb/digitv.c | 8 +- drivers/media/dvb/dvb-usb/dtt200u.c | 2 +- drivers/media/dvb/dvb-usb/dtv5100.c | 8 +- drivers/media/dvb/dvb-usb/dvb-usb-dvb.c | 18 +- drivers/media/dvb/dvb-usb/dvb-usb.h | 2 +- drivers/media/dvb/dvb-usb/dw2102.c | 92 +++++----- drivers/media/dvb/dvb-usb/ec168.c | 6 +- drivers/media/dvb/dvb-usb/friio.c | 4 +- drivers/media/dvb/dvb-usb/gl861.c | 6 +- drivers/media/dvb/dvb-usb/gp8psk.c | 2 +- drivers/media/dvb/dvb-usb/lmedm04.c | 28 ++-- drivers/media/dvb/dvb-usb/m920x.c | 14 +- drivers/media/dvb/dvb-usb/opera1.c | 6 +- drivers/media/dvb/dvb-usb/technisat-usb2.c | 24 ++-- drivers/media/dvb/dvb-usb/ttusb2.c | 10 +- drivers/media/dvb/dvb-usb/umt-010.c | 4 +- drivers/media/dvb/dvb-usb/vp702x.c | 2 +- drivers/media/dvb/dvb-usb/vp7045.c | 2 +- 29 files changed, 344 insertions(+), 344 deletions(-)
drivers/media/dvb/dvb-usb/af9005.c +1 -1
@@ -815,7 +815,7 @@ static int af9005_frontend_attach(struct dvb_usb_adapter *adap)debug_dump (buf,8 , printk); } } - adap->fe =af9005_fe_attach (adap->dev); + adap->fe[0 ] =af9005_fe_attach (adap->dev);return 0 ; }
drivers/media/dvb/dvb-usb/af9015.c +11 -11
@@ -1111,10 +1111,10 @@ static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap) }/* attach demodulator */ - adap->fe =dvb_attach (af9013_attach, &af9015_af9013_config[adap->id], + adap->fe[0 ] =dvb_attach (af9013_attach, &af9015_af9013_config[adap->id], &adap->dev->i2c_adap); -return adap->fe ==NULL ? -ENODEV :0 ; +return adap->fe[0 ] ==NULL ? -ENODEV :0 ; }static struct mt2060_config af9015_mt2060_config = {
@@ -1188,49 +1188,49 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap)switch (af9015_af9013_config[adap->id].tuner) {case AF9013_TUNER_MT2060 :case AF9013_TUNER_MT2060_2 : - ret =dvb_attach (mt2060_attach, adap->fe, &adap->dev->i2c_adap, + ret =dvb_attach (mt2060_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_mt2060_config, af9015_config.mt2060_if1[adap->id]) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_QT1010 :case AF9013_TUNER_QT1010A : - ret =dvb_attach (qt1010_attach, adap->fe, &adap->dev->i2c_adap, + ret =dvb_attach (qt1010_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_qt1010_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_TDA18271 : - ret =dvb_attach (tda18271_attach, adap->fe,0xc0 , + ret =dvb_attach (tda18271_attach, adap->fe[0 ],0xc0 , &adap->dev->i2c_adap, &af9015_tda18271_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_TDA18218 : - ret =dvb_attach (tda18218_attach, adap->fe, + ret =dvb_attach (tda18218_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_tda18218_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_MXL5003D : - ret =dvb_attach (mxl5005s_attach, adap->fe, + ret =dvb_attach (mxl5005s_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_mxl5003_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_MXL5005D :case AF9013_TUNER_MXL5005R : - ret =dvb_attach (mxl5005s_attach, adap->fe, + ret =dvb_attach (mxl5005s_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_mxl5005_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_ENV77H11D5 : - ret =dvb_attach (dvb_pll_attach, adap->fe,0xc0 , + ret =dvb_attach (dvb_pll_attach, adap->fe[0 ],0xc0 , &adap->dev->i2c_adap,DVB_PLL_TDA665X ) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_MC44S803 : - ret =dvb_attach (mc44s803_attach, adap->fe, + ret =dvb_attach (mc44s803_attach, adap->fe[0 ], &adap->dev->i2c_adap, &af9015_mc44s803_config) ==NULL ? -ENODEV :0 ;break ;case AF9013_TUNER_MXL5007T : - ret =dvb_attach (mxl5007t_attach, adap->fe, + ret =dvb_attach (mxl5007t_attach, adap->fe[0 ], &adap->dev->i2c_adap,0xc0 , &af9015_mxl5007t_config) ==NULL ? -ENODEV :0 ;break ;
drivers/media/dvb/dvb-usb/anysee.c +23 -23
169 lines not on this page · raw message
drivers/media/dvb/dvb-usb/au6610.c +3 -3
@@ -140,9 +140,9 @@ static struct zl10353_config au6610_zl10353_config = {static int au6610_zl10353_frontend_attach (struct dvb_usb_adapter *adap) { - adap->fe =dvb_attach (zl10353_attach, &au6610_zl10353_config, + adap->fe[0 ] =dvb_attach (zl10353_attach, &au6610_zl10353_config, &adap->dev->i2c_adap); -if (adap->fe ==NULL ) +if (adap->fe[0 ] ==NULL )return -ENODEV ;return 0 ;
@@ -155,7 +155,7 @@ static struct qt1010_config au6610_qt1010_config = {static int au6610_qt1010_tuner_attach (struct dvb_usb_adapter *adap) {return dvb_attach (qt1010_attach, - adap->fe, &adap->dev->i2c_adap, + adap->fe[0 ], &adap->dev->i2c_adap, &au6610_qt1010_config) ==NULL ? -ENODEV :0 ; }
drivers/media/dvb/dvb-usb/az6027.c +5 -5
@@ -910,16 +910,16 @@ static int az6027_frontend_attach(struct dvb_usb_adapter *adap)az6027_frontend_reset (adap);deb_info ("adap = %p, dev = %p\n" , adap, adap->dev); - adap->fe =stb0899_attach (&az6027_stb0899_config, &adap->dev->i2c_adap); + adap->fe[0 ] =stb0899_attach (&az6027_stb0899_config, &adap->dev->i2c_adap); -if (adap->fe) { +if (adap->fe[0 ]) {deb_info ("found STB0899 DVB-S/DVB-S2 frontend @0x%02x" , az6027_stb0899_config.demod_address); -if (stb6100_attach (adap->fe, &az6027_stb6100_config, &adap->dev->i2c_adap)) { +if (stb6100_attach (adap->fe[0 ], &az6027_stb6100_config, &adap->dev->i2c_adap)) {deb_info ("found STB6100 DVB-S/DVB-S2 frontend @0x%02x" , az6027_stb6100_config.tuner_address); - adap->fe->ops.set_voltage = az6027_set_voltage; + adap->fe[0 ]->ops.set_voltage = az6027_set_voltage;az6027_ci_init (adap); }else { - adap->fe =NULL ; + adap->fe[0 ] =NULL ; } }else warn ("no front-end attached\n" );
drivers/media/dvb/dvb-usb/ce6230.c +3 -3
@@ -186,9 +186,9 @@ static struct zl10353_config ce6230_zl10353_config = {static int ce6230_zl10353_frontend_attach (struct dvb_usb_adapter *adap) {deb_info ("%s:\n" , __func__); - adap->fe =dvb_attach (zl10353_attach, &ce6230_zl10353_config, + adap->fe[0 ] =dvb_attach (zl10353_attach, &ce6230_zl10353_config, &adap->dev->i2c_adap); -if (adap->fe ==NULL ) +if (adap->fe[0 ] ==NULL )return -ENODEV ;return 0 ; }
@@ -214,7 +214,7 @@ static int ce6230_mxl5003s_tuner_attach(struct dvb_usb_adapter *adap) {int ret;deb_info ("%s:\n" , __func__); - ret =dvb_attach (mxl5005s_attach, adap->fe, &adap->dev->i2c_adap, + ret =dvb_attach (mxl5005s_attach, adap->fe[0 ], &adap->dev->i2c_adap, &ce6230_mxl5003s_config) ==NULL ? -ENODEV :0 ;return ret; }
drivers/media/dvb/dvb-usb/cinergyT2-core.c +1 -1
@@ -69,7 +69,7 @@ static int cinergyt2_frontend_attach(struct dvb_usb_adapter *adap)char state[3 ];int ret; - adap->fe =cinergyt2_fe_attach (adap->dev); + adap->fe[0 ] =cinergyt2_fe_attach (adap->dev); ret =dvb_usb_generic_rw (adap->dev, query,sizeof (query), state,sizeof (state),0 );
drivers/media/dvb/dvb-usb/cxusb.c +30 -30
193 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dib0700_devices.c +131 -131
681 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dibusb-common.c +9 -9
@@ -23,7 +23,7 @@ int dibusb_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)if (adap->priv !=NULL ) {struct dibusb_state *st = adap->priv;if (st->ops.fifo_ctrl !=NULL ) -if (st->ops.fifo_ctrl (adap->fe,onoff)) { +if (st->ops.fifo_ctrl (adap->fe[0 ],onoff)) {err ("error while controlling the fifo of the demod." );return -ENODEV ; }
@@ -37,7 +37,7 @@ int dibusb_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, int onofif (adap->priv !=NULL ) {struct dibusb_state *st = adap->priv;if (st->ops.pid_ctrl !=NULL ) - st->ops.pid_ctrl (adap->fe,index,pid,onoff); + st->ops.pid_ctrl (adap->fe[0 ],index,pid,onoff); }return 0 ; }
@@ -48,7 +48,7 @@ int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)if (adap->priv !=NULL ) {struct dibusb_state *st = adap->priv;if (st->ops.pid_parse !=NULL ) -if (st->ops.pid_parse (adap->fe,onoff) <0 ) +if (st->ops.pid_parse (adap->fe[0 ],onoff) <0 )err ("could not handle pid_parser" ); }return 0 ;
@@ -254,8 +254,8 @@ int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *adap)msleep (1000 ); } -if ((adap->fe =dvb_attach (dib3000mc_attach, &adap->dev->i2c_adap,DEFAULT_DIB3000P_I2C_ADDRESS , &mod3000p_dib3000p_config)) !=NULL || - (adap->fe =dvb_attach (dib3000mc_attach, &adap->dev->i2c_adap,DEFAULT_DIB3000MC_I2C_ADDRESS , &mod3000p_dib3000p_config)) !=NULL ) { +if ((adap->fe[0 ] =dvb_attach (dib3000mc_attach, &adap->dev->i2c_adap,DEFAULT_DIB3000P_I2C_ADDRESS , &mod3000p_dib3000p_config)) !=NULL || + (adap->fe[0 ] =dvb_attach (dib3000mc_attach, &adap->dev->i2c_adap,DEFAULT_DIB3000MC_I2C_ADDRESS , &mod3000p_dib3000p_config)) !=NULL ) {if (adap->priv !=NULL ) {struct dibusb_state *st = adap->priv; st->ops.pid_parse = dib3000mc_pid_parse;
@@ -309,15 +309,15 @@ int dibusb_dib3000mc_tuner_attach(struct dvb_usb_adapter *adap) } } - tun_i2c =dib3000mc_get_tuner_i2c_master (adap->fe,1 ); -if (dvb_attach (mt2060_attach, adap->fe, tun_i2c, &stk3000p_mt2060_config, if1) ==NULL ) { + tun_i2c =dib3000mc_get_tuner_i2c_master (adap->fe[0 ],1 ); +if (dvb_attach (mt2060_attach, adap->fe[0 ], tun_i2c, &stk3000p_mt2060_config, if1) ==NULL ) {/* not found - use panasonic pll parameters */ -if (dvb_attach (dvb_pll_attach, adap->fe,0x60 , tun_i2c,DVB_PLL_ENV57H1XD5 ) ==NULL ) +if (dvb_attach (dvb_pll_attach, adap->fe[0 ],0x60 , tun_i2c,DVB_PLL_ENV57H1XD5 ) ==NULL )return -ENOMEM ; }else { st->mt2060_present =1 ;/* set the correct parameters for the dib3000p */ -dib3000mc_set_config (adap->fe, &stk3000p_dib3000p_config); +dib3000mc_set_config (adap->fe[0 ], &stk3000p_dib3000p_config); }return 0 ; }
drivers/media/dvb/dvb-usb/dibusb-mb.c +8 -8
@@ -31,11 +31,11 @@ static int dibusb_dib3000mb_frontend_attach(struct dvb_usb_adapter *adap) demod_cfg.demod_address =0x8 ; -if ((adap->fe =dvb_attach (dib3000mb_attach, &demod_cfg, +if ((adap->fe[0 ] =dvb_attach (dib3000mb_attach, &demod_cfg, &adap->dev->i2c_adap, &st->ops)) ==NULL )return -ENODEV ; - adap->fe->ops.i2c_gate_ctrl = dib3000mb_i2c_gate_ctrl; + adap->fe[0 ]->ops.i2c_gate_ctrl = dib3000mb_i2c_gate_ctrl;return 0 ; }
@@ -46,7 +46,7 @@ static int dibusb_thomson_tuner_attach(struct dvb_usb_adapter *adap) st->tuner_addr =0x61 ; -dvb_attach (dvb_pll_attach, adap->fe,0x61 , &adap->dev->i2c_adap, +dvb_attach (dvb_pll_attach, adap->fe[0 ],0x61 , &adap->dev->i2c_adap,DVB_PLL_TUA6010XS );return 0 ; }
@@ -57,7 +57,7 @@ static int dibusb_panasonic_tuner_attach(struct dvb_usb_adapter *adap) st->tuner_addr =0x60 ; -dvb_attach (dvb_pll_attach, adap->fe,0x60 , &adap->dev->i2c_adap, +dvb_attach (dvb_pll_attach, adap->fe[0 ],0x60 , &adap->dev->i2c_adap,DVB_PLL_TDA665X );return 0 ; }
@@ -78,16 +78,16 @@ static int dibusb_tuner_probe_and_attach(struct dvb_usb_adapter *adap)/* the Panasonic sits on I2C addrass 0x60, the Thomson on 0x61 */ msg[0 ].addr = msg[1 ].addr = st->tuner_addr =0x60 ; -if (adap->fe->ops.i2c_gate_ctrl) - adap->fe->ops.i2c_gate_ctrl (adap->fe,1 ); +if (adap->fe[0 ]->ops.i2c_gate_ctrl) + adap->fe[0 ]->ops.i2c_gate_ctrl (adap->fe[0 ],1 );if (i2c_transfer (&adap->dev->i2c_adap, msg,2 ) !=2 ) {err ("tuner i2c write failed." ); ret = -EREMOTEIO ; } -if (adap->fe->ops.i2c_gate_ctrl) - adap->fe->ops.i2c_gate_ctrl (adap->fe,0 ); +if (adap->fe[0 ]->ops.i2c_gate_ctrl) + adap->fe[0 ]->ops.i2c_gate_ctrl (adap->fe[0 ],0 );if (b2[0 ] ==0xfe ) {info ("This device has the Thomson Cable onboard. Which is default." );
drivers/media/dvb/dvb-usb/digitv.c +4 -4
@@ -137,11 +137,11 @@ static int digitv_frontend_attach(struct dvb_usb_adapter *adap) {struct digitv_state *st = adap->dev->priv; -if ((adap->fe =dvb_attach (mt352_attach, &digitv_mt352_config, &adap->dev->i2c_adap)) !=NULL ) { +if ((adap->fe[0 ] =dvb_attach (mt352_attach, &digitv_mt352_config, &adap->dev->i2c_adap)) !=NULL ) { st->is_nxt6000 =0 ;return 0 ; } -if ((adap->fe =dvb_attach (nxt6000_attach, &digitv_nxt6000_config, &adap->dev->i2c_adap)) !=NULL ) { +if ((adap->fe[0 ] =dvb_attach (nxt6000_attach, &digitv_nxt6000_config, &adap->dev->i2c_adap)) !=NULL ) { st->is_nxt6000 =1 ;return 0 ; }
@@ -152,11 +152,11 @@ static int digitv_tuner_attach(struct dvb_usb_adapter *adap) {struct digitv_state *st = adap->dev->priv; -if (!dvb_attach (dvb_pll_attach, adap->fe,0x60 ,NULL ,DVB_PLL_TDED4 )) +if (!dvb_attach (dvb_pll_attach, adap->fe[0 ],0x60 ,NULL ,DVB_PLL_TDED4 ))return -ENODEV ;if (st->is_nxt6000) - adap->fe->ops.tuner_ops.set_params = digitv_nxt6000_tuner_set_params; + adap->fe[0 ]->ops.tuner_ops.set_params = digitv_nxt6000_tuner_set_params;return 0 ; }
drivers/media/dvb/dvb-usb/dtt200u.c +1 -1
@@ -90,7 +90,7 @@ static int dtt200u_rc_query(struct dvb_usb_device *d, u32 *event, int *state)static int dtt200u_frontend_attach (struct dvb_usb_adapter *adap) { - adap->fe =dtt200u_fe_attach (adap->dev); + adap->fe[0 ] =dtt200u_fe_attach (adap->dev);return 0 ; }
drivers/media/dvb/dvb-usb/dtv5100.c +4 -4
@@ -115,13 +115,13 @@ static struct zl10353_config dtv5100_zl10353_config = {static int dtv5100_frontend_attach (struct dvb_usb_adapter *adap) { - adap->fe =dvb_attach (zl10353_attach, &dtv5100_zl10353_config, + adap->fe[0 ] =dvb_attach (zl10353_attach, &dtv5100_zl10353_config, &adap->dev->i2c_adap); -if (adap->fe ==NULL ) +if (adap->fe[0 ] ==NULL )return -EIO ;/* disable i2c gate, or it won't work... is this safe? */ - adap->fe->ops.i2c_gate_ctrl =NULL ; + adap->fe[0 ]->ops.i2c_gate_ctrl =NULL ;return 0 ; }
@@ -133,7 +133,7 @@ static struct qt1010_config dtv5100_qt1010_config = {static int dtv5100_tuner_attach (struct dvb_usb_adapter *adap) {return dvb_attach (qt1010_attach, - adap->fe, &adap->dev->i2c_adap, + adap->fe[0 ], &adap->dev->i2c_adap, &dtv5100_qt1010_config) ==NULL ? -ENODEV :0 ; }
drivers/media/dvb/dvb-usb/dvb-usb-dvb.c +9 -9
@@ -186,14 +186,14 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap) }/* re-assign sleep and wakeup functions */ -if (adap->props.frontend_attach (adap) ==0 && adap->fe !=NULL ) { - adap->fe_init = adap->fe->ops.init; adap->fe->ops.init = dvb_usb_fe_wakeup; - adap->fe_sleep = adap->fe->ops.sleep; adap->fe->ops.sleep = dvb_usb_fe_sleep; +if (adap->props.frontend_attach (adap) ==0 && adap->fe[0 ] !=NULL ) { + adap->fe_init = adap->fe[0 ]->ops.init; adap->fe[0 ]->ops.init = dvb_usb_fe_wakeup; + adap->fe_sleep = adap->fe[0 ]->ops.sleep; adap->fe[0 ]->ops.sleep = dvb_usb_fe_sleep; -if (dvb_register_frontend (&adap->dvb_adap, adap->fe)) { +if (dvb_register_frontend (&adap->dvb_adap, adap->fe[0 ])) {err ("Frontend registration failed." ); -dvb_frontend_detach (adap->fe); - adap->fe =NULL ; +dvb_frontend_detach (adap->fe[0 ]); + adap->fe[0 ] =NULL ;return -ENODEV ; }
@@ -208,9 +208,9 @@ int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap)int dvb_usb_adapter_frontend_exit (struct dvb_usb_adapter *adap) { -if (adap->fe !=NULL ) { -dvb_unregister_frontend (adap->fe); -dvb_frontend_detach (adap->fe); +if (adap->fe[0 ] !=NULL ) { +dvb_unregister_frontend (adap->fe[0 ]); +dvb_frontend_detach (adap->fe[0 ]); }return 0 ; }
drivers/media/dvb/dvb-usb/dvb-usb.h +1 -1
@@ -363,7 +363,7 @@ struct dvb_usb_adapter {struct dmxdev dmxdev;struct dvb_demux demux;struct dvb_net dvb_net; -struct dvb_frontend *fe; +struct dvb_frontend *fe[1 ];int max_feed_count;int (*fe_init) (struct dvb_frontend *);
drivers/media/dvb/dvb-usb/dw2102.c +46 -46
214 lines not on this page · raw message
drivers/media/dvb/dvb-usb/ec168.c +3 -3
@@ -200,9 +200,9 @@ static struct ec100_config ec168_ec100_config = {static int ec168_ec100_frontend_attach (struct dvb_usb_adapter *adap) {deb_info ("%s:\n" , __func__); - adap->fe =dvb_attach (ec100_attach, &ec168_ec100_config, + adap->fe[0 ] =dvb_attach (ec100_attach, &ec168_ec100_config, &adap->dev->i2c_adap); -if (adap->fe ==NULL ) +if (adap->fe[0 ] ==NULL )return -ENODEV ;return 0 ;
@@ -228,7 +228,7 @@ static struct mxl5005s_config ec168_mxl5003s_config = {static int ec168_mxl5003s_tuner_attach (struct dvb_usb_adapter *adap) {deb_info ("%s:\n" , __func__); -return dvb_attach (mxl5005s_attach, adap->fe, &adap->dev->i2c_adap, +return dvb_attach (mxl5005s_attach, adap->fe[0 ], &adap->dev->i2c_adap, &ec168_mxl5003s_config) ==NULL ? -ENODEV :0 ; }
drivers/media/dvb/dvb-usb/friio.c +2 -2
@@ -403,8 +403,8 @@ static int friio_frontend_attach(struct dvb_usb_adapter *adap)if (friio_initialize (adap->dev) <0 )return -EIO ; - adap->fe =jdvbt90502_attach (adap->dev); -if (adap->fe ==NULL ) + adap->fe[0 ] =jdvbt90502_attach (adap->dev); +if (adap->fe[0 ] ==NULL )return -EIO ;return 0 ;
drivers/media/dvb/dvb-usb/gl861.c +3 -3
@@ -103,9 +103,9 @@ static struct zl10353_config gl861_zl10353_config = {static int gl861_frontend_attach (struct dvb_usb_adapter *adap) { - adap->fe =dvb_attach (zl10353_attach, &gl861_zl10353_config, + adap->fe[0 ] =dvb_attach (zl10353_attach, &gl861_zl10353_config, &adap->dev->i2c_adap); -if (adap->fe ==NULL ) +if (adap->fe[0 ] ==NULL )return -EIO ;return 0 ;
@@ -118,7 +118,7 @@ static struct qt1010_config gl861_qt1010_config = {static int gl861_tuner_attach (struct dvb_usb_adapter *adap) {return dvb_attach (qt1010_attach, - adap->fe, &adap->dev->i2c_adap, + adap->fe[0 ], &adap->dev->i2c_adap, &gl861_qt1010_config) ==NULL ? -ENODEV :0 ; }
drivers/media/dvb/dvb-usb/gp8psk.c +1 -1
@@ -230,7 +230,7 @@ static int gp8psk_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)static int gp8psk_frontend_attach (struct dvb_usb_adapter *adap) { - adap->fe =gp8psk_fe_attach (adap->dev); + adap->fe[0 ] =gp8psk_fe_attach (adap->dev);return 0 ; }
drivers/media/dvb/dvb-usb/lmedm04.c +14 -14
@@ -941,7 +941,7 @@ static int lme_name(struct dvb_usb_adapter *adap)const char *desc = adap->dev->desc->name;char *fe_name[] = {"" ," LG TDQY-P001F" ," SHARP:BS2F7HZ7395" ," SHARP:BS2F7HZ0194" }; -char *name = adap->fe->ops.info.name; +char *name = adap->fe[0 ]->ops.info.name;strlcpy (name, desc,128 );strlcat (name, fe_name[st->tuner_config],128 );
@@ -958,10 +958,10 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap) st->i2c_talk_onoff =1 ; st->i2c_gate =4 ; - adap->fe =dvb_attach (tda10086_attach, &tda10086_config, + adap->fe[0 ] =dvb_attach (tda10086_attach, &tda10086_config, &adap->dev->i2c_adap); -if (adap->fe) { +if (adap->fe[0 ]) {info ("TUN Found Frontend TDA10086" ); st->i2c_tuner_gate_w =4 ; st->i2c_tuner_gate_r =4 ;
@@ -975,9 +975,9 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap) } st->i2c_gate =4 ; - adap->fe =dvb_attach (stv0299_attach, &sharp_z0194_config, + adap->fe[0 ] =dvb_attach (stv0299_attach, &sharp_z0194_config, &adap->dev->i2c_adap); -if (adap->fe) { +if (adap->fe[0 ]) {info ("FE Found Stv0299" ); st->i2c_tuner_gate_w =4 ; st->i2c_tuner_gate_r =5 ;
@@ -991,9 +991,9 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap) } st->i2c_gate =5 ; - adap->fe =dvb_attach (stv0288_attach, &lme_config, + adap->fe[0 ] =dvb_attach (stv0288_attach, &lme_config, &adap->dev->i2c_adap); -if (adap->fe) { +if (adap->fe[0 ]) {info ("FE Found Stv0288" ); st->i2c_tuner_gate_w =4 ; st->i2c_tuner_gate_r =5 ;
@@ -1010,15 +1010,15 @@ static int dm04_lme2510_frontend_attach(struct dvb_usb_adapter *adap) end:if (ret) { -if (adap->fe) { -dvb_frontend_detach (adap->fe); - adap->fe =NULL ; +if (adap->fe[0 ]) { +dvb_frontend_detach (adap->fe[0 ]); + adap->fe[0 ] =NULL ; } adap->dev->props.rc.core.rc_codes =NULL ;return -ENODEV ; } - adap->fe->ops.set_voltage = dm04_lme2510_set_voltage; + adap->fe[0 ]->ops.set_voltage = dm04_lme2510_set_voltage; ret =lme_name (adap);return ret; }
@@ -1031,17 +1031,17 @@ static int dm04_lme2510_tuner(struct dvb_usb_adapter *adap)switch (st->tuner_config) {case TUNER_LG : -if (dvb_attach (tda826x_attach, adap->fe,0xc0 , +if (dvb_attach (tda826x_attach, adap->fe[0 ],0xc0 , &adap->dev->i2c_adap,1 )) ret = st->tuner_config;break ;case TUNER_S7395 : -if (dvb_attach (ix2505v_attach , adap->fe, &lme_tuner, +if (dvb_attach (ix2505v_attach , adap->fe[0 ], &lme_tuner, &adap->dev->i2c_adap)) ret = st->tuner_config;break ;case TUNER_S0194 : -if (dvb_attach (dvb_pll_attach , adap->fe,0xc0 , +if (dvb_attach (dvb_pll_attach , adap->fe[0 ],0xc0 , &adap->dev->i2c_adap,DVB_PLL_OPERA1 )) ret = st->tuner_config;break ;
drivers/media/dvb/dvb-usb/m920x.c +7 -7
@@ -501,7 +501,7 @@ static int m920x_mt352_frontend_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if ((adap->fe =dvb_attach (mt352_attach, +if ((adap->fe[0 ] =dvb_attach (mt352_attach, &m920x_mt352_config, &adap->dev->i2c_adap)) ==NULL )return -EIO ;
@@ -513,7 +513,7 @@ static int m920x_tda10046_08_frontend_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if ((adap->fe =dvb_attach (tda10046_attach, +if ((adap->fe[0 ] =dvb_attach (tda10046_attach, &m920x_tda10046_08_config, &adap->dev->i2c_adap)) ==NULL )return -EIO ;
@@ -525,7 +525,7 @@ static int m920x_tda10046_0b_frontend_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if ((adap->fe =dvb_attach (tda10046_attach, +if ((adap->fe[0 ] =dvb_attach (tda10046_attach, &m920x_tda10046_0b_config, &adap->dev->i2c_adap)) ==NULL )return -EIO ;
@@ -537,7 +537,7 @@ static int m920x_qt1010_tuner_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if (dvb_attach (qt1010_attach, adap->fe, &adap->dev->i2c_adap, &m920x_qt1010_config) ==NULL ) +if (dvb_attach (qt1010_attach, adap->fe[0 ], &adap->dev->i2c_adap, &m920x_qt1010_config) ==NULL )return -ENODEV ;return 0 ;
@@ -547,7 +547,7 @@ static int m920x_tda8275_60_tuner_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if (dvb_attach (tda827x_attach, adap->fe,0x60 , &adap->dev->i2c_adap,NULL ) ==NULL ) +if (dvb_attach (tda827x_attach, adap->fe[0 ],0x60 , &adap->dev->i2c_adap,NULL ) ==NULL )return -ENODEV ;return 0 ;
@@ -557,7 +557,7 @@ static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap) {deb ("%s\n" ,__func__); -if (dvb_attach (tda827x_attach, adap->fe,0x61 , &adap->dev->i2c_adap,NULL ) ==NULL ) +if (dvb_attach (tda827x_attach, adap->fe[0 ],0x61 , &adap->dev->i2c_adap,NULL ) ==NULL )return -ENODEV ;return 0 ;
@@ -565,7 +565,7 @@ static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap)static int m920x_fmd1216me_tuner_attach (struct dvb_usb_adapter *adap) { -dvb_attach (simple_tuner_attach, adap->fe, +dvb_attach (simple_tuner_attach, adap->fe[0 ], &adap->dev->i2c_adap,0x61 ,TUNER_PHILIPS_FMD1216ME_MK3 );return 0 ;
drivers/media/dvb/dvb-usb/opera1.c +3 -3
@@ -263,10 +263,10 @@ static struct stv0299_config opera1_stv0299_config = {static int opera1_frontend_attach (struct dvb_usb_adapter *d) { -if ((d->fe = +if ((d->fe[0 ] =dvb_attach (stv0299_attach, &opera1_stv0299_config, &d->dev->i2c_adap)) !=NULL ) { - d->fe->ops.set_voltage = opera1_set_voltage; + d->fe[0 ]->ops.set_voltage = opera1_set_voltage;return 0 ; }info ("not attached stv0299" );
@@ -276,7 +276,7 @@ static int opera1_frontend_attach(struct dvb_usb_adapter *d)static int opera1_tuner_attach (struct dvb_usb_adapter *adap) {dvb_attach ( - dvb_pll_attach, adap->fe,0xc0 >>1 , + dvb_pll_attach, adap->fe[0 ],0xc0 >>1 , &adap->dev->i2c_adap,DVB_PLL_OPERA1 );return 0 ;
drivers/media/dvb/dvb-usb/technisat-usb2.c +12 -12
@@ -292,7 +292,7 @@ static void technisat_usb2_green_led_control(struct work_struct *work) {struct technisat_usb2_state *state = container_of(work, struct technisat_usb2_state, green_led_work.work); -struct dvb_frontend *fe = state->dev->adapter[0 ].fe; +struct dvb_frontend *fe = state->dev->adapter[0 ].fe[0 ];if (state->power_state ==0 ) goto schedule;
@@ -505,14 +505,14 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)struct usb_device *udev = a->dev->udev;int ret; - a->fe =dvb_attach (stv090x_attach, &technisat_usb2_stv090x_config, + a->fe[0 ] =dvb_attach (stv090x_attach, &technisat_usb2_stv090x_config, &a->dev->i2c_adap, STV090x_DEMODULATOR_0); -if (a->fe) { +if (a->fe[0 ]) {struct stv6110x_devctl *ctl; ctl =dvb_attach (stv6110x_attach, - a->fe, + a->fe[0 ], &technisat_usb2_stv6110x_config, &a->dev->i2c_adap);
@@ -532,8 +532,8 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)/* call the init function once to initialize tuner's clock output divider and demod's master clock */ -if (a->fe->ops.init) - a->fe->ops.init (a->fe); +if (a->fe[0 ]->ops.init) + a->fe[0 ]->ops.init (a->fe[0 ]);if (mutex_lock_interruptible (&a->dev->i2c_mutex) <0 )return -EAGAIN ;
@@ -548,20 +548,20 @@ static int technisat_usb2_frontend_attach(struct dvb_usb_adapter *a)if (ret !=0 )err ("could not set IF_CLK to external" ); - a->fe->ops.set_voltage = technisat_usb2_set_voltage; + a->fe[0 ]->ops.set_voltage = technisat_usb2_set_voltage;/* if everything was successful assign a nice name to the frontend */ -strlcpy (a->fe->ops.info.name, a->dev->desc->name, -sizeof (a->fe->ops.info.name)); +strlcpy (a->fe[0 ]->ops.info.name, a->dev->desc->name, +sizeof (a->fe[0 ]->ops.info.name)); }else { -dvb_frontend_detach (a->fe); - a->fe =NULL ; +dvb_frontend_detach (a->fe[0 ]); + a->fe[0 ] =NULL ; } }technisat_usb2_set_led_timer (a->dev,1 ,1 ); -return a->fe ==NULL ? -ENODEV :0 ; +return a->fe[0 ] ==NULL ? -ENODEV :0 ; }/* Remote control */
drivers/media/dvb/dvb-usb/ttusb2.c +5 -5
@@ -195,7 +195,7 @@ static int ttusb2_frontend_tda10086_attach(struct dvb_usb_adapter *adap)if (usb_set_interface (adap->dev->udev,0 ,3 ) <0 )err ("set interface to alts=3 failed" ); -if ((adap->fe =dvb_attach (tda10086_attach, &tda10086_config, &adap->dev->i2c_adap)) ==NULL ) { +if ((adap->fe[0 ] =dvb_attach (tda10086_attach, &tda10086_config, &adap->dev->i2c_adap)) ==NULL ) {deb_info ("TDA10086 attach failed\n" );return -ENODEV ; }
@@ -207,7 +207,7 @@ static int ttusb2_frontend_tda10023_attach(struct dvb_usb_adapter *adap) {if (usb_set_interface (adap->dev->udev,0 ,3 ) <0 )err ("set interface to alts=3 failed" ); -if ((adap->fe =dvb_attach (tda10023_attach, &tda10023_config, &adap->dev->i2c_adap,0x48 )) ==NULL ) { +if ((adap->fe[0 ] =dvb_attach (tda10023_attach, &tda10023_config, &adap->dev->i2c_adap,0x48 )) ==NULL ) {deb_info ("TDA10023 attach failed\n" );return -ENODEV ; }
@@ -216,7 +216,7 @@ static int ttusb2_frontend_tda10023_attach(struct dvb_usb_adapter *adap)static int ttusb2_tuner_tda827x_attach (struct dvb_usb_adapter *adap) { -if (dvb_attach (tda827x_attach, adap->fe,0x61 , &adap->dev->i2c_adap,NULL ) ==NULL ) { +if (dvb_attach (tda827x_attach, adap->fe[0 ],0x61 , &adap->dev->i2c_adap,NULL ) ==NULL ) {printk (KERN_ERR "%s: No tda827x found!\n" , __func__);return -ENODEV ; }
@@ -225,12 +225,12 @@ static int ttusb2_tuner_tda827x_attach(struct dvb_usb_adapter *adap)static int ttusb2_tuner_tda826x_attach (struct dvb_usb_adapter *adap) { -if (dvb_attach (tda826x_attach, adap->fe,0x60 , &adap->dev->i2c_adap,0 ) ==NULL ) { +if (dvb_attach (tda826x_attach, adap->fe[0 ],0x60 , &adap->dev->i2c_adap,0 ) ==NULL ) {deb_info ("TDA8263 attach failed\n" );return -ENODEV ; } -if (dvb_attach (lnbp21_attach, adap->fe, &adap->dev->i2c_adap,0 ,0 ) ==NULL ) { +if (dvb_attach (lnbp21_attach, adap->fe[0 ], &adap->dev->i2c_adap,0 ,0 ) ==NULL ) {deb_info ("LNBP21 attach failed\n" );return -ENODEV ; }
drivers/media/dvb/dvb-usb/umt-010.c +2 -2
@@ -60,14 +60,14 @@ static int umt_mt352_frontend_attach(struct dvb_usb_adapter *adap) umt_config.demod_init = umt_mt352_demod_init; umt_config.demod_address =0xf ; - adap->fe =dvb_attach (mt352_attach, &umt_config, &adap->dev->i2c_adap); + adap->fe[0 ] =dvb_attach (mt352_attach, &umt_config, &adap->dev->i2c_adap);return 0 ; }static int umt_tuner_attach (struct dvb_usb_adapter *adap) { -dvb_attach (dvb_pll_attach, adap->fe,0x61 ,NULL ,DVB_PLL_TUA6034 ); +dvb_attach (dvb_pll_attach, adap->fe[0 ],0x61 ,NULL ,DVB_PLL_TUA6034 );return 0 ; }
drivers/media/dvb/dvb-usb/vp702x.c +1 -1
@@ -320,7 +320,7 @@ static int vp702x_frontend_attach(struct dvb_usb_adapter *adap)vp702x_init_pid_filter (adap); - adap->fe =vp702x_fe_attach (adap->dev); + adap->fe[0 ] =vp702x_fe_attach (adap->dev);vp702x_usb_out_op (adap->dev,SET_TUNER_POWER_REQ ,1 ,7 ,NULL ,0 );return 0 ;
drivers/media/dvb/dvb-usb/vp7045.c +1 -1
@@ -214,7 +214,7 @@ static int vp7045_frontend_attach(struct dvb_usb_adapter *adap)/* Dump the EEPROM */ /* vp7045_read_eeprom(d,buf, 255, FX2_ID_ADDR); */ - adap->fe =vp7045_fe_attach (adap->dev); + adap->fe[0 ] =vp7045_fe_attach (adap->dev);return 0 ; }
Signature · 1 line
1.7.6
Quoted 1 line
From
1853f9f9b900374ceec266ab3dbc0c4295fd91ccMon Sep 17 00:00:00 2001
From: Antti Palosaari <[email protected]>
Date: Tue, 26 Jul 2011 02:16:13 +0300
Subject: [PATCH 2/3] dvb-usb: multi-frontend support (MFE)
--- drivers/media/dvb/dvb-usb/dvb-usb-dvb.c | 85 +++++++++++++++++++++++------- drivers/media/dvb/dvb-usb/dvb-usb-init.c | 4 ++ drivers/media/dvb/dvb-usb/dvb-usb.h | 11 +++- 3 files changed, 78 insertions(+), 22 deletions(-)
drivers/media/dvb/dvb-usb/dvb-usb-dvb.c +66 -19
119 lines not on this page · raw message
drivers/media/dvb/dvb-usb/dvb-usb-init.c +4 -0
@@ -77,6 +77,10 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)return ret; } +/* use exclusive FE lock if there is multiple shared FEs */ +if (adap->fe[1 ]) + adap->dvb_adap.mfe_shared =1 ; + d->num_adapters_initialized++; d->state |=DVB_USB_STATE_DVB ; }
drivers/media/dvb/dvb-usb/dvb-usb.h +8 -3
@@ -124,6 +124,8 @@ struct usb_data_stream_properties {* @caps: capabilities of the DVB USB device. * @pid_filter_count: number of PID filter position in the optional hardware * PID-filter. +* @num_frontends: number of frontends of the DVB USB adapter. +* @frontend_ctrl: called to power on/off active frontend. * @streaming_ctrl: called to start and stop the MPEG2-TS streaming of the * device (not URB submitting/killing). * @pid_filter_ctrl: called to en/disable the PID filter, if any.
@@ -141,7 +143,9 @@ struct dvb_usb_adapter_properties {#define DVB_USB_ADAP_RECEIVES_204_BYTE_TS 0x08int caps;int pid_filter_count; +int num_frontends; +int (*frontend_ctrl) (struct dvb_frontend *,int );int (*streaming_ctrl) (struct dvb_usb_adapter *,int );int (*pid_filter_ctrl) (struct dvb_usb_adapter *,int );int (*pid_filter) (struct dvb_usb_adapter *,int ,u16 ,int );
@@ -345,6 +349,7 @@ struct usb_data_stream {* * @stream: the usb data stream. */ +#define MAX_NO_OF_FE_PER_ADAP 2struct dvb_usb_adapter {struct dvb_usb_device *dev;struct dvb_usb_adapter_properties props;
@@ -363,11 +368,11 @@ struct dvb_usb_adapter {struct dmxdev dmxdev;struct dvb_demux demux;struct dvb_net dvb_net; -struct dvb_frontend *fe[1 ]; +struct dvb_frontend *fe[MAX_NO_OF_FE_PER_ADAP ];int max_feed_count; -int (*fe_init) (struct dvb_frontend *); -int (*fe_sleep) (struct dvb_frontend *); +int (*fe_init[MAX_NO_OF_FE_PER_ADAP ]) (struct dvb_frontend *); +int (*fe_sleep[MAX_NO_OF_FE_PER_ADAP ]) (struct dvb_frontend *);struct usb_data_stream stream;
Signature · 1 line
1.7.6
Quoted 1 line
From
f42168386609556ae94c844a52f94c6292e0153bMon Sep 17 00:00:00 2001
From: Antti Palosaari <[email protected]>
Date: Tue, 26 Jul 2011 02:25:21 +0300
Subject: [PATCH 3/3] anysee: use multi-frontend (MFE)
--- drivers/media/dvb/dvb-usb/anysee.c | 299 ++++++++++++++++++++++++----------- drivers/media/dvb/dvb-usb/anysee.h | 1 + 2 files changed, 206 insertions(+), 94 deletions(-)
drivers/media/dvb/dvb-usb/anysee.c +205 -94
448 lines not on this page · raw message
drivers/media/dvb/dvb-usb/anysee.h +1 -0
@@ -59,6 +59,7 @@ enum cmd {struct anysee_state {u8 hw;/* PCB ID */ u8 seq; +u8 fe_id:1 ;/* frondend ID */ };#define ANYSEE_HW_507T 2/* E30 */
Signature · 1 line
1.7.6