aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2005-06-10 13:50:25 -0400
committerJaroslav Kysela <perex@suse.cz>2005-06-22 06:28:44 -0400
commit05acb863a27e7f82d81c422b977415fa80b99f96 (patch)
tree6ede0f67b2597038219466d2a2dc7d9729202c1c /sound/pci
parent4b3acaf5b56f53ef259a6ddf8e17dcb529631d9b (diff)
[ALSA] hda-codec - Clean up and fix ALC-codec support code
HDA Codec driver Clean up and fix ALC-codec support code. The last addition of bound volume is fixed now to handle correctly the bound 'mute switches'. The analog loopback should work better. The init verbs are fixed together with this change. The numbers are replaced with macros for better readability. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/patch_realtek.c636
1 files changed, 328 insertions, 308 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 0ca5151908d7..84ae90cc1114 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -101,7 +101,7 @@ static hda_nid_t alc880_z71v_dac_nids[1] = {
101 101
102#if 0 102#if 0
103/* The datasheet says the node 0x07 is connected from inputs, 103/* The datasheet says the node 0x07 is connected from inputs,
104 * but it shows zero connection in the real implementation. 104 * but it shows zero connection in the real implementation on some devices.
105 */ 105 */
106static hda_nid_t alc880_adc_nids[3] = { 106static hda_nid_t alc880_adc_nids[3] = {
107 /* ADC0-2 */ 107 /* ADC0-2 */
@@ -373,7 +373,7 @@ static int alc880_ch_mode_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *uc
373#define AMP_VAL_IDX_SHIFT 19 373#define AMP_VAL_IDX_SHIFT 19
374#define AMP_VAL_IDX_MASK (0x0f<<19) 374#define AMP_VAL_IDX_MASK (0x0f<<19)
375 375
376static int alc_bind_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) 376static int alc_bind_switch_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
377{ 377{
378 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 378 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
379 struct alc_spec *spec = codec->spec; 379 struct alc_spec *spec = codec->spec;
@@ -382,13 +382,13 @@ static int alc_bind_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinf
382 down(&spec->bind_mutex); 382 down(&spec->bind_mutex);
383 pval = kcontrol->private_value; 383 pval = kcontrol->private_value;
384 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */ 384 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
385 snd_hda_mixer_amp_volume_info(kcontrol, uinfo); 385 snd_hda_mixer_amp_switch_info(kcontrol, uinfo);
386 kcontrol->private_value = pval; 386 kcontrol->private_value = pval;
387 up(&spec->bind_mutex); 387 up(&spec->bind_mutex);
388 return 0; 388 return 0;
389} 389}
390 390
391static int alc_bind_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) 391static int alc_bind_switch_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
392{ 392{
393 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 393 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
394 struct alc_spec *spec = codec->spec; 394 struct alc_spec *spec = codec->spec;
@@ -397,13 +397,13 @@ static int alc_bind_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucon
397 down(&spec->bind_mutex); 397 down(&spec->bind_mutex);
398 pval = kcontrol->private_value; 398 pval = kcontrol->private_value;
399 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */ 399 kcontrol->private_value = pval & ~AMP_VAL_IDX_MASK; /* index 0 */
400 snd_hda_mixer_amp_volume_get(kcontrol, ucontrol); 400 snd_hda_mixer_amp_switch_get(kcontrol, ucontrol);
401 kcontrol->private_value = pval; 401 kcontrol->private_value = pval;
402 up(&spec->bind_mutex); 402 up(&spec->bind_mutex);
403 return 0; 403 return 0;
404} 404}
405 405
406static int alc_bind_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) 406static int alc_bind_switch_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
407{ 407{
408 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); 408 struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
409 struct alc_spec *spec = codec->spec; 409 struct alc_spec *spec = codec->spec;
@@ -415,21 +415,21 @@ static int alc_bind_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucon
415 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT; 415 indices = (pval & AMP_VAL_IDX_MASK) >> AMP_VAL_IDX_SHIFT;
416 for (i = 0; i < indices; i++) { 416 for (i = 0; i < indices; i++) {
417 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) | (i << AMP_VAL_IDX_SHIFT); 417 kcontrol->private_value = (pval & ~AMP_VAL_IDX_MASK) | (i << AMP_VAL_IDX_SHIFT);
418 change |= snd_hda_mixer_amp_volume_put(kcontrol, ucontrol); 418 change |= snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
419 } 419 }
420 kcontrol->private_value = pval; 420 kcontrol->private_value = pval;
421 up(&spec->bind_mutex); 421 up(&spec->bind_mutex);
422 return change; 422 return change;
423} 423}
424 424
425#define ALC_BIND_VOL_MONO(xname, nid, channel, indices, direction) \ 425#define ALC_BIND_MUTE_MONO(xname, nid, channel, indices, direction) \
426 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = 0, \ 426 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = 0, \
427 .info = alc_bind_vol_info, \ 427 .info = alc_bind_switch_info, \
428 .get = alc_bind_vol_get, \ 428 .get = alc_bind_switch_get, \
429 .put = alc_bind_vol_put, \ 429 .put = alc_bind_switch_put, \
430 .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, indices, direction) } 430 .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, indices, direction) }
431 431
432#define ALC_BIND_VOL(xname,nid,indices,dir) ALC_BIND_VOL_MONO(xname,nid,3,indices,dir) 432#define ALC_BIND_MUTE(xname,nid,indices,dir) ALC_BIND_MUTE_MONO(xname,nid,3,indices,dir)
433 433
434/* 434/*
435 */ 435 */
@@ -439,14 +439,14 @@ static int alc_bind_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucon
439 * HP=0x19 439 * HP=0x19
440 */ 440 */
441static snd_kcontrol_new_t alc880_base_mixer[] = { 441static snd_kcontrol_new_t alc880_base_mixer[] = {
442 ALC_BIND_VOL("Front Playback Volume", 0x0c, 2, HDA_OUTPUT), 442 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
443 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 443 ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
444 ALC_BIND_VOL("Surround Playback Volume", 0x0f, 2, HDA_OUTPUT), 444 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
445 HDA_CODEC_MUTE("Surround Playback Switch", 0x1a, 0x0, HDA_OUTPUT), 445 ALC_BIND_MUTE("Surround Playback Switch", 0x1a, 2, HDA_INPUT),
446 ALC_BIND_VOL_MONO("Center Playback Volume", 0x0e, 1, 2, HDA_OUTPUT), 446 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
447 ALC_BIND_VOL_MONO("LFE Playback Volume", 0x0e, 2, 2, HDA_OUTPUT), 447 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
448 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x18, 1, 0x0, HDA_OUTPUT), 448 ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
449 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x18, 2, 0x0, HDA_OUTPUT), 449 ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT),
450 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 450 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
451 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 451 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
452 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 452 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
@@ -457,8 +457,8 @@ static snd_kcontrol_new_t alc880_base_mixer[] = {
457 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x3, HDA_INPUT), 457 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x3, HDA_INPUT),
458 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x0b, 0x05, HDA_INPUT), 458 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x0b, 0x05, HDA_INPUT),
459 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x0b, 0x05, HDA_INPUT), 459 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x0b, 0x05, HDA_INPUT),
460 ALC_BIND_VOL("Headphone Playback Volume", 0x0d, 2, HDA_OUTPUT), 460 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
461 HDA_CODEC_MUTE("Headphone Playback Switch", 0x19, 0x0, HDA_OUTPUT), 461 ALC_BIND_MUTE("Headphone Playback Switch", 0x0d, 2, HDA_INPUT),
462 /* We don't use NID 0x07 - see above */ 462 /* We don't use NID 0x07 - see above */
463 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), 463 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
464 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), 464 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
@@ -492,16 +492,16 @@ static snd_kcontrol_new_t alc880_base_mixer[] = {
492 * Line-In/Side=0x1a, Mic=0x18, F-Mic=0x1b, HP=0x19 492 * Line-In/Side=0x1a, Mic=0x18, F-Mic=0x1b, HP=0x19
493 */ 493 */
494static snd_kcontrol_new_t alc880_five_stack_mixer[] = { 494static snd_kcontrol_new_t alc880_five_stack_mixer[] = {
495 ALC_BIND_VOL("Front Playback Volume", 0x0c, 2, HDA_OUTPUT), 495 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
496 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 496 ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
497 ALC_BIND_VOL("Surround Playback Volume", 0x0f, 2, HDA_OUTPUT), 497 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
498 HDA_CODEC_MUTE("Surround Playback Switch", 0x17, 0x0, HDA_OUTPUT), 498 ALC_BIND_MUTE("Surround Playback Switch", 0x0f, 2, HDA_INPUT),
499 ALC_BIND_VOL_MONO("Center Playback Volume", 0x0e, 1, 2, HDA_OUTPUT), 499 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
500 ALC_BIND_VOL_MONO("LFE Playback Volume", 0x0e, 2, 2, HDA_OUTPUT), 500 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
501 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x16, 1, 0x0, HDA_OUTPUT), 501 ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
502 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), 502 ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT),
503 ALC_BIND_VOL("Side Playback Volume", 0x0d, 2, HDA_OUTPUT), 503 HDA_CODEC_VOLUME("Side Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
504 HDA_CODEC_MUTE("Side Playback Switch", 0x1a, 0x0, HDA_OUTPUT), 504 ALC_BIND_MUTE("Side Playback Switch", 0x0d, 2, HDA_INPUT),
505 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 505 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
506 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 506 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
507 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 507 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
@@ -575,10 +575,10 @@ static snd_kcontrol_new_t alc880_w810_base_mixer[] = {
575}; 575};
576 576
577static snd_kcontrol_new_t alc880_z71v_mixer[] = { 577static snd_kcontrol_new_t alc880_z71v_mixer[] = {
578 ALC_BIND_VOL("Front Playback Volume", 0x0c, 2, HDA_OUTPUT), 578 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
579 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 579 ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
580 ALC_BIND_VOL("Headphone Playback Volume", 0x0d, 2, HDA_OUTPUT), 580 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
581 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 581 ALC_BIND_MUTE("Headphone Playback Switch", 0x0d, 2, HDA_INPUT),
582 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 582 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
583 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 583 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
584 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 584 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
@@ -636,51 +636,66 @@ static int alc_build_controls(struct hda_codec *codec)
636 * initialize the codec volumes, etc 636 * initialize the codec volumes, etc
637 */ 637 */
638 638
639#define AMP_IN_MUTE(idx) (0x7080 | ((idx)<<8))
640#define AMP_IN_UNMUTE(idx) (0x7000 | ((idx)<<8))
641#define AMP_OUT_MUTE 0xb080
642#define AMP_OUT_UNMUTE 0xb000
643#define AMP_OUT_ZERO 0xb000
644#define PIN_IN 0x20
645#define PIN_VREF 0x24
646#define PIN_OUT 0x40
647#define PIN_HP 0xc0
648
639static struct hda_verb alc880_init_verbs_three_stack[] = { 649static struct hda_verb alc880_init_verbs_three_stack[] = {
650 /* Set pin widgets for output */
651 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
652 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
653 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
654 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
640 /* Line In pin widget for input */ 655 /* Line In pin widget for input */
641 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 656 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
642 /* CD pin widget for input */ 657 /* CD pin widget for input */
643 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 658 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
644 /* Mic1 (rear panel) pin widget for input and vref at 80% */ 659 /* Mic1 (rear panel) pin widget for input and vref at 80% */
645 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 660 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
646 /* Mic2 (front panel) pin widget for input and vref at 80% */ 661 /* Mic2 (front panel) pin widget for input and vref at 80% */
647 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 662 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
648 /* unmute amp left and right */ 663 /* unmute capture amp left and right */
649 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 664 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
650 /* set connection select to mic in */ 665 /* set connection select to mic in */
651 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, 666 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
652 /* unmute amp left and right */ 667 /* unmute capture1 amp left and right */
653 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 668 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
654 /* set connection select to mic in */ 669 /* set connection select to mic in */
655 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, 670 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00},
656 /* unmute amp left and right */ 671 /* unmute capture2 amp left and right */
657 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 672 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
658 /* set connection select to mic in */ 673 /* set connection select to mic in */
659 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, 674 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
660 /* unmute front mixer amp left (volume = 0) */ 675 /* set vol=0 front mixer amp */
661 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 676 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
662 /* mute pin widget amp left and right (no gain on this amp) */ 677 /* unmute front-out pin widget amp (no gain on this amp) */
663 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 678 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
664 /* unmute rear mixer amp left and right (volume = 0) */ 679 /* set vol=0 rear mixer amp */
665 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 680 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
666 /* mute pin widget amp left and right (no gain on this amp) */ 681 /* mute line-in pin widget amp left and right (no gain on this amp) */
667 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 682 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
668 /* unmute rear mixer amp left and right (volume = 0) */ 683 /* set vol=0 clfe mixer amp */
669 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 684 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
670 /* mute pin widget amp left and right (no gain on this amp) */ 685 /* mute mic pin widget amp left and right (no gain on this amp) */
671 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 686 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
672 687
673 /* using rear surround as the path for headphone output */ 688 /* using rear surround as the path for headphone output */
674 /* unmute rear surround mixer amp left and right (volume = 0) */ 689 /* set vol=0 rear surround mixer amp */
675 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 690 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
676 /* PASD 3 stack boards use the Mic 2 as the headphone output */ 691 /* PASD 3 stack boards use the Mic 2 as the headphone output */
677 /* need to program the selector associated with the Mic 2 pin widget to 692 /* need to program the selector associated with the Mic 2 pin widget to
678 * surround path (index 0x01) for headphone output */ 693 * surround path (index 0x01) for headphone output */
679 {0x11, AC_VERB_SET_CONNECT_SEL, 0x01}, 694 {0x11, AC_VERB_SET_CONNECT_SEL, 0x01},
680 /* mute pin widget amp left and right (no gain on this amp) */ 695 /* unmute pin widget amp left and right (no gain on this amp) */
681 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 696 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
682 /* need to retask the Mic 2 pin widget to output */ 697 /* need to retask the Mic 2 pin widget to output */
683 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 698 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
684 699
685 /* Unmute input amps (CD, Line In, Mic 1 & Mic 2) for mixer widget(nid=0x0B) 700 /* Unmute input amps (CD, Line In, Mic 1 & Mic 2) for mixer widget(nid=0x0B)
686 * to support the input path of analog loopback 701 * to support the input path of analog loopback
@@ -688,14 +703,14 @@ static struct hda_verb alc880_init_verbs_three_stack[] = {
688 * mic (mic 2) 703 * mic (mic 2)
689 */ 704 */
690 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03 */ 705 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03 */
691 /* unmute CD */ 706 /* mute CD */
692 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x04 << 8))}, 707 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
693 /* unmute Line In */ 708 /* unmute Line In */
694 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))}, 709 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
695 /* unmute Mic 1 */ 710 /* mute Mic 1 */
696 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 711 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
697 /* unmute Line In 2 (for PASD boards Mic 2) */ 712 /* mute Line In 2 (for PASD boards Mic 2) */
698 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x03 << 8))}, 713 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
699 714
700 /* Unmute input amps for the line out paths to support the output path of 715 /* Unmute input amps for the line out paths to support the output path of
701 * analog loopback 716 * analog loopback
@@ -704,66 +719,70 @@ static struct hda_verb alc880_init_verbs_three_stack[] = {
704 */ 719 */
705 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */ 720 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */
706 /* Unmute Front out path */ 721 /* Unmute Front out path */
707 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 722 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
708 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 723 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
709 /* Unmute Surround (used as HP) out path */ 724 /* Unmute Surround (used as HP) out path */
710 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 725 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
711 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 726 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
712 /* Unmute C/LFE out path */ 727 /* Unmute C/LFE out path */
713 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 728 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
714 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x01 << 8))}, /* mute */ 729 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
715 /* Unmute rear Surround out path */ 730 /* Unmute rear Surround out path */
716 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 731 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
717 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 732 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
718 733
719 { } 734 { }
720}; 735};
721 736
722static struct hda_verb alc880_init_verbs_five_stack[] = { 737static struct hda_verb alc880_init_verbs_five_stack[] = {
738 /* Set pin widgets for output */
739 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
740 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
741 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
742 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
723 /* Line In pin widget for input */ 743 /* Line In pin widget for input */
724 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 744 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
725 /* CD pin widget for input */ 745 /* CD pin widget for input */
726 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 746 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
727 /* Mic1 (rear panel) pin widget for input and vref at 80% */ 747 /* Mic1 (rear panel) pin widget for input and vref at 80% */
728 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 748 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
729 /* Mic2 (front panel) pin widget for input and vref at 80% */ 749 /* Mic2 (front panel) pin widget for input and vref at 80% */
730 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 750 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
731 /* unmute amp left and right */ 751 /* mute capture amp left and right */
732 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 752 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
733 /* set connection select to mic in */ 753 /* set connection select to mic in */
734 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, 754 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
735 /* unmute amp left and right */ 755 /* mute amp1 left and right */
736 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 756 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
737 /* set connection select to mic in */ 757 /* set connection select to mic in */
738 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, 758 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00},
739 /* unmute amp left and right */ 759 /* mute amp left and right */
740 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 760 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
741 /* set connection select to mic in */ 761 /* set connection select to mic in */
742 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, 762 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
743 /* unmute front mixer amp left and right (volume = 0) */ 763 /* set vol=0 front mixer amp */
744 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 764 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
745 /* mute pin widget amp left and right (no gain on this amp) */ 765 /* unmute front-out pin widget amp (no gain on this amp) */
746 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 766 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
747 /* five rear and clfe */ 767 /* set vol=0 rear mixer amp */
748 /* unmute rear mixer amp left and right (volume = 0) */ 768 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
749 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 769 /* unmute rear-out pin widget (no gain on this amp) */
750 /* mute pin widget amp left and right (no gain on this amp) */ 770 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
751 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 771 /* set vol=0 clfe mixer amp */
752 /* unmute clfe mixer amp left and right (volume = 0) */ 772 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
753 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 773 /* unmute clfe-pin widget amp (no gain on this amp) */
754 /* mute pin widget amp left and right (no gain on this amp) */ 774 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
755 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000},
756 775
757 /* using rear surround as the path for headphone output */ 776 /* using rear surround as the path for headphone output */
758 /* unmute rear surround mixer amp left and right (volume = 0) */ 777 /* set vol=0 rear surround mixer amp */
759 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 778 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
760 /* PASD 3 stack boards use the Mic 2 as the headphone output */ 779 /* PASD 3 stack boards use the Mic 2 as the headphone output */
761 /* need to program the selector associated with the Mic 2 pin widget to 780 /* need to program the selector associated with the Mic 2 pin widget to
762 * surround path (index 0x01) for headphone output 781 * surround path (index 0x01) for headphone output
763 */ 782 */
764 {0x11, AC_VERB_SET_CONNECT_SEL, 0x01}, 783 {0x11, AC_VERB_SET_CONNECT_SEL, 0x01},
765 /* mute pin widget amp left and right (no gain on this amp) */ 784 /* mute pin widget amp left and right (no gain on this amp) */
766 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 785 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
767 /* need to retask the Mic 2 pin widget to output */ 786 /* need to retask the Mic 2 pin widget to output */
768 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 787 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40},
769 788
@@ -773,13 +792,13 @@ static struct hda_verb alc880_init_verbs_five_stack[] = {
773 /* Note: PASD motherboards uses the Line In 2 as the input for front panel mic (mic 2) */ 792 /* Note: PASD motherboards uses the Line In 2 as the input for front panel mic (mic 2) */
774 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03*/ 793 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03*/
775 /* unmute CD */ 794 /* unmute CD */
776 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x04 << 8))}, 795 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
777 /* unmute Line In */ 796 /* unmute Line In */
778 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))}, 797 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
779 /* unmute Mic 1 */ 798 /* unmute Mic 1 */
780 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 799 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
781 /* unmute Line In 2 (for PASD boards Mic 2) */ 800 /* unmute Line In 2 (for PASD boards Mic 2) */
782 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x03 << 8))}, 801 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
783 802
784 /* Unmute input amps for the line out paths to support the output path of 803 /* Unmute input amps for the line out paths to support the output path of
785 * analog loopback 804 * analog loopback
@@ -788,123 +807,121 @@ static struct hda_verb alc880_init_verbs_five_stack[] = {
788 */ 807 */
789 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */ 808 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */
790 /* Unmute Front out path */ 809 /* Unmute Front out path */
791 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 810 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
792 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 811 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
793 /* Unmute Surround (used as HP) out path */ 812 /* Unmute Surround (used as HP) out path */
794 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 813 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
795 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 814 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
796 /* Unmute C/LFE out path */ 815 /* Unmute C/LFE out path */
797 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 816 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
798 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x01 << 8))}, /* mute */ 817 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
799 /* Unmute rear Surround out path */ 818 /* Unmute rear Surround out path */
800 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 819 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
801 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 820 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
802 821
803 { } 822 { }
804}; 823};
805 824
806static struct hda_verb alc880_w810_init_verbs[] = { 825static struct hda_verb alc880_w810_init_verbs[] = {
807 /* front channel selector/amp: input 0: DAC: unmuted, (no volume selection) */ 826 /* front channel selector/amp: input 0: DAC: unmuted, (no volume selection) */
808 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 827 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
809 828
810 /* front channel selector/amp: input 1: capture mix: muted, (no volume selection) */ 829 /* front channel selector/amp: input 1: capture mix: muted, (no volume selection) */
811 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7180}, 830 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
812 831
813 /* front channel selector/amp: output 0: unmuted, max volume */ 832 /* front channel selector/amp: output 0: unmuted, max volume */
814 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 833 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
815 834
816 /* front out pin: muted, (no volume selection) */ 835 /* front out pin: muted, (no volume selection) */
817 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 836 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
818 837
819 /* front out pin: NOT headphone enable, out enable, vref disabled */ 838 /* front out pin: NOT headphone enable, out enable, vref disabled */
820 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 839 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
821 840
822 841
823 /* surround channel selector/amp: input 0: DAC: unmuted, (no volume selection) */ 842 /* surround channel selector/amp: input 0: DAC: unmuted, (no volume selection) */
824 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 843 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
825 844
826 /* surround channel selector/amp: input 1: capture mix: muted, (no volume selection) */ 845 /* surround channel selector/amp: input 1: capture mix: muted, (no volume selection) */
827 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7180}, 846 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
828 847
829 /* surround channel selector/amp: output 0: unmuted, max volume */ 848 /* surround channel selector/amp: output 0: unmuted, max volume */
830 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 849 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
831 850
832 /* surround out pin: muted, (no volume selection) */ 851 /* surround out pin: muted, (no volume selection) */
833 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 852 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
834 853
835 /* surround out pin: NOT headphone enable, out enable, vref disabled */ 854 /* surround out pin: NOT headphone enable, out enable, vref disabled */
836 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 855 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
837 856
838 857
839 /* c/lfe channel selector/amp: input 0: DAC: unmuted, (no volume selection) */ 858 /* c/lfe channel selector/amp: input 0: DAC: unmuted, (no volume selection) */
840 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 859 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
841 860
842 /* c/lfe channel selector/amp: input 1: capture mix: muted, (no volume selection) */ 861 /* c/lfe channel selector/amp: input 1: capture mix: muted, (no volume selection) */
843 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0x7180}, 862 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
844 863
845 /* c/lfe channel selector/amp: output 0: unmuted, max volume */ 864 /* c/lfe channel selector/amp: output 0: unmuted, max volume */
846 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 865 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
847 866
848 /* c/lfe out pin: muted, (no volume selection) */ 867 /* c/lfe out pin: muted, (no volume selection) */
849 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 868 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
850 869
851 /* c/lfe out pin: NOT headphone enable, out enable, vref disabled */ 870 /* c/lfe out pin: NOT headphone enable, out enable, vref disabled */
852 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 871 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
853 872
854 873
855 /* hphone/speaker input selector: front DAC */ 874 /* hphone/speaker input selector: front DAC */
856 {0x13, AC_VERB_SET_CONNECT_SEL, 0x0}, 875 {0x13, AC_VERB_SET_CONNECT_SEL, 0x0},
857 876
858 /* hphone/speaker out pin: muted, (no volume selection) */ 877 /* hphone/speaker out pin: muted, (no volume selection) */
859 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 878 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
860 879
861 /* hphone/speaker out pin: NOT headphone enable, out enable, vref disabled */ 880 /* hphone/speaker out pin: NOT headphone enable, out enable, vref disabled */
862 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 881 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
863 882
864 883
865 { } 884 { }
866}; 885};
867 886
868static struct hda_verb alc880_z71v_init_verbs[] = { 887static struct hda_verb alc880_z71v_init_verbs[] = {
869 /* front channel selector/amp: input 0: DAC: unmuted, (no volume selection) */ 888 /* front channel selector/amp: muted, DAC and mix (no vol) */
870 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 889 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
871 /* front channel selector/amp: input 1: capture mix: muted, (no volume selection) */ 890 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
872 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7180}, 891 /* front channel selector/amp: output 0: vol=0 */
873 /* front channel selector/amp: output 0: unmuted, max volume */ 892 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
874 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 893 /* front out pin: unmuted, (no volume selection) */
875 /* front out pin: muted, (no volume selection) */ 894 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
876 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080},
877 /* front out pin: NOT headphone enable, out enable, vref disabled */ 895 /* front out pin: NOT headphone enable, out enable, vref disabled */
878 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 896 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
879 /* headphone channel selector/amp: input 0: DAC: unmuted, (no volume selection) */ 897 /* headphone channel selector/amp: muted, DAC and mix (no vol) */
880 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 898 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
881 /* headphone channel selector/amp: input 1: capture mix: muted, (no volume selection) */ 899 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
882 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7180}, 900 /* headphone channel selector/amp: output 0: vol=0 */
883 /* headphone channel selector/amp: output 0: unmuted, max volume */ 901 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
884 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 902 /* headphone out pin: muted, (no volume selection) */
885 /* headphone out pin: muted, (no volume selection) */ 903 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
886 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080},
887 /* headpohne out pin: headphone enable, out enable, vref disabled */ 904 /* headpohne out pin: headphone enable, out enable, vref disabled */
888 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0}, 905 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
889 906
890 /* Line In pin widget for input */ 907 /* Line In pin widget for input */
891 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 908 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
892 /* CD pin widget for input */ 909 /* CD pin widget for input */
893 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 910 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
894 /* Mic1 (rear panel) pin widget for input and vref at 80% */ 911 /* Mic1 (rear panel) pin widget for input and vref at 80% */
895 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 912 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
896 /* Mic2 (front panel) pin widget for input and vref at 80% */ 913 /* Mic2 (front panel) pin widget for input and vref at 80% */
897 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 914 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
898 /* unmute amp left and right */ 915 /* unmute amp left and right */
899 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 916 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
900 /* set connection select to mic in */ 917 /* set connection select to mic in */
901 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, 918 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
902 /* unmute amp left and right */ 919 /* unmute amp left and right */
903 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 920 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
904 /* set connection select to mic in */ 921 /* set connection select to mic in */
905 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, 922 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00},
906 /* unmute amp left and right */ 923 /* unmute amp left and right */
907 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 924 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
908 /* set connection select to mic in */ 925 /* set connection select to mic in */
909 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, 926 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
910 /* Unmute input amps (CD, Line In, Mic 1 & Mic 2) for mixer 927 /* Unmute input amps (CD, Line In, Mic 1 & Mic 2) for mixer
@@ -913,13 +930,13 @@ static struct hda_verb alc880_z71v_init_verbs[] = {
913 /* Note: PASD motherboards uses the Line In 2 as the input for front panel mic (mic 2) */ 930 /* Note: PASD motherboards uses the Line In 2 as the input for front panel mic (mic 2) */
914 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03*/ 931 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03*/
915 /* unmute CD */ 932 /* unmute CD */
916 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x04 << 8))}, 933 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
917 /* unmute Line In */ 934 /* unmute Line In */
918 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))}, 935 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
919 /* unmute Mic 1 */ 936 /* unmute Mic 1 */
920 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 937 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
921 /* unmute Line In 2 (for PASD boards Mic 2) */ 938 /* unmute Line In 2 (for PASD boards Mic 2) */
922 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x03 << 8))}, 939 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
923 940
924 { } 941 { }
925}; 942};
@@ -1284,10 +1301,14 @@ static int alc_test_pin_src_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *
1284 } 1301 }
1285 1302
1286static snd_kcontrol_new_t alc880_test_mixer[] = { 1303static snd_kcontrol_new_t alc880_test_mixer[] = {
1287 ALC_BIND_VOL("Front Playback Volume", 0x0c, 2, HDA_OUTPUT), 1304 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
1288 ALC_BIND_VOL("Surround Playback Volume", 0x0d, 2, HDA_OUTPUT), 1305 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
1289 ALC_BIND_VOL("CLFE Playback Volume", 0x0e, 2, HDA_OUTPUT), 1306 HDA_CODEC_VOLUME("CLFE Playback Volume", 0x0e, 0x0, HDA_OUTPUT),
1290 ALC_BIND_VOL("Side Playback Volume", 0x0f, 2, HDA_OUTPUT), 1307 HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
1308 ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
1309 ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
1310 ALC_BIND_MUTE("CLFE Playback Volume", 0x0e, 2, HDA_INPUT),
1311 ALC_BIND_MUTE("Side Playback Volume", 0x0f, 2, HDA_INPUT),
1291 PIN_CTL_TEST("Front Pin Mode", 0x14), 1312 PIN_CTL_TEST("Front Pin Mode", 0x14),
1292 PIN_CTL_TEST("Surround Pin Mode", 0x15), 1313 PIN_CTL_TEST("Surround Pin Mode", 0x15),
1293 PIN_CTL_TEST("CLFE Pin Mode", 0x16), 1314 PIN_CTL_TEST("CLFE Pin Mode", 0x16),
@@ -1310,10 +1331,10 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
1310 HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT), 1331 HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT),
1311 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT), 1332 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT),
1312 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT), 1333 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT),
1313 HDA_CODEC_VOLUME("Capture Volume", 0x07, 0x0, HDA_INPUT), 1334 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
1314 HDA_CODEC_MUTE("Capture Switch", 0x07, 0x0, HDA_INPUT), 1335 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
1315 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x08, 0x0, HDA_INPUT), 1336 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x09, 0x0, HDA_INPUT),
1316 HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x08, 0x0, HDA_INPUT), 1337 HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x09, 0x0, HDA_INPUT),
1317 { 1338 {
1318 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 1339 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1319 .name = "Input Source", 1340 .name = "Input Source",
@@ -1328,54 +1349,59 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
1328 .info = alc880_ch_mode_info, 1349 .info = alc880_ch_mode_info,
1329 .get = alc880_ch_mode_get, 1350 .get = alc880_ch_mode_get,
1330 .put = alc880_ch_mode_put, 1351 .put = alc880_ch_mode_put,
1331 .private_value = ARRAY_SIZE(alc880_test_modes),
1332 }, 1352 },
1333 { } /* end */ 1353 { } /* end */
1334}; 1354};
1335 1355
1336static struct hda_verb alc880_test_init_verbs[] = { 1356static struct hda_verb alc880_test_init_verbs[] = {
1337 /* Unmute inputs of 0x0c - 0x0f */ 1357 /* Unmute inputs of 0x0c - 0x0f */
1338 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1358 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1339 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0x7100}, 1359 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
1340 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1360 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1341 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0x7100}, 1361 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
1342 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1362 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1343 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0x7100}, 1363 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
1344 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1364 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1345 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0x7100}, 1365 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
1346 /* Vol output for 0x0c-0x0f */ 1366 /* Vol output for 0x0c-0x0f */
1347 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1367 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1348 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1368 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1349 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1369 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1350 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1370 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1351 /* Set output pins 0x14-0x17 */ 1371 /* Set output pins 0x14-0x17 */
1352 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1372 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1353 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1373 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1354 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1374 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1355 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1375 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1356 /* Unmute output pins 0x14-0x17 */ 1376 /* Unmute output pins 0x14-0x17 */
1357 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1377 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1358 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1378 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1359 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1379 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1360 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1380 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1361 /* Set input pins 0x18-0x1c */ 1381 /* Set input pins 0x18-0x1c */
1362 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, /* vref 80% */ 1382 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1363 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 1383 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1364 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1384 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1365 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1385 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1366 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1386 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1367 /* Mute input pins 0x18-0x1b */ 1387 /* Mute input pins 0x18-0x1b */
1368 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1388 {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
1369 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1389 {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
1370 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1390 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
1371 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1391 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
1372 /* ADC set up */ 1392 /* ADC set up */
1373 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1393 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1374 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, 1394 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
1375 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1395 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1376 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, 1396 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00},
1377 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1397 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1378 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, 1398 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
1399 /* Analog input/passthru */
1400 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1401 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1402 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
1403 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
1404 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
1379 { } 1405 { }
1380}; 1406};
1381#endif 1407#endif
@@ -1621,10 +1647,8 @@ static struct alc_channel_mode alc260_modes[1] = {
1621}; 1647};
1622 1648
1623snd_kcontrol_new_t alc260_base_mixer[] = { 1649snd_kcontrol_new_t alc260_base_mixer[] = {
1624 ALC_BIND_VOL("Front Playback Volume", 0x08, 2, HDA_OUTPUT), 1650 HDA_CODEC_VOLUME("Front Playback Volume", 0x08, 0x0, HDA_OUTPUT),
1625 /* use LINE2 for the output */ 1651 ALC_BIND_MUTE("Front Playback Switch", 0x08, 2, HDA_INPUT),
1626 /* HDA_CODEC_MUTE("Front Playback Switch", 0x0f, 0x0, HDA_OUTPUT), */
1627 HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT),
1628 HDA_CODEC_VOLUME("CD Playback Volume", 0x07, 0x04, HDA_INPUT), 1652 HDA_CODEC_VOLUME("CD Playback Volume", 0x07, 0x04, HDA_INPUT),
1629 HDA_CODEC_MUTE("CD Playback Switch", 0x07, 0x04, HDA_INPUT), 1653 HDA_CODEC_MUTE("CD Playback Switch", 0x07, 0x04, HDA_INPUT),
1630 HDA_CODEC_VOLUME("Line Playback Volume", 0x07, 0x02, HDA_INPUT), 1654 HDA_CODEC_VOLUME("Line Playback Volume", 0x07, 0x02, HDA_INPUT),
@@ -1635,10 +1659,10 @@ snd_kcontrol_new_t alc260_base_mixer[] = {
1635 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x07, 0x01, HDA_INPUT), 1659 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x07, 0x01, HDA_INPUT),
1636 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x07, 0x05, HDA_INPUT), 1660 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x07, 0x05, HDA_INPUT),
1637 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x07, 0x05, HDA_INPUT), 1661 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x07, 0x05, HDA_INPUT),
1638 ALC_BIND_VOL("Headphone Playback Volume", 0x09, 2, HDA_OUTPUT), 1662 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
1639 HDA_CODEC_MUTE("Headphone Playback Switch", 0x10, 0x0, HDA_OUTPUT), 1663 ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
1640 ALC_BIND_VOL_MONO("Mono Playback Volume", 0x0a, 1, 2, HDA_OUTPUT), 1664 HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
1641 HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x11, 1, 0x0, HDA_OUTPUT), 1665 ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT),
1642 HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT), 1666 HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT),
1643 HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT), 1667 HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT),
1644 { 1668 {
@@ -1653,58 +1677,58 @@ snd_kcontrol_new_t alc260_base_mixer[] = {
1653 1677
1654static struct hda_verb alc260_init_verbs[] = { 1678static struct hda_verb alc260_init_verbs[] = {
1655 /* Line In pin widget for input */ 1679 /* Line In pin widget for input */
1656 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1680 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1657 /* CD pin widget for input */ 1681 /* CD pin widget for input */
1658 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1682 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1659 /* Mic1 (rear panel) pin widget for input and vref at 80% */ 1683 /* Mic1 (rear panel) pin widget for input and vref at 80% */
1660 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 1684 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1661 /* Mic2 (front panel) pin widget for input and vref at 80% */ 1685 /* Mic2 (front panel) pin widget for input and vref at 80% */
1662 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 1686 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1663 /* LINE-2 is used for line-out in rear */ 1687 /* LINE-2 is used for line-out in rear */
1664 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1688 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1665 /* select line-out */ 1689 /* select line-out */
1666 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, 1690 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
1667 /* LINE-OUT pin */ 1691 /* LINE-OUT pin */
1668 {0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1692 {0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1669 /* enable HP */ 1693 /* enable HP */
1670 {0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1694 {0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
1671 /* enable Mono */ 1695 /* enable Mono */
1672 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1696 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1673 /* unmute amp left and right */ 1697 /* mute capture amp left and right */
1674 {0x04, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1698 {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1675 /* set connection select to line in (default select for this ADC) */ 1699 /* set connection select to line in (default select for this ADC) */
1676 {0x04, AC_VERB_SET_CONNECT_SEL, 0x02}, 1700 {0x04, AC_VERB_SET_CONNECT_SEL, 0x02},
1677 /* unmute Line-Out mixer amp left and right (volume = 0) */ 1701 /* set vol=0 Line-Out mixer amp left and right */
1678 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1702 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1679 /* mute pin widget amp left and right (no gain on this amp) */ 1703 /* unmute pin widget amp left and right (no gain on this amp) */
1680 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1704 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1681 /* unmute HP mixer amp left and right (volume = 0) */ 1705 /* set vol=0 HP mixer amp left and right */
1682 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1706 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1683 /* mute pin widget amp left and right (no gain on this amp) */ 1707 /* unmute pin widget amp left and right (no gain on this amp) */
1684 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1708 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1685 /* unmute Mono mixer amp left and right (volume = 0) */ 1709 /* set vol=0 Mono mixer amp left and right */
1686 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1710 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1687 /* mute pin widget amp left and right (no gain on this amp) */ 1711 /* unmute pin widget amp left and right (no gain on this amp) */
1688 {0x11, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1712 {0x11, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1689 /* mute LINE-2 out */ 1713 /* unmute LINE-2 out pin */
1690 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080}, 1714 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1691 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03 */ 1715 /* Amp Indexes: CD = 0x04, Line In 1 = 0x02, Mic 1 = 0x00 & Line In 2 = 0x03 */
1692 /* unmute CD */ 1716 /* mute CD */
1693 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x04 << 8))}, 1717 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
1694 /* unmute Line In */ 1718 /* mute Line In */
1695 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x02 << 8))}, 1719 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
1696 /* unmute Mic */ 1720 /* mute Mic */
1697 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1721 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1698 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */ 1722 /* Amp Indexes: DAC = 0x01 & mixer = 0x00 */
1699 /* Unmute Front out path */ 1723 /* mute Front out path */
1700 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1724 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1701 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 1725 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1702 /* Unmute Headphone out path */ 1726 /* mute Headphone out path */
1703 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1727 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1704 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 1728 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1705 /* Unmute Mono out path */ 1729 /* mute Mono out path */
1706 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1730 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1707 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))}, 1731 {0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1708 { } 1732 { }
1709}; 1733};
1710 1734
@@ -1828,16 +1852,16 @@ static int alc882_mux_enum_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u
1828 * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b 1852 * Mic=0x18, Front Mic=0x19, Line-In=0x1a, HP=0x1b
1829 */ 1853 */
1830static snd_kcontrol_new_t alc882_base_mixer[] = { 1854static snd_kcontrol_new_t alc882_base_mixer[] = {
1831 ALC_BIND_VOL("Front Playback Volume", 0x0c, 2, HDA_OUTPUT), 1855 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
1832 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 1856 ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
1833 ALC_BIND_VOL("Surround Playback Volume", 0x0d, 2, HDA_OUTPUT), 1857 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
1834 HDA_CODEC_MUTE("Surround Playback Switch", 0x15, 0x0, HDA_OUTPUT), 1858 ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
1835 ALC_BIND_VOL_MONO("Center Playback Volume", 0x0e, 1, 2, HDA_OUTPUT), 1859 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
1836 ALC_BIND_VOL_MONO("LFE Playback Volume", 0x0e, 2, 2, HDA_OUTPUT), 1860 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
1837 HDA_CODEC_MUTE_MONO("Center Playback Switch", 0x16, 1, 0x0, HDA_OUTPUT), 1861 ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
1838 HDA_CODEC_MUTE_MONO("LFE Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), 1862 ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_OUTPUT),
1839 ALC_BIND_VOL("Side Playback Volume", 0x0f, 2, HDA_OUTPUT), 1863 HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
1840 HDA_CODEC_MUTE("Side Playback Switch", 0x17, 0x0, HDA_OUTPUT), 1864 ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
1841 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 1865 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
1842 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 1866 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
1843 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 1867 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
@@ -1869,91 +1893,87 @@ static snd_kcontrol_new_t alc882_base_mixer[] = {
1869 1893
1870static struct hda_verb alc882_init_verbs[] = { 1894static struct hda_verb alc882_init_verbs[] = {
1871 /* Front mixer: unmute input/output amp left and right (volume = 0) */ 1895 /* Front mixer: unmute input/output amp left and right (volume = 0) */
1872 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1896 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1873 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1897 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1898 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1874 /* Rear mixer */ 1899 /* Rear mixer */
1875 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1900 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1876 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1901 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1902 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1877 /* CLFE mixer */ 1903 /* CLFE mixer */
1878 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1904 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1879 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1905 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1906 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1880 /* Side mixer */ 1907 /* Side mixer */
1881 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000}, 1908 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
1882 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1909 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1910 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
1883 1911
1884 /* Front Pin: to output mode */ 1912 /* Front Pin: to output mode */
1885 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1913 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1886 /* Front Pin: mute amp left and right (no volume) */ 1914 /* Front Pin: mute amp left and right (no volume) */
1887 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 1915 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1888 /* select Front mixer (0x0c, index 0) */ 1916 /* select Front mixer (0x0c, index 0) */
1889 {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, 1917 {0x14, AC_VERB_SET_CONNECT_SEL, 0x00},
1890 /* Rear Pin */ 1918 /* Rear Pin */
1891 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1919 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1892 /* Rear Pin: mute amp left and right (no volume) */ 1920 /* Rear Pin: mute amp left and right (no volume) */
1893 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 1921 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1894 /* select Rear mixer (0x0d, index 1) */ 1922 /* select Rear mixer (0x0d, index 1) */
1895 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01}, 1923 {0x15, AC_VERB_SET_CONNECT_SEL, 0x01},
1896 /* CLFE Pin */ 1924 /* CLFE Pin */
1897 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1925 {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1898 /* CLFE Pin: mute amp left and right (no volume) */ 1926 /* CLFE Pin: mute amp left and right (no volume) */
1899 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 1927 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1900 /* select CLFE mixer (0x0e, index 2) */ 1928 /* select CLFE mixer (0x0e, index 2) */
1901 {0x16, AC_VERB_SET_CONNECT_SEL, 0x02}, 1929 {0x16, AC_VERB_SET_CONNECT_SEL, 0x02},
1902 /* Side Pin */ 1930 /* Side Pin */
1903 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1931 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1904 /* Side Pin: mute amp left and right (no volume) */ 1932 /* Side Pin: mute amp left and right (no volume) */
1905 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 1933 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1906 /* select Side mixer (0x0f, index 3) */ 1934 /* select Side mixer (0x0f, index 3) */
1907 {0x17, AC_VERB_SET_CONNECT_SEL, 0x03}, 1935 {0x17, AC_VERB_SET_CONNECT_SEL, 0x03},
1908 /* Headphone Pin */ 1936 /* Headphone Pin */
1909 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40}, 1937 {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
1910 /* Headphone Pin: mute amp left and right (no volume) */ 1938 /* Headphone Pin: mute amp left and right (no volume) */
1911 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, 0x0000}, 1939 {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1912 /* select Front mixer (0x0c, index 0) */ 1940 /* select Front mixer (0x0c, index 0) */
1913 {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, 1941 {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00},
1914 /* Mic (rear) pin widget for input and vref at 80% */ 1942 /* Mic (rear) pin widget for input and vref at 80% */
1915 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 1943 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1916 /* Front Mic pin widget for input and vref at 80% */ 1944 /* Front Mic pin widget for input and vref at 80% */
1917 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24}, 1945 {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF},
1918 /* Line In pin widget for input */ 1946 /* Line In pin widget for input */
1919 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1947 {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1920 /* CD pin widget for input */ 1948 /* CD pin widget for input */
1921 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20}, 1949 {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
1922 1950
1923 /* FIXME: use matrix-type input source selection */ 1951 /* FIXME: use matrix-type input source selection */
1924 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */ 1952 /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */
1925 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ 1953 /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */
1926 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1954 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1927 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x03 << 8))}, 1955 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
1928 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x02 << 8))}, 1956 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
1929 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x04 << 8))}, 1957 {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
1930 /* Input mixer2 */ 1958 /* Input mixer2 */
1931 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1959 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1932 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x03 << 8))}, 1960 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
1933 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x02 << 8))}, 1961 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
1934 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x04 << 8))}, 1962 {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
1935 /* Input mixer3 */ 1963 /* Input mixer3 */
1936 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x00 << 8))}, 1964 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
1937 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x03 << 8))}, 1965 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
1938 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x02 << 8))}, 1966 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
1939 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x04 << 8))}, 1967 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
1940 /* ADC1: unmute amp left and right */ 1968 /* ADC1: mute amp left and right */
1941 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1969 {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1942 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, 1970 {0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
1943 /* ADC2: unmute amp left and right */ 1971 /* ADC2: mute amp left and right */
1944 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1972 {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1945 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, 1973 {0x08, AC_VERB_SET_CONNECT_SEL, 0x00},
1946 /* ADC3: unmute amp left and right */ 1974 /* ADC3: mute amp left and right */
1947 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000}, 1975 {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
1948 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, 1976 {0x09, AC_VERB_SET_CONNECT_SEL, 0x00},
1949 /* Unmute front loopback */
1950 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))},
1951 /* Unmute rear loopback */
1952 {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))},
1953 /* Mute CLFE loopback */
1954 {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, (0x7080 | (0x01 << 8))},
1955 /* Unmute side loopback */
1956 {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, (0x7000 | (0x01 << 8))},
1957 1977
1958 { } 1978 { }
1959}; 1979};