2006-09-19 12:51:37 -03:00
/* Linux driver for devices based on the DiBcom DiB0700 USB bridge
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation , version 2.
*
2007-07-27 10:08:51 -03:00
* Copyright ( C ) 2005 - 7 DiBcom , SA
2006-09-19 12:51:37 -03:00
*/
# include "dib0700.h"
# include "dib3000mc.h"
2006-12-02 21:15:51 -02:00
# include "dib7000m.h"
2006-10-18 08:34:16 -03:00
# include "dib7000p.h"
2006-09-19 12:51:37 -03:00
# include "mt2060.h"
2007-07-25 14:42:54 -03:00
# include "mt2266.h"
2007-07-30 12:49:04 -03:00
# include "dib0070.h"
2006-09-19 12:51:37 -03:00
2006-09-20 04:37:18 -03:00
static int force_lna_activation ;
module_param ( force_lna_activation , int , 0644 ) ;
MODULE_PARM_DESC ( force_lna_activation , " force the activation of Low-Noise-Amplifyer(s) (LNA), "
" if applicable for the device (default: 0=automatic/off). " ) ;
2007-07-30 12:49:04 -03:00
struct dib0700_adapter_state {
int ( * set_param_save ) ( struct dvb_frontend * , struct dvb_frontend_parameters * ) ;
} ;
/* Hauppauge Nova-T 500 (aka Bristol)
2006-09-19 12:51:37 -03:00
* has a LNA on GPIO0 which is enabled by setting 1 */
static struct mt2060_config bristol_mt2060_config [ 2 ] = {
{
. i2c_address = 0x60 ,
2006-09-19 12:51:56 -03:00
. clock_out = 3 ,
2006-09-19 12:51:37 -03:00
} , {
. i2c_address = 0x61 ,
}
} ;
static struct dibx000_agc_config bristol_dib3000p_mt2060_agc_config = {
. band_caps = BAND_VHF | BAND_UHF ,
2006-09-19 12:51:53 -03:00
. setup = ( 1 < < 8 ) | ( 5 < < 5 ) | ( 0 < < 4 ) | ( 0 < < 3 ) | ( 0 < < 2 ) | ( 2 < < 0 ) ,
2006-09-19 12:51:37 -03:00
2006-09-19 12:51:40 -03:00
. agc1_max = 42598 ,
. agc1_min = 17694 ,
. agc2_max = 45875 ,
. agc2_min = 0 ,
2006-09-19 12:51:37 -03:00
2006-09-19 12:51:40 -03:00
. agc1_pt1 = 0 ,
. agc1_pt2 = 59 ,
2006-09-19 12:51:37 -03:00
2006-09-19 12:51:40 -03:00
. agc1_slope1 = 0 ,
. agc1_slope2 = 69 ,
2006-09-19 12:51:37 -03:00
. agc2_pt1 = 0 ,
2006-09-19 12:51:40 -03:00
. agc2_pt2 = 59 ,
2006-09-19 12:51:37 -03:00
2006-09-19 12:51:40 -03:00
. agc2_slope1 = 111 ,
. agc2_slope2 = 28 ,
2006-09-19 12:51:37 -03:00
} ;
static struct dib3000mc_config bristol_dib3000mc_config [ 2 ] = {
{ . agc = & bristol_dib3000p_mt2060_agc_config ,
. max_time = 0x196 ,
. ln_adc_level = 0x1cc7 ,
. output_mpeg2_in_188_bytes = 1 ,
} ,
{ . agc = & bristol_dib3000p_mt2060_agc_config ,
. max_time = 0x196 ,
. ln_adc_level = 0x1cc7 ,
. output_mpeg2_in_188_bytes = 1 ,
}
} ;
static int bristol_frontend_attach ( struct dvb_usb_adapter * adap )
{
2006-09-19 12:51:40 -03:00
struct dib0700_state * st = adap - > dev - > priv ;
2006-09-19 12:51:37 -03:00
if ( adap - > id = = 0 ) {
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 0 ) ; msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 1 ) ; msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ; msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 1 ) ; msleep ( 10 ) ;
2006-09-20 04:37:18 -03:00
if ( force_lna_activation )
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 1 ) ;
else
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 0 ) ;
2006-09-19 12:51:40 -03:00
2006-09-19 12:51:37 -03:00
if ( dib3000mc_i2c_enumeration ( & adap - > dev - > i2c_adap , 2 , DEFAULT_DIB3000P_I2C_ADDRESS , bristol_dib3000mc_config ) ! = 0 ) {
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 0 ) ; msleep ( 10 ) ;
return - ENODEV ;
}
}
2006-09-19 12:51:40 -03:00
st - > mt2060_if1 [ adap - > id ] = 1220 ;
return ( adap - > fe = dvb_attach ( dib3000mc_attach , & adap - > dev - > i2c_adap ,
( 10 + adap - > id ) < < 1 , & bristol_dib3000mc_config [ adap - > id ] ) ) = = NULL ? - ENODEV : 0 ;
2006-09-19 12:51:37 -03:00
}
static int bristol_tuner_attach ( struct dvb_usb_adapter * adap )
{
struct dib0700_state * st = adap - > dev - > priv ;
struct i2c_adapter * tun_i2c = dib3000mc_get_tuner_i2c_master ( adap - > fe , 1 ) ;
2006-09-19 12:51:40 -03:00
return dvb_attach ( mt2060_attach , adap - > fe , tun_i2c , & bristol_mt2060_config [ adap - > id ] ,
st - > mt2060_if1 [ adap - > id ] ) = = NULL ? - ENODEV : 0 ;
2006-09-19 12:51:37 -03:00
}
2007-07-30 12:49:04 -03:00
/* STK7700D: Pinnacle/Terratec/Hauppauge Dual DVB-T Diversity */
2007-07-25 14:42:54 -03:00
2007-07-27 10:08:51 -03:00
/* MT226x */
static struct dibx000_agc_config stk7700d_7000p_mt2266_agc_config [ 2 ] = {
{
BAND_UHF , // band_caps
/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=1, P_agc_inv_pwm1=1, P_agc_inv_pwm2=1,
* P_agc_inh_dc_rv_est = 0 , P_agc_time_est = 3 , P_agc_freeze = 0 , P_agc_nb_est = 2 , P_agc_write = 0 */
( 0 < < 15 ) | ( 0 < < 14 ) | ( 1 < < 11 ) | ( 1 < < 10 ) | ( 1 < < 9 ) | ( 0 < < 8 ) | ( 3 < < 5 ) | ( 0 < < 4 ) | ( 5 < < 1 ) | ( 0 < < 0 ) , // setup
1130 , // inv_gain
21 , // time_stabiliz
0 , // alpha_level
118 , // thlock
0 , // wbd_inv
3530 , // wbd_ref
1 , // wbd_sel
0 , // wbd_alpha
65535 , // agc1_max
33770 , // agc1_min
65535 , // agc2_max
23592 , // agc2_min
0 , // agc1_pt1
62 , // agc1_pt2
255 , // agc1_pt3
64 , // agc1_slope1
64 , // agc1_slope2
132 , // agc2_pt1
192 , // agc2_pt2
80 , // agc2_slope1
80 , // agc2_slope2
17 , // alpha_mant
27 , // alpha_exp
23 , // beta_mant
51 , // beta_exp
1 , // perform_agc_softsplit
} , {
BAND_VHF | BAND_LBAND , // band_caps
/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=1, P_agc_inv_pwm1=1, P_agc_inv_pwm2=1,
* P_agc_inh_dc_rv_est = 0 , P_agc_time_est = 3 , P_agc_freeze = 0 , P_agc_nb_est = 2 , P_agc_write = 0 */
( 0 < < 15 ) | ( 0 < < 14 ) | ( 1 < < 11 ) | ( 1 < < 10 ) | ( 1 < < 9 ) | ( 0 < < 8 ) | ( 3 < < 5 ) | ( 0 < < 4 ) | ( 2 < < 1 ) | ( 0 < < 0 ) , // setup
2372 , // inv_gain
21 , // time_stabiliz
0 , // alpha_level
118 , // thlock
0 , // wbd_inv
3530 , // wbd_ref
1 , // wbd_sel
0 , // wbd_alpha
65535 , // agc1_max
0 , // agc1_min
65535 , // agc2_max
23592 , // agc2_min
0 , // agc1_pt1
128 , // agc1_pt2
128 , // agc1_pt3
128 , // agc1_slope1
0 , // agc1_slope2
128 , // agc2_pt1
253 , // agc2_pt2
81 , // agc2_slope1
0 , // agc2_slope2
17 , // alpha_mant
27 , // alpha_exp
23 , // beta_mant
51 , // beta_exp
1 , // perform_agc_softsplit
}
2007-07-25 14:42:54 -03:00
} ;
static struct dibx000_bandwidth_config stk7700d_mt2266_pll_config = {
60000 , 30000 , // internal, sampling
1 , 8 , 3 , 1 , 0 , // pll_cfg: prediv, ratio, range, reset, bypass
0 , 0 , 1 , 1 , 2 , // misc: refdiv, bypclk_div, IO_CLK_en_core, ADClkSrc, modulo
( 3 < < 14 ) | ( 1 < < 12 ) | ( 524 < < 0 ) , // sad_cfg: refsel, sel, freq_15k
0 , // ifreq
20452225 , // timf
} ;
static struct dib7000p_config stk7700d_dib7000p_mt2266_config [ ] = {
{ . output_mpeg2_in_188_bytes = 1 ,
. hostbus_diversity = 1 ,
. tuner_is_baseband = 1 ,
2007-07-27 10:08:51 -03:00
. agc_config_count = 2 ,
. agc = stk7700d_7000p_mt2266_agc_config ,
2007-07-25 14:42:54 -03:00
. bw = & stk7700d_mt2266_pll_config ,
2007-07-27 10:08:51 -03:00
. gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000P_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS ,
2007-07-25 14:42:54 -03:00
} ,
{ . output_mpeg2_in_188_bytes = 1 ,
. hostbus_diversity = 1 ,
. tuner_is_baseband = 1 ,
2007-07-27 10:08:51 -03:00
. agc_config_count = 2 ,
. agc = stk7700d_7000p_mt2266_agc_config ,
2007-07-25 14:42:54 -03:00
. bw = & stk7700d_mt2266_pll_config ,
2007-07-27 10:08:51 -03:00
. gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000P_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS ,
2007-07-25 14:42:54 -03:00
}
} ;
static struct mt2266_config stk7700d_mt2266_config [ 2 ] = {
{ . i2c_address = 0x60
} ,
{ . i2c_address = 0x60
}
} ;
static int stk7700d_frontend_attach ( struct dvb_usb_adapter * adap )
{
if ( adap - > id = = 0 ) {
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO9 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO4 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO7 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 1 ) ;
dib7000p_i2c_enumeration ( & adap - > dev - > i2c_adap , 2 , 18 , stk7700d_dib7000p_mt2266_config ) ;
}
adap - > fe = dvb_attach ( dib7000p_attach , & adap - > dev - > i2c_adap , 0x80 + ( adap - > id < < 1 ) ,
& stk7700d_dib7000p_mt2266_config [ adap - > id ] ) ;
return adap - > fe = = NULL ? - ENODEV : 0 ;
}
static int stk7700d_tuner_attach ( struct dvb_usb_adapter * adap )
{
struct i2c_adapter * tun_i2c ;
tun_i2c = dib7000p_get_i2c_master ( adap - > fe , DIBX000_I2C_INTERFACE_TUNER , 1 ) ;
return dvb_attach ( mt2266_attach , adap - > fe , tun_i2c ,
& stk7700d_mt2266_config [ adap - > id ] ) = = NULL ? - ENODEV : 0 ; ;
}
# define DEFAULT_RC_INTERVAL 150
static u8 rc_request [ ] = { REQUEST_POLL_RC , 0 } ;
2007-07-30 13:50:28 -03:00
static int dib0700_rc_query ( struct dvb_usb_device * d , u32 * event , int * state )
2007-07-25 14:42:54 -03:00
{
u8 key [ 4 ] ;
int i ;
struct dvb_usb_rc_key * keymap = d - > props . rc_key_map ;
struct dib0700_state * st = d - > priv ;
* event = 0 ;
* state = REMOTE_NO_KEY_PRESSED ;
i = dib0700_ctrl_rd ( d , rc_request , 2 , key , 4 ) ;
if ( i < = 0 ) {
2007-07-31 08:48:40 -03:00
err ( " RC Query Failed " ) ;
2007-07-31 19:45:13 -03:00
return - 1 ;
2007-07-25 14:42:54 -03:00
}
if ( key [ 0 ] = = 0 & & key [ 1 ] = = 0 & & key [ 2 ] = = 0 & & key [ 3 ] = = 0 ) return 0 ;
2007-07-31 19:45:13 -03:00
if ( key [ 3 - 1 ] ! = st - > rc_toggle ) {
2007-07-25 14:42:54 -03:00
for ( i = 0 ; i < d - > props . rc_key_map_size ; i + + ) {
2007-07-31 19:45:13 -03:00
if ( keymap [ i ] . custom = = key [ 3 - 2 ] & & keymap [ i ] . data = = key [ 3 - 3 ] ) {
2007-07-25 14:42:54 -03:00
* event = keymap [ i ] . event ;
* state = REMOTE_KEY_PRESSED ;
2007-07-31 19:45:13 -03:00
st - > rc_toggle = key [ 3 - 1 ] ;
2007-07-25 14:42:54 -03:00
return 0 ;
}
}
2007-07-31 19:45:13 -03:00
err ( " Unknown remote controller key : %2X %2X " , ( int ) key [ 3 - 2 ] , ( int ) key [ 3 - 3 ] ) ;
2007-07-25 14:42:54 -03:00
}
return 0 ;
}
2007-07-30 13:50:28 -03:00
static struct dvb_usb_rc_key dib0700_rc_keys [ ] = {
2007-07-25 14:42:54 -03:00
/* Key codes for the tiny Pinnacle remote*/
{ 0x07 , 0x00 , KEY_MUTE } ,
{ 0x07 , 0x01 , KEY_MENU } , // Pinnacle logo
{ 0x07 , 0x39 , KEY_POWER } ,
{ 0x07 , 0x03 , KEY_VOLUMEUP } ,
{ 0x07 , 0x09 , KEY_VOLUMEDOWN } ,
{ 0x07 , 0x06 , KEY_CHANNELUP } ,
{ 0x07 , 0x0c , KEY_CHANNELDOWN } ,
{ 0x07 , 0x0f , KEY_1 } ,
{ 0x07 , 0x15 , KEY_2 } ,
{ 0x07 , 0x10 , KEY_3 } ,
{ 0x07 , 0x18 , KEY_4 } ,
{ 0x07 , 0x1b , KEY_5 } ,
{ 0x07 , 0x1e , KEY_6 } ,
{ 0x07 , 0x11 , KEY_7 } ,
{ 0x07 , 0x21 , KEY_8 } ,
{ 0x07 , 0x12 , KEY_9 } ,
{ 0x07 , 0x27 , KEY_0 } ,
{ 0x07 , 0x24 , KEY_SCREEN } , // 'Square' key
{ 0x07 , 0x2a , KEY_TEXT } , // 'T' key
{ 0x07 , 0x2d , KEY_REWIND } ,
{ 0x07 , 0x30 , KEY_PLAY } ,
{ 0x07 , 0x33 , KEY_FASTFORWARD } ,
{ 0x07 , 0x36 , KEY_RECORD } ,
{ 0x07 , 0x3c , KEY_STOP } ,
{ 0x07 , 0x3f , KEY_CANCEL } , // '?' key
/* Key codes for the Terratec Cinergy DT XS Diversity, similar to cinergyT2.c */
{ 0xeb , 0x01 , KEY_POWER } ,
{ 0xeb , 0x02 , KEY_1 } ,
{ 0xeb , 0x03 , KEY_2 } ,
{ 0xeb , 0x04 , KEY_3 } ,
{ 0xeb , 0x05 , KEY_4 } ,
{ 0xeb , 0x06 , KEY_5 } ,
{ 0xeb , 0x07 , KEY_6 } ,
{ 0xeb , 0x08 , KEY_7 } ,
{ 0xeb , 0x09 , KEY_8 } ,
{ 0xeb , 0x0a , KEY_9 } ,
{ 0xeb , 0x0b , KEY_VIDEO } ,
{ 0xeb , 0x0c , KEY_0 } ,
{ 0xeb , 0x0d , KEY_REFRESH } ,
{ 0xeb , 0x0f , KEY_EPG } ,
{ 0xeb , 0x10 , KEY_UP } ,
{ 0xeb , 0x11 , KEY_LEFT } ,
{ 0xeb , 0x12 , KEY_OK } ,
{ 0xeb , 0x13 , KEY_RIGHT } ,
{ 0xeb , 0x14 , KEY_DOWN } ,
{ 0xeb , 0x16 , KEY_INFO } ,
{ 0xeb , 0x17 , KEY_RED } ,
{ 0xeb , 0x18 , KEY_GREEN } ,
{ 0xeb , 0x19 , KEY_YELLOW } ,
{ 0xeb , 0x1a , KEY_BLUE } ,
{ 0xeb , 0x1b , KEY_CHANNELUP } ,
{ 0xeb , 0x1c , KEY_VOLUMEUP } ,
2007-07-30 13:54:55 -03:00
{ 0xeb , 0x1d , KEY_MUTE } ,
2007-07-25 14:42:54 -03:00
{ 0xeb , 0x1e , KEY_VOLUMEDOWN } ,
{ 0xeb , 0x1f , KEY_CHANNELDOWN } ,
{ 0xeb , 0x40 , KEY_PAUSE } ,
{ 0xeb , 0x41 , KEY_HOME } ,
{ 0xeb , 0x42 , KEY_MENU } , /* DVD Menu */
{ 0xeb , 0x43 , KEY_SUBTITLE } ,
{ 0xeb , 0x44 , KEY_TEXT } , /* Teletext */
{ 0xeb , 0x45 , KEY_DELETE } ,
{ 0xeb , 0x46 , KEY_TV } ,
{ 0xeb , 0x47 , KEY_DVD } ,
{ 0xeb , 0x48 , KEY_STOP } ,
{ 0xeb , 0x49 , KEY_VIDEO } ,
{ 0xeb , 0x4a , KEY_AUDIO } , /* Music */
{ 0xeb , 0x4b , KEY_SCREEN } , /* Pic */
{ 0xeb , 0x4c , KEY_PLAY } ,
{ 0xeb , 0x4d , KEY_BACK } ,
{ 0xeb , 0x4e , KEY_REWIND } ,
{ 0xeb , 0x4f , KEY_FASTFORWARD } ,
{ 0xeb , 0x54 , KEY_PREVIOUS } ,
{ 0xeb , 0x58 , KEY_RECORD } ,
2007-07-30 13:54:55 -03:00
{ 0xeb , 0x5c , KEY_NEXT } ,
/* Key codes for the Haupauge WinTV Nova-TD, copied from nova-t-usb2.c (Nova-T USB2) */
{ 0x1e , 0x00 , KEY_0 } ,
{ 0x1e , 0x01 , KEY_1 } ,
{ 0x1e , 0x02 , KEY_2 } ,
{ 0x1e , 0x03 , KEY_3 } ,
{ 0x1e , 0x04 , KEY_4 } ,
{ 0x1e , 0x05 , KEY_5 } ,
{ 0x1e , 0x06 , KEY_6 } ,
{ 0x1e , 0x07 , KEY_7 } ,
{ 0x1e , 0x08 , KEY_8 } ,
{ 0x1e , 0x09 , KEY_9 } ,
{ 0x1e , 0x0a , KEY_KPASTERISK } ,
{ 0x1e , 0x0b , KEY_RED } ,
{ 0x1e , 0x0c , KEY_RADIO } ,
{ 0x1e , 0x0d , KEY_MENU } ,
{ 0x1e , 0x0e , KEY_GRAVE } , /* # */
{ 0x1e , 0x0f , KEY_MUTE } ,
{ 0x1e , 0x10 , KEY_VOLUMEUP } ,
{ 0x1e , 0x11 , KEY_VOLUMEDOWN } ,
{ 0x1e , 0x12 , KEY_CHANNEL } ,
{ 0x1e , 0x14 , KEY_UP } ,
{ 0x1e , 0x15 , KEY_DOWN } ,
{ 0x1e , 0x16 , KEY_LEFT } ,
{ 0x1e , 0x17 , KEY_RIGHT } ,
{ 0x1e , 0x18 , KEY_VIDEO } ,
{ 0x1e , 0x19 , KEY_AUDIO } ,
{ 0x1e , 0x1a , KEY_MEDIA } ,
{ 0x1e , 0x1b , KEY_EPG } ,
{ 0x1e , 0x1c , KEY_TV } ,
{ 0x1e , 0x1e , KEY_NEXT } ,
{ 0x1e , 0x1f , KEY_BACK } ,
{ 0x1e , 0x20 , KEY_CHANNELUP } ,
{ 0x1e , 0x21 , KEY_CHANNELDOWN } ,
{ 0x1e , 0x24 , KEY_LAST } , /* Skip backwards */
{ 0x1e , 0x25 , KEY_OK } ,
{ 0x1e , 0x29 , KEY_BLUE } ,
{ 0x1e , 0x2e , KEY_GREEN } ,
{ 0x1e , 0x30 , KEY_PAUSE } ,
{ 0x1e , 0x32 , KEY_REWIND } ,
{ 0x1e , 0x34 , KEY_FASTFORWARD } ,
{ 0x1e , 0x35 , KEY_PLAY } ,
{ 0x1e , 0x36 , KEY_STOP } ,
{ 0x1e , 0x37 , KEY_RECORD } ,
{ 0x1e , 0x38 , KEY_YELLOW } ,
{ 0x1e , 0x3b , KEY_GOTO } ,
{ 0x1e , 0x3d , KEY_POWER } ,
2007-07-30 13:50:28 -03:00
} ;
2007-07-25 14:42:54 -03:00
2006-09-19 12:51:37 -03:00
/* STK7700P: Hauppauge Nova-T Stick, AVerMedia Volar */
2006-10-18 08:34:16 -03:00
static struct dibx000_agc_config stk7700p_7000m_mt2060_agc_config = {
2006-10-17 18:28:14 -03:00
BAND_UHF | BAND_VHF , // band_caps
/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=5, P_agc_inv_pwm1=0, P_agc_inv_pwm2=0,
* P_agc_inh_dc_rv_est = 0 , P_agc_time_est = 3 , P_agc_freeze = 0 , P_agc_nb_est = 2 , P_agc_write = 0 */
( 0 < < 15 ) | ( 0 < < 14 ) | ( 5 < < 11 ) | ( 0 < < 10 ) | ( 0 < < 9 ) | ( 0 < < 8 ) | ( 3 < < 5 ) | ( 0 < < 4 ) | ( 2 < < 1 ) | ( 0 < < 0 ) , // setup
712 , // inv_gain
41 , // time_stabiliz
0 , // alpha_level
118 , // thlock
0 , // wbd_inv
4095 , // wbd_ref
0 , // wbd_sel
0 , // wbd_alpha
42598 , // agc1_max
17694 , // agc1_min
45875 , // agc2_max
2621 , // agc2_min
0 , // agc1_pt1
76 , // agc1_pt2
139 , // agc1_pt3
52 , // agc1_slope1
59 , // agc1_slope2
107 , // agc2_pt1
172 , // agc2_pt2
57 , // agc2_slope1
70 , // agc2_slope2
21 , // alpha_mant
25 , // alpha_exp
28 , // beta_mant
48 , // beta_exp
1 , // perform_agc_softsplit
{ 0 , // split_min
107 , // split_max
51800 , // global_split_min
24700 // global_split_max
} ,
} ;
2006-10-18 08:34:16 -03:00
static struct dibx000_agc_config stk7700p_7000p_mt2060_agc_config = {
BAND_UHF | BAND_VHF ,
/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=5, P_agc_inv_pwm1=0, P_agc_inv_pwm2=0,
* P_agc_inh_dc_rv_est = 0 , P_agc_time_est = 3 , P_agc_freeze = 0 , P_agc_nb_est = 2 , P_agc_write = 0 */
( 0 < < 15 ) | ( 0 < < 14 ) | ( 5 < < 11 ) | ( 0 < < 10 ) | ( 0 < < 9 ) | ( 0 < < 8 ) | ( 3 < < 5 ) | ( 0 < < 4 ) | ( 2 < < 1 ) | ( 0 < < 0 ) , // setup
712 , // inv_gain
41 , // time_stabiliz
0 , // alpha_level
118 , // thlock
0 , // wbd_inv
4095 , // wbd_ref
0 , // wbd_sel
0 , // wbd_alpha
42598 , // agc1_max
16384 , // agc1_min
42598 , // agc2_max
0 , // agc2_min
0 , // agc1_pt1
137 , // agc1_pt2
255 , // agc1_pt3
0 , // agc1_slope1
255 , // agc1_slope2
0 , // agc2_pt1
0 , // agc2_pt2
0 , // agc2_slope1
41 , // agc2_slope2
15 , // alpha_mant
25 , // alpha_exp
28 , // beta_mant
48 , // beta_exp
0 , // perform_agc_softsplit
} ;
static struct dibx000_bandwidth_config stk7700p_pll_config = {
2006-10-17 18:28:14 -03:00
60000 , 30000 , // internal, sampling
1 , 8 , 3 , 1 , 0 , // pll_cfg: prediv, ratio, range, reset, bypass
0 , 0 , 1 , 1 , 0 , // misc: refdiv, bypclk_div, IO_CLK_en_core, ADClkSrc, modulo
( 3 < < 14 ) | ( 1 < < 12 ) | ( 524 < < 0 ) , // sad_cfg: refsel, sel, freq_15k
60258167 , // ifreq
20452225 , // timf
2007-07-31 08:19:28 -03:00
30000000 , // xtal
2006-10-17 18:28:14 -03:00
} ;
static struct dib7000m_config stk7700p_dib7000m_config = {
. dvbt_mode = 1 ,
. output_mpeg2_in_188_bytes = 1 ,
. quartz_direct = 1 ,
. agc_config_count = 1 ,
2006-10-18 08:34:16 -03:00
. agc = & stk7700p_7000m_mt2060_agc_config ,
. bw = & stk7700p_pll_config ,
. gpio_dir = DIB7000M_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000M_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000M_GPIO_DEFAULT_PWM_POS ,
} ;
static struct dib7000p_config stk7700p_dib7000p_config = {
. output_mpeg2_in_188_bytes = 1 ,
2007-07-27 10:08:51 -03:00
. agc_config_count = 1 ,
2006-10-18 08:34:16 -03:00
. agc = & stk7700p_7000p_mt2060_agc_config ,
. bw = & stk7700p_pll_config ,
2006-10-17 18:28:14 -03:00
. gpio_dir = DIB7000M_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000M_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000M_GPIO_DEFAULT_PWM_POS ,
2006-09-19 12:51:37 -03:00
} ;
static int stk7700p_frontend_attach ( struct dvb_usb_adapter * adap )
{
2006-10-17 18:28:14 -03:00
struct dib0700_state * st = adap - > dev - > priv ;
2006-09-19 12:51:37 -03:00
/* unless there is no real power management in DVB - we leave the device on GPIO6 */
2006-10-18 08:34:16 -03:00
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ;
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 0 ) ; msleep ( 50 ) ;
2006-10-17 18:28:14 -03:00
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 1 ) ; msleep ( 10 ) ;
2006-10-18 08:34:16 -03:00
dib0700_set_gpio ( adap - > dev , GPIO9 , GPIO_OUT , 1 ) ;
2006-09-19 12:51:37 -03:00
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ; msleep ( 10 ) ;
2006-10-18 08:34:16 -03:00
dib0700_ctrl_clock ( adap - > dev , 72 , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 1 ) ; msleep ( 100 ) ;
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 1 ) ;
2006-09-19 12:51:37 -03:00
2006-10-17 18:28:14 -03:00
st - > mt2060_if1 [ 0 ] = 1220 ;
2006-10-18 08:34:16 -03:00
if ( dib7000pc_detection ( & adap - > dev - > i2c_adap ) ) {
adap - > fe = dvb_attach ( dib7000p_attach , & adap - > dev - > i2c_adap , 18 , & stk7700p_dib7000p_config ) ;
st - > is_dib7000pc = 1 ;
} else
adap - > fe = dvb_attach ( dib7000m_attach , & adap - > dev - > i2c_adap , 18 , & stk7700p_dib7000m_config ) ;
return adap - > fe = = NULL ? - ENODEV : 0 ;
2006-09-19 12:51:37 -03:00
}
2006-10-17 18:28:14 -03:00
static struct mt2060_config stk7700p_mt2060_config = {
0x60
} ;
2006-09-19 12:51:37 -03:00
static int stk7700p_tuner_attach ( struct dvb_usb_adapter * adap )
{
2006-10-17 18:28:14 -03:00
struct dib0700_state * st = adap - > dev - > priv ;
2006-10-18 08:34:16 -03:00
struct i2c_adapter * tun_i2c ;
if ( st - > is_dib7000pc )
tun_i2c = dib7000p_get_i2c_master ( adap - > fe , DIBX000_I2C_INTERFACE_TUNER , 1 ) ;
else
tun_i2c = dib7000m_get_i2c_master ( adap - > fe , DIBX000_I2C_INTERFACE_TUNER , 1 ) ;
return dvb_attach ( mt2060_attach , adap - > fe , tun_i2c , & stk7700p_mt2060_config ,
2006-10-17 18:28:14 -03:00
st - > mt2060_if1 [ 0 ] ) = = NULL ? - ENODEV : 0 ;
2006-09-19 12:51:37 -03:00
}
2007-07-30 12:49:04 -03:00
/* DIB7070 generic */
static struct dibx000_agc_config dib7070_agc_config = {
BAND_UHF | BAND_VHF | BAND_LBAND | BAND_SBAND ,
/* P_agc_use_sd_mod1=0, P_agc_use_sd_mod2=0, P_agc_freq_pwm_div=5, P_agc_inv_pwm1=0, P_agc_inv_pwm2=0,
* P_agc_inh_dc_rv_est = 0 , P_agc_time_est = 3 , P_agc_freeze = 0 , P_agc_nb_est = 5 , P_agc_write = 0 */
( 0 < < 15 ) | ( 0 < < 14 ) | ( 5 < < 11 ) | ( 0 < < 10 ) | ( 0 < < 9 ) | ( 0 < < 8 ) | ( 3 < < 5 ) | ( 0 < < 4 ) | ( 5 < < 1 ) | ( 0 < < 0 ) , // setup
600 , // inv_gain
10 , // time_stabiliz
0 , // alpha_level
118 , // thlock
0 , // wbd_inv
3530 , // wbd_ref
1 , // wbd_sel
5 , // wbd_alpha
65535 , // agc1_max
0 , // agc1_min
65535 , // agc2_max
0 , // agc2_min
0 , // agc1_pt1
40 , // agc1_pt2
183 , // agc1_pt3
206 , // agc1_slope1
255 , // agc1_slope2
72 , // agc2_pt1
152 , // agc2_pt2
88 , // agc2_slope1
90 , // agc2_slope2
17 , // alpha_mant
27 , // alpha_exp
23 , // beta_mant
51 , // beta_exp
0 , // perform_agc_softsplit
} ;
static int dib7070_tuner_reset ( struct dvb_frontend * fe , int onoff )
{
return dib7000p_set_gpio ( fe , 8 , 0 , ! onoff ) ;
}
static int dib7070_tuner_sleep ( struct dvb_frontend * fe , int onoff )
{
return dib7000p_set_gpio ( fe , 9 , 0 , onoff ) ;
}
static struct dib0070_config dib7070p_dib0070_config [ 2 ] = {
{
. i2c_address = DEFAULT_DIB0070_I2C_ADDRESS ,
. reset = dib7070_tuner_reset ,
. sleep = dib7070_tuner_sleep ,
. clock_khz = 12000 ,
. clock_pad_drive = 4
} , {
. i2c_address = DEFAULT_DIB0070_I2C_ADDRESS ,
. reset = dib7070_tuner_reset ,
. sleep = dib7070_tuner_sleep ,
. clock_khz = 12000 ,
}
} ;
static int dib7070_set_param_override ( struct dvb_frontend * fe , struct dvb_frontend_parameters * fep )
{
struct dvb_usb_adapter * adap = fe - > dvb - > priv ;
struct dib0700_adapter_state * state = adap - > priv ;
u16 offset ;
u8 band = BAND_OF_FREQUENCY ( fep - > frequency / 1000 ) ;
switch ( band ) {
case BAND_VHF : offset = 950 ; break ;
case BAND_UHF :
default : offset = 550 ; break ;
}
deb_info ( " WBD for DiB7000P: %d \n " , offset + dib0070_wbd_offset ( fe ) ) ;
dib7000p_set_wbd_ref ( fe , offset + dib0070_wbd_offset ( fe ) ) ;
return state - > set_param_save ( fe , fep ) ;
}
static int dib7070p_tuner_attach ( struct dvb_usb_adapter * adap )
{
struct dib0700_adapter_state * st = adap - > priv ;
struct i2c_adapter * tun_i2c = dib7000p_get_i2c_master ( adap - > fe , DIBX000_I2C_INTERFACE_TUNER , 1 ) ;
if ( adap - > id = = 0 ) {
if ( dvb_attach ( dib0070_attach , adap - > fe , tun_i2c , & dib7070p_dib0070_config [ 0 ] ) = = NULL )
return - ENODEV ;
} else {
if ( dvb_attach ( dib0070_attach , adap - > fe , tun_i2c , & dib7070p_dib0070_config [ 1 ] ) = = NULL )
return - ENODEV ;
}
st - > set_param_save = adap - > fe - > ops . tuner_ops . set_params ;
adap - > fe - > ops . tuner_ops . set_params = dib7070_set_param_override ;
return 0 ;
}
static struct dibx000_bandwidth_config dib7070_bw_config_12_mhz = {
60000 , 15000 , // internal, sampling
1 , 20 , 3 , 1 , 0 , // pll_cfg: prediv, ratio, range, reset, bypass
0 , 0 , 1 , 1 , 2 , // misc: refdiv, bypclk_div, IO_CLK_en_core, ADClkSrc, modulo
( 3 < < 14 ) | ( 1 < < 12 ) | ( 524 < < 0 ) , // sad_cfg: refsel, sel, freq_15k
( 0 < < 25 ) | 0 , // ifreq = 0.000000 MHz
20452225 , // timf
12000000 , // xtal_hz
} ;
static struct dib7000p_config dib7070p_dib7000p_config = {
. output_mpeg2_in_188_bytes = 1 ,
. agc_config_count = 1 ,
. agc = & dib7070_agc_config ,
. bw = & dib7070_bw_config_12_mhz ,
. gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000P_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS ,
. hostbus_diversity = 1 ,
} ;
/* STK7070P */
static int stk7070p_frontend_attach ( struct dvb_usb_adapter * adap )
{
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO9 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO4 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO7 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ;
dib0700_ctrl_clock ( adap - > dev , 72 , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 1 ) ;
dib7000p_i2c_enumeration ( & adap - > dev - > i2c_adap , 1 , 18 , & dib7070p_dib7000p_config ) ;
adap - > fe = dvb_attach ( dib7000p_attach , & adap - > dev - > i2c_adap , 0x80 , & dib7070p_dib7000p_config ) ;
return adap - > fe = = NULL ? - ENODEV : 0 ;
}
/* STK7070PD */
static struct dib7000p_config stk7070pd_dib7000p_config [ 2 ] = {
{
. output_mpeg2_in_188_bytes = 1 ,
. agc_config_count = 1 ,
. agc = & dib7070_agc_config ,
. bw = & dib7070_bw_config_12_mhz ,
. gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000P_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS ,
. hostbus_diversity = 1 ,
} , {
. output_mpeg2_in_188_bytes = 1 ,
. agc_config_count = 1 ,
. agc = & dib7070_agc_config ,
. bw = & dib7070_bw_config_12_mhz ,
. gpio_dir = DIB7000P_GPIO_DEFAULT_DIRECTIONS ,
. gpio_val = DIB7000P_GPIO_DEFAULT_VALUES ,
. gpio_pwm_pos = DIB7000P_GPIO_DEFAULT_PWM_POS ,
. hostbus_diversity = 1 ,
}
} ;
static int stk7070pd_frontend_attach0 ( struct dvb_usb_adapter * adap )
{
dib0700_set_gpio ( adap - > dev , GPIO6 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO9 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO4 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO7 , GPIO_OUT , 1 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 0 ) ;
dib0700_ctrl_clock ( adap - > dev , 72 , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO10 , GPIO_OUT , 1 ) ;
msleep ( 10 ) ;
dib0700_set_gpio ( adap - > dev , GPIO0 , GPIO_OUT , 1 ) ;
dib7000p_i2c_enumeration ( & adap - > dev - > i2c_adap , 2 , 18 , stk7070pd_dib7000p_config ) ;
adap - > fe = dvb_attach ( dib7000p_attach , & adap - > dev - > i2c_adap , 0x80 , & stk7070pd_dib7000p_config [ 0 ] ) ;
return adap - > fe = = NULL ? - ENODEV : 0 ;
}
static int stk7070pd_frontend_attach1 ( struct dvb_usb_adapter * adap )
{
adap - > fe = dvb_attach ( dib7000p_attach , & adap - > dev - > i2c_adap , 0x82 , & stk7070pd_dib7000p_config [ 1 ] ) ;
return adap - > fe = = NULL ? - ENODEV : 0 ;
}
/* DVB-USB and USB stuff follows */
2006-09-19 12:51:37 -03:00
struct usb_device_id dib0700_usb_id_table [ ] = {
2007-07-30 12:49:04 -03:00
/* 0 */ { USB_DEVICE ( USB_VID_DIBCOM , USB_PID_DIBCOM_STK7700P ) } ,
2006-10-19 07:27:19 -03:00
{ USB_DEVICE ( USB_VID_DIBCOM , USB_PID_DIBCOM_STK7700P_PC ) } ,
2006-09-19 12:51:37 -03:00
{ USB_DEVICE ( USB_VID_HAUPPAUGE , USB_PID_HAUPPAUGE_NOVA_T_500 ) } ,
2006-09-19 12:51:49 -03:00
{ USB_DEVICE ( USB_VID_HAUPPAUGE , USB_PID_HAUPPAUGE_NOVA_T_500_2 ) } ,
2006-09-19 12:51:37 -03:00
{ USB_DEVICE ( USB_VID_HAUPPAUGE , USB_PID_HAUPPAUGE_NOVA_T_STICK ) } ,
2007-07-30 12:49:04 -03:00
/* 5 */ { USB_DEVICE ( USB_VID_AVERMEDIA , USB_PID_AVERMEDIA_VOLAR ) } ,
2006-10-19 07:27:19 -03:00
{ USB_DEVICE ( USB_VID_COMPRO , USB_PID_COMPRO_VIDEOMATE_U500 ) } ,
2006-10-19 07:58:22 -03:00
{ USB_DEVICE ( USB_VID_UNIWILL , USB_PID_UNIWILL_STK7700P ) } ,
2006-11-08 16:47:32 -03:00
{ USB_DEVICE ( USB_VID_LEADTEK , USB_PID_WINFAST_DTV_DONGLE_STK7700P ) } ,
2006-11-12 13:02:51 -03:00
{ USB_DEVICE ( USB_VID_HAUPPAUGE , USB_PID_HAUPPAUGE_NOVA_T_STICK_2 ) } ,
2007-07-30 12:49:04 -03:00
/* 10 */ { USB_DEVICE ( USB_VID_AVERMEDIA , USB_PID_AVERMEDIA_VOLAR_2 ) } ,
2007-07-25 14:42:54 -03:00
{ USB_DEVICE ( USB_VID_PINNACLE , USB_PID_PINNACLE_PCTV2000E ) } ,
{ USB_DEVICE ( USB_VID_TERRATEC , USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY ) } ,
{ USB_DEVICE ( USB_VID_HAUPPAUGE , USB_PID_HAUPPAUGE_NOVA_TD_STICK ) } ,
2007-07-27 10:08:51 -03:00
{ USB_DEVICE ( USB_VID_DIBCOM , USB_PID_DIBCOM_STK7700D ) } ,
2007-07-30 12:49:04 -03:00
/* 15 */ { USB_DEVICE ( USB_VID_DIBCOM , USB_PID_DIBCOM_STK7070P ) } ,
{ USB_DEVICE ( USB_VID_PINNACLE , USB_PID_PINNACLE_PCTV_DVB_T_FLASH ) } ,
{ USB_DEVICE ( USB_VID_DIBCOM , USB_PID_DIBCOM_STK7070PD ) } ,
{ USB_DEVICE ( USB_VID_PINNACLE , USB_PID_PINNACLE_PCTV_DUAL_DIVERSITY_DVB_T ) } ,
2007-07-30 14:24:37 -03:00
{ USB_DEVICE ( USB_VID_COMPRO , USB_PID_COMPRO_VIDEOMATE_U500_PC ) } ,
2007-10-08 20:08:46 -03:00
/* 20 */ { USB_DEVICE ( USB_VID_AVERMEDIA , USB_PID_AVERMEDIA_EXPRESS ) } ,
2007-07-30 12:49:04 -03:00
{ 0 } /* Terminating entry */
2006-09-19 12:51:37 -03:00
} ;
MODULE_DEVICE_TABLE ( usb , dib0700_usb_id_table ) ;
# define DIB0700_DEFAULT_DEVICE_PROPERTIES \
. caps = DVB_USB_IS_AN_I2C_ADAPTER , \
. usb_ctrl = DEVICE_SPECIFIC , \
2007-07-30 12:49:04 -03:00
. firmware = " dvb-usb-dib0700-03-pre1.fw " , \
2006-09-19 12:51:37 -03:00
. download_firmware = dib0700_download_firmware , \
2006-09-19 12:51:40 -03:00
. no_reconnect = 1 , \
2006-09-19 12:51:37 -03:00
. size_of_priv = sizeof ( struct dib0700_state ) , \
2006-09-19 12:51:40 -03:00
. i2c_algo = & dib0700_i2c_algo , \
. identify_state = dib0700_identify_state
2006-09-19 12:51:37 -03:00
# define DIB0700_DEFAULT_STREAMING_CONFIG(ep) \
. streaming_ctrl = dib0700_streaming_ctrl , \
. stream = { \
. type = USB_BULK , \
. count = 4 , \
. endpoint = ep , \
. u = { \
. bulk = { \
. buffersize = 39480 , \
} \
} \
}
struct dvb_usb_device_properties dib0700_devices [ ] = {
{
DIB0700_DEFAULT_DEVICE_PROPERTIES ,
. num_adapters = 1 ,
. adapter = {
{
. frontend_attach = stk7700p_frontend_attach ,
. tuner_attach = stk7700p_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x02 ) ,
} ,
} ,
2007-10-08 20:08:46 -03:00
. num_device_descs = 7 ,
2006-09-19 12:51:37 -03:00
. devices = {
{ " DiBcom STK7700P reference design " ,
2006-10-19 07:27:19 -03:00
{ & dib0700_usb_id_table [ 0 ] , & dib0700_usb_id_table [ 1 ] } ,
2006-09-19 12:51:37 -03:00
{ NULL } ,
} ,
{ " Hauppauge Nova-T Stick " ,
2006-11-12 13:02:51 -03:00
{ & dib0700_usb_id_table [ 4 ] , & dib0700_usb_id_table [ 9 ] , NULL } ,
2006-09-19 12:51:37 -03:00
{ NULL } ,
} ,
{ " AVerMedia AVerTV DVB-T Volar " ,
2006-11-14 05:01:47 -03:00
{ & dib0700_usb_id_table [ 5 ] , & dib0700_usb_id_table [ 10 ] } ,
2006-09-19 12:51:37 -03:00
{ NULL } ,
} ,
2006-10-19 07:27:19 -03:00
{ " Compro Videomate U500 " ,
2007-07-30 14:24:37 -03:00
{ & dib0700_usb_id_table [ 6 ] , & dib0700_usb_id_table [ 19 ] } ,
2006-10-19 07:27:19 -03:00
{ NULL } ,
2006-10-19 07:58:22 -03:00
} ,
{ " Uniwill STK7700P based (Hama and others) " ,
{ & dib0700_usb_id_table [ 7 ] , NULL } ,
{ NULL } ,
2006-11-08 16:47:32 -03:00
} ,
{ " Leadtek Winfast DTV Dongle (STK7700P based) " ,
{ & dib0700_usb_id_table [ 8 ] , NULL } ,
{ NULL } ,
2007-10-08 20:08:46 -03:00
} ,
{ " AVerMedia AVerTV DVB-T Express " ,
{ & dib0700_usb_id_table [ 20 ] } ,
{ NULL } ,
2006-10-19 07:27:19 -03:00
}
2007-08-18 18:05:31 -03:00
} ,
. rc_interval = DEFAULT_RC_INTERVAL ,
. rc_key_map = dib0700_rc_keys ,
. rc_key_map_size = ARRAY_SIZE ( dib0700_rc_keys ) ,
. rc_query = dib0700_rc_query
2006-09-19 12:51:37 -03:00
} , { DIB0700_DEFAULT_DEVICE_PROPERTIES ,
. num_adapters = 2 ,
. adapter = {
{
. frontend_attach = bristol_frontend_attach ,
. tuner_attach = bristol_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x02 ) ,
} , {
. frontend_attach = bristol_frontend_attach ,
. tuner_attach = bristol_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x03 ) ,
}
} ,
. num_device_descs = 1 ,
. devices = {
{ " Hauppauge Nova-T 500 Dual DVB-T " ,
2006-10-19 07:27:19 -03:00
{ & dib0700_usb_id_table [ 2 ] , & dib0700_usb_id_table [ 3 ] , NULL } ,
2006-09-19 12:51:37 -03:00
{ NULL } ,
} ,
2007-07-30 13:50:28 -03:00
} ,
. rc_interval = DEFAULT_RC_INTERVAL ,
. rc_key_map = dib0700_rc_keys ,
2007-07-30 17:02:17 -03:00
. rc_key_map_size = ARRAY_SIZE ( dib0700_rc_keys ) ,
2007-07-30 13:50:28 -03:00
. rc_query = dib0700_rc_query
2007-07-25 14:42:54 -03:00
} , { DIB0700_DEFAULT_DEVICE_PROPERTIES ,
. num_adapters = 2 ,
. adapter = {
{
. frontend_attach = stk7700d_frontend_attach ,
. tuner_attach = stk7700d_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x02 ) ,
} , {
. frontend_attach = stk7700d_frontend_attach ,
. tuner_attach = stk7700d_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x03 ) ,
}
} ,
2007-07-27 10:08:51 -03:00
. num_device_descs = 4 ,
2007-07-25 14:42:54 -03:00
. devices = {
{ " Pinnacle PCTV 2000e " ,
{ & dib0700_usb_id_table [ 11 ] , NULL } ,
{ NULL } ,
} ,
{ " Terratec Cinergy DT XS Diversity " ,
{ & dib0700_usb_id_table [ 12 ] , NULL } ,
{ NULL } ,
} ,
2007-08-18 18:04:00 -03:00
{ " Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity " ,
2007-07-25 14:42:54 -03:00
{ & dib0700_usb_id_table [ 13 ] , NULL } ,
{ NULL } ,
} ,
2007-07-30 12:49:04 -03:00
{ " DiBcom STK7700D reference design " ,
2007-07-27 10:08:51 -03:00
{ & dib0700_usb_id_table [ 14 ] , NULL } ,
{ NULL } ,
} ,
2007-07-25 14:42:54 -03:00
} ,
2007-07-30 13:50:28 -03:00
2007-07-25 14:42:54 -03:00
. rc_interval = DEFAULT_RC_INTERVAL ,
2007-07-30 13:50:28 -03:00
. rc_key_map = dib0700_rc_keys ,
2007-07-30 17:02:17 -03:00
. rc_key_map_size = ARRAY_SIZE ( dib0700_rc_keys ) ,
2007-07-30 13:50:28 -03:00
. rc_query = dib0700_rc_query
2007-07-30 12:49:04 -03:00
} , { DIB0700_DEFAULT_DEVICE_PROPERTIES ,
. num_adapters = 1 ,
. adapter = {
{
. frontend_attach = stk7070p_frontend_attach ,
. tuner_attach = dib7070p_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x02 ) ,
. size_of_priv = sizeof ( struct dib0700_adapter_state ) ,
} ,
} ,
. num_device_descs = 2 ,
. devices = {
{ " DiBcom STK7070P reference design " ,
{ & dib0700_usb_id_table [ 15 ] , NULL } ,
{ NULL } ,
} ,
{ " Pinnacle PCTV DVB-T Flash Stick " ,
{ & dib0700_usb_id_table [ 16 ] , NULL } ,
{ NULL } ,
} ,
}
} , { DIB0700_DEFAULT_DEVICE_PROPERTIES ,
. num_adapters = 2 ,
. adapter = {
{
. frontend_attach = stk7070pd_frontend_attach0 ,
. tuner_attach = dib7070p_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x02 ) ,
. size_of_priv = sizeof ( struct dib0700_adapter_state ) ,
} , {
. frontend_attach = stk7070pd_frontend_attach1 ,
. tuner_attach = dib7070p_tuner_attach ,
DIB0700_DEFAULT_STREAMING_CONFIG ( 0x03 ) ,
. size_of_priv = sizeof ( struct dib0700_adapter_state ) ,
}
} ,
. num_device_descs = 2 ,
. devices = {
{ " DiBcom STK7070PD reference design " ,
{ & dib0700_usb_id_table [ 17 ] , NULL } ,
{ NULL } ,
} ,
{ " Pinnacle PCTV Dual DVB-T Diversity Stick " ,
{ & dib0700_usb_id_table [ 18 ] , NULL } ,
{ NULL } ,
} ,
}
} ,
2006-09-19 12:51:37 -03:00
} ;
int dib0700_device_count = ARRAY_SIZE ( dib0700_devices ) ;