diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-06-27 10:17:07 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-06-27 10:17:07 -0400 |
commit | 4f574b7b1a1cc8aac617e938459e8f03a641e678 (patch) | |
tree | 5db951ad7f05b6e0344b17602903f7294be13393 /sound/pci/hda/patch_realtek.c | |
parent | 7ec9c6ccc6007b14a916021d4ba7ffbcc7822ae3 (diff) |
ALSA: hda - More volume-init fixes for ALC267 codec
More similar fixes like previous commits: handle the exceptional case
like ALC267 where no volume amp is found in ADC widget but in the
capsrc widget instead.
Also minor checks for avoiding possible erros: no connection-select
when the pin has a single selection, and add beep verbs only when the
0x1d is used for beep.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 0fefc656c6e0..cf383ede281d 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -11078,9 +11078,16 @@ static void alc882_auto_init_input_src(struct hda_codec *codec) | |||
11078 | unsigned int wid_type; | 11078 | unsigned int wid_type; |
11079 | 11079 | ||
11080 | /* mute ADC */ | 11080 | /* mute ADC */ |
11081 | snd_hda_codec_write(codec, spec->adc_nids[c], 0, | 11081 | if (query_amp_caps(codec, spec->adc_nids[c], HDA_INPUT) & |
11082 | AC_AMPCAP_MUTE) | ||
11083 | snd_hda_codec_write(codec, spec->adc_nids[c], 0, | ||
11082 | AC_VERB_SET_AMP_GAIN_MUTE, | 11084 | AC_VERB_SET_AMP_GAIN_MUTE, |
11083 | AMP_IN_MUTE(0)); | 11085 | AMP_IN_MUTE(0)); |
11086 | else if (query_amp_caps(codec, nid, HDA_OUTPUT) & | ||
11087 | AC_AMPCAP_MUTE) | ||
11088 | snd_hda_codec_write(codec, nid, 0, | ||
11089 | AC_VERB_SET_AMP_GAIN_MUTE, | ||
11090 | AMP_OUT_MUTE); | ||
11084 | 11091 | ||
11085 | conns = snd_hda_get_conn_list(codec, nid, NULL); | 11092 | conns = snd_hda_get_conn_list(codec, nid, NULL); |
11086 | if (conns <= 0) | 11093 | if (conns <= 0) |
@@ -13580,6 +13587,8 @@ static void alc268_auto_set_output_and_unmute(struct hda_codec *codec, | |||
13580 | int idx; | 13587 | int idx; |
13581 | 13588 | ||
13582 | alc_set_pin_output(codec, nid, pin_type); | 13589 | alc_set_pin_output(codec, nid, pin_type); |
13590 | if (snd_hda_get_conn_list(codec, nid, NULL) <= 1) | ||
13591 | return; | ||
13583 | if (nid == 0x14 || nid == 0x16) | 13592 | if (nid == 0x14 || nid == 0x16) |
13584 | idx = 0; | 13593 | idx = 0; |
13585 | else | 13594 | else |
@@ -13721,10 +13730,11 @@ static int alc268_parse_auto_config(struct hda_codec *codec) | |||
13721 | if (spec->kctls.list) | 13730 | if (spec->kctls.list) |
13722 | add_mixer(spec, spec->kctls.list); | 13731 | add_mixer(spec, spec->kctls.list); |
13723 | 13732 | ||
13724 | if (!spec->no_analog && spec->autocfg.speaker_pins[0] != 0x1d) | 13733 | if (!spec->no_analog && spec->autocfg.speaker_pins[0] != 0x1d) { |
13725 | add_mixer(spec, alc268_beep_mixer); | 13734 | add_mixer(spec, alc268_beep_mixer); |
13735 | add_verb(spec, alc268_beep_init_verbs); | ||
13736 | } | ||
13726 | 13737 | ||
13727 | add_verb(spec, alc268_beep_init_verbs); | ||
13728 | spec->num_mux_defs = 2; | 13738 | spec->num_mux_defs = 2; |
13729 | spec->input_mux = &spec->private_imux[0]; | 13739 | spec->input_mux = &spec->private_imux[0]; |
13730 | 13740 | ||