diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-08-04 09:37:39 +0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-08-04 09:40:53 +0400 |
commit | 748cce431eb413e794c8f1d1974b78b47a6174ef (patch) | |
tree | 88f4ece6d836c5bdd813fc19b297876385d8c157 | |
parent | e096c8e6d5ed965f346d94befbbec2275dde3621 (diff) | |
download | linux-748cce431eb413e794c8f1d1974b78b47a6174ef.tar.xz |
ALSA: hda - Fix initial capsrc selection in patch_alc269()
In patch_alc269(), we initialize the primary capsrc so that the device
works from the beginning. It issues CONNECT_SEL verb no matter which
widget is although some widget (e.g. 0x23) has no connection selection
but a mixer, which requires unmuting instead.
This patch fixes the initialization of capsrc by re-using the code as
a helper function.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 6c588ef26685..c8070620a4d8 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5166,6 +5166,19 @@ static void fixup_automic_adc(struct hda_codec *codec) spec->auto_mic = 0; /* disable auto-mic to be sure */ } +/* select or unmute the given capsrc route */ +static void select_or_unmute_capsrc(struct hda_codec *codec, hda_nid_t cap, + int idx) +{ + if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) { + snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx, + HDA_AMP_MUTE, 0); + } else { + snd_hda_codec_write_cache(codec, cap, 0, + AC_VERB_SET_CONNECT_SEL, idx); + } +} + /* set the default connection to that pin */ static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin) { @@ -5180,14 +5193,7 @@ static int init_capsrc_for_pin(struct hda_codec *codec, hda_nid_t pin) idx = get_connection_index(codec, cap, pin); if (idx < 0) continue; - /* select or unmute this route */ - if (get_wcaps_type(get_wcaps(codec, cap)) == AC_WID_AUD_MIX) { - snd_hda_codec_amp_stereo(codec, cap, HDA_INPUT, idx, - HDA_AMP_MUTE, 0); - } else { - snd_hda_codec_write_cache(codec, cap, 0, - AC_VERB_SET_CONNECT_SEL, idx); - } + select_or_unmute_capsrc(codec, cap, idx); return i; /* return the found index */ } return -1; /* not found */ @@ -14364,9 +14370,8 @@ static int alc269_parse_auto_config(struct hda_codec *codec) /* set default input source */ if (!spec->dual_adc_switch) - snd_hda_codec_write_cache(codec, spec->capsrc_nids[0], - 0, AC_VERB_SET_CONNECT_SEL, - spec->input_mux->items[0].index); + select_or_unmute_capsrc(codec, spec->capsrc_nids[0], + spec->input_mux->items[0].index); err = alc_auto_add_mic_boost(codec); if (err < 0) |