1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * 4 * Copyright (C) 2007 Mike Isely <isely@pobox.com> 5 */ 6 7 /* 8 9 This source file should encompass ALL per-device type information for the 10 driver. To define a new device, add elements to the pvr2_device_table and 11 pvr2_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 #endif 31 32 33 /*------------------------------------------------------------------------*/ 34 /* Hauppauge PVR-USB2 Model 29xxx */ 35 36 static const struct pvr2_device_client_desc pvr2_cli_29xxx[] = { 37 { .module_id = PVR2_CLIENT_ID_SAA7115 }, 38 { .module_id = PVR2_CLIENT_ID_MSP3400 }, 39 { .module_id = PVR2_CLIENT_ID_TUNER }, 40 { .module_id = PVR2_CLIENT_ID_DEMOD }, 41 }; 42 43 #define PVR2_FIRMWARE_29xxx "v4l-pvrusb2-29xxx-01.fw" 44 static const char *pvr2_fw1_names_29xxx[] = { 45 PVR2_FIRMWARE_29xxx, 46 }; 47 48 static const struct pvr2_device_desc pvr2_device_29xxx = { 49 .description = "WinTV PVR USB2 Model 29xxx", 50 .shortname = "29xxx", 51 .client_table.lst = pvr2_cli_29xxx, 52 .client_table.cnt = ARRAY_SIZE(pvr2_cli_29xxx), 53 .fx2_firmware.lst = pvr2_fw1_names_29xxx, 54 .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx), 55 .flag_has_hauppauge_rom = !0, 56 .flag_has_analogtuner = !0, 57 .flag_has_fmradio = !0, 58 .flag_has_composite = !0, 59 .flag_has_svideo = !0, 60 .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, 61 .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, 62 .ir_scheme = PVR2_IR_SCHEME_29XXX, 63 }; 64 65 66 67 /*------------------------------------------------------------------------*/ 68 /* Hauppauge PVR-USB2 Model 24xxx */ 69 70 static const struct pvr2_device_client_desc pvr2_cli_24xxx[] = { 71 { .module_id = PVR2_CLIENT_ID_CX25840 }, 72 { .module_id = PVR2_CLIENT_ID_TUNER }, 73 { .module_id = PVR2_CLIENT_ID_WM8775 }, 74 { .module_id = PVR2_CLIENT_ID_DEMOD }, 75 }; 76 77 #define PVR2_FIRMWARE_24xxx "v4l-pvrusb2-24xxx-01.fw" 78 static const char *pvr2_fw1_names_24xxx[] = { 79 PVR2_FIRMWARE_24xxx, 80 }; 81 82 static const struct pvr2_device_desc pvr2_device_24xxx = { 83 .description = "WinTV PVR USB2 Model 24xxx", 84 .shortname = "24xxx", 85 .client_table.lst = pvr2_cli_24xxx, 86 .client_table.cnt = ARRAY_SIZE(pvr2_cli_24xxx), 87 .fx2_firmware.lst = pvr2_fw1_names_24xxx, 88 .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_24xxx), 89 .flag_has_cx25840 = !0, 90 .flag_has_wm8775 = !0, 91 .flag_has_hauppauge_rom = !0, 92 .flag_has_analogtuner = !0, 93 .flag_has_fmradio = !0, 94 .flag_has_composite = !0, 95 .flag_has_svideo = !0, 96 .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, 97 .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, 98 .ir_scheme = PVR2_IR_SCHEME_24XXX, 99 }; 100 101 102 103 /*------------------------------------------------------------------------*/ 104 /* GOTVIEW USB2.0 DVD2 */ 105 106 static const struct pvr2_device_client_desc pvr2_cli_gotview_2[] = { 107 { .module_id = PVR2_CLIENT_ID_CX25840 }, 108 { .module_id = PVR2_CLIENT_ID_TUNER }, 109 { .module_id = PVR2_CLIENT_ID_DEMOD }, 110 }; 111 112 static const struct pvr2_device_desc pvr2_device_gotview_2 = { 113 .description = "Gotview USB 2.0 DVD 2", 114 .shortname = "gv2", 115 .client_table.lst = pvr2_cli_gotview_2, 116 .client_table.cnt = ARRAY_SIZE(pvr2_cli_gotview_2), 117 .flag_has_cx25840 = !0, 118 .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 119 .flag_has_analogtuner = !0, 120 .flag_has_fmradio = !0, 121 .flag_has_composite = !0, 122 .flag_has_svideo = !0, 123 .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, 124 }; 125 126 127 128 /*------------------------------------------------------------------------*/ 129 /* GOTVIEW USB2.0 DVD Deluxe */ 130 131 /* (same module list as gotview_2) */ 132 133 static const struct pvr2_device_desc pvr2_device_gotview_2d = { 134 .description = "Gotview USB 2.0 DVD Deluxe", 135 .shortname = "gv2d", 136 .client_table.lst = pvr2_cli_gotview_2, 137 .client_table.cnt = ARRAY_SIZE(pvr2_cli_gotview_2), 138 .flag_has_cx25840 = !0, 139 .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, 140 .flag_has_analogtuner = !0, 141 .flag_has_composite = !0, 142 .flag_has_svideo = !0, 143 .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, 144 }; 145 146 147 148 /*------------------------------------------------------------------------*/ 149 /* Terratec Grabster AV400 */ 150 151 static const struct pvr2_device_client_desc pvr2_cli_av400[] = { 152 { .module_id = PVR2_CLIENT_ID_CX25840 }, 153 }; 154 155 static const struct pvr2_device_desc pvr2_device_av400 = { 156 .description = "Terratec Grabster AV400", 157 .shortname = "av400", 158 .flag_is_experimental = 1, 159 .client_table.lst = pvr2_cli_av400, 160 .client_table.cnt = ARRAY_SIZE(pvr2_cli_av400), 161 .flag_has_cx25840 = !0, 162 .flag_has_analogtuner = 0, 163 .flag_has_composite = !0, 164 .flag_has_svideo = !0, 165 .signal_routing_scheme = PVR2_ROUTING_SCHEME_AV400, 166 }; 167 168 169 170 /*------------------------------------------------------------------------*/ 171 /* OnAir Creator */ 172 173 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 174 static struct lgdt330x_config pvr2_lgdt3303_config = { 175 .demod_chip = LGDT3303, 176 .clock_polarity_flip = 1, 177 }; 178 179 static int pvr2_lgdt3303_attach(struct pvr2_dvb_adapter *adap) 180 { 181 adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3303_config, 182 0x0e, 183 &adap->channel.hdw->i2c_adap); 184 if (adap->fe) 185 return 0; 186 187 return -EIO; 188 } 189 190 static int pvr2_lgh06xf_attach(struct pvr2_dvb_adapter *adap) 191 { 192 dvb_attach(simple_tuner_attach, adap->fe, 193 &adap->channel.hdw->i2c_adap, 0x61, 194 TUNER_LG_TDVS_H06XF); 195 196 return 0; 197 } 198 199 static const struct pvr2_dvb_props pvr2_onair_creator_fe_props = { 200 .frontend_attach = pvr2_lgdt3303_attach, 201 .tuner_attach = pvr2_lgh06xf_attach, 202 }; 203 #endif 204 205 static const struct pvr2_device_client_desc pvr2_cli_onair_creator[] = { 206 { .module_id = PVR2_CLIENT_ID_SAA7115 }, 207 { .module_id = PVR2_CLIENT_ID_CS53L32A }, 208 { .module_id = PVR2_CLIENT_ID_TUNER }, 209 }; 210 211 static const struct pvr2_device_desc pvr2_device_onair_creator = { 212 .description = "OnAir Creator Hybrid USB tuner", 213 .shortname = "oac", 214 .client_table.lst = pvr2_cli_onair_creator, 215 .client_table.cnt = ARRAY_SIZE(pvr2_cli_onair_creator), 216 .default_tuner_type = TUNER_LG_TDVS_H06XF, 217 .flag_has_analogtuner = !0, 218 .flag_has_composite = !0, 219 .flag_has_svideo = !0, 220 .flag_digital_requires_cx23416 = !0, 221 .signal_routing_scheme = PVR2_ROUTING_SCHEME_ONAIR, 222 .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR, 223 .default_std_mask = V4L2_STD_NTSC_M, 224 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 225 .dvb_props = &pvr2_onair_creator_fe_props, 226 #endif 227 }; 228 229 230 231 /*------------------------------------------------------------------------*/ 232 /* OnAir USB 2.0 */ 233 234 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 235 static struct lgdt330x_config pvr2_lgdt3302_config = { 236 .demod_chip = LGDT3302, 237 }; 238 239 static int pvr2_lgdt3302_attach(struct pvr2_dvb_adapter *adap) 240 { 241 adap->fe = dvb_attach(lgdt330x_attach, &pvr2_lgdt3302_config, 242 0x0e, 243 &adap->channel.hdw->i2c_adap); 244 if (adap->fe) 245 return 0; 246 247 return -EIO; 248 } 249 250 static int pvr2_fcv1236d_attach(struct pvr2_dvb_adapter *adap) 251 { 252 dvb_attach(simple_tuner_attach, adap->fe, 253 &adap->channel.hdw->i2c_adap, 0x61, 254 TUNER_PHILIPS_FCV1236D); 255 256 return 0; 257 } 258 259 static const struct pvr2_dvb_props pvr2_onair_usb2_fe_props = { 260 .frontend_attach = pvr2_lgdt3302_attach, 261 .tuner_attach = pvr2_fcv1236d_attach, 262 }; 263 #endif 264 265 static const struct pvr2_device_client_desc pvr2_cli_onair_usb2[] = { 266 { .module_id = PVR2_CLIENT_ID_SAA7115 }, 267 { .module_id = PVR2_CLIENT_ID_CS53L32A }, 268 { .module_id = PVR2_CLIENT_ID_TUNER }, 269 }; 270 271 static const struct pvr2_device_desc pvr2_device_onair_usb2 = { 272 .description = "OnAir USB2 Hybrid USB tuner", 273 .shortname = "oa2", 274 .client_table.lst = pvr2_cli_onair_usb2, 275 .client_table.cnt = ARRAY_SIZE(pvr2_cli_onair_usb2), 276 .default_tuner_type = TUNER_PHILIPS_FCV1236D, 277 .flag_has_analogtuner = !0, 278 .flag_has_composite = !0, 279 .flag_has_svideo = !0, 280 .flag_digital_requires_cx23416 = !0, 281 .signal_routing_scheme = PVR2_ROUTING_SCHEME_ONAIR, 282 .digital_control_scheme = PVR2_DIGITAL_SCHEME_ONAIR, 283 .default_std_mask = V4L2_STD_NTSC_M, 284 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 285 .dvb_props = &pvr2_onair_usb2_fe_props, 286 #endif 287 }; 288 289 290 291 /*------------------------------------------------------------------------*/ 292 /* Hauppauge PVR-USB2 Model 73xxx */ 293 294 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 295 static struct tda10048_config hauppauge_tda10048_config = { 296 .demod_address = 0x10 >> 1, 297 .output_mode = TDA10048_PARALLEL_OUTPUT, 298 .fwbulkwritelen = TDA10048_BULKWRITE_50, 299 .inversion = TDA10048_INVERSION_ON, 300 .dtv6_if_freq_khz = TDA10048_IF_3300, 301 .dtv7_if_freq_khz = TDA10048_IF_3800, 302 .dtv8_if_freq_khz = TDA10048_IF_4300, 303 .clk_freq_khz = TDA10048_CLK_16000, 304 .disable_gate_access = 1, 305 }; 306 307 static struct tda829x_config tda829x_no_probe = { 308 .probe_tuner = TDA829X_DONT_PROBE, 309 }; 310 311 static struct tda18271_std_map hauppauge_tda18271_dvbt_std_map = { 312 .dvbt_6 = { .if_freq = 3300, .agc_mode = 3, .std = 4, 313 .if_lvl = 1, .rfagc_top = 0x37, }, 314 .dvbt_7 = { .if_freq = 3800, .agc_mode = 3, .std = 5, 315 .if_lvl = 1, .rfagc_top = 0x37, }, 316 .dvbt_8 = { .if_freq = 4300, .agc_mode = 3, .std = 6, 317 .if_lvl = 1, .rfagc_top = 0x37, }, 318 }; 319 320 static struct tda18271_config hauppauge_tda18271_dvb_config = { 321 .std_map = &hauppauge_tda18271_dvbt_std_map, 322 .gate = TDA18271_GATE_ANALOG, 323 .output_opt = TDA18271_OUTPUT_LT_OFF, 324 }; 325 326 static int pvr2_tda10048_attach(struct pvr2_dvb_adapter *adap) 327 { 328 adap->fe = dvb_attach(tda10048_attach, &hauppauge_tda10048_config, 329 &adap->channel.hdw->i2c_adap); 330 if (adap->fe) 331 return 0; 332 333 return -EIO; 334 } 335 336 static int pvr2_73xxx_tda18271_8295_attach(struct pvr2_dvb_adapter *adap) 337 { 338 dvb_attach(tda829x_attach, adap->fe, 339 &adap->channel.hdw->i2c_adap, 0x42, 340 &tda829x_no_probe); 341 dvb_attach(tda18271_attach, adap->fe, 0x60, 342 &adap->channel.hdw->i2c_adap, 343 &hauppauge_tda18271_dvb_config); 344 345 return 0; 346 } 347 348 static const struct pvr2_dvb_props pvr2_73xxx_dvb_props = { 349 .frontend_attach = pvr2_tda10048_attach, 350 .tuner_attach = pvr2_73xxx_tda18271_8295_attach, 351 }; 352 #endif 353 354 static const struct pvr2_device_client_desc pvr2_cli_73xxx[] = { 355 { .module_id = PVR2_CLIENT_ID_CX25840 }, 356 { .module_id = PVR2_CLIENT_ID_TUNER, 357 .i2c_address_list = "\x42"}, 358 }; 359 360 #define PVR2_FIRMWARE_73xxx "v4l-pvrusb2-73xxx-01.fw" 361 static const char *pvr2_fw1_names_73xxx[] = { 362 PVR2_FIRMWARE_73xxx, 363 }; 364 365 static const struct pvr2_device_desc pvr2_device_73xxx = { 366 .description = "WinTV HVR-1900 Model 73xxx", 367 .shortname = "73xxx", 368 .client_table.lst = pvr2_cli_73xxx, 369 .client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx), 370 .fx2_firmware.lst = pvr2_fw1_names_73xxx, 371 .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_73xxx), 372 .flag_has_cx25840 = !0, 373 .flag_has_hauppauge_rom = !0, 374 .flag_has_analogtuner = !0, 375 .flag_has_composite = !0, 376 .flag_has_svideo = !0, 377 .flag_fx2_16kb = !0, 378 .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, 379 .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, 380 .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, 381 .ir_scheme = PVR2_IR_SCHEME_ZILOG, 382 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 383 .dvb_props = &pvr2_73xxx_dvb_props, 384 #endif 385 }; 386 387 388 389 /*------------------------------------------------------------------------*/ 390 /* Hauppauge PVR-USB2 Model 75xxx */ 391 392 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 393 static struct s5h1409_config pvr2_s5h1409_config = { 394 .demod_address = 0x32 >> 1, 395 .output_mode = S5H1409_PARALLEL_OUTPUT, 396 .gpio = S5H1409_GPIO_OFF, 397 .qam_if = 4000, 398 .inversion = S5H1409_INVERSION_ON, 399 .status_mode = S5H1409_DEMODLOCKING, 400 }; 401 402 static struct s5h1411_config pvr2_s5h1411_config = { 403 .output_mode = S5H1411_PARALLEL_OUTPUT, 404 .gpio = S5H1411_GPIO_OFF, 405 .vsb_if = S5H1411_IF_44000, 406 .qam_if = S5H1411_IF_4000, 407 .inversion = S5H1411_INVERSION_ON, 408 .status_mode = S5H1411_DEMODLOCKING, 409 }; 410 411 static struct tda18271_std_map hauppauge_tda18271_std_map = { 412 .atsc_6 = { .if_freq = 5380, .agc_mode = 3, .std = 3, 413 .if_lvl = 6, .rfagc_top = 0x37, }, 414 .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 0, 415 .if_lvl = 6, .rfagc_top = 0x37, }, 416 }; 417 418 static struct tda18271_config hauppauge_tda18271_config = { 419 .std_map = &hauppauge_tda18271_std_map, 420 .gate = TDA18271_GATE_ANALOG, 421 .output_opt = TDA18271_OUTPUT_LT_OFF, 422 }; 423 424 static int pvr2_s5h1409_attach(struct pvr2_dvb_adapter *adap) 425 { 426 adap->fe = dvb_attach(s5h1409_attach, &pvr2_s5h1409_config, 427 &adap->channel.hdw->i2c_adap); 428 if (adap->fe) 429 return 0; 430 431 return -EIO; 432 } 433 434 static int pvr2_s5h1411_attach(struct pvr2_dvb_adapter *adap) 435 { 436 adap->fe = dvb_attach(s5h1411_attach, &pvr2_s5h1411_config, 437 &adap->channel.hdw->i2c_adap); 438 if (adap->fe) 439 return 0; 440 441 return -EIO; 442 } 443 444 static int pvr2_tda18271_8295_attach(struct pvr2_dvb_adapter *adap) 445 { 446 dvb_attach(tda829x_attach, adap->fe, 447 &adap->channel.hdw->i2c_adap, 0x42, 448 &tda829x_no_probe); 449 dvb_attach(tda18271_attach, adap->fe, 0x60, 450 &adap->channel.hdw->i2c_adap, 451 &hauppauge_tda18271_config); 452 453 return 0; 454 } 455 456 static const struct pvr2_dvb_props pvr2_750xx_dvb_props = { 457 .frontend_attach = pvr2_s5h1409_attach, 458 .tuner_attach = pvr2_tda18271_8295_attach, 459 }; 460 461 static const struct pvr2_dvb_props pvr2_751xx_dvb_props = { 462 .frontend_attach = pvr2_s5h1411_attach, 463 .tuner_attach = pvr2_tda18271_8295_attach, 464 }; 465 #endif 466 467 #define PVR2_FIRMWARE_75xxx "v4l-pvrusb2-73xxx-01.fw" 468 static const char *pvr2_fw1_names_75xxx[] = { 469 PVR2_FIRMWARE_75xxx, 470 }; 471 472 static const struct pvr2_device_desc pvr2_device_750xx = { 473 .description = "WinTV HVR-1950 Model 750xx", 474 .shortname = "750xx", 475 .client_table.lst = pvr2_cli_73xxx, 476 .client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx), 477 .fx2_firmware.lst = pvr2_fw1_names_75xxx, 478 .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx), 479 .flag_has_cx25840 = !0, 480 .flag_has_hauppauge_rom = !0, 481 .flag_has_analogtuner = !0, 482 .flag_has_composite = !0, 483 .flag_has_svideo = !0, 484 .flag_fx2_16kb = !0, 485 .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, 486 .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, 487 .default_std_mask = V4L2_STD_NTSC_M, 488 .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, 489 .ir_scheme = PVR2_IR_SCHEME_ZILOG, 490 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 491 .dvb_props = &pvr2_750xx_dvb_props, 492 #endif 493 }; 494 495 static const struct pvr2_device_desc pvr2_device_751xx = { 496 .description = "WinTV HVR-1950 Model 751xx", 497 .shortname = "751xx", 498 .client_table.lst = pvr2_cli_73xxx, 499 .client_table.cnt = ARRAY_SIZE(pvr2_cli_73xxx), 500 .fx2_firmware.lst = pvr2_fw1_names_75xxx, 501 .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_75xxx), 502 .flag_has_cx25840 = !0, 503 .flag_has_hauppauge_rom = !0, 504 .flag_has_analogtuner = !0, 505 .flag_has_composite = !0, 506 .flag_has_svideo = !0, 507 .flag_fx2_16kb = !0, 508 .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, 509 .digital_control_scheme = PVR2_DIGITAL_SCHEME_HAUPPAUGE, 510 .default_std_mask = V4L2_STD_NTSC_M, 511 .led_scheme = PVR2_LED_SCHEME_HAUPPAUGE, 512 .ir_scheme = PVR2_IR_SCHEME_ZILOG, 513 #ifdef CONFIG_VIDEO_PVRUSB2_DVB 514 .dvb_props = &pvr2_751xx_dvb_props, 515 #endif 516 }; 517 518 519 520 /*------------------------------------------------------------------------*/ 521 522 struct usb_device_id pvr2_device_table[] = { 523 { USB_DEVICE(0x2040, 0x2900), 524 .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, 525 { USB_DEVICE(0x2040, 0x2950), /* Logically identical to 2900 */ 526 .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, 527 { USB_DEVICE(0x2040, 0x2400), 528 .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, 529 { USB_DEVICE(0x1164, 0x0622), 530 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2}, 531 { USB_DEVICE(0x1164, 0x0602), 532 .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2d}, 533 { USB_DEVICE(0x11ba, 0x1003), 534 .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator}, 535 { USB_DEVICE(0x11ba, 0x1001), 536 .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2}, 537 { USB_DEVICE(0x2040, 0x7300), 538 .driver_info = (kernel_ulong_t)&pvr2_device_73xxx}, 539 { USB_DEVICE(0x2040, 0x7500), 540 .driver_info = (kernel_ulong_t)&pvr2_device_750xx}, 541 { USB_DEVICE(0x2040, 0x7501), 542 .driver_info = (kernel_ulong_t)&pvr2_device_751xx}, 543 { USB_DEVICE(0x0ccd, 0x0039), 544 .driver_info = (kernel_ulong_t)&pvr2_device_av400}, 545 { } 546 }; 547 548 MODULE_DEVICE_TABLE(usb, pvr2_device_table); 549 MODULE_FIRMWARE(PVR2_FIRMWARE_29xxx); 550 MODULE_FIRMWARE(PVR2_FIRMWARE_24xxx); 551 MODULE_FIRMWARE(PVR2_FIRMWARE_73xxx); 552 MODULE_FIRMWARE(PVR2_FIRMWARE_75xxx); 553