diff options
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 636 |
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 | */ |
106 | static hda_nid_t alc880_adc_nids[3] = { | 106 | static 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 | ||
376 | static int alc_bind_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) | 376 | static 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 | ||
391 | static int alc_bind_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) | 391 | static 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 | ||
406 | static int alc_bind_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) | 406 | static 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 | */ |
441 | static snd_kcontrol_new_t alc880_base_mixer[] = { | 441 | static 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 | */ |
494 | static snd_kcontrol_new_t alc880_five_stack_mixer[] = { | 494 | static 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 | ||
577 | static snd_kcontrol_new_t alc880_z71v_mixer[] = { | 577 | static 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 | |||
639 | static struct hda_verb alc880_init_verbs_three_stack[] = { | 649 | static 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 | ||
722 | static struct hda_verb alc880_init_verbs_five_stack[] = { | 737 | static 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 | ||
806 | static struct hda_verb alc880_w810_init_verbs[] = { | 825 | static 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 | ||
868 | static struct hda_verb alc880_z71v_init_verbs[] = { | 887 | static 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 | ||
1286 | static snd_kcontrol_new_t alc880_test_mixer[] = { | 1303 | static 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 | ||
1336 | static struct hda_verb alc880_test_init_verbs[] = { | 1356 | static 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 | ||
1623 | snd_kcontrol_new_t alc260_base_mixer[] = { | 1649 | snd_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 | ||
1654 | static struct hda_verb alc260_init_verbs[] = { | 1678 | static 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 | */ |
1830 | static snd_kcontrol_new_t alc882_base_mixer[] = { | 1854 | static 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 | ||
1870 | static struct hda_verb alc882_init_verbs[] = { | 1894 | static 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 | }; |