aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_intel.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r--sound/pci/hda/hda_intel.c164
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
53static int index = SNDRV_DEFAULT_IDX1; 52static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
54static char *id = SNDRV_DEFAULT_STR1; 53static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
55static char *model; 54static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
56static int position_fix; 55static char *model[SNDRV_CARDS];
57static int probe_mask = -1; 56static int position_fix[SNDRV_CARDS];
57static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
58static int single_cmd; 58static int single_cmd;
59static int enable_msi; 59static int enable_msi;
60 60
61module_param(index, int, 0444); 61module_param_array(index, int, NULL, 0444);
62MODULE_PARM_DESC(index, "Index value for Intel HD audio interface."); 62MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
63module_param(id, charp, 0444); 63module_param_array(id, charp, NULL, 0444);
64MODULE_PARM_DESC(id, "ID string for Intel HD audio interface."); 64MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
65module_param(model, charp, 0444); 65module_param_array(enable, bool, NULL, 0444);
66MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
67module_param_array(model, charp, NULL, 0444);
66MODULE_PARM_DESC(model, "Use the given board model."); 68MODULE_PARM_DESC(model, "Use the given board model.");
67module_param(position_fix, int, 0444); 69module_param_array(position_fix, int, NULL, 0444);
68MODULE_PARM_DESC(position_fix, "Fix DMA pointer " 70MODULE_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).");
70module_param(probe_mask, int, 0444); 72module_param_array(probe_mask, int, NULL, 0444);
71MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); 73MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
72module_param(single_cmd, bool, 0444); 74module_param(single_cmd, bool, 0444);
73MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs " 75MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
74 "(for debugging only)."); 76 "(for debugging only).");
75module_param(enable_msi, int, 0); 77module_param(enable_msi, int, 0444);
76MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)"); 78MODULE_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);
87MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode."); 89MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
88#endif 90#endif
89 91
90/* just for backward compatibility */
91static int enable;
92module_param(enable, bool, 0444);
93
94MODULE_LICENSE("GPL"); 92MODULE_LICENSE("GPL");
95MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," 93MODULE_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 */
371enum { 377enum {
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
381static char *driver_short_names[] __devinitdata = { 388static 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
1034static int __devinit azx_codec_create(struct azx *chip, const char *model) 1051static 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
1679static void __devinit check_probe_mask(struct azx *chip) 1697static 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 */
1699static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, 1717static 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)
1869static int __devinit azx_probe(struct pci_dev *pci, 1903static 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 */