27 static int force_lna_activation;
29 MODULE_PARM_DESC(force_lna_activation,
"force the activation of Low-Noise-Amplifyer(s) (LNA), "
30 "if applicable for the device (default: 0=automatic/off).");
51 .setup = (1 << 8) | (5 << 5) | (0 << 4) | (0 << 3) | (0 << 2) | (2 << 0),
72 { .agc = &bristol_dib3000p_mt2060_agc_config,
74 .ln_adc_level = 0x1cc7,
75 .output_mpeg2_in_188_bytes = 1,
77 { .agc = &bristol_dib3000p_mt2060_agc_config,
79 .ln_adc_level = 0x1cc7,
80 .output_mpeg2_in_188_bytes = 1,
93 if (force_lna_activation)
105 (10 + adap->
id) << 1, &bristol_dib3000mc_config[adap->
id])) ==
NULL ? -
ENODEV : 0;
111 { .addr = 0x50, .flags = 0, .buf = &adrs, .len = 1 },
112 { .addr = 0x50, .flags =
I2C_M_RD, .buf = pval, .len = 1 },
126 if (!eeprom_read(prim_i2c,0x59 + adap->
id,&a)) if1=1220+
a;
129 &bristol_mt2060_config[adap->
id], if1) ==
NULL ?
142 (0 << 15) | (0 << 14) | (1 << 11) | (1 << 10) | (1 << 9) | (0 << 8)
143 | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
182 (0 << 15) | (0 << 14) | (1 << 11) | (1 << 10) | (1 << 9) | (0 << 8)
183 | (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0),
224 (3 << 14) | (1 << 12) | (524 << 0),
230 { .output_mpeg2_in_188_bytes = 1,
231 .hostbus_diversity = 1,
232 .tuner_is_baseband = 1,
234 .agc_config_count = 2,
235 .agc = stk7700d_7000p_mt2266_agc_config,
236 .bw = &stk7700d_mt2266_pll_config,
242 { .output_mpeg2_in_188_bytes = 1,
243 .hostbus_diversity = 1,
244 .tuner_is_baseband = 1,
246 .agc_config_count = 2,
247 .agc = stk7700d_7000p_mt2266_agc_config,
248 .bw = &stk7700d_mt2266_pll_config,
257 { .i2c_address = 0x60
259 { .i2c_address = 0x60
276 stk7700d_dib7000p_mt2266_config)
278 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
285 0x80 + (adap->
id << 1),
286 &stk7700d_dib7000p_mt2266_config[adap->
id]);
305 stk7700d_dib7000p_mt2266_config)
307 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
314 0x80 + (adap->
id << 1),
315 &stk7700d_dib7000p_mt2266_config[adap->
id]);
325 &stk7700d_mt2266_config[adap->
id]) ==
NULL ? -
ENODEV : 0;
335 (0 << 15) | (0 << 14) | (0 << 11) | (0 << 10) | (0 << 9) | (0 << 8) |
336 (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0),
377 (3 << 14) | (1 << 12) | (524 << 0),
384 .output_mpeg2_in_188_bytes = 1,
385 .tuner_is_baseband = 1,
387 .agc_config_count = 1,
388 .agc = &xc3028_agc_config,
389 .bw = &xc3028_bw_config,
396 static int stk7700ph_xc3028_callback(
void *
ptr,
int component,
410 err(
"%s: unknown command %d, arg %d\n", __func__,
417 static struct xc2028_ctrl stk7700ph_xc3028_ctrl = {
425 .ctrl = &stk7700ph_xc3028_ctrl,
449 &stk7700ph_dib7700_xc3028_config) != 0) {
450 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
456 &stk7700ph_dib7700_xc3028_config);
468 stk7700ph_xc3028_config.
i2c_adap = tun_i2c;
471 adap->
fe_adap[0].fe->callback = stk7700ph_xc3028_callback;
477 #define DEFAULT_RC_INTERVAL 50
482 #define RC_REPEAT_DELAY 6
507 err(
"RC Query Failed");
512 if (key[0] == 0 && key[1] == 0 && key[2] == 0 && key[3] == 0)
520 switch (d->
props.rc.core.protocol) {
523 if ((key[3-2] == 0x00) && (key[3-3] == 0x00) &&
527 keycode = key[3-2] << 8 | key[3-3];
535 keycode = key[3-2] << 8 | key[3-3];
550 (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8)
551 | (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0),
596 (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8)
597 | (3 << 5) | (0 << 4) | (2 << 1) | (0 << 0),
641 (3 << 14) | (1 << 12) | (524 << 0),
649 .output_mpeg2_in_188_bytes = 1,
652 .agc_config_count = 1,
653 .agc = &stk7700p_7000m_mt2060_agc_config,
654 .bw = &stk7700p_pll_config,
662 .output_mpeg2_in_188_bytes = 1,
664 .agc_config_count = 1,
665 .agc = &stk7700p_7000p_mt2060_agc_config,
666 .bw = &stk7700p_pll_config,
714 if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+
a;
730 (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8)
731 | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
783 .reset = dib7070_tuner_reset,
784 .sleep = dib7070_tuner_sleep,
786 .clock_pad_drive = 4,
790 .reset = dib7070_tuner_reset,
791 .sleep = dib7070_tuner_sleep,
799 .reset = dib7070_tuner_reset,
800 .sleep = dib7070_tuner_sleep,
802 .clock_pad_drive = 0,
807 static int dib7070_set_param_override(
struct dvb_frontend *fe)
818 default: offset = 550;
break;
825 static int dib7770_set_param_override(
struct dvb_frontend *fe)
856 &dib7770p_dib0070_config) ==
NULL)
860 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7770_set_param_override;
878 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7070_set_param_override;
891 static int stk7700p_pid_filter_ctrl(
struct dvb_usb_adapter *adapter,
int onoff)
899 static int stk70x0p_pid_filter(
struct dvb_usb_adapter *adapter,
int index,
u16 pid,
int onoff)
904 static int stk70x0p_pid_filter_ctrl(
struct dvb_usb_adapter *adapter,
int onoff)
913 (3 << 14) | (1 << 12) | (524 << 0),
920 .output_mpeg2_in_188_bytes = 1,
922 .agc_config_count = 1,
923 .agc = &dib7070_agc_config,
924 .bw = &dib7070_bw_config_12_mhz,
925 .tuner_is_baseband = 1,
932 .hostbus_diversity = 1,
958 &dib7070p_dib7000p_config) != 0) {
959 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
965 &dib7070p_dib7000p_config);
971 .output_mpeg2_in_188_bytes = 1,
973 .agc_config_count = 1,
974 .agc = &dib7070_agc_config,
975 .bw = &dib7070_bw_config_12_mhz,
976 .tuner_is_baseband = 1,
983 .hostbus_diversity = 1,
984 .enable_current_mirror = 1,
985 .disable_sample_and_hold = 0,
1010 &dib7770p_dib7000p_config) != 0) {
1011 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
1017 &dib7770p_dib7000p_config);
1030 (0 << 15) | (0 << 14) | (7 << 11) | (0 << 10) | (0 << 9) |
1031 (0 << 8) | (3 << 5) | (0 << 4) | (5 << 1) |
1074 (0 << 15) | (0 << 14) | (1 << 11) | (0 << 10) | (0 << 9) |
1075 (0 << 8) | (3 << 5) | (0 << 4) | (5 << 1) |
1119 (3 << 14) | (1 << 12) | (599 << 0),
1127 .output_mpeg2_in_188_bytes = 1,
1129 .agc_config_count = 2,
1130 .agc = dib807x_agc_config,
1131 .pll = &dib807x_bw_config_12_mhz,
1132 .tuner_is_baseband = 1,
1138 .hostbus_diversity = 1,
1144 .output_mpeg2_in_188_bytes = 1,
1146 .agc_config_count = 2,
1147 .agc = dib807x_agc_config,
1148 .pll = &dib807x_bw_config_12_mhz,
1149 .tuner_is_baseband = 1,
1155 .hostbus_diversity = 1,
1162 static int dib80xx_tuner_reset(
struct dvb_frontend *fe,
int onoff)
1167 static int dib80xx_tuner_sleep(
struct dvb_frontend *fe,
int onoff)
1180 .reset = dib80xx_tuner_reset,
1181 .sleep = dib80xx_tuner_sleep,
1183 .clock_pad_drive = 4,
1185 .force_crystal_mode = 1,
1186 .enable_third_order_filter = 1,
1188 .wbd_gain = dib8070_wbd_gain_cfg,
1189 .osc_buffer_state = 0,
1190 .freq_offset_khz_uhf = -100,
1191 .freq_offset_khz_vhf = -100,
1194 .reset = dib80xx_tuner_reset,
1195 .sleep = dib80xx_tuner_sleep,
1197 .clock_pad_drive = 2,
1199 .force_crystal_mode = 1,
1200 .enable_third_order_filter = 1,
1202 .wbd_gain = dib8070_wbd_gain_cfg,
1203 .osc_buffer_state = 0,
1204 .freq_offset_khz_uhf = -25,
1205 .freq_offset_khz_vhf = -25,
1209 static int dib807x_set_param_override(
struct dvb_frontend *fe)
1223 offset += 250;
break;
1225 deb_info(
"WBD for DiB8000: %d\n", offset);
1237 if (adap->
id == 0) {
1239 &dib807x_dib0070_config[0]) ==
NULL)
1243 &dib807x_dib0070_config[1]) ==
NULL)
1248 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib807x_set_param_override;
1252 static int stk80xx_pid_filter(
struct dvb_usb_adapter *adapter,
int index,
1286 &dib807x_dib8000_config[0]);
1315 &dib807x_dib8000_config[0]);
1326 &dib807x_dib8000_config[1]);
1338 (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8)
1339 | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
1380 (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8)
1381 | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
1423 (3 << 14) | (1 << 12) | (599 << 0),
1429 static int dib8090_get_adc_power(
struct dvb_frontend *fe)
1436 .output_mpeg2_in_188_bytes = 1,
1438 .agc_config_count = 2,
1439 .agc = dib8090_agc_config,
1441 .pll = &dib8090_pll_config_12mhz,
1442 .tuner_is_baseband = 1,
1448 .hostbus_diversity = 1,
1452 .diversity_delay = 48,
1455 .output_mpeg2_in_188_bytes = 1,
1457 .agc_config_count = 2,
1458 .agc = dib8090_agc_config,
1460 .pll = &dib8090_pll_config_12mhz,
1461 .tuner_is_baseband = 1,
1467 .hostbus_diversity = 1,
1471 .diversity_delay = 1,
1478 { 120, 0, 500, 0, 500, 4 },
1479 { 170, 0, 450, 0, 450, 4 },
1480 { 380, 48, 373, 28, 259, 6 },
1481 { 860, 34, 700, 36, 616, 6 },
1482 { 0xFFFF, 34, 700, 36, 616, 6 },
1489 .io.pll_loopdiv = 20,
1490 .io.adc_clock_ratio = 8,
1491 .io.pll_int_loop_filt = 0,
1492 .io.clock_khz = 12000,
1493 .reset = dib80xx_tuner_reset,
1494 .sleep = dib80xx_tuner_sleep,
1500 .get_adc_power = dib8090_get_adc_power,
1501 .freq_offset_khz_uhf = -63,
1502 .freq_offset_khz_vhf = -143,
1503 .wbd = dib8090_wbd_table,
1504 .fref_clock_ratio = 6,
1507 static int dib8096_set_param_override(
struct dvb_frontend *fe)
1516 u16 ltgain, rf_gain_limit;
1527 deb_info(
"tuning in CBAND - soft-AGC startup\n");
1537 if (rf_gain_limit == 0)
1545 deb_info(
"not tuning in CBAND - standard AGC startup\n");
1561 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib8096_set_param_override;
1600 fe_slave->
ops.tuner_ops.set_params = dib8096_set_param_override;
1607 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib8096_set_param_override;
1654 .setup = (0 << 15) | (0 << 14) | (5 << 11)
1655 | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5)
1656 | (0 << 4) | (5 << 1) | (0 << 0),
1659 .time_stabiliz = 10,
1690 .perform_agc_softsplit = 0,
1698 .setup = (0 << 15) | (0 << 14) | (5 << 11)
1699 | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5)
1700 | (0 << 4) | (5 << 1) | (0 << 0),
1703 .time_stabiliz = 10,
1734 .perform_agc_softsplit = 0,
1742 (3 << 14) | (1 << 12) | (524 << 0),
1749 .output_mpeg2_in_188_bytes = 1,
1750 .hostbus_diversity = 1,
1753 .agc_config_count = 2,
1754 .agc = dib8096p_agc_config,
1755 .pll = &dib8096p_clock_config_12_mhz,
1761 .agc_control =
NULL,
1762 .diversity_delay = 48,
1768 { 380, 81, 850, 64, 540, 4},
1769 { 860, 51, 866, 21, 375, 4},
1770 {1700, 0, 250, 0, 100, 6},
1771 {2600, 0, 250, 0, 100, 6},
1772 { 0xFFFF, 0, 0, 0, 0, 0},
1776 .io.clock_khz = 12000,
1780 .io.pll_loopdiv = 6,
1781 .io.adc_clock_ratio = 0,
1782 .io.pll_int_loop_filt = 0,
1786 .freq_offset_khz_uhf = -143,
1787 .freq_offset_khz_vhf = -143,
1789 .get_adc_power = dib8090_get_adc_power,
1794 .wbd_vhf_offset = 0,
1795 .wbd_cband_offset = 0,
1799 .fref_clock_ratio = 1,
1801 .wbd = dib8096p_wbd_table,
1803 .ls_cfg_pad_drv = 0,
1807 .force_cband_input = 0,
1818 { 50000, 17043521, 16, 3},
1819 {878000, 20199729, 9, 1},
1820 {0xffffffff, 0, 0, 0},
1823 static int dib8096p_agc_startup(
struct dvb_frontend *fe)
1830 int better_sampling_freq = 0,
ret;
1846 better_sampling_freq = 1;
1850 if ((adc_table->
freq != 0xffffffff) && better_sampling_freq) {
1879 &adap->
dev->i2c_adap, 0x80, &tfe8096p_dib8000_config);
1890 &tfe8096p_dib0090_config) ==
NULL)
1896 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib8096p_agc_startup;
1901 static int dib90x0_pid_filter(
struct dvb_usb_adapter *adapter,
int index,
u16 pid,
int onoff)
1906 static int dib90x0_pid_filter_ctrl(
struct dvb_usb_adapter *adapter,
int onoff)
1911 static int dib90x0_tuner_reset(
struct dvb_frontend *fe,
int onoff)
1916 static int dib90x0_tuner_sleep(
struct dvb_frontend *fe,
int onoff)
1923 u8 wb[4] = { 0xc >> 8, 0xc & 0xff, 0, 0 };
1926 {.
addr = 0x1e >> 1, .flags = 0, .buf =
wb, .len = 2},
1927 {.addr = 0x1e >> 1, .flags =
I2C_M_RD, .buf =
rb, .len = 2},
1936 switch (rb[0] << 8 | rb[1]) {
1938 deb_info(
"Found DiB0170 rev1: This version of DiB0170 is not supported any longer.\n");
1951 for (index_data = 0; index_data <
len; index_data += 2) {
1952 wb[2] = (data[index_data + 1] >> 8) & 0xff;
1953 wb[3] = (data[index_data + 1]) & 0xff;
1955 if (data[index_data] == 0) {
1956 wb[0] = (data[index_data] >> 8) & 0xff;
1957 wb[1] = (data[index_data]) & 0xff;
1962 wb[3] |= rb[1] & ~(3 << 4);
1965 wb[0] = (data[index_data] >> 8)&0xff;
1966 wb[1] = (data[index_data])&0xff;
1975 .output_mpeg2_in_188_bytes = 1,
1977 .vcxo_timer = 279620,
1978 .timing_frequency = 20452225,
1979 .demod_clock_khz = 60000,
1980 .xtal_clock_khz = 30000,
1981 .if_drives = (0 << 15) | (1 << 13) | (0 << 12) | (3 << 10) | (0 << 9) | (1 << 7) | (0 << 6) | (0 << 4) | (1 << 3) | (1 << 1) | (0),
1998 .output_mpeg2_in_188_bytes = 1,
2000 .vcxo_timer = 279620,
2001 .timing_frequency = 20452225,
2002 .demod_clock_khz = 60000,
2003 .xtal_clock_khz = 30000,
2004 .if_drives = (0 << 15) | (1 << 13) | (0 << 12) | (3 << 10) | (0 << 9) | (1 << 7) | (0 << 6) | (0 << 4) | (1 << 3) | (1 << 1) | (0),
2006 .output_mpeg2_in_188_bytes = 1,
2008 .vcxo_timer = 279620,
2009 .timing_frequency = 20452225,
2010 .demod_clock_khz = 60000,
2011 .xtal_clock_khz = 30000,
2012 .if_drives = (0 << 15) | (1 << 13) | (0 << 12) | (3 << 10) | (0 << 9) | (1 << 7) | (0 << 6) | (0 << 4) | (1 << 3) | (1 << 1) | (0),
2032 .io.pll_loopdiv = 8,
2033 .io.adc_clock_ratio = 8,
2034 .io.pll_int_loop_filt = 0,
2035 .io.clock_khz = 30000,
2036 .reset = dib90x0_tuner_reset,
2037 .sleep = dib90x0_tuner_sleep,
2042 .freq_offset_khz_uhf = 0,
2043 .freq_offset_khz_vhf = 0,
2051 .io.pll_loopdiv = 8,
2052 .io.adc_clock_ratio = 8,
2053 .io.pll_int_loop_filt = 0,
2054 .io.clock_khz = 30000,
2055 .reset = dib90x0_tuner_reset,
2056 .sleep = dib90x0_tuner_sleep,
2061 .freq_offset_khz_uhf = 0,
2062 .freq_offset_khz_vhf = 0,
2067 .io.pll_loopdiv = 8,
2068 .io.adc_clock_ratio = 8,
2069 .io.pll_int_loop_filt = 0,
2070 .io.clock_khz = 30000,
2071 .reset = dib90x0_tuner_reset,
2072 .sleep = dib90x0_tuner_sleep,
2077 .freq_offset_khz_uhf = 0,
2078 .freq_offset_khz_vhf = 0,
2091 if (fw_version >= 0x10200)
2112 deb_info(
"%s: Upload failed. (file not found?)\n", __func__);
2129 u16 data_dib190[10] = {
2140 if (dib01x0_pmu_update(i2c, data_dib190, 10) != 0)
2159 if (fw_version >= 0x10200)
2178 deb_info(
"%s: Upload failed. (file not found?)\n", __func__);
2208 u16 data_dib190[10] = {
2219 if (dib01x0_pmu_update(i2c, data_dib190, 10) < 0)
2227 if (fe_slave !=
NULL) {
2253 u8 spur = 0, prediv = 0, loopdiv = 0, min_prediv = 1, max_prediv = 1;
2257 u32 fcp_max = 20000;
2258 u32 fdem_max = 76000;
2259 u32 fdem_min = 69500;
2261 u32 harmonic_id = 0;
2270 while ((xtal/max_prediv) >= fcp_min)
2274 min_prediv = max_prediv;
2275 while ((xtal/min_prediv) <= fcp_max) {
2277 if (min_prediv == 1)
2280 deb_info(
"MIN prediv = %d : MAX prediv = %d", min_prediv, max_prediv);
2284 for (prediv = min_prediv ; prediv < max_prediv; prediv++) {
2285 fcp = xtal / prediv;
2286 if (fcp > fcp_min && fcp < fcp_max) {
2287 for (loopdiv = 1 ; loopdiv < 64 ; loopdiv++) {
2288 fdem = ((xtal/prediv) * loopdiv);
2292 if ((fdem >= fdem_min) && (fdem <= fdem_max) && (fs >= fe->
dtv_property_cache.bandwidth_hz/1000)) {
2305 adc->
timf = 2396745143
UL/fdem*(1 << 9);
2306 adc->
timf += ((2396745143
UL%fdem) << 9)/fdem;
2307 deb_info(
"loopdiv=%i prediv=%i timf=%i", loopdiv, prediv, adc->
timf);
2324 static int dib7090_agc_startup(
struct dvb_frontend *fe)
2342 if (dib7090p_get_best_sampling(fe, &adc) == 0) {
2354 deb_info(
"AGC restart callback: %d", restart);
2360 static int dib7090e_update_lna(
struct dvb_frontend *fe,
u16 agc_global)
2362 u16 agc1 = 0, agc2, wbd = 0, wbd_target, wbd_offset, threshold_agc1;
2366 threshold_agc1 = 25000;
2368 threshold_agc1 = 30000;
2373 wbd_delta = (
s16)wbd - (((
s16)wbd_offset+10)*4) ;
2375 deb_info(
"update lna, agc_global=%d agc1=%d agc2=%d",
2376 agc_global, agc1, agc2);
2377 deb_info(
"update lna, wbd=%d wbd target=%d wbd offset=%d wbd delta=%d",
2378 wbd, wbd_target, wbd_offset, wbd_delta);
2380 if ((agc1 < threshold_agc1) && (wbd_delta > 0)) {
2396 { 380, 81, 850, 64, 540, 4},
2397 { 860, 51, 866, 21, 375, 4},
2398 {1700, 0, 250, 0, 100, 6},
2399 {2600, 0, 250, 0, 100, 6},
2400 { 0xFFFF, 0, 0, 0, 0, 0},
2404 { 380, 81, 850, 64, 540, 4},
2405 { 700, 51, 866, 21, 320, 4},
2406 { 860, 48, 666, 18, 330, 6},
2407 {1700, 0, 250, 0, 100, 6},
2408 {2600, 0, 250, 0, 100, 6},
2409 { 0xFFFF, 0, 0, 0, 0, 0},
2417 .setup = (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
2420 .time_stabiliz = 10,
2451 .perform_agc_softsplit = 0,
2456 .setup = (0 << 15) | (0 << 14) | (5 << 11) | (0 << 10) | (0 << 9) | (0 << 8) | (3 << 5) | (0 << 4) | (5 << 1) | (0 << 0),
2459 .time_stabiliz = 10,
2490 .perform_agc_softsplit = 0,
2498 (3 << 14) | (1 << 12) | (524 << 0),
2505 .output_mpeg2_in_188_bytes = 1,
2506 .hostbus_diversity = 1,
2507 .tuner_is_baseband = 1,
2510 .agc_config_count = 2,
2511 .agc = dib7090_agc_config,
2513 .bw = &dib7090_clock_config_12_mhz,
2521 .agc_control = dib7090_agc_restart,
2524 .disable_sample_and_hold = 0,
2525 .enable_current_mirror = 0,
2526 .diversity_delay = 0,
2534 .output_mpeg2_in_188_bytes = 1,
2535 .hostbus_diversity = 1,
2536 .tuner_is_baseband = 1,
2539 .agc_config_count = 2,
2540 .agc = dib7090_agc_config,
2542 .bw = &dib7090_clock_config_12_mhz,
2550 .agc_control = dib7090_agc_restart,
2553 .disable_sample_and_hold = 0,
2554 .enable_current_mirror = 0,
2555 .diversity_delay = 0,
2558 .default_i2c_addr = 0x90,
2561 .output_mpeg2_in_188_bytes = 1,
2562 .hostbus_diversity = 1,
2563 .tuner_is_baseband = 1,
2566 .agc_config_count = 2,
2567 .agc = dib7090_agc_config,
2569 .bw = &dib7090_clock_config_12_mhz,
2577 .agc_control = dib7090_agc_restart,
2580 .disable_sample_and_hold = 0,
2581 .enable_current_mirror = 0,
2582 .diversity_delay = 0,
2585 .default_i2c_addr = 0x92,
2591 .output_mpeg2_in_188_bytes = 1,
2592 .hostbus_diversity = 1,
2593 .tuner_is_baseband = 1,
2594 .update_lna = dib7090e_update_lna,
2596 .agc_config_count = 2,
2597 .agc = dib7090_agc_config,
2599 .bw = &dib7090_clock_config_12_mhz,
2607 .agc_control = dib7090_agc_restart,
2610 .disable_sample_and_hold = 0,
2611 .enable_current_mirror = 0,
2612 .diversity_delay = 0,
2619 .io.clock_khz = 12000,
2623 .io.pll_loopdiv = 6,
2624 .io.adc_clock_ratio = 0,
2625 .io.pll_int_loop_filt = 0,
2629 .freq_offset_khz_uhf = 0,
2630 .freq_offset_khz_vhf = 0,
2637 .wbd_vhf_offset = 0,
2638 .wbd_cband_offset = 0,
2642 .fref_clock_ratio = 0,
2644 .wbd = dib7090_wbd_table,
2646 .ls_cfg_pad_drv = 0,
2653 .io.clock_khz = 12000,
2657 .io.pll_loopdiv = 6,
2658 .io.adc_clock_ratio = 0,
2659 .io.pll_int_loop_filt = 0,
2663 .freq_offset_khz_uhf = 0,
2664 .freq_offset_khz_vhf = 0,
2671 .wbd_vhf_offset = 0,
2672 .wbd_cband_offset = 0,
2676 .fref_clock_ratio = 0,
2678 .wbd = dib7090e_wbd_table,
2680 .ls_cfg_pad_drv = 0,
2684 .force_cband_input = 1,
2689 .output_mpeg2_in_188_bytes = 1,
2690 .hostbus_diversity = 1,
2691 .tuner_is_baseband = 1,
2692 .update_lna = dib7090e_update_lna,
2694 .agc_config_count = 2,
2695 .agc = dib7090_agc_config,
2697 .bw = &dib7090_clock_config_12_mhz,
2705 .agc_control = dib7090_agc_restart,
2708 .disable_sample_and_hold = 0,
2709 .enable_current_mirror = 0,
2710 .diversity_delay = 0,
2717 .io.clock_khz = 12000,
2721 .io.pll_loopdiv = 6,
2722 .io.adc_clock_ratio = 0,
2723 .io.pll_int_loop_filt = 0,
2727 .freq_offset_khz_uhf = 0,
2728 .freq_offset_khz_vhf = 0,
2735 .wbd_vhf_offset = 0,
2736 .wbd_cband_offset = 0,
2740 .fref_clock_ratio = 0,
2742 .wbd = dib7090e_wbd_table,
2744 .ls_cfg_pad_drv = 0,
2748 .force_cband_input = 1,
2750 .force_crystal_mode = 1,
2753 static const struct dib0090_config tfe7090pvr_dib0090_config[2] = {
2755 .io.clock_khz = 12000,
2759 .io.pll_loopdiv = 6,
2760 .io.adc_clock_ratio = 0,
2761 .io.pll_int_loop_filt = 0,
2765 .freq_offset_khz_uhf = 50,
2766 .freq_offset_khz_vhf = 70,
2773 .wbd_vhf_offset = 0,
2774 .wbd_cband_offset = 0,
2778 .fref_clock_ratio = 0,
2780 .wbd = dib7090_wbd_table,
2782 .ls_cfg_pad_drv = 0,
2787 .io.clock_khz = 12000,
2791 .io.pll_loopdiv = 6,
2792 .io.adc_clock_ratio = 0,
2793 .io.pll_int_loop_filt = 0,
2797 .freq_offset_khz_uhf = -50,
2798 .freq_offset_khz_vhf = -70,
2805 .wbd_vhf_offset = 0,
2806 .wbd_cband_offset = 0,
2810 .fref_clock_ratio = 0,
2812 .wbd = dib7090_wbd_table,
2814 .ls_cfg_pad_drv = 0,
2836 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
2855 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
2880 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
2898 if (adap->
dev->adapter[0].fe_adap[0].fe ==
NULL) {
2899 err(
"the master dib7090 has to be initialized first");
2905 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n", __func__);
2926 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
2941 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
2960 1, 0x10, &tfe7090e_dib7000p_config) != 0) {
2961 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
2966 0x80, &tfe7090e_dib7000p_config);
2991 1, 0x10, &tfe7790e_dib7000p_config) != 0) {
2992 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
2997 0x80, &tfe7790e_dib7000p_config);
3009 &tfe7790e_dib0090_config) ==
NULL)
3015 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
3026 &tfe7090e_dib0090_config) ==
NULL)
3032 adap->
fe_adap[0].fe->ops.tuner_ops.set_params = dib7090_agc_startup;
3039 .output_mpeg2_in_188_bytes = 1,
3041 .agc_config_count = 1,
3042 .agc = &dib7070_agc_config,
3043 .bw = &dib7070_bw_config_12_mhz,
3044 .tuner_is_baseband = 1,
3051 .hostbus_diversity = 1,
3053 .output_mpeg2_in_188_bytes = 1,
3055 .agc_config_count = 1,
3056 .agc = &dib7070_agc_config,
3057 .bw = &dib7070_bw_config_12_mhz,
3058 .tuner_is_baseband = 1,
3065 .hostbus_diversity = 1,
3086 stk7070pd_init(adap->
dev);
3092 stk7070pd_dib7000p_config) != 0) {
3093 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
3108 static int novatd_read_status_override(
struct dvb_frontend *fe,
3125 static int novatd_sleep_override(
struct dvb_frontend* fe)
3134 return state->
sleep(fe);
3148 if (adap->
id == 0) {
3149 stk7070pd_init(dev);
3157 stk7070pd_dib7000p_config) != 0) {
3158 err(
"%s: dib7000p_i2c_enumeration failed. Cannot continue\n",
3165 adap->
id == 0 ? 0x80 : 0x82,
3166 &stk7070pd_dib7000p_config[adap->
id]);
3172 adap->
fe_adap[0].fe->ops.read_status = novatd_read_status_override;
3174 adap->
fe_adap[0].fe->ops.sleep = novatd_sleep_override;
3232 &adap->
dev->i2c_adap);
3236 static int dib0700_xc5000_tuner_callback(
void *
priv,
int component,
3237 int command,
int arg)
3248 err(
"xc5000: unknown tuner callback command: %d\n", command);
3256 .i2c_address = 0x64,
3263 adap->
fe_adap[0].fe->callback = dib0700_xc5000_tuner_callback;
3266 &s5h1411_xc5000_tunerconfig)
3270 static int dib0700_xc4000_tuner_callback(
void *priv,
int component,
3271 int command,
int arg)
3281 err(
"xc4000: unknown tuner callback command: %d\n", command);
3292 .time_stabiliz = 0x15,
3293 .alpha_level = 0x00,
3306 .agc1_slope1 = 0x00,
3307 .agc1_slope2 = 0x00,
3310 .agc2_slope1 = 0x1d,
3311 .agc2_slope2 = 0x1d,
3316 .perform_agc_softsplit = 0x00,
3324 (3 << 14) | (1 << 12) | 524,
3332 .output_mpeg2_in_188_bytes = 1,
3334 .agc_config_count = 1,
3335 .agc = &stk7700p_7000p_xc4000_agc_config,
3336 .bw = &stk7700p_xc4000_pll_config,
3393 .i2c_address = 0x61,
3396 .set_smoothedcvbs = 0,
3407 if (tun_i2c ==
NULL) {
3413 adap->
fe_adap[0].fe->callback = dib0700_xc4000_tuner_callback;
3416 &dib7000p_xc4000_tunerconfig)
3426 .spectral_inversion = 1,
3429 .usref_8vsb = 0x0500,
3472 &hcw_lgdt3305_config,
3473 &adap->
dev->i2c_adap);
3481 &adap->
dev->i2c_adap, 0x60,
3577 #define DIB0700_DEFAULT_DEVICE_PROPERTIES \
3578 .caps = DVB_USB_IS_AN_I2C_ADAPTER, \
3579 .usb_ctrl = DEVICE_SPECIFIC, \
3580 .firmware = "dvb-usb-dib0700-1.20.fw", \
3581 .download_firmware = dib0700_download_firmware, \
3582 .no_reconnect = 1, \
3583 .size_of_priv = sizeof(struct dib0700_state), \
3584 .i2c_algo = &dib0700_i2c_algo, \
3585 .identify_state = dib0700_identify_state
3587 #define DIB0700_DEFAULT_STREAMING_CONFIG(ep) \
3588 .streaming_ctrl = dib0700_streaming_ctrl, \
3595 .buffersize = 39480, \
3610 .pid_filter_count = 32,
3611 .pid_filter = stk7700p_pid_filter,
3612 .pid_filter_ctrl = stk7700p_pid_filter_ctrl,
3613 .frontend_attach = stk7700p_frontend_attach,
3614 .tuner_attach = stk7700p_tuner_attach,
3621 .num_device_descs = 8,
3623 {
"DiBcom STK7700P reference design",
3624 { &dib0700_usb_id_table[0], &dib0700_usb_id_table[1] },
3627 {
"Hauppauge Nova-T Stick",
3628 { &dib0700_usb_id_table[4], &dib0700_usb_id_table[9],
NULL },
3631 {
"AVerMedia AVerTV DVB-T Volar",
3632 { &dib0700_usb_id_table[5], &dib0700_usb_id_table[10] },
3635 {
"Compro Videomate U500",
3636 { &dib0700_usb_id_table[6], &dib0700_usb_id_table[19] },
3639 {
"Uniwill STK7700P based (Hama and others)",
3640 { &dib0700_usb_id_table[7],
NULL },
3643 {
"Leadtek Winfast DTV Dongle (STK7700P based)",
3644 { &dib0700_usb_id_table[8], &dib0700_usb_id_table[34] },
3647 {
"AVerMedia AVerTV DVB-T Express",
3648 { &dib0700_usb_id_table[20] },
3652 { &dib0700_usb_id_table[21],
NULL },
3660 .rc_query = dib0700_rc_query_old_firmware,
3673 .frontend_attach = bristol_frontend_attach,
3674 .tuner_attach = bristol_tuner_attach,
3681 .frontend_attach = bristol_frontend_attach,
3682 .tuner_attach = bristol_tuner_attach,
3689 .num_device_descs = 1,
3691 {
"Hauppauge Nova-T 500 Dual DVB-T",
3692 { &dib0700_usb_id_table[2], &dib0700_usb_id_table[3],
NULL },
3700 .rc_query = dib0700_rc_query_old_firmware,
3714 .pid_filter_count = 32,
3715 .pid_filter = stk70x0p_pid_filter,
3716 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3717 .frontend_attach = stk7700d_frontend_attach,
3718 .tuner_attach = stk7700d_tuner_attach,
3726 .pid_filter_count = 32,
3727 .pid_filter = stk70x0p_pid_filter,
3728 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3729 .frontend_attach = stk7700d_frontend_attach,
3730 .tuner_attach = stk7700d_tuner_attach,
3737 .num_device_descs = 5,
3739 {
"Pinnacle PCTV 2000e",
3740 { &dib0700_usb_id_table[11],
NULL },
3743 {
"Terratec Cinergy DT XS Diversity",
3744 { &dib0700_usb_id_table[12],
NULL },
3747 {
"Hauppauge Nova-TD Stick/Elgato Eye-TV Diversity",
3748 { &dib0700_usb_id_table[13],
NULL },
3751 {
"DiBcom STK7700D reference design",
3752 { &dib0700_usb_id_table[14],
NULL },
3755 {
"YUAN High-Tech DiBcom STK7700D",
3756 { &dib0700_usb_id_table[55],
NULL },
3765 .rc_query = dib0700_rc_query_old_firmware,
3779 .pid_filter_count = 32,
3780 .pid_filter = stk70x0p_pid_filter,
3781 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3782 .frontend_attach = stk7700P2_frontend_attach,
3783 .tuner_attach = stk7700d_tuner_attach,
3790 .num_device_descs = 3,
3792 {
"ASUS My Cinema U3000 Mini DVBT Tuner",
3793 { &dib0700_usb_id_table[23],
NULL },
3797 { &dib0700_usb_id_table[31],
NULL },
3800 {
"Terratec Cinergy T Express",
3801 { &dib0700_usb_id_table[42],
NULL },
3809 .module_name =
"dib0700",
3810 .rc_query = dib0700_rc_query_old_firmware,
3824 .pid_filter_count = 32,
3825 .pid_filter = stk70x0p_pid_filter,
3826 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3827 .frontend_attach = stk7070p_frontend_attach,
3828 .tuner_attach = dib7070p_tuner_attach,
3836 .num_device_descs = 12,
3838 {
"DiBcom STK7070P reference design",
3839 { &dib0700_usb_id_table[15],
NULL },
3842 {
"Pinnacle PCTV DVB-T Flash Stick",
3843 { &dib0700_usb_id_table[16],
NULL },
3846 {
"Artec T14BR DVB-T",
3847 { &dib0700_usb_id_table[22],
NULL },
3850 {
"ASUS My Cinema U3100 Mini DVBT Tuner",
3851 { &dib0700_usb_id_table[24],
NULL },
3854 {
"Hauppauge Nova-T Stick",
3855 { &dib0700_usb_id_table[25],
NULL },
3858 {
"Hauppauge Nova-T MyTV.t",
3859 { &dib0700_usb_id_table[26],
NULL },
3862 {
"Pinnacle PCTV 72e",
3863 { &dib0700_usb_id_table[29],
NULL },
3866 {
"Pinnacle PCTV 73e",
3867 { &dib0700_usb_id_table[30],
NULL },
3870 {
"Elgato EyeTV DTT",
3871 { &dib0700_usb_id_table[49],
NULL },
3875 { &dib0700_usb_id_table[45],
NULL },
3878 {
"Elgato EyeTV Dtt Dlx PD378S",
3879 { &dib0700_usb_id_table[50],
NULL },
3882 {
"Elgato EyeTV DTT rev. 2",
3883 { &dib0700_usb_id_table[81],
NULL },
3891 .module_name =
"dib0700",
3892 .rc_query = dib0700_rc_query_old_firmware,
3906 .pid_filter_count = 32,
3907 .pid_filter = stk70x0p_pid_filter,
3908 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3909 .frontend_attach = stk7070p_frontend_attach,
3910 .tuner_attach = dib7070p_tuner_attach,
3918 .num_device_descs = 3,
3920 {
"Pinnacle PCTV 73A",
3921 { &dib0700_usb_id_table[56],
NULL },
3924 {
"Pinnacle PCTV 73e SE",
3925 { &dib0700_usb_id_table[57], &dib0700_usb_id_table[65],
NULL },
3928 {
"Pinnacle PCTV 282e",
3929 { &dib0700_usb_id_table[58], &dib0700_usb_id_table[66],
NULL },
3937 .module_name =
"dib0700",
3938 .rc_query = dib0700_rc_query_old_firmware,
3952 .pid_filter_count = 32,
3953 .pid_filter = stk70x0p_pid_filter,
3954 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3955 .frontend_attach = novatd_frontend_attach,
3956 .tuner_attach = dib7070p_tuner_attach,
3965 .pid_filter_count = 32,
3966 .pid_filter = stk70x0p_pid_filter,
3967 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
3968 .frontend_attach = novatd_frontend_attach,
3969 .tuner_attach = dib7070p_tuner_attach,
3977 .num_device_descs = 1,
3979 {
"Hauppauge Nova-TD Stick (52009)",
3980 { &dib0700_usb_id_table[35],
NULL },
3988 .module_name =
"dib0700",
3989 .rc_query = dib0700_rc_query_old_firmware,
4003 .pid_filter_count = 32,
4004 .pid_filter = stk70x0p_pid_filter,
4005 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4006 .frontend_attach = stk7070pd_frontend_attach0,
4007 .tuner_attach = dib7070p_tuner_attach,
4016 .pid_filter_count = 32,
4017 .pid_filter = stk70x0p_pid_filter,
4018 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4019 .frontend_attach = stk7070pd_frontend_attach1,
4020 .tuner_attach = dib7070p_tuner_attach,
4028 .num_device_descs = 5,
4030 {
"DiBcom STK7070PD reference design",
4031 { &dib0700_usb_id_table[17],
NULL },
4034 {
"Pinnacle PCTV Dual DVB-T Diversity Stick",
4035 { &dib0700_usb_id_table[18],
NULL },
4038 {
"Hauppauge Nova-TD-500 (84xxx)",
4039 { &dib0700_usb_id_table[36],
NULL },
4042 {
"Terratec Cinergy DT USB XS Diversity/ T5",
4043 { &dib0700_usb_id_table[43],
4044 &dib0700_usb_id_table[53],
NULL},
4048 { &dib0700_usb_id_table[44],
NULL },
4056 .module_name =
"dib0700",
4057 .rc_query = dib0700_rc_query_old_firmware,
4071 .pid_filter_count = 32,
4072 .pid_filter = stk70x0p_pid_filter,
4073 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4074 .frontend_attach = stk7070pd_frontend_attach0,
4075 .tuner_attach = dib7070p_tuner_attach,
4084 .pid_filter_count = 32,
4085 .pid_filter = stk70x0p_pid_filter,
4086 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4087 .frontend_attach = stk7070pd_frontend_attach1,
4088 .tuner_attach = dib7070p_tuner_attach,
4096 .num_device_descs = 1,
4098 {
"Elgato EyeTV Diversity",
4099 { &dib0700_usb_id_table[68],
NULL },
4107 .module_name =
"dib0700",
4108 .rc_query = dib0700_rc_query_old_firmware,
4122 .pid_filter_count = 32,
4123 .pid_filter = stk70x0p_pid_filter,
4124 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4125 .frontend_attach = stk7700ph_frontend_attach,
4126 .tuner_attach = stk7700ph_tuner_attach,
4130 .size_of_priv =
sizeof(
struct
4135 .num_device_descs = 9,
4137 {
"Terratec Cinergy HT USB XE",
4138 { &dib0700_usb_id_table[27],
NULL },
4141 {
"Pinnacle Expresscard 320cx",
4142 { &dib0700_usb_id_table[28],
NULL },
4145 {
"Terratec Cinergy HT Express",
4146 { &dib0700_usb_id_table[32],
NULL },
4149 {
"Gigabyte U8000-RH",
4150 { &dib0700_usb_id_table[37],
NULL },
4153 {
"YUAN High-Tech STK7700PH",
4154 { &dib0700_usb_id_table[38],
NULL },
4157 {
"Asus My Cinema-U3000Hybrid",
4158 { &dib0700_usb_id_table[39],
NULL },
4161 {
"YUAN High-Tech MC770",
4162 { &dib0700_usb_id_table[48],
NULL },
4165 {
"Leadtek WinFast DTV Dongle H",
4166 { &dib0700_usb_id_table[51],
NULL },
4169 {
"YUAN High-Tech STK7700D",
4170 { &dib0700_usb_id_table[54],
NULL },
4178 .module_name =
"dib0700",
4179 .rc_query = dib0700_rc_query_old_firmware,
4191 .frontend_attach = s5h1411_frontend_attach,
4192 .tuner_attach = xc5000_tuner_attach,
4196 .size_of_priv =
sizeof(
struct
4201 .num_device_descs = 2,
4203 {
"Pinnacle PCTV HD Pro USB Stick",
4204 { &dib0700_usb_id_table[40],
NULL },
4207 {
"Pinnacle PCTV HD USB Stick",
4208 { &dib0700_usb_id_table[41],
NULL },
4216 .module_name =
"dib0700",
4217 .rc_query = dib0700_rc_query_old_firmware,
4229 .frontend_attach = lgdt3305_frontend_attach,
4230 .tuner_attach = mxl5007t_tuner_attach,
4234 .size_of_priv =
sizeof(
struct
4239 .num_device_descs = 2,
4241 {
"Hauppauge ATSC MiniCard (B200)",
4242 { &dib0700_usb_id_table[46],
NULL },
4245 {
"Hauppauge ATSC MiniCard (B210)",
4246 { &dib0700_usb_id_table[47],
NULL },
4258 .pid_filter_count = 32,
4259 .pid_filter = stk70x0p_pid_filter,
4260 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4261 .frontend_attach = stk7770p_frontend_attach,
4262 .tuner_attach = dib7770p_tuner_attach,
4271 .num_device_descs = 4,
4273 {
"DiBcom STK7770P reference design",
4274 { &dib0700_usb_id_table[59],
NULL },
4277 {
"Terratec Cinergy T USB XXS (HD)/ T3",
4278 { &dib0700_usb_id_table[33],
4279 &dib0700_usb_id_table[52],
4280 &dib0700_usb_id_table[60],
NULL},
4283 {
"TechniSat AirStar TeleStick 2",
4284 { &dib0700_usb_id_table[74],
NULL },
4287 {
"Medion CTX1921 DVB-T USB",
4288 { &dib0700_usb_id_table[75],
NULL },
4296 .module_name =
"dib0700",
4297 .rc_query = dib0700_rc_query_old_firmware,
4310 .pid_filter_count = 32,
4311 .pid_filter = stk80xx_pid_filter,
4312 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4313 .frontend_attach = stk807x_frontend_attach,
4314 .tuner_attach = dib807x_tuner_attach,
4323 .num_device_descs = 3,
4325 {
"DiBcom STK807xP reference design",
4326 { &dib0700_usb_id_table[62],
NULL },
4329 {
"Prolink Pixelview SBTVD",
4330 { &dib0700_usb_id_table[63],
NULL },
4333 {
"EvolutePC TVWay+",
4334 { &dib0700_usb_id_table[64],
NULL },
4342 .module_name =
"dib0700",
4343 .rc_query = dib0700_rc_query_old_firmware,
4356 .pid_filter_count = 32,
4357 .pid_filter = stk80xx_pid_filter,
4358 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4359 .frontend_attach = stk807xpvr_frontend_attach0,
4360 .tuner_attach = dib807x_tuner_attach,
4371 .pid_filter_count = 32,
4372 .pid_filter = stk80xx_pid_filter,
4373 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4374 .frontend_attach = stk807xpvr_frontend_attach1,
4375 .tuner_attach = dib807x_tuner_attach,
4384 .num_device_descs = 1,
4386 {
"DiBcom STK807xPVR reference design",
4387 { &dib0700_usb_id_table[61],
NULL },
4395 .module_name =
"dib0700",
4396 .rc_query = dib0700_rc_query_old_firmware,
4410 .pid_filter_count = 32,
4411 .pid_filter = stk80xx_pid_filter,
4412 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4413 .frontend_attach = stk809x_frontend_attach,
4414 .tuner_attach = dib809x_tuner_attach,
4423 .num_device_descs = 1,
4425 {
"DiBcom STK8096GP reference design",
4426 { &dib0700_usb_id_table[67],
NULL },
4434 .module_name =
"dib0700",
4435 .rc_query = dib0700_rc_query_old_firmware,
4449 .pid_filter_count = 32,
4450 .pid_filter = dib90x0_pid_filter,
4451 .pid_filter_ctrl = dib90x0_pid_filter_ctrl,
4452 .frontend_attach = stk9090m_frontend_attach,
4453 .tuner_attach = dib9090_tuner_attach,
4462 .num_device_descs = 1,
4464 {
"DiBcom STK9090M reference design",
4465 { &dib0700_usb_id_table[69],
NULL },
4473 .module_name =
"dib0700",
4474 .rc_query = dib0700_rc_query_old_firmware,
4488 .pid_filter_count = 32,
4489 .pid_filter = stk80xx_pid_filter,
4490 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4491 .frontend_attach = nim8096md_frontend_attach,
4492 .tuner_attach = nim8096md_tuner_attach,
4501 .num_device_descs = 1,
4503 {
"DiBcom NIM8096MD reference design",
4504 { &dib0700_usb_id_table[70],
NULL },
4512 .module_name =
"dib0700",
4513 .rc_query = dib0700_rc_query_old_firmware,
4527 .pid_filter_count = 32,
4528 .pid_filter = dib90x0_pid_filter,
4529 .pid_filter_ctrl = dib90x0_pid_filter_ctrl,
4530 .frontend_attach = nim9090md_frontend_attach,
4531 .tuner_attach = nim9090md_tuner_attach,
4540 .num_device_descs = 1,
4542 {
"DiBcom NIM9090MD reference design",
4543 { &dib0700_usb_id_table[71],
NULL },
4551 .module_name =
"dib0700",
4552 .rc_query = dib0700_rc_query_old_firmware,
4566 .pid_filter_count = 32,
4567 .pid_filter = stk70x0p_pid_filter,
4568 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4569 .frontend_attach = nim7090_frontend_attach,
4570 .tuner_attach = nim7090_tuner_attach,
4579 .num_device_descs = 1,
4581 {
"DiBcom NIM7090 reference design",
4582 { &dib0700_usb_id_table[72],
NULL },
4590 .module_name =
"dib0700",
4591 .rc_query = dib0700_rc_query_old_firmware,
4605 .pid_filter_count = 32,
4606 .pid_filter = stk70x0p_pid_filter,
4607 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4608 .frontend_attach = tfe7090pvr_frontend0_attach,
4609 .tuner_attach = tfe7090pvr_tuner0_attach,
4621 .pid_filter_count = 32,
4622 .pid_filter = stk70x0p_pid_filter,
4623 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4624 .frontend_attach = tfe7090pvr_frontend1_attach,
4625 .tuner_attach = tfe7090pvr_tuner1_attach,
4634 .num_device_descs = 1,
4636 {
"DiBcom TFE7090PVR reference design",
4637 { &dib0700_usb_id_table[73],
NULL },
4645 .module_name =
"dib0700",
4646 .rc_query = dib0700_rc_query_old_firmware,
4658 .frontend_attach = pctv340e_frontend_attach,
4659 .tuner_attach = xc4000_tuner_attach,
4663 .size_of_priv =
sizeof(
struct
4668 .num_device_descs = 2,
4670 {
"Pinnacle PCTV 340e HD Pro USB Stick",
4671 { &dib0700_usb_id_table[76],
NULL },
4674 {
"Pinnacle PCTV Hybrid Stick Solo",
4675 { &dib0700_usb_id_table[77],
NULL },
4682 .module_name =
"dib0700",
4683 .rc_query = dib0700_rc_query_old_firmware,
4697 .pid_filter_count = 32,
4698 .pid_filter = stk70x0p_pid_filter,
4699 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4700 .frontend_attach = tfe7090e_frontend_attach,
4701 .tuner_attach = tfe7090e_tuner_attach,
4711 .num_device_descs = 1,
4713 {
"DiBcom TFE7090E reference design",
4714 { &dib0700_usb_id_table[78],
NULL },
4722 .module_name =
"dib0700",
4723 .rc_query = dib0700_rc_query_old_firmware,
4737 .pid_filter_count = 32,
4738 .pid_filter = stk70x0p_pid_filter,
4739 .pid_filter_ctrl = stk70x0p_pid_filter_ctrl,
4740 .frontend_attach = tfe7790e_frontend_attach,
4741 .tuner_attach = tfe7790e_tuner_attach,
4751 .num_device_descs = 1,
4753 {
"DiBcom TFE7790E reference design",
4754 { &dib0700_usb_id_table[79],
NULL },
4762 .module_name =
"dib0700",
4763 .rc_query = dib0700_rc_query_old_firmware,
4777 .pid_filter_count = 32,
4778 .pid_filter = stk80xx_pid_filter,
4779 .pid_filter_ctrl = stk80xx_pid_filter_ctrl,
4780 .frontend_attach = tfe8096p_frontend_attach,
4781 .tuner_attach = tfe8096p_tuner_attach,
4792 .num_device_descs = 1,
4794 {
"DiBcom TFE8096P reference design",
4795 { &dib0700_usb_id_table[80],
NULL },
4803 .module_name =
"dib0700",
4804 .rc_query = dib0700_rc_query_old_firmware,