brintos

brintos / linux-shallow public Read only

0
0
Text · 21.1 KiB · d1b984e Raw
719 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 *4 *  Copyright (C) 2007 Mike Isely <isely@pobox.com>5 */6 7/*8 9This source file should encompass ALL per-device type information for the10driver.  To define a new device, add elements to the pvr2_device_table and11pvr2_device_desc structures.12 13*/14 15#include "pvrusb2-devattr.h"16#include <linux/usb.h>17#include <linux/module.h>18/* This is needed in order to pull in tuner type ids... */19#include <linux/i2c.h>20#include <media/tuner.h>21#ifdef CONFIG_VIDEO_PVRUSB2_DVB22#include "pvrusb2-hdw-internal.h"23#include "lgdt330x.h"24#include "s5h1409.h"25#include "s5h1411.h"26#include "tda10048.h"27#include "tda18271.h"28#include "tda8290.h"29#include "tuner-simple.h"30#include "si2157.h"31#include "lgdt3306a.h"32#include "si2168.h"33#endif34 35 36/*------------------------------------------------------------------------*/37/* Hauppauge PVR-USB2 Model 29xxx */38 39static const struct pvr2_device_client_desc pvr2_cli_29xxx[] = {40	{ .module_id = PVR2_CLIENT_ID_SAA7115 },41	{ .module_id = PVR2_CLIENT_ID_MSP3400 },42	{ .module_id = PVR2_CLIENT_ID_TUNER },43	{ .module_id = PVR2_CLIENT_ID_DEMOD },44};45 46#define PVR2_FIRMWARE_29xxx "v4l-pvrusb2-29xxx-01.fw"47static const char *pvr2_fw1_names_29xxx[] = {48		PVR2_FIRMWARE_29xxx,49};50 51static const struct pvr2_device_desc pvr2_device_29xxx = {52		.description = "WinTV PVR USB2 Model 29xxx",53		.shortname = "29xxx",54		.client_table.lst = pvr2_cli_29xxx,55		.client_table.cnt = ARRAY_SIZE(pvr2_cli_29xxx),56		.fx2_firmware.lst = pvr2_fw1_names_29xxx,57		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx),58		.flag_has_hauppauge_rom = !0,59		.flag_has_analogtuner = !0,60		.flag_has_fmradio = !0,61		.flag_has_composite = !0,62		.flag_has_svideo = !0,63		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,64		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,65		.ir_scheme = PVR2_IR_SCHEME_29XXX,66};67 68 69 70/*------------------------------------------------------------------------*/71/* Hauppauge PVR-USB2 Model 24xxx */72 73static const struct pvr2_device_client_desc pvr2_cli_24xxx[] = {74	{ .module_id = PVR2_CLIENT_ID_CX25840 },75	{ .module_id = PVR2_CLIENT_ID_TUNER },76	{ .module_id = PVR2_CLIENT_ID_WM8775 },77	{ .module_id = PVR2_CLIENT_ID_DEMOD },78};79 80#define PVR2_FIRMWARE_24xxx "v4l-pvrusb2-24xxx-01.fw"81static const char *pvr2_fw1_names_24xxx[] = {82		PVR2_FIRMWARE_24xxx,83};84 85static const struct pvr2_device_desc pvr2_device_24xxx = {86		.description = "WinTV PVR USB2 Model 24xxx",87		.shortname = "24xxx",88		.client_table.lst = pvr2_cli_24xxx,89		.client_table.cnt = ARRAY_SIZE(pvr2_cli_24xxx),90		.fx2_firmware.lst = pvr2_fw1_names_24xxx,91		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_24xxx),92		.flag_has_cx25840 = !0,93		.flag_has_wm8775 = !0,94		.flag_has_hauppauge_rom = !0,95		.flag_has_analogtuner = !0,96		.flag_has_fmradio = !0,97		.flag_has_composite = !0,98		.flag_has_svideo = !0,99		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,100		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,101		.ir_scheme = PVR2_IR_SCHEME_24XXX,102};103 104 105 106/*------------------------------------------------------------------------*/107/* GOTVIEW USB2.0 DVD2 */108 109static const struct pvr2_device_client_desc pvr2_cli_gotview_2[] = {110	{ .module_id = PVR2_CLIENT_ID_CX25840 },111	{ .module_id = PVR2_CLIENT_ID_TUNER },112	{ .module_id = PVR2_CLIENT_ID_DEMOD },113};114 115static const struct pvr2_device_desc pvr2_device_gotview_2 = {116		.description = "Gotview USB 2.0 DVD 2",117		.shortname = "gv2",118		.client_table.lst = pvr2_cli_gotview_2,119		.client_table.cnt = ARRAY_SIZE(pvr2_cli_gotview_2),120		.flag_has_cx25840 = !0,121		.default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3,122		.flag_has_analogtuner = !0,123		.flag_has_fmradio = !0,124		.flag_has_composite = !0,125		.flag_has_svideo = !0,126		.signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW,127};128 129 130 131/*------------------------------------------------------------------------*/132/* GOTVIEW USB2.0 DVD Deluxe */133 134/* (same module list as gotview_2) */135 136static const struct pvr2_device_desc pvr2_device_gotview_2d = {137		.description = "Gotview USB 2.0 DVD Deluxe",138		.shortname = "gv2d",139		.client_table.lst = pvr2_cli_gotview_2,140		.client_table.cnt = ARRAY_SIZE(pvr2_cli_gotview_2),141		.flag_has_cx25840 = !0,142		.default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3,143		.flag_has_analogtuner = !0,144		.flag_has_composite = !0,145		.flag_has_svideo = !0,146		.signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW,147};148 149 150 151/*------------------------------------------------------------------------*/152/* Terratec Grabster AV400 */153 154static const struct pvr2_device_client_desc pvr2_cli_av400[] = {155	{ .module_id = PVR2_CLIENT_ID_CX25840 },156};157 158static const struct pvr2_device_desc pvr2_device_av400 = {159		.description = "Terratec Grabster AV400",160		.shortname = "av400",161		.flag_is_experimental = 1,162		.client_table.lst = pvr2_cli_av400,163		.client_table.cnt = ARRAY_SIZE(pvr2_cli_av400),164		.flag_has_cx25840 = !0,165		.flag_has_analogtuner = 0,166		.flag_has_composite = !0,167		.flag_has_svideo = !0,168		.signal_routing_scheme = PVR2_ROUTING_SCHEME_AV400,169};170 171 172 173/*------------------------------------------------------------------------*/174/* OnAir Creator */175 176#ifdef CONFIG_VIDEO_PVRUSB2_DVB177static struct lgdt330x_config pvr2_lgdt3303_config = {178	.demod_chip          = LGDT3303,179	.clock_polarity_flip = 1,180};181 182static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap)183{184	adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config,185				 0x0e,186				 &adap->channel.hdw->i2c_adap);187	if (adap->fe[0])188		return 0;189 190	return -EIO;191}192 193static int pvr2_lgh06xf_attach(struct pvr2_dvb_adapter *adap)194{195	dvb_attach(simple_tuner_attach, adap->fe[0],196		   &adap->channel.hdw->i2c_adap, 0x61,197		   TUNER_LG_TDVS_H06XF);198 199	return 0;200}201 202static const struct pvr2_dvb_props pvr2_onair_creator_fe_props = {203	.frontend_attach = pvr2_lgdt3303_attach,204	.tuner_attach    = pvr2_lgh06xf_attach,205};206#endif207 208static const struct pvr2_device_client_desc pvr2_cli_onair_creator[] = {209	{ .module_id = PVR2_CLIENT_ID_SAA7115 },210	{ .module_id = PVR2_CLIENT_ID_CS53L32A },211	{ .module_id = PVR2_CLIENT_ID_TUNER },212};213 214static const struct pvr2_device_desc pvr2_device_onair_creator = {215		.description = "OnAir Creator Hybrid USB tuner",216		.shortname = "oac",217		.client_table.lst = pvr2_cli_onair_creator,218		.client_table.cnt = ARRAY_SIZE(pvr2_cli_onair_creator),219		.default_tuner_type = TUNER_LG_TDVS_H06XF,220		.flag_has_analogtuner = !0,221		.flag_has_composite = !0,222		.flag_has_svideo = !0,223		.flag_digital_requires_cx23416 = !0,224		.signal_routing_scheme = PVR2_ROUTING_SCHEME_ONAIR,225		.digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR,226		.default_std_mask = V4L2_STD_NTSC_M,227#ifdef CONFIG_VIDEO_PVRUSB2_DVB228		.dvb_props = &pvr2_onair_creator_fe_props,229#endif230};231 232 233 234/*------------------------------------------------------------------------*/235/* OnAir USB 2.0 */236 237#ifdef CONFIG_VIDEO_PVRUSB2_DVB238static struct lgdt330x_config pvr2_lgdt3302_config = {239	.demod_chip          = LGDT3302,240};241 242static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap)243{244	adap->fe[0] = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config,245				 0x0e,246				 &adap->channel.hdw->i2c_adap);247	if (adap->fe[0])248		return 0;249 250	return -EIO;251}252 253static int pvr2_fcv1236d_attach(struct pvr2_dvb_adapter *adap)254{255	dvb_attach(simple_tuner_attach, adap->fe[0],256		   &adap->channel.hdw->i2c_adap, 0x61,257		   TUNER_PHILIPS_FCV1236D);258 259	return 0;260}261 262static const struct pvr2_dvb_props pvr2_onair_usb2_fe_props = {263	.frontend_attach = pvr2_lgdt3302_attach,264	.tuner_attach    = pvr2_fcv1236d_attach,265};266#endif267 268static const struct pvr2_device_client_desc pvr2_cli_onair_usb2[] = {269	{ .module_id = PVR2_CLIENT_ID_SAA7115 },270	{ .module_id = PVR2_CLIENT_ID_CS53L32A },271	{ .module_id = PVR2_CLIENT_ID_TUNER },272};273 274static const struct pvr2_device_desc pvr2_device_onair_usb2 = {275		.description = "OnAir USB2 Hybrid USB tuner",276		.shortname = "oa2",277		.client_table.lst = pvr2_cli_onair_usb2,278		.client_table.cnt = ARRAY_SIZE(pvr2_cli_onair_usb2),279		.default_tuner_type = TUNER_PHILIPS_FCV1236D,280		.flag_has_analogtuner = !0,281		.flag_has_composite = !0,282		.flag_has_svideo = !0,283		.flag_digital_requires_cx23416 = !0,284		.signal_routing_scheme = PVR2_ROUTING_SCHEME_ONAIR,285		.digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR,286		.default_std_mask = V4L2_STD_NTSC_M,287#ifdef CONFIG_VIDEO_PVRUSB2_DVB288		.dvb_props = &pvr2_onair_usb2_fe_props,289#endif290};291 292 293 294/*------------------------------------------------------------------------*/295/* Hauppauge PVR-USB2 Model 73xxx */296 297#ifdef CONFIG_VIDEO_PVRUSB2_DVB298static struct tda10048_config hauppauge_tda10048_config = {299	.demod_address  = 0x10 >> 1,300	.output_mode    = TDA10048_PARALLEL_OUTPUT,301	.fwbulkwritelen = TDA10048_BULKWRITE_50,302	.inversion      = TDA10048_INVERSION_ON,303	.dtv6_if_freq_khz = TDA10048_IF_3300,304	.dtv7_if_freq_khz = TDA10048_IF_3800,305	.dtv8_if_freq_khz = TDA10048_IF_4300,306	.clk_freq_khz   = TDA10048_CLK_16000,307	.disable_gate_access = 1,308};309 310static struct tda829x_config tda829x_no_probe = {311	.probe_tuner = TDA829X_DONT_PROBE,312};313 314static struct tda18271_std_map hauppauge_tda18271_dvbt_std_map = {315	.dvbt_6   = { .if_freq = 3300, .agc_mode = 3, .std = 4,316		      .if_lvl = 1, .rfagc_top = 0x37, },317	.dvbt_7   = { .if_freq = 3800, .agc_mode = 3, .std = 5,318		      .if_lvl = 1, .rfagc_top = 0x37, },319	.dvbt_8   = { .if_freq = 4300, .agc_mode = 3, .std = 6,320		      .if_lvl = 1, .rfagc_top = 0x37, },321};322 323static struct tda18271_config hauppauge_tda18271_dvb_config = {324	.std_map = &hauppauge_tda18271_dvbt_std_map,325	.gate    = TDA18271_GATE_ANALOG,326	.output_opt = TDA18271_OUTPUT_LT_OFF,327};328 329static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap)330{331	adap->fe[0] = dvb_attach(tda10048_attach, &hauppauge_tda10048_config,332				 &adap->channel.hdw->i2c_adap);333	if (adap->fe[0])334		return 0;335 336	return -EIO;337}338 339static int pvr2_73xxx_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)340{341	dvb_attach(tda829x_attach, adap->fe[0],342		   &adap->channel.hdw->i2c_adap, 0x42,343		   &tda829x_no_probe);344	dvb_attach(tda18271_attach, adap->fe[0], 0x60,345		   &adap->channel.hdw->i2c_adap,346		   &hauppauge_tda18271_dvb_config);347 348	return 0;349}350 351static const struct pvr2_dvb_props pvr2_73xxx_dvb_props = {352	.frontend_attach = pvr2_tda10048_attach,353	.tuner_attach    = pvr2_73xxx_tda18271_8295_attach,354};355#endif356 357static const struct pvr2_device_client_desc pvr2_cli_73xxx[] = {358	{ .module_id = PVR2_CLIENT_ID_CX25840 },359	{ .module_id = PVR2_CLIENT_ID_TUNER,360	  .i2c_address_list = "\x42"},361};362 363#define PVR2_FIRMWARE_73xxx "v4l-pvrusb2-73xxx-01.fw"364static const char *pvr2_fw1_names_73xxx[] = {365		PVR2_FIRMWARE_73xxx,366};367 368static const struct pvr2_device_desc pvr2_device_73xxx = {369		.description = "WinTV HVR-1900 Model 73xxx",370		.shortname = "73xxx",371		.client_table.lst = pvr2_cli_73xxx,372		.client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx),373		.fx2_firmware.lst = pvr2_fw1_names_73xxx,374		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_73xxx),375		.flag_has_cx25840 = !0,376		.flag_has_hauppauge_rom = !0,377		.flag_has_analogtuner = !0,378		.flag_has_composite = !0,379		.flag_has_svideo = !0,380		.flag_fx2_16kb = !0,381		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,382		.digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,383		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,384		.ir_scheme = PVR2_IR_SCHEME_ZILOG,385#ifdef CONFIG_VIDEO_PVRUSB2_DVB386		.dvb_props = &pvr2_73xxx_dvb_props,387#endif388};389 390 391 392/*------------------------------------------------------------------------*/393/* Hauppauge PVR-USB2 Model 75xxx */394 395#ifdef CONFIG_VIDEO_PVRUSB2_DVB396static struct s5h1409_config pvr2_s5h1409_config = {397	.demod_address = 0x32 >> 1,398	.output_mode   = S5H1409_PARALLEL_OUTPUT,399	.gpio          = S5H1409_GPIO_OFF,400	.qam_if        = 4000,401	.inversion     = S5H1409_INVERSION_ON,402	.status_mode   = S5H1409_DEMODLOCKING,403};404 405static struct s5h1411_config pvr2_s5h1411_config = {406	.output_mode   = S5H1411_PARALLEL_OUTPUT,407	.gpio          = S5H1411_GPIO_OFF,408	.vsb_if        = S5H1411_IF_44000,409	.qam_if        = S5H1411_IF_4000,410	.inversion     = S5H1411_INVERSION_ON,411	.status_mode   = S5H1411_DEMODLOCKING,412};413 414static struct tda18271_std_map hauppauge_tda18271_std_map = {415	.atsc_6   = { .if_freq = 5380, .agc_mode = 3, .std = 3,416		      .if_lvl = 6, .rfagc_top = 0x37, },417	.qam_6    = { .if_freq = 4000, .agc_mode = 3, .std = 0,418		      .if_lvl = 6, .rfagc_top = 0x37, },419};420 421static struct tda18271_config hauppauge_tda18271_config = {422	.std_map = &hauppauge_tda18271_std_map,423	.gate    = TDA18271_GATE_ANALOG,424	.output_opt = TDA18271_OUTPUT_LT_OFF,425};426 427static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap)428{429	adap->fe[0] = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config,430				 &adap->channel.hdw->i2c_adap);431	if (adap->fe[0])432		return 0;433 434	return -EIO;435}436 437static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap)438{439	adap->fe[0] = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config,440				 &adap->channel.hdw->i2c_adap);441	if (adap->fe[0])442		return 0;443 444	return -EIO;445}446 447static int pvr2_tda18271_8295_attach(struct pvr2_dvb_adapter *adap)448{449	dvb_attach(tda829x_attach, adap->fe[0],450		   &adap->channel.hdw->i2c_adap, 0x42,451		   &tda829x_no_probe);452	dvb_attach(tda18271_attach, adap->fe[0], 0x60,453		   &adap->channel.hdw->i2c_adap,454		   &hauppauge_tda18271_config);455 456	return 0;457}458 459static const struct pvr2_dvb_props pvr2_750xx_dvb_props = {460	.frontend_attach = pvr2_s5h1409_attach,461	.tuner_attach    = pvr2_tda18271_8295_attach,462};463 464static const struct pvr2_dvb_props pvr2_751xx_dvb_props = {465	.frontend_attach = pvr2_s5h1411_attach,466	.tuner_attach    = pvr2_tda18271_8295_attach,467};468#endif469 470#define PVR2_FIRMWARE_75xxx "v4l-pvrusb2-73xxx-01.fw"471static const char *pvr2_fw1_names_75xxx[] = {472		PVR2_FIRMWARE_75xxx,473};474 475static const struct pvr2_device_desc pvr2_device_750xx = {476		.description = "WinTV HVR-1950 Model 750xx",477		.shortname = "750xx",478		.client_table.lst = pvr2_cli_73xxx,479		.client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx),480		.fx2_firmware.lst = pvr2_fw1_names_75xxx,481		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx),482		.flag_has_cx25840 = !0,483		.flag_has_hauppauge_rom = !0,484		.flag_has_analogtuner = !0,485		.flag_has_composite = !0,486		.flag_has_svideo = !0,487		.flag_fx2_16kb = !0,488		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,489		.digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,490		.default_std_mask = V4L2_STD_NTSC_M,491		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,492		.ir_scheme = PVR2_IR_SCHEME_ZILOG,493#ifdef CONFIG_VIDEO_PVRUSB2_DVB494		.dvb_props = &pvr2_750xx_dvb_props,495#endif496};497 498static const struct pvr2_device_desc pvr2_device_751xx = {499		.description = "WinTV HVR-1950 Model 751xx",500		.shortname = "751xx",501		.client_table.lst = pvr2_cli_73xxx,502		.client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx),503		.fx2_firmware.lst = pvr2_fw1_names_75xxx,504		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx),505		.flag_has_cx25840 = !0,506		.flag_has_hauppauge_rom = !0,507		.flag_has_analogtuner = !0,508		.flag_has_composite = !0,509		.flag_has_svideo = !0,510		.flag_fx2_16kb = !0,511		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,512		.digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,513		.default_std_mask = V4L2_STD_NTSC_M,514		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,515		.ir_scheme = PVR2_IR_SCHEME_ZILOG,516#ifdef CONFIG_VIDEO_PVRUSB2_DVB517		.dvb_props = &pvr2_751xx_dvb_props,518#endif519};520 521/*------------------------------------------------------------------------*/522/*    Hauppauge PVR-USB2 Model 160000 / 160111 -- HVR-1955 / HVR-1975     */523 524#ifdef CONFIG_VIDEO_PVRUSB2_DVB525static int pvr2_si2157_attach(struct pvr2_dvb_adapter *adap);526static int pvr2_si2168_attach(struct pvr2_dvb_adapter *adap);527static int pvr2_dual_fe_attach(struct pvr2_dvb_adapter *adap);528static int pvr2_lgdt3306a_attach(struct pvr2_dvb_adapter *adap);529 530static const struct pvr2_dvb_props pvr2_160000_dvb_props = {531	.frontend_attach = pvr2_dual_fe_attach,532	.tuner_attach    = pvr2_si2157_attach,533};534 535static const struct pvr2_dvb_props pvr2_160111_dvb_props = {536	.frontend_attach = pvr2_lgdt3306a_attach,537	.tuner_attach    = pvr2_si2157_attach,538};539 540static int pvr2_si2157_attach(struct pvr2_dvb_adapter *adap)541{542	struct si2157_config si2157_config = {};543 544	si2157_config.inversion = 1;545	si2157_config.fe = adap->fe[0];546 547	adap->i2c_client_tuner = dvb_module_probe("si2157", "si2177",548						  &adap->channel.hdw->i2c_adap,549						  0x60, &si2157_config);550 551	if (!adap->i2c_client_tuner)552		return -ENODEV;553 554	return 0;555}556 557static int pvr2_si2168_attach(struct pvr2_dvb_adapter *adap)558{559	struct si2168_config si2168_config = {};560	struct i2c_adapter *adapter;561 562	pr_debug("%s()\n", __func__);563 564	si2168_config.fe = &adap->fe[1];565	si2168_config.i2c_adapter = &adapter;566	si2168_config.ts_mode = SI2168_TS_PARALLEL; /*2, 1-serial, 2-parallel.*/567	si2168_config.ts_clock_gapped = 1; /*0-disabled, 1-enabled.*/568	si2168_config.ts_clock_inv = 0; /*0-not-invert, 1-invert*/569	si2168_config.spectral_inversion = 1; /*0-not-invert, 1-invert*/570 571	adap->i2c_client_demod[1] = dvb_module_probe("si2168", NULL,572						     &adap->channel.hdw->i2c_adap,573						     0x64, &si2168_config);574 575	if (!adap->i2c_client_demod[1])576		return -ENODEV;577 578	return 0;579}580 581static int pvr2_lgdt3306a_attach(struct pvr2_dvb_adapter *adap)582{583	struct lgdt3306a_config lgdt3306a_config;584	struct i2c_adapter *adapter;585 586	pr_debug("%s()\n", __func__);587 588	lgdt3306a_config.fe = &adap->fe[0];589	lgdt3306a_config.i2c_adapter = &adapter;590	lgdt3306a_config.deny_i2c_rptr = 1;591	lgdt3306a_config.spectral_inversion = 1;592	lgdt3306a_config.qam_if_khz = 4000;593	lgdt3306a_config.vsb_if_khz = 3250;594	lgdt3306a_config.mpeg_mode = LGDT3306A_MPEG_PARALLEL;595	lgdt3306a_config.tpclk_edge = LGDT3306A_TPCLK_FALLING_EDGE;596	lgdt3306a_config.tpvalid_polarity = LGDT3306A_TP_VALID_LOW;597	lgdt3306a_config.xtalMHz = 25; /* demod clock MHz; 24/25 supported */598 599	adap->i2c_client_demod[0] = dvb_module_probe("lgdt3306a", NULL,600						     &adap->channel.hdw->i2c_adap,601						     0x59, &lgdt3306a_config);602 603	if (!adap->i2c_client_demod[0])604		return -ENODEV;605 606	return 0;607}608 609static int pvr2_dual_fe_attach(struct pvr2_dvb_adapter *adap)610{611	pr_debug("%s()\n", __func__);612 613	if (pvr2_lgdt3306a_attach(adap) != 0)614		return -ENODEV;615 616	if (pvr2_si2168_attach(adap) != 0) {617		dvb_module_release(adap->i2c_client_demod[0]);618		return -ENODEV;619	}620 621	return 0;622}623#endif624 625#define PVR2_FIRMWARE_160xxx "v4l-pvrusb2-160xxx-01.fw"626static const char *pvr2_fw1_names_160xxx[] = {627		PVR2_FIRMWARE_160xxx,628};629 630static const struct pvr2_device_client_desc pvr2_cli_160xxx[] = {631	{ .module_id = PVR2_CLIENT_ID_CX25840 },632};633 634static const struct pvr2_device_desc pvr2_device_160000 = {635		.description = "WinTV HVR-1975 Model 160000",636		.shortname = "160000",637		.client_table.lst = pvr2_cli_160xxx,638		.client_table.cnt = ARRAY_SIZE(pvr2_cli_160xxx),639		.fx2_firmware.lst = pvr2_fw1_names_160xxx,640		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_160xxx),641		.default_tuner_type = TUNER_ABSENT,642		.flag_has_cx25840 = 1,643		.flag_has_hauppauge_rom = 1,644		.flag_has_analogtuner = 1,645		.flag_has_composite = 1,646		.flag_has_svideo = 1,647		.flag_fx2_16kb = 1,648		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,649		.digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,650		.default_std_mask = V4L2_STD_NTSC_M,651		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,652		.ir_scheme = PVR2_IR_SCHEME_ZILOG,653#ifdef CONFIG_VIDEO_PVRUSB2_DVB654		.dvb_props = &pvr2_160000_dvb_props,655#endif656};657 658static const struct pvr2_device_desc pvr2_device_160111 = {659		.description = "WinTV HVR-1955 Model 160111",660		.shortname = "160111",661		.client_table.lst = pvr2_cli_160xxx,662		.client_table.cnt = ARRAY_SIZE(pvr2_cli_160xxx),663		.fx2_firmware.lst = pvr2_fw1_names_160xxx,664		.fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_160xxx),665		.default_tuner_type = TUNER_ABSENT,666		.flag_has_cx25840 = 1,667		.flag_has_hauppauge_rom = 1,668		.flag_has_analogtuner = 1,669		.flag_has_composite = 1,670		.flag_has_svideo = 1,671		.flag_fx2_16kb = 1,672		.signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,673		.digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE,674		.default_std_mask = V4L2_STD_NTSC_M,675		.led_scheme = PVR2_LED_SCHEME_HAUPPAUGE,676		.ir_scheme = PVR2_IR_SCHEME_ZILOG,677#ifdef CONFIG_VIDEO_PVRUSB2_DVB678		.dvb_props = &pvr2_160111_dvb_props,679#endif680};681 682/*------------------------------------------------------------------------*/683 684struct usb_device_id pvr2_device_table[] = {685	{ USB_DEVICE(0x2040, 0x2900),686	  .driver_info = (kernel_ulong_t)&pvr2_device_29xxx},687	{ USB_DEVICE(0x2040, 0x2950), /* Logically identical to 2900 */688	  .driver_info = (kernel_ulong_t)&pvr2_device_29xxx},689	{ USB_DEVICE(0x2040, 0x2400),690	  .driver_info = (kernel_ulong_t)&pvr2_device_24xxx},691	{ USB_DEVICE(0x1164, 0x0622),692	  .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2},693	{ USB_DEVICE(0x1164, 0x0602),694	  .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2d},695	{ USB_DEVICE(0x11ba, 0x1003),696	  .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator},697	{ USB_DEVICE(0x11ba, 0x1001),698	  .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2},699	{ USB_DEVICE(0x2040, 0x7300),700	  .driver_info = (kernel_ulong_t)&pvr2_device_73xxx},701	{ USB_DEVICE(0x2040, 0x7500),702	  .driver_info = (kernel_ulong_t)&pvr2_device_750xx},703	{ USB_DEVICE(0x2040, 0x7501),704	  .driver_info = (kernel_ulong_t)&pvr2_device_751xx},705	{ USB_DEVICE(0x0ccd, 0x0039),706	  .driver_info = (kernel_ulong_t)&pvr2_device_av400},707	{ USB_DEVICE(0x2040, 0x7502),708	  .driver_info = (kernel_ulong_t)&pvr2_device_160111},709	{ USB_DEVICE(0x2040, 0x7510),710	  .driver_info = (kernel_ulong_t)&pvr2_device_160000},711	{ }712};713 714MODULE_DEVICE_TABLE(usb, pvr2_device_table);715MODULE_FIRMWARE(PVR2_FIRMWARE_29xxx);716MODULE_FIRMWARE(PVR2_FIRMWARE_24xxx);717MODULE_FIRMWARE(PVR2_FIRMWARE_73xxx);718MODULE_FIRMWARE(PVR2_FIRMWARE_75xxx);719