diff options
Diffstat (limited to 'sound/pci/via82xx.c')
-rw-r--r-- | sound/pci/via82xx.c | 145 |
1 files changed, 82 insertions, 63 deletions
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index 9b4d74d49f98..42c48f0ce8e8 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c | |||
@@ -101,7 +101,7 @@ MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz)."); | |||
101 | module_param_array(ac97_quirk, charp, NULL, 0444); | 101 | module_param_array(ac97_quirk, charp, NULL, 0444); |
102 | MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); | 102 | MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); |
103 | module_param_array(dxs_support, int, NULL, 0444); | 103 | module_param_array(dxs_support, int, NULL, 0444); |
104 | MODULE_PARM_DESC(dxs_support, "Support for DXS channels (0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA)"); | 104 | MODULE_PARM_DESC(dxs_support, "Support for DXS channels (0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA, 5 = enable any sample rate)"); |
105 | 105 | ||
106 | 106 | ||
107 | /* pci ids */ | 107 | /* pci ids */ |
@@ -302,6 +302,7 @@ DEFINE_VIA_REGSET(CAPTURE_8233, 0x60); | |||
302 | #define VIA_DXS_DISABLE 2 | 302 | #define VIA_DXS_DISABLE 2 |
303 | #define VIA_DXS_48K 3 | 303 | #define VIA_DXS_48K 3 |
304 | #define VIA_DXS_NO_VRA 4 | 304 | #define VIA_DXS_NO_VRA 4 |
305 | #define VIA_DXS_SRC 5 | ||
305 | 306 | ||
306 | 307 | ||
307 | /* | 308 | /* |
@@ -380,6 +381,7 @@ struct _snd_via82xx { | |||
380 | struct via_rate_lock rates[2]; /* playback and capture */ | 381 | struct via_rate_lock rates[2]; /* playback and capture */ |
381 | unsigned int dxs_fixed: 1; /* DXS channel accepts only 48kHz */ | 382 | unsigned int dxs_fixed: 1; /* DXS channel accepts only 48kHz */ |
382 | unsigned int no_vra: 1; /* no need to set VRA on DXS channels */ | 383 | unsigned int no_vra: 1; /* no need to set VRA on DXS channels */ |
384 | unsigned int dxs_src: 1; /* use full SRC capabilities of DXS */ | ||
383 | unsigned int spdif_on: 1; /* only spdif rates work to external DACs */ | 385 | unsigned int spdif_on: 1; /* only spdif rates work to external DACs */ |
384 | 386 | ||
385 | snd_pcm_t *pcms[2]; | 387 | snd_pcm_t *pcms[2]; |
@@ -489,10 +491,8 @@ static int clean_via_table(viadev_t *dev, snd_pcm_substream_t *substream, | |||
489 | snd_dma_free_pages(&dev->table); | 491 | snd_dma_free_pages(&dev->table); |
490 | dev->table.area = NULL; | 492 | dev->table.area = NULL; |
491 | } | 493 | } |
492 | if (dev->idx_table) { | 494 | kfree(dev->idx_table); |
493 | kfree(dev->idx_table); | 495 | dev->idx_table = NULL; |
494 | dev->idx_table = NULL; | ||
495 | } | ||
496 | return 0; | 496 | return 0; |
497 | } | 497 | } |
498 | 498 | ||
@@ -924,15 +924,17 @@ static int snd_via8233_playback_prepare(snd_pcm_substream_t *substream) | |||
924 | via82xx_t *chip = snd_pcm_substream_chip(substream); | 924 | via82xx_t *chip = snd_pcm_substream_chip(substream); |
925 | viadev_t *viadev = (viadev_t *)substream->runtime->private_data; | 925 | viadev_t *viadev = (viadev_t *)substream->runtime->private_data; |
926 | snd_pcm_runtime_t *runtime = substream->runtime; | 926 | snd_pcm_runtime_t *runtime = substream->runtime; |
927 | int ac97_rate = chip->dxs_src ? 48000 : runtime->rate; | ||
927 | int rate_changed; | 928 | int rate_changed; |
928 | u32 rbits; | 929 | u32 rbits; |
929 | 930 | ||
930 | if ((rate_changed = via_lock_rate(&chip->rates[0], runtime->rate)) < 0) | 931 | if ((rate_changed = via_lock_rate(&chip->rates[0], ac97_rate)) < 0) |
931 | return rate_changed; | 932 | return rate_changed; |
932 | if (rate_changed) { | 933 | if (rate_changed) { |
933 | snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, | 934 | snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, |
934 | chip->no_vra ? 48000 : runtime->rate); | 935 | chip->no_vra ? 48000 : runtime->rate); |
935 | snd_ac97_set_rate(chip->ac97, AC97_SPDIF, runtime->rate); | 936 | snd_ac97_set_rate(chip->ac97, AC97_SPDIF, |
937 | chip->no_vra ? 48000 : runtime->rate); | ||
936 | } | 938 | } |
937 | if (runtime->rate == 48000) | 939 | if (runtime->rate == 48000) |
938 | rbits = 0xfffff; | 940 | rbits = 0xfffff; |
@@ -1074,6 +1076,12 @@ static int snd_via82xx_pcm_open(via82xx_t *chip, viadev_t *viadev, snd_pcm_subst | |||
1074 | /* fixed DXS playback rate */ | 1076 | /* fixed DXS playback rate */ |
1075 | runtime->hw.rates = SNDRV_PCM_RATE_48000; | 1077 | runtime->hw.rates = SNDRV_PCM_RATE_48000; |
1076 | runtime->hw.rate_min = runtime->hw.rate_max = 48000; | 1078 | runtime->hw.rate_min = runtime->hw.rate_max = 48000; |
1079 | } else if (chip->dxs_src && viadev->reg_offset < 0x40) { | ||
1080 | /* use full SRC capabilities of DXS */ | ||
1081 | runtime->hw.rates = (SNDRV_PCM_RATE_CONTINUOUS | | ||
1082 | SNDRV_PCM_RATE_8000_48000); | ||
1083 | runtime->hw.rate_min = 8000; | ||
1084 | runtime->hw.rate_max = 48000; | ||
1077 | } else if (! ratep->rate) { | 1085 | } else if (! ratep->rate) { |
1078 | int idx = viadev->direction ? AC97_RATES_ADC : AC97_RATES_FRONT_DAC; | 1086 | int idx = viadev->direction ? AC97_RATES_ADC : AC97_RATES_FRONT_DAC; |
1079 | runtime->hw.rates = chip->ac97->rates[idx]; | 1087 | runtime->hw.rates = chip->ac97->rates[idx]; |
@@ -1550,51 +1558,51 @@ static void snd_via82xx_mixer_free_ac97(ac97_t *ac97) | |||
1550 | 1558 | ||
1551 | static struct ac97_quirk ac97_quirks[] = { | 1559 | static struct ac97_quirk ac97_quirks[] = { |
1552 | { | 1560 | { |
1553 | .vendor = 0x1106, | 1561 | .subvendor = 0x1106, |
1554 | .device = 0x4161, | 1562 | .subdevice = 0x4161, |
1555 | .codec_id = 0x56494161, /* VT1612A */ | 1563 | .codec_id = 0x56494161, /* VT1612A */ |
1556 | .name = "Soltek SL-75DRV5", | 1564 | .name = "Soltek SL-75DRV5", |
1557 | .type = AC97_TUNE_NONE | 1565 | .type = AC97_TUNE_NONE |
1558 | }, | 1566 | }, |
1559 | { /* FIXME: which codec? */ | 1567 | { /* FIXME: which codec? */ |
1560 | .vendor = 0x1106, | 1568 | .subvendor = 0x1106, |
1561 | .device = 0x4161, | 1569 | .subdevice = 0x4161, |
1562 | .name = "ASRock K7VT2", | 1570 | .name = "ASRock K7VT2", |
1563 | .type = AC97_TUNE_HP_ONLY | 1571 | .type = AC97_TUNE_HP_ONLY |
1564 | }, | 1572 | }, |
1565 | { | 1573 | { |
1566 | .vendor = 0x1019, | 1574 | .subvendor = 0x1019, |
1567 | .device = 0x0a81, | 1575 | .subdevice = 0x0a81, |
1568 | .name = "ECS K7VTA3", | 1576 | .name = "ECS K7VTA3", |
1569 | .type = AC97_TUNE_HP_ONLY | 1577 | .type = AC97_TUNE_HP_ONLY |
1570 | }, | 1578 | }, |
1571 | { | 1579 | { |
1572 | .vendor = 0x1019, | 1580 | .subvendor = 0x1019, |
1573 | .device = 0x0a85, | 1581 | .subdevice = 0x0a85, |
1574 | .name = "ECS L7VMM2", | 1582 | .name = "ECS L7VMM2", |
1575 | .type = AC97_TUNE_HP_ONLY | 1583 | .type = AC97_TUNE_HP_ONLY |
1576 | }, | 1584 | }, |
1577 | { | 1585 | { |
1578 | .vendor = 0x1849, | 1586 | .subvendor = 0x1849, |
1579 | .device = 0x3059, | 1587 | .subdevice = 0x3059, |
1580 | .name = "ASRock K7VM2", | 1588 | .name = "ASRock K7VM2", |
1581 | .type = AC97_TUNE_HP_ONLY /* VT1616 */ | 1589 | .type = AC97_TUNE_HP_ONLY /* VT1616 */ |
1582 | }, | 1590 | }, |
1583 | { | 1591 | { |
1584 | .vendor = 0x14cd, | 1592 | .subvendor = 0x14cd, |
1585 | .device = 0x7002, | 1593 | .subdevice = 0x7002, |
1586 | .name = "Unknown", | 1594 | .name = "Unknown", |
1587 | .type = AC97_TUNE_ALC_JACK | 1595 | .type = AC97_TUNE_ALC_JACK |
1588 | }, | 1596 | }, |
1589 | { | 1597 | { |
1590 | .vendor = 0x1071, | 1598 | .subvendor = 0x1071, |
1591 | .device = 0x8590, | 1599 | .subdevice = 0x8590, |
1592 | .name = "Mitac Mobo", | 1600 | .name = "Mitac Mobo", |
1593 | .type = AC97_TUNE_ALC_JACK | 1601 | .type = AC97_TUNE_ALC_JACK |
1594 | }, | 1602 | }, |
1595 | { | 1603 | { |
1596 | .vendor = 0x161f, | 1604 | .subvendor = 0x161f, |
1597 | .device = 0x202b, | 1605 | .subdevice = 0x202b, |
1598 | .name = "Arima Notebook", | 1606 | .name = "Arima Notebook", |
1599 | .type = AC97_TUNE_HP_ONLY, | 1607 | .type = AC97_TUNE_HP_ONLY, |
1600 | }, | 1608 | }, |
@@ -2132,8 +2140,8 @@ static struct via823x_info via823x_cards[] __devinitdata = { | |||
2132 | * auto detection of DXS channel supports. | 2140 | * auto detection of DXS channel supports. |
2133 | */ | 2141 | */ |
2134 | struct dxs_whitelist { | 2142 | struct dxs_whitelist { |
2135 | unsigned short vendor; | 2143 | unsigned short subvendor; |
2136 | unsigned short device; | 2144 | unsigned short subdevice; |
2137 | unsigned short mask; | 2145 | unsigned short mask; |
2138 | short action; /* new dxs_support value */ | 2146 | short action; /* new dxs_support value */ |
2139 | }; | 2147 | }; |
@@ -2141,38 +2149,44 @@ struct dxs_whitelist { | |||
2141 | static int __devinit check_dxs_list(struct pci_dev *pci) | 2149 | static int __devinit check_dxs_list(struct pci_dev *pci) |
2142 | { | 2150 | { |
2143 | static struct dxs_whitelist whitelist[] = { | 2151 | static struct dxs_whitelist whitelist[] = { |
2144 | { .vendor = 0x1005, .device = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */ | 2152 | { .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */ |
2145 | { .vendor = 0x1019, .device = 0x0996, .action = VIA_DXS_48K }, | 2153 | { .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K }, |
2146 | { .vendor = 0x1019, .device = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ | 2154 | { .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ |
2147 | { .vendor = 0x1019, .device = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */ | 2155 | { .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */ |
2148 | { .vendor = 0x1025, .device = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */ | 2156 | { .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */ |
2149 | { .vendor = 0x1043, .device = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/ | 2157 | { .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/ |
2150 | { .vendor = 0x1043, .device = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */ | 2158 | { .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */ |
2151 | { .vendor = 0x1043, .device = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ | 2159 | { .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ |
2152 | { .vendor = 0x1071, .device = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */ | 2160 | { .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */ |
2153 | { .vendor = 0x10cf, .device = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */ | 2161 | { .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */ |
2154 | { .vendor = 0x1106, .device = 0x4161, .action = VIA_DXS_NO_VRA }, /* ASRock K7VT2 */ | 2162 | { .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */ |
2155 | { .vendor = 0x1106, .device = 0x4552, .action = VIA_DXS_NO_VRA }, /* QDI Kudoz 7X/600-6AL */ | 2163 | { .subvendor = 0x10cf, .subdevice = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */ |
2156 | { .vendor = 0x1106, .device = 0xaa01, .action = VIA_DXS_NO_VRA }, /* EPIA MII */ | 2164 | { .subvendor = 0x1106, .subdevice = 0x4161, .action = VIA_DXS_NO_VRA }, /* ASRock K7VT2 */ |
2157 | { .vendor = 0x1297, .device = 0xa232, .action = VIA_DXS_ENABLE }, /* Shuttle ?? */ | 2165 | { .subvendor = 0x1106, .subdevice = 0x4552, .action = VIA_DXS_NO_VRA }, /* QDI Kudoz 7X/600-6AL */ |
2158 | { .vendor = 0x1297, .device = 0xc160, .action = VIA_DXS_ENABLE }, /* Shuttle SK41G */ | 2166 | { .subvendor = 0x1106, .subdevice = 0xaa01, .action = VIA_DXS_NO_VRA }, /* EPIA MII */ |
2159 | { .vendor = 0x1458, .device = 0xa002, .action = VIA_DXS_ENABLE }, /* Gigabyte GA-7VAXP */ | 2167 | { .subvendor = 0x1106, .subdevice = 0xc001, .action = VIA_DXS_SRC }, /* Insight P4-ITX */ |
2160 | { .vendor = 0x1462, .device = 0x3800, .action = VIA_DXS_ENABLE }, /* MSI KT266 */ | 2168 | { .subvendor = 0x1297, .subdevice = 0xa232, .action = VIA_DXS_ENABLE }, /* Shuttle ?? */ |
2161 | { .vendor = 0x1462, .device = 0x5901, .action = VIA_DXS_NO_VRA }, /* MSI KT6 Delta-SR */ | 2169 | { .subvendor = 0x1297, .subdevice = 0xc160, .action = VIA_DXS_ENABLE }, /* Shuttle SK41G */ |
2162 | { .vendor = 0x1462, .device = 0x7023, .action = VIA_DXS_NO_VRA }, /* MSI K8T Neo2-FI */ | 2170 | { .subvendor = 0x1458, .subdevice = 0xa002, .action = VIA_DXS_ENABLE }, /* Gigabyte GA-7VAXP */ |
2163 | { .vendor = 0x1462, .device = 0x7120, .action = VIA_DXS_ENABLE }, /* MSI KT4V */ | 2171 | { .subvendor = 0x1462, .subdevice = 0x0080, .action = VIA_DXS_SRC }, /* MSI K8T Neo-FIS2R */ |
2164 | { .vendor = 0x147b, .device = 0x1401, .action = VIA_DXS_ENABLE }, /* ABIT KD7(-RAID) */ | 2172 | { .subvendor = 0x1462, .subdevice = 0x3800, .action = VIA_DXS_ENABLE }, /* MSI KT266 */ |
2165 | { .vendor = 0x147b, .device = 0x1411, .action = VIA_DXS_ENABLE }, /* ABIT VA-20 */ | 2173 | { .subvendor = 0x1462, .subdevice = 0x5901, .action = VIA_DXS_NO_VRA }, /* MSI KT6 Delta-SR */ |
2166 | { .vendor = 0x147b, .device = 0x1413, .action = VIA_DXS_ENABLE }, /* ABIT KV8 Pro */ | 2174 | { .subvendor = 0x1462, .subdevice = 0x7023, .action = VIA_DXS_NO_VRA }, /* MSI K8T Neo2-FI */ |
2167 | { .vendor = 0x147b, .device = 0x1415, .action = VIA_DXS_NO_VRA }, /* Abit AV8 */ | 2175 | { .subvendor = 0x1462, .subdevice = 0x7120, .action = VIA_DXS_ENABLE }, /* MSI KT4V */ |
2168 | { .vendor = 0x14ff, .device = 0x0403, .action = VIA_DXS_ENABLE }, /* Twinhead mobo */ | 2176 | { .subvendor = 0x147b, .subdevice = 0x1401, .action = VIA_DXS_ENABLE }, /* ABIT KD7(-RAID) */ |
2169 | { .vendor = 0x1584, .device = 0x8120, .action = VIA_DXS_ENABLE }, /* Gericom/Targa/Vobis/Uniwill laptop */ | 2177 | { .subvendor = 0x147b, .subdevice = 0x1411, .action = VIA_DXS_ENABLE }, /* ABIT VA-20 */ |
2170 | { .vendor = 0x1584, .device = 0x8123, .action = VIA_DXS_NO_VRA }, /* Uniwill (Targa Visionary XP-210) */ | 2178 | { .subvendor = 0x147b, .subdevice = 0x1413, .action = VIA_DXS_ENABLE }, /* ABIT KV8 Pro */ |
2171 | { .vendor = 0x161f, .device = 0x202b, .action = VIA_DXS_NO_VRA }, /* Amira Note book */ | 2179 | { .subvendor = 0x147b, .subdevice = 0x1415, .action = VIA_DXS_NO_VRA }, /* Abit AV8 */ |
2172 | { .vendor = 0x161f, .device = 0x2032, .action = VIA_DXS_48K }, /* m680x machines */ | 2180 | { .subvendor = 0x14ff, .subdevice = 0x0403, .action = VIA_DXS_ENABLE }, /* Twinhead mobo */ |
2173 | { .vendor = 0x1631, .device = 0xe004, .action = VIA_DXS_ENABLE }, /* Easy Note 3174, Packard Bell */ | 2181 | { .subvendor = 0x14ff, .subdevice = 0x0408, .action = VIA_DXS_NO_VRA }, /* Twinhead mobo */ |
2174 | { .vendor = 0x1695, .device = 0x3005, .action = VIA_DXS_ENABLE }, /* EPoX EP-8K9A */ | 2182 | { .subvendor = 0x1584, .subdevice = 0x8120, .action = VIA_DXS_ENABLE }, /* Gericom/Targa/Vobis/Uniwill laptop */ |
2175 | { .vendor = 0x1849, .device = 0x3059, .action = VIA_DXS_NO_VRA }, /* ASRock K7VM2 */ | 2183 | { .subvendor = 0x1584, .subdevice = 0x8123, .action = VIA_DXS_NO_VRA }, /* Uniwill (Targa Visionary XP-210) */ |
2184 | { .subvendor = 0x161f, .subdevice = 0x202b, .action = VIA_DXS_NO_VRA }, /* Amira Note book */ | ||
2185 | { .subvendor = 0x161f, .subdevice = 0x2032, .action = VIA_DXS_48K }, /* m680x machines */ | ||
2186 | { .subvendor = 0x1631, .subdevice = 0xe004, .action = VIA_DXS_ENABLE }, /* Easy Note 3174, Packard Bell */ | ||
2187 | { .subvendor = 0x1695, .subdevice = 0x3005, .action = VIA_DXS_ENABLE }, /* EPoX EP-8K9A */ | ||
2188 | { .subvendor = 0x1849, .subdevice = 0x3059, .action = VIA_DXS_NO_VRA }, /* ASRock K7VM2 */ | ||
2189 | { .subvendor = 0x1919, .subdevice = 0x200a, .action = VIA_DXS_NO_VRA }, /* Soltek SL-K8Tpro-939 */ | ||
2176 | { } /* terminator */ | 2190 | { } /* terminator */ |
2177 | }; | 2191 | }; |
2178 | struct dxs_whitelist *w; | 2192 | struct dxs_whitelist *w; |
@@ -2182,14 +2196,14 @@ static int __devinit check_dxs_list(struct pci_dev *pci) | |||
2182 | pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vendor); | 2196 | pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vendor); |
2183 | pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &subsystem_device); | 2197 | pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &subsystem_device); |
2184 | 2198 | ||
2185 | for (w = whitelist; w->vendor; w++) { | 2199 | for (w = whitelist; w->subvendor; w++) { |
2186 | if (w->vendor != subsystem_vendor) | 2200 | if (w->subvendor != subsystem_vendor) |
2187 | continue; | 2201 | continue; |
2188 | if (w->mask) { | 2202 | if (w->mask) { |
2189 | if ((w->mask & subsystem_device) == w->device) | 2203 | if ((w->mask & subsystem_device) == w->subdevice) |
2190 | return w->action; | 2204 | return w->action; |
2191 | } else { | 2205 | } else { |
2192 | if (subsystem_device == w->device) | 2206 | if (subsystem_device == w->subdevice) |
2193 | return w->action; | 2207 | return w->action; |
2194 | } | 2208 | } |
2195 | } | 2209 | } |
@@ -2198,8 +2212,9 @@ static int __devinit check_dxs_list(struct pci_dev *pci) | |||
2198 | * not detected, try 48k rate only to be sure. | 2212 | * not detected, try 48k rate only to be sure. |
2199 | */ | 2213 | */ |
2200 | printk(KERN_INFO "via82xx: Assuming DXS channels with 48k fixed sample rate.\n"); | 2214 | printk(KERN_INFO "via82xx: Assuming DXS channels with 48k fixed sample rate.\n"); |
2201 | printk(KERN_INFO " Please try dxs_support=1 or dxs_support=4 option\n"); | 2215 | printk(KERN_INFO " Please try dxs_support=5 option\n"); |
2202 | printk(KERN_INFO " and report if it works on your machine.\n"); | 2216 | printk(KERN_INFO " and report if it works on your machine.\n"); |
2217 | printk(KERN_INFO " For more details, read ALSA-Configuration.txt.\n"); | ||
2203 | return VIA_DXS_48K; | 2218 | return VIA_DXS_48K; |
2204 | }; | 2219 | }; |
2205 | 2220 | ||
@@ -2288,6 +2303,10 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci, | |||
2288 | chip->dxs_fixed = 1; | 2303 | chip->dxs_fixed = 1; |
2289 | else if (dxs_support[dev] == VIA_DXS_NO_VRA) | 2304 | else if (dxs_support[dev] == VIA_DXS_NO_VRA) |
2290 | chip->no_vra = 1; | 2305 | chip->no_vra = 1; |
2306 | else if (dxs_support[dev] == VIA_DXS_SRC) { | ||
2307 | chip->no_vra = 1; | ||
2308 | chip->dxs_src = 1; | ||
2309 | } | ||
2291 | } | 2310 | } |
2292 | if ((err = snd_via8233_init_misc(chip, dev)) < 0) | 2311 | if ((err = snd_via8233_init_misc(chip, dev)) < 0) |
2293 | goto __error; | 2312 | goto __error; |
@@ -2334,7 +2353,7 @@ static struct pci_driver driver = { | |||
2334 | 2353 | ||
2335 | static int __init alsa_card_via82xx_init(void) | 2354 | static int __init alsa_card_via82xx_init(void) |
2336 | { | 2355 | { |
2337 | return pci_module_init(&driver); | 2356 | return pci_register_driver(&driver); |
2338 | } | 2357 | } |
2339 | 2358 | ||
2340 | static void __exit alsa_card_via82xx_exit(void) | 2359 | static void __exit alsa_card_via82xx_exit(void) |