diff options
-rw-r--r-- | Documentation/dvb/bt8xx.txt | 12 | ||||
-rw-r--r-- | drivers/media/dvb/bt8xx/bt878.c | 76 | ||||
-rw-r--r-- | drivers/media/dvb/bt8xx/bt878.h | 6 |
3 files changed, 45 insertions, 49 deletions
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt index ecb47adda063..b7b1d1b1da46 100644 --- a/Documentation/dvb/bt8xx.txt +++ b/Documentation/dvb/bt8xx.txt | |||
@@ -78,6 +78,18 @@ Example: | |||
78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. | 78 | For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. |
79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. | 79 | In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. |
80 | 80 | ||
81 | 2c) Probing the cards with broken PCI subsystem ID | ||
82 | -------------------------------------------------- | ||
83 | There are some TwinHan cards that the EEPROM has become corrupted for some | ||
84 | reason. The cards do not have correct PCI subsystem ID. But we can force | ||
85 | probing the cards with broken PCI subsystem ID | ||
86 | |||
87 | $ echo 109e 0878 $subvendor $subdevice > \ | ||
88 | /sys/bus/pci/drivers/bt878/new_id | ||
89 | |||
90 | 109e: PCI_VENDOR_ID_BROOKTREE | ||
91 | 0878: PCI_DEVICE_ID_BROOKTREE_878 | ||
92 | |||
81 | Authors: Richard Walker, | 93 | Authors: Richard Walker, |
82 | Jamie Honan, | 94 | Jamie Honan, |
83 | Michael Hunold, | 95 | Michael Hunold, |
diff --git a/drivers/media/dvb/bt8xx/bt878.c b/drivers/media/dvb/bt8xx/bt878.c index 85e36a1d6d78..c7bbb40223f5 100644 --- a/drivers/media/dvb/bt8xx/bt878.c +++ b/drivers/media/dvb/bt8xx/bt878.c | |||
@@ -378,23 +378,37 @@ bt878_device_control(struct bt878 *bt, unsigned int cmd, union dst_gpio_packet * | |||
378 | 378 | ||
379 | EXPORT_SYMBOL(bt878_device_control); | 379 | EXPORT_SYMBOL(bt878_device_control); |
380 | 380 | ||
381 | #define BROOKTREE_878_DEVICE(vend, dev, name) \ | ||
382 | { \ | ||
383 | .vendor = PCI_VENDOR_ID_BROOKTREE, \ | ||
384 | .device = PCI_DEVICE_ID_BROOKTREE_878, \ | ||
385 | .subvendor = (vend), .subdevice = (dev), \ | ||
386 | .driver_data = (unsigned long) name \ | ||
387 | } | ||
381 | 388 | ||
382 | static struct cards card_list[] __devinitdata = { | 389 | static struct pci_device_id bt878_pci_tbl[] __devinitdata = { |
383 | 390 | BROOKTREE_878_DEVICE(0x0071, 0x0101, "Nebula Electronics DigiTV"), | |
384 | { 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" }, | 391 | BROOKTREE_878_DEVICE(0x1461, 0x0761, "AverMedia AverTV DVB-T 761"), |
385 | { 0x07611461, BTTV_BOARD_AVDVBT_761, "AverMedia AverTV DVB-T 761" }, | 392 | BROOKTREE_878_DEVICE(0x11bd, 0x001c, "Pinnacle PCTV Sat"), |
386 | { 0x001c11bd, BTTV_BOARD_PINNACLESAT, "Pinnacle PCTV Sat" }, | 393 | BROOKTREE_878_DEVICE(0x11bd, 0x0026, "Pinnacle PCTV SAT CI"), |
387 | { 0x002611bd, BTTV_BOARD_TWINHAN_DST, "Pinnacle PCTV SAT CI" }, | 394 | BROOKTREE_878_DEVICE(0x1822, 0x0001, "Twinhan VisionPlus DVB"), |
388 | { 0x00011822, BTTV_BOARD_TWINHAN_DST, "Twinhan VisionPlus DVB" }, | 395 | BROOKTREE_878_DEVICE(0x270f, 0xfc00, |
389 | { 0xfc00270f, BTTV_BOARD_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" }, | 396 | "ChainTech digitop DST-1000 DVB-S"), |
390 | { 0x07711461, BTTV_BOARD_AVDVBT_771, "AVermedia AverTV DVB-T 771" }, | 397 | BROOKTREE_878_DEVICE(0x1461, 0x0771, "AVermedia AverTV DVB-T 771"), |
391 | { 0xdb1018ac, BTTV_BOARD_DVICO_DVBT_LITE, "DViCO FusionHDTV DVB-T Lite" }, | 398 | BROOKTREE_878_DEVICE(0x18ac, 0xdb10, "DViCO FusionHDTV DVB-T Lite"), |
392 | { 0xdb1118ac, BTTV_BOARD_DVICO_DVBT_LITE, "Ultraview DVB-T Lite" }, | 399 | BROOKTREE_878_DEVICE(0x18ac, 0xdb11, "Ultraview DVB-T Lite"), |
393 | { 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE, "DViCO FusionHDTV 5 Lite" }, | 400 | BROOKTREE_878_DEVICE(0x18ac, 0xd500, "DViCO FusionHDTV 5 Lite"), |
394 | { 0x20007063, BTTV_BOARD_PC_HDTV, "pcHDTV HD-2000 TV" }, | 401 | BROOKTREE_878_DEVICE(0x7063, 0x2000, "pcHDTV HD-2000 TV"), |
395 | { 0x00261822, BTTV_BOARD_TWINHAN_DST, "DNTV Live! Mini" } | 402 | BROOKTREE_878_DEVICE(0x1822, 0x0026, "DNTV Live! Mini"), |
403 | { } | ||
396 | }; | 404 | }; |
397 | 405 | ||
406 | MODULE_DEVICE_TABLE(pci, bt878_pci_tbl); | ||
407 | |||
408 | static const char * __devinit card_name(const struct pci_device_id *id) | ||
409 | { | ||
410 | return id->driver_data ? (const char *)id->driver_data : "Unknown"; | ||
411 | } | ||
398 | 412 | ||
399 | /***********************/ | 413 | /***********************/ |
400 | /* PCI device handling */ | 414 | /* PCI device handling */ |
@@ -403,15 +417,13 @@ static struct cards card_list[] __devinitdata = { | |||
403 | static int __devinit bt878_probe(struct pci_dev *dev, | 417 | static int __devinit bt878_probe(struct pci_dev *dev, |
404 | const struct pci_device_id *pci_id) | 418 | const struct pci_device_id *pci_id) |
405 | { | 419 | { |
406 | int result = 0, has_dvb = 0, i; | 420 | int result = 0; |
407 | unsigned char lat; | 421 | unsigned char lat; |
408 | struct bt878 *bt; | 422 | struct bt878 *bt; |
409 | #if defined(__powerpc__) | 423 | #if defined(__powerpc__) |
410 | unsigned int cmd; | 424 | unsigned int cmd; |
411 | #endif | 425 | #endif |
412 | unsigned int cardid; | 426 | unsigned int cardid; |
413 | unsigned short id; | ||
414 | struct cards *dvb_cards; | ||
415 | 427 | ||
416 | printk(KERN_INFO "bt878: Bt878 AUDIO function found (%d).\n", | 428 | printk(KERN_INFO "bt878: Bt878 AUDIO function found (%d).\n", |
417 | bt878_num); | 429 | bt878_num); |
@@ -423,25 +435,11 @@ static int __devinit bt878_probe(struct pci_dev *dev, | |||
423 | if (pci_enable_device(dev)) | 435 | if (pci_enable_device(dev)) |
424 | return -EIO; | 436 | return -EIO; |
425 | 437 | ||
426 | pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &id); | 438 | cardid = dev->subsystem_device << 16; |
427 | cardid = id << 16; | 439 | cardid |= dev->subsystem_vendor; |
428 | pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &id); | ||
429 | cardid |= id; | ||
430 | |||
431 | for (i = 0, dvb_cards = card_list; i < ARRAY_SIZE(card_list); i++, dvb_cards++) { | ||
432 | if (cardid == dvb_cards->pci_id) { | ||
433 | printk("%s: card id=[0x%x],[ %s ] has DVB functions.\n", | ||
434 | __func__, cardid, dvb_cards->name); | ||
435 | has_dvb = 1; | ||
436 | } | ||
437 | } | ||
438 | 440 | ||
439 | if (!has_dvb) { | 441 | printk(KERN_INFO "%s: card id=[0x%x],[ %s ] has DVB functions.\n", |
440 | printk("%s: card id=[0x%x], Unknown card.\nExiting..\n", __func__, cardid); | 442 | __func__, cardid, card_name(pci_id)); |
441 | result = -EINVAL; | ||
442 | |||
443 | goto fail0; | ||
444 | } | ||
445 | 443 | ||
446 | bt = &bt878[bt878_num]; | 444 | bt = &bt878[bt878_num]; |
447 | bt->dev = dev; | 445 | bt->dev = dev; |
@@ -572,14 +570,6 @@ static void __devexit bt878_remove(struct pci_dev *pci_dev) | |||
572 | return; | 570 | return; |
573 | } | 571 | } |
574 | 572 | ||
575 | static struct pci_device_id bt878_pci_tbl[] __devinitdata = { | ||
576 | {PCI_VENDOR_ID_BROOKTREE, PCI_DEVICE_ID_BROOKTREE_878, | ||
577 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
578 | {0,} | ||
579 | }; | ||
580 | |||
581 | MODULE_DEVICE_TABLE(pci, bt878_pci_tbl); | ||
582 | |||
583 | static struct pci_driver bt878_pci_driver = { | 573 | static struct pci_driver bt878_pci_driver = { |
584 | .name = "bt878", | 574 | .name = "bt878", |
585 | .id_table = bt878_pci_tbl, | 575 | .id_table = bt878_pci_tbl, |
diff --git a/drivers/media/dvb/bt8xx/bt878.h b/drivers/media/dvb/bt8xx/bt878.h index d593bc145628..375fd2892a11 100644 --- a/drivers/media/dvb/bt8xx/bt878.h +++ b/drivers/media/dvb/bt8xx/bt878.h | |||
@@ -101,12 +101,6 @@ | |||
101 | #define BTTV_BOARD_DVICO_DVBT_LITE 0x80 | 101 | #define BTTV_BOARD_DVICO_DVBT_LITE 0x80 |
102 | #define BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE 0x87 | 102 | #define BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE 0x87 |
103 | 103 | ||
104 | struct cards { | ||
105 | __u32 pci_id; | ||
106 | __u16 card_id; | ||
107 | char *name; | ||
108 | }; | ||
109 | |||
110 | extern int bt878_num; | 104 | extern int bt878_num; |
111 | 105 | ||
112 | struct bt878 { | 106 | struct bt878 { |