cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pvrusb2-devattr.c (21575B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      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 the
     10driver.  To define a new device, add elements to the pvr2_device_table and
     11pvr2_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_DVB
     22#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#endif
     34
     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_DVB
    177static 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#endif
    207
    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_DVB
    228		.dvb_props = &pvr2_onair_creator_fe_props,
    229#endif
    230};
    231
    232
    233
    234/*------------------------------------------------------------------------*/
    235/* OnAir USB 2.0 */
    236
    237#ifdef CONFIG_VIDEO_PVRUSB2_DVB
    238static 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#endif
    267
    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_DVB
    288		.dvb_props = &pvr2_onair_usb2_fe_props,
    289#endif
    290};
    291
    292
    293
    294/*------------------------------------------------------------------------*/
    295/* Hauppauge PVR-USB2 Model 73xxx */
    296
    297#ifdef CONFIG_VIDEO_PVRUSB2_DVB
    298static 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#endif
    356
    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_DVB
    386		.dvb_props = &pvr2_73xxx_dvb_props,
    387#endif
    388};
    389
    390
    391
    392/*------------------------------------------------------------------------*/
    393/* Hauppauge PVR-USB2 Model 75xxx */
    394
    395#ifdef CONFIG_VIDEO_PVRUSB2_DVB
    396static 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#endif
    469
    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_DVB
    494		.dvb_props = &pvr2_750xx_dvb_props,
    495#endif
    496};
    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_DVB
    517		.dvb_props = &pvr2_751xx_dvb_props,
    518#endif
    519};
    520
    521/*------------------------------------------------------------------------*/
    522/*    Hauppauge PVR-USB2 Model 160000 / 160111 -- HVR-1955 / HVR-1975     */
    523
    524#ifdef CONFIG_VIDEO_PVRUSB2_DVB
    525static 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#endif
    624
    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_DVB
    654		.dvb_props = &pvr2_160000_dvb_props,
    655#endif
    656};
    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_DVB
    678		.dvb_props = &pvr2_160111_dvb_props,
    679#endif
    680};
    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);