diff options
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 164 |
1 files changed, 108 insertions, 56 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 3fa0f9704909..56f8a3050751 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -34,7 +34,6 @@ | |||
34 | * | 34 | * |
35 | */ | 35 | */ |
36 | 36 | ||
37 | #include <sound/driver.h> | ||
38 | #include <asm/io.h> | 37 | #include <asm/io.h> |
39 | #include <linux/delay.h> | 38 | #include <linux/delay.h> |
40 | #include <linux/interrupt.h> | 39 | #include <linux/interrupt.h> |
@@ -50,29 +49,32 @@ | |||
50 | #include "hda_codec.h" | 49 | #include "hda_codec.h" |
51 | 50 | ||
52 | 51 | ||
53 | static int index = SNDRV_DEFAULT_IDX1; | 52 | static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; |
54 | static char *id = SNDRV_DEFAULT_STR1; | 53 | static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; |
55 | static char *model; | 54 | static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; |
56 | static int position_fix; | 55 | static char *model[SNDRV_CARDS]; |
57 | static int probe_mask = -1; | 56 | static int position_fix[SNDRV_CARDS]; |
57 | static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1}; | ||
58 | static int single_cmd; | 58 | static int single_cmd; |
59 | static int enable_msi; | 59 | static int enable_msi; |
60 | 60 | ||
61 | module_param(index, int, 0444); | 61 | module_param_array(index, int, NULL, 0444); |
62 | MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); | 62 | MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); |
63 | module_param(id, charp, 0444); | 63 | module_param_array(id, charp, NULL, 0444); |
64 | MODULE_PARM_DESC(id, "ID string for Intel HD audio interface."); | 64 | MODULE_PARM_DESC(id, "ID string for Intel HD audio interface."); |
65 | module_param(model, charp, 0444); | 65 | module_param_array(enable, bool, NULL, 0444); |
66 | MODULE_PARM_DESC(enable, "Enable Intel HD audio interface."); | ||
67 | module_param_array(model, charp, NULL, 0444); | ||
66 | MODULE_PARM_DESC(model, "Use the given board model."); | 68 | MODULE_PARM_DESC(model, "Use the given board model."); |
67 | module_param(position_fix, int, 0444); | 69 | module_param_array(position_fix, int, NULL, 0444); |
68 | MODULE_PARM_DESC(position_fix, "Fix DMA pointer " | 70 | MODULE_PARM_DESC(position_fix, "Fix DMA pointer " |
69 | "(0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)."); | 71 | "(0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)."); |
70 | module_param(probe_mask, int, 0444); | 72 | module_param_array(probe_mask, int, NULL, 0444); |
71 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); | 73 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); |
72 | module_param(single_cmd, bool, 0444); | 74 | module_param(single_cmd, bool, 0444); |
73 | MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs " | 75 | MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs " |
74 | "(for debugging only)."); | 76 | "(for debugging only)."); |
75 | module_param(enable_msi, int, 0); | 77 | module_param(enable_msi, int, 0444); |
76 | MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)"); | 78 | MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)"); |
77 | 79 | ||
78 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 80 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
@@ -87,10 +89,6 @@ module_param(power_save_controller, bool, 0644); | |||
87 | MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode."); | 89 | MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode."); |
88 | #endif | 90 | #endif |
89 | 91 | ||
90 | /* just for backward compatibility */ | ||
91 | static int enable; | ||
92 | module_param(enable, bool, 0444); | ||
93 | |||
94 | MODULE_LICENSE("GPL"); | 92 | MODULE_LICENSE("GPL"); |
95 | MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," | 93 | MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," |
96 | "{Intel, ICH6M}," | 94 | "{Intel, ICH6M}," |
@@ -98,12 +96,20 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," | |||
98 | "{Intel, ESB2}," | 96 | "{Intel, ESB2}," |
99 | "{Intel, ICH8}," | 97 | "{Intel, ICH8}," |
100 | "{Intel, ICH9}," | 98 | "{Intel, ICH9}," |
99 | "{Intel, ICH10}," | ||
100 | "{Intel, SCH}," | ||
101 | "{ATI, SB450}," | 101 | "{ATI, SB450}," |
102 | "{ATI, SB600}," | 102 | "{ATI, SB600}," |
103 | "{ATI, RS600}," | 103 | "{ATI, RS600}," |
104 | "{ATI, RS690}," | 104 | "{ATI, RS690}," |
105 | "{ATI, RS780}," | 105 | "{ATI, RS780}," |
106 | "{ATI, R600}," | 106 | "{ATI, R600}," |
107 | "{ATI, RV630}," | ||
108 | "{ATI, RV610}," | ||
109 | "{ATI, RV670}," | ||
110 | "{ATI, RV635}," | ||
111 | "{ATI, RV620}," | ||
112 | "{ATI, RV770}," | ||
107 | "{VIA, VT8251}," | 113 | "{VIA, VT8251}," |
108 | "{VIA, VT8237A}," | 114 | "{VIA, VT8237A}," |
109 | "{SiS, SIS966}," | 115 | "{SiS, SIS966}," |
@@ -370,6 +376,7 @@ struct azx { | |||
370 | /* driver types */ | 376 | /* driver types */ |
371 | enum { | 377 | enum { |
372 | AZX_DRIVER_ICH, | 378 | AZX_DRIVER_ICH, |
379 | AZX_DRIVER_SCH, | ||
373 | AZX_DRIVER_ATI, | 380 | AZX_DRIVER_ATI, |
374 | AZX_DRIVER_ATIHDMI, | 381 | AZX_DRIVER_ATIHDMI, |
375 | AZX_DRIVER_VIA, | 382 | AZX_DRIVER_VIA, |
@@ -380,6 +387,7 @@ enum { | |||
380 | 387 | ||
381 | static char *driver_short_names[] __devinitdata = { | 388 | static char *driver_short_names[] __devinitdata = { |
382 | [AZX_DRIVER_ICH] = "HDA Intel", | 389 | [AZX_DRIVER_ICH] = "HDA Intel", |
390 | [AZX_DRIVER_SCH] = "HDA Intel MID", | ||
383 | [AZX_DRIVER_ATI] = "HDA ATI SB", | 391 | [AZX_DRIVER_ATI] = "HDA ATI SB", |
384 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", | 392 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", |
385 | [AZX_DRIVER_VIA] = "HDA VIA VT82xx", | 393 | [AZX_DRIVER_VIA] = "HDA VIA VT82xx", |
@@ -547,7 +555,7 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec) | |||
547 | 555 | ||
548 | again: | 556 | again: |
549 | timeout = jiffies + msecs_to_jiffies(1000); | 557 | timeout = jiffies + msecs_to_jiffies(1000); |
550 | do { | 558 | for (;;) { |
551 | if (chip->polling_mode) { | 559 | if (chip->polling_mode) { |
552 | spin_lock_irq(&chip->reg_lock); | 560 | spin_lock_irq(&chip->reg_lock); |
553 | azx_update_rirb(chip); | 561 | azx_update_rirb(chip); |
@@ -555,8 +563,15 @@ static unsigned int azx_rirb_get_response(struct hda_codec *codec) | |||
555 | } | 563 | } |
556 | if (!chip->rirb.cmds) | 564 | if (!chip->rirb.cmds) |
557 | return chip->rirb.res; /* the last value */ | 565 | return chip->rirb.res; /* the last value */ |
558 | schedule_timeout_uninterruptible(1); | 566 | if (time_after(jiffies, timeout)) |
559 | } while (time_after_eq(timeout, jiffies)); | 567 | break; |
568 | if (codec->bus->needs_damn_long_delay) | ||
569 | msleep(2); /* temporary workaround */ | ||
570 | else { | ||
571 | udelay(10); | ||
572 | cond_resched(); | ||
573 | } | ||
574 | } | ||
560 | 575 | ||
561 | if (chip->msi) { | 576 | if (chip->msi) { |
562 | snd_printk(KERN_WARNING "hda_intel: No response from codec, " | 577 | snd_printk(KERN_WARNING "hda_intel: No response from codec, " |
@@ -618,8 +633,9 @@ static int azx_single_send_cmd(struct hda_codec *codec, u32 val) | |||
618 | } | 633 | } |
619 | udelay(1); | 634 | udelay(1); |
620 | } | 635 | } |
621 | snd_printd(SFX "send_cmd timeout: IRS=0x%x, val=0x%x\n", | 636 | if (printk_ratelimit()) |
622 | azx_readw(chip, IRS), val); | 637 | snd_printd(SFX "send_cmd timeout: IRS=0x%x, val=0x%x\n", |
638 | azx_readw(chip, IRS), val); | ||
623 | return -EIO; | 639 | return -EIO; |
624 | } | 640 | } |
625 | 641 | ||
@@ -635,8 +651,9 @@ static unsigned int azx_single_get_response(struct hda_codec *codec) | |||
635 | return azx_readl(chip, IR); | 651 | return azx_readl(chip, IR); |
636 | udelay(1); | 652 | udelay(1); |
637 | } | 653 | } |
638 | snd_printd(SFX "get_response timeout: IRS=0x%x\n", | 654 | if (printk_ratelimit()) |
639 | azx_readw(chip, IRS)); | 655 | snd_printd(SFX "get_response timeout: IRS=0x%x\n", |
656 | azx_readw(chip, IRS)); | ||
640 | return (unsigned int)-1; | 657 | return (unsigned int)-1; |
641 | } | 658 | } |
642 | 659 | ||
@@ -1031,7 +1048,8 @@ static unsigned int azx_max_codecs[] __devinitdata = { | |||
1031 | [AZX_DRIVER_NVIDIA] = 3, /* FIXME: correct? */ | 1048 | [AZX_DRIVER_NVIDIA] = 3, /* FIXME: correct? */ |
1032 | }; | 1049 | }; |
1033 | 1050 | ||
1034 | static int __devinit azx_codec_create(struct azx *chip, const char *model) | 1051 | static int __devinit azx_codec_create(struct azx *chip, const char *model, |
1052 | unsigned int codec_probe_mask) | ||
1035 | { | 1053 | { |
1036 | struct hda_bus_template bus_temp; | 1054 | struct hda_bus_template bus_temp; |
1037 | int c, codecs, audio_codecs, err; | 1055 | int c, codecs, audio_codecs, err; |
@@ -1052,7 +1070,7 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model) | |||
1052 | 1070 | ||
1053 | codecs = audio_codecs = 0; | 1071 | codecs = audio_codecs = 0; |
1054 | for (c = 0; c < AZX_MAX_CODECS; c++) { | 1072 | for (c = 0; c < AZX_MAX_CODECS; c++) { |
1055 | if ((chip->codec_mask & (1 << c)) & probe_mask) { | 1073 | if ((chip->codec_mask & (1 << c)) & codec_probe_mask) { |
1056 | struct hda_codec *codec; | 1074 | struct hda_codec *codec; |
1057 | err = snd_hda_codec_new(chip->bus, c, &codec); | 1075 | err = snd_hda_codec_new(chip->bus, c, &codec); |
1058 | if (err < 0) | 1076 | if (err < 0) |
@@ -1065,7 +1083,7 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model) | |||
1065 | if (!audio_codecs) { | 1083 | if (!audio_codecs) { |
1066 | /* probe additional slots if no codec is found */ | 1084 | /* probe additional slots if no codec is found */ |
1067 | for (; c < azx_max_codecs[chip->driver_type]; c++) { | 1085 | for (; c < azx_max_codecs[chip->driver_type]; c++) { |
1068 | if ((chip->codec_mask & (1 << c)) & probe_mask) { | 1086 | if ((chip->codec_mask & (1 << c)) & codec_probe_mask) { |
1069 | err = snd_hda_codec_new(chip->bus, c, NULL); | 1087 | err = snd_hda_codec_new(chip->bus, c, NULL); |
1070 | if (err < 0) | 1088 | if (err < 0) |
1071 | continue; | 1089 | continue; |
@@ -1676,18 +1694,18 @@ static struct snd_pci_quirk probe_mask_list[] __devinitdata = { | |||
1676 | {} | 1694 | {} |
1677 | }; | 1695 | }; |
1678 | 1696 | ||
1679 | static void __devinit check_probe_mask(struct azx *chip) | 1697 | static void __devinit check_probe_mask(struct azx *chip, int dev) |
1680 | { | 1698 | { |
1681 | const struct snd_pci_quirk *q; | 1699 | const struct snd_pci_quirk *q; |
1682 | 1700 | ||
1683 | if (probe_mask == -1) { | 1701 | if (probe_mask[dev] == -1) { |
1684 | q = snd_pci_quirk_lookup(chip->pci, probe_mask_list); | 1702 | q = snd_pci_quirk_lookup(chip->pci, probe_mask_list); |
1685 | if (q) { | 1703 | if (q) { |
1686 | printk(KERN_INFO | 1704 | printk(KERN_INFO |
1687 | "hda_intel: probe_mask set to 0x%x " | 1705 | "hda_intel: probe_mask set to 0x%x " |
1688 | "for device %04x:%04x\n", | 1706 | "for device %04x:%04x\n", |
1689 | q->value, q->subvendor, q->subdevice); | 1707 | q->value, q->subvendor, q->subdevice); |
1690 | probe_mask = q->value; | 1708 | probe_mask[dev] = q->value; |
1691 | } | 1709 | } |
1692 | } | 1710 | } |
1693 | } | 1711 | } |
@@ -1697,17 +1715,18 @@ static void __devinit check_probe_mask(struct azx *chip) | |||
1697 | * constructor | 1715 | * constructor |
1698 | */ | 1716 | */ |
1699 | static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | 1717 | static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, |
1700 | int driver_type, | 1718 | int dev, int driver_type, |
1701 | struct azx **rchip) | 1719 | struct azx **rchip) |
1702 | { | 1720 | { |
1703 | struct azx *chip; | 1721 | struct azx *chip; |
1704 | int err; | 1722 | int err; |
1723 | unsigned short gcap; | ||
1705 | static struct snd_device_ops ops = { | 1724 | static struct snd_device_ops ops = { |
1706 | .dev_free = azx_dev_free, | 1725 | .dev_free = azx_dev_free, |
1707 | }; | 1726 | }; |
1708 | 1727 | ||
1709 | *rchip = NULL; | 1728 | *rchip = NULL; |
1710 | 1729 | ||
1711 | err = pci_enable_device(pci); | 1730 | err = pci_enable_device(pci); |
1712 | if (err < 0) | 1731 | if (err < 0) |
1713 | return err; | 1732 | return err; |
@@ -1727,8 +1746,8 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
1727 | chip->driver_type = driver_type; | 1746 | chip->driver_type = driver_type; |
1728 | chip->msi = enable_msi; | 1747 | chip->msi = enable_msi; |
1729 | 1748 | ||
1730 | chip->position_fix = check_position_fix(chip, position_fix); | 1749 | chip->position_fix = check_position_fix(chip, position_fix[dev]); |
1731 | check_probe_mask(chip); | 1750 | check_probe_mask(chip, dev); |
1732 | 1751 | ||
1733 | chip->single_cmd = single_cmd; | 1752 | chip->single_cmd = single_cmd; |
1734 | 1753 | ||
@@ -1769,25 +1788,40 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
1769 | pci_set_master(pci); | 1788 | pci_set_master(pci); |
1770 | synchronize_irq(chip->irq); | 1789 | synchronize_irq(chip->irq); |
1771 | 1790 | ||
1772 | switch (chip->driver_type) { | 1791 | gcap = azx_readw(chip, GCAP); |
1773 | case AZX_DRIVER_ULI: | 1792 | snd_printdd("chipset global capabilities = 0x%x\n", gcap); |
1774 | chip->playback_streams = ULI_NUM_PLAYBACK; | 1793 | |
1775 | chip->capture_streams = ULI_NUM_CAPTURE; | 1794 | if (gcap) { |
1776 | chip->playback_index_offset = ULI_PLAYBACK_INDEX; | 1795 | /* read number of streams from GCAP register instead of using |
1777 | chip->capture_index_offset = ULI_CAPTURE_INDEX; | 1796 | * hardcoded value |
1778 | break; | 1797 | */ |
1779 | case AZX_DRIVER_ATIHDMI: | 1798 | chip->playback_streams = (gcap & (0xF << 12)) >> 12; |
1780 | chip->playback_streams = ATIHDMI_NUM_PLAYBACK; | 1799 | chip->capture_streams = (gcap & (0xF << 8)) >> 8; |
1781 | chip->capture_streams = ATIHDMI_NUM_CAPTURE; | 1800 | chip->playback_index_offset = (gcap & (0xF << 12)) >> 12; |
1782 | chip->playback_index_offset = ATIHDMI_PLAYBACK_INDEX; | 1801 | chip->capture_index_offset = 0; |
1783 | chip->capture_index_offset = ATIHDMI_CAPTURE_INDEX; | 1802 | } else { |
1784 | break; | 1803 | /* gcap didn't give any info, switching to old method */ |
1785 | default: | 1804 | |
1786 | chip->playback_streams = ICH6_NUM_PLAYBACK; | 1805 | switch (chip->driver_type) { |
1787 | chip->capture_streams = ICH6_NUM_CAPTURE; | 1806 | case AZX_DRIVER_ULI: |
1788 | chip->playback_index_offset = ICH6_PLAYBACK_INDEX; | 1807 | chip->playback_streams = ULI_NUM_PLAYBACK; |
1789 | chip->capture_index_offset = ICH6_CAPTURE_INDEX; | 1808 | chip->capture_streams = ULI_NUM_CAPTURE; |
1790 | break; | 1809 | chip->playback_index_offset = ULI_PLAYBACK_INDEX; |
1810 | chip->capture_index_offset = ULI_CAPTURE_INDEX; | ||
1811 | break; | ||
1812 | case AZX_DRIVER_ATIHDMI: | ||
1813 | chip->playback_streams = ATIHDMI_NUM_PLAYBACK; | ||
1814 | chip->capture_streams = ATIHDMI_NUM_CAPTURE; | ||
1815 | chip->playback_index_offset = ATIHDMI_PLAYBACK_INDEX; | ||
1816 | chip->capture_index_offset = ATIHDMI_CAPTURE_INDEX; | ||
1817 | break; | ||
1818 | default: | ||
1819 | chip->playback_streams = ICH6_NUM_PLAYBACK; | ||
1820 | chip->capture_streams = ICH6_NUM_CAPTURE; | ||
1821 | chip->playback_index_offset = ICH6_PLAYBACK_INDEX; | ||
1822 | chip->capture_index_offset = ICH6_CAPTURE_INDEX; | ||
1823 | break; | ||
1824 | } | ||
1791 | } | 1825 | } |
1792 | chip->num_streams = chip->playback_streams + chip->capture_streams; | 1826 | chip->num_streams = chip->playback_streams + chip->capture_streams; |
1793 | chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev), | 1827 | chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev), |
@@ -1869,17 +1903,25 @@ static void power_down_all_codecs(struct azx *chip) | |||
1869 | static int __devinit azx_probe(struct pci_dev *pci, | 1903 | static int __devinit azx_probe(struct pci_dev *pci, |
1870 | const struct pci_device_id *pci_id) | 1904 | const struct pci_device_id *pci_id) |
1871 | { | 1905 | { |
1906 | static int dev; | ||
1872 | struct snd_card *card; | 1907 | struct snd_card *card; |
1873 | struct azx *chip; | 1908 | struct azx *chip; |
1874 | int err; | 1909 | int err; |
1875 | 1910 | ||
1876 | card = snd_card_new(index, id, THIS_MODULE, 0); | 1911 | if (dev >= SNDRV_CARDS) |
1912 | return -ENODEV; | ||
1913 | if (!enable[dev]) { | ||
1914 | dev++; | ||
1915 | return -ENOENT; | ||
1916 | } | ||
1917 | |||
1918 | card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); | ||
1877 | if (!card) { | 1919 | if (!card) { |
1878 | snd_printk(KERN_ERR SFX "Error creating card!\n"); | 1920 | snd_printk(KERN_ERR SFX "Error creating card!\n"); |
1879 | return -ENOMEM; | 1921 | return -ENOMEM; |
1880 | } | 1922 | } |
1881 | 1923 | ||
1882 | err = azx_create(card, pci, pci_id->driver_data, &chip); | 1924 | err = azx_create(card, pci, dev, pci_id->driver_data, &chip); |
1883 | if (err < 0) { | 1925 | if (err < 0) { |
1884 | snd_card_free(card); | 1926 | snd_card_free(card); |
1885 | return err; | 1927 | return err; |
@@ -1887,7 +1929,7 @@ static int __devinit azx_probe(struct pci_dev *pci, | |||
1887 | card->private_data = chip; | 1929 | card->private_data = chip; |
1888 | 1930 | ||
1889 | /* create codec instances */ | 1931 | /* create codec instances */ |
1890 | err = azx_codec_create(chip, model); | 1932 | err = azx_codec_create(chip, model[dev], probe_mask[dev]); |
1891 | if (err < 0) { | 1933 | if (err < 0) { |
1892 | snd_card_free(card); | 1934 | snd_card_free(card); |
1893 | return err; | 1935 | return err; |
@@ -1919,6 +1961,7 @@ static int __devinit azx_probe(struct pci_dev *pci, | |||
1919 | chip->running = 1; | 1961 | chip->running = 1; |
1920 | power_down_all_codecs(chip); | 1962 | power_down_all_codecs(chip); |
1921 | 1963 | ||
1964 | dev++; | ||
1922 | return err; | 1965 | return err; |
1923 | } | 1966 | } |
1924 | 1967 | ||
@@ -1936,12 +1979,21 @@ static struct pci_device_id azx_ids[] = { | |||
1936 | { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH8 */ | 1979 | { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH8 */ |
1937 | { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ | 1980 | { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ |
1938 | { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ | 1981 | { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ |
1982 | { 0x8086, 0x3a3e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH10 */ | ||
1983 | { 0x8086, 0x3a6e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH10 */ | ||
1984 | { 0x8086, 0x811b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SCH }, /* SCH*/ | ||
1939 | { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */ | 1985 | { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */ |
1940 | { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */ | 1986 | { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */ |
1941 | { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */ | 1987 | { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */ |
1942 | { 0x1002, 0x7919, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS690 HDMI */ | 1988 | { 0x1002, 0x7919, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS690 HDMI */ |
1943 | { 0x1002, 0x960c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS780 HDMI */ | 1989 | { 0x1002, 0x960f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS780 HDMI */ |
1944 | { 0x1002, 0xaa00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI R600 HDMI */ | 1990 | { 0x1002, 0xaa00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI R600 HDMI */ |
1991 | { 0x1002, 0xaa08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV630 HDMI */ | ||
1992 | { 0x1002, 0xaa10, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV610 HDMI */ | ||
1993 | { 0x1002, 0xaa18, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV670 HDMI */ | ||
1994 | { 0x1002, 0xaa20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV635 HDMI */ | ||
1995 | { 0x1002, 0xaa28, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV620 HDMI */ | ||
1996 | { 0x1002, 0xaa30, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RV770 HDMI */ | ||
1945 | { 0x1106, 0x3288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_VIA }, /* VIA VT8251/VT8237A */ | 1997 | { 0x1106, 0x3288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_VIA }, /* VIA VT8251/VT8237A */ |
1946 | { 0x1039, 0x7502, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SIS }, /* SIS966 */ | 1998 | { 0x1039, 0x7502, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SIS }, /* SIS966 */ |
1947 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ | 1999 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ |