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