aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/ac97
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/ac97')
-rw-r--r--sound/pci/ac97/ac97_codec.c6
-rw-r--r--sound/pci/ac97/ac97_patch.c18
-rw-r--r--sound/pci/ac97/ac97_patch.h1
3 files changed, 19 insertions, 6 deletions
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index 33dba10f03e8..600e053dfd35 100644
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -157,6 +157,7 @@ static const ac97_codec_id_t snd_ac97_codec_ids[] = {
157{ 0x54524123, 0xffffffff, "TR28602", NULL, NULL }, // only guess --jk [TR28023 = eMicro EM28023 (new CT1297)] 157{ 0x54524123, 0xffffffff, "TR28602", NULL, NULL }, // only guess --jk [TR28023 = eMicro EM28023 (new CT1297)]
158{ 0x54584e20, 0xffffffff, "TLC320AD9xC", NULL, NULL }, 158{ 0x54584e20, 0xffffffff, "TLC320AD9xC", NULL, NULL },
159{ 0x56494161, 0xffffffff, "VIA1612A", NULL, NULL }, // modified ICE1232 with S/PDIF 159{ 0x56494161, 0xffffffff, "VIA1612A", NULL, NULL }, // modified ICE1232 with S/PDIF
160{ 0x56494170, 0xffffffff, "VIA1617A", patch_vt1617a, NULL }, // modified VT1616 with S/PDIF
160{ 0x57454301, 0xffffffff, "W83971D", NULL, NULL }, 161{ 0x57454301, 0xffffffff, "W83971D", NULL, NULL },
161{ 0x574d4c00, 0xffffffff, "WM9701A", NULL, NULL }, 162{ 0x574d4c00, 0xffffffff, "WM9701A", NULL, NULL },
162{ 0x574d4C03, 0xffffffff, "WM9703,WM9707,WM9708,WM9717", patch_wolfson03, NULL}, 163{ 0x574d4C03, 0xffffffff, "WM9703,WM9707,WM9708,WM9717", patch_wolfson03, NULL},
@@ -2580,8 +2581,6 @@ int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk, const char *o
2580{ 2581{
2581 int result; 2582 int result;
2582 2583
2583 snd_assert(quirk, return -EINVAL);
2584
2585 /* quirk overriden? */ 2584 /* quirk overriden? */
2586 if (override && strcmp(override, "-1") && strcmp(override, "default")) { 2585 if (override && strcmp(override, "-1") && strcmp(override, "default")) {
2587 result = apply_quirk_str(ac97, override); 2586 result = apply_quirk_str(ac97, override);
@@ -2590,6 +2589,9 @@ int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk, const char *o
2590 return result; 2589 return result;
2591 } 2590 }
2592 2591
2592 if (! quirk)
2593 return -EINVAL;
2594
2593 for (; quirk->subvendor; quirk++) { 2595 for (; quirk->subvendor; quirk++) {
2594 if (quirk->subvendor != ac97->subsystem_vendor) 2596 if (quirk->subvendor != ac97->subsystem_vendor)
2595 continue; 2597 continue;
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
index b0b31f4015aa..a0d515536177 100644
--- a/sound/pci/ac97/ac97_patch.c
+++ b/sound/pci/ac97/ac97_patch.c
@@ -375,7 +375,7 @@ AC97_DOUBLE("Front Playback Volume", AC97_WM97XX_FMIXER_VOL, 8, 0, 31, 1),
375AC97_SINGLE("Front Playback Switch", AC97_WM97XX_FMIXER_VOL, 15, 1, 1), 375AC97_SINGLE("Front Playback Switch", AC97_WM97XX_FMIXER_VOL, 15, 1, 1),
376}; 376};
377 377
378static int patch_wolfson_wm9703_specific(ac97_t * ac97) 378int patch_wolfson_wm9703_specific(ac97_t * ac97)
379{ 379{
380 /* This is known to work for the ViewSonic ViewPad 1000 380 /* This is known to work for the ViewSonic ViewPad 1000
381 * Randolph Bentson <bentson@holmsjoen.com> 381 * Randolph Bentson <bentson@holmsjoen.com>
@@ -410,7 +410,7 @@ AC97_DOUBLE("Rear DAC Volume", AC97_WM9704_RPCM_VOL, 8, 0, 31, 1),
410AC97_DOUBLE("Surround Volume", AC97_SURROUND_MASTER, 8, 0, 31, 1), 410AC97_DOUBLE("Surround Volume", AC97_SURROUND_MASTER, 8, 0, 31, 1),
411}; 411};
412 412
413static int patch_wolfson_wm9704_specific(ac97_t * ac97) 413int patch_wolfson_wm9704_specific(ac97_t * ac97)
414{ 414{
415 int err, i; 415 int err, i;
416 for (i = 0; i < ARRAY_SIZE(wm9704_snd_ac97_controls); i++) { 416 for (i = 0; i < ARRAY_SIZE(wm9704_snd_ac97_controls); i++) {
@@ -433,7 +433,7 @@ int patch_wolfson04(ac97_t * ac97)
433 return 0; 433 return 0;
434} 434}
435 435
436static int patch_wolfson_wm9705_specific(ac97_t * ac97) 436int patch_wolfson_wm9705_specific(ac97_t * ac97)
437{ 437{
438 int err, i; 438 int err, i;
439 for (i = 0; i < ARRAY_SIZE(wm97xx_snd_ac97_controls); i++) { 439 for (i = 0; i < ARRAY_SIZE(wm97xx_snd_ac97_controls); i++) {
@@ -558,7 +558,7 @@ AC97_SINGLE("Headphone ZC Switch", AC97_HEADPHONE, 7, 1, 0),
558AC97_SINGLE("Mono ZC Switch", AC97_MASTER_MONO, 7, 1, 0), 558AC97_SINGLE("Mono ZC Switch", AC97_MASTER_MONO, 7, 1, 0),
559}; 559};
560 560
561static int patch_wolfson_wm9711_specific(ac97_t * ac97) 561int patch_wolfson_wm9711_specific(ac97_t * ac97)
562{ 562{
563 int err, i; 563 int err, i;
564 564
@@ -2666,6 +2666,16 @@ int patch_vt1616(ac97_t * ac97)
2666} 2666}
2667 2667
2668/* 2668/*
2669 * VT1617A codec
2670 */
2671int patch_vt1617a(ac97_t * ac97)
2672{
2673 ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */
2674 ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000;
2675 return 0;
2676}
2677
2678/*
2669 */ 2679 */
2670static void it2646_update_jacks(ac97_t *ac97) 2680static void it2646_update_jacks(ac97_t *ac97)
2671{ 2681{
diff --git a/sound/pci/ac97/ac97_patch.h b/sound/pci/ac97/ac97_patch.h
index 7b7377d0f2ae..ec1811320106 100644
--- a/sound/pci/ac97/ac97_patch.h
+++ b/sound/pci/ac97/ac97_patch.h
@@ -56,5 +56,6 @@ int patch_cm9739(ac97_t * ac97);
56int patch_cm9761(ac97_t * ac97); 56int patch_cm9761(ac97_t * ac97);
57int patch_cm9780(ac97_t * ac97); 57int patch_cm9780(ac97_t * ac97);
58int patch_vt1616(ac97_t * ac97); 58int patch_vt1616(ac97_t * ac97);
59int patch_vt1617a(ac97_t * ac97);
59int patch_it2646(ac97_t * ac97); 60int patch_it2646(ac97_t * ac97);
60int mpatch_si3036(ac97_t * ac97); 61int mpatch_si3036(ac97_t * ac97);