diff options
author | Takashi Iwai <tiwai@suse.de> | 2013-01-18 16:23:25 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2013-01-18 16:26:37 +0100 |
commit | 2a8d53916b9cea3eac615f0bb1e7fabec3d5c026 (patch) | |
tree | 043091d96e91119f02eff1cb209f8464ef5ee6be /sound/pci/hda/hda_generic.c | |
parent | ALSA: hda - Don't add unnecessary indices on HDMI and SPDIF (diff) | |
download | linux-2a8d53916b9cea3eac615f0bb1e7fabec3d5c026.tar.xz linux-2a8d53916b9cea3eac615f0bb1e7fabec3d5c026.zip |
ALSA: hda - Fix the wrong adc_idx for capture source
The patch "ALSA: hda - fix wrong adc_idx in generic parser" fixed the
adc_idx for the capture volume and capture switch controls. But also
modified the adc_idx retrieval for the capture source controls
wrongly. As multiple capture source controls are created in a single
shot with counts > 1, the id.index doesn't contain the real value.
The real index has to be taken via snd_ctl_get_ioffidx() as in the
original code.
This patch reverts the fixes partially to recover from the
regression.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_generic.c')
-rw-r--r-- | sound/pci/hda/hda_generic.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index e4e71fa8d87c..29f37c90225d 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -2675,7 +2675,8 @@ static int mux_enum_get(struct snd_kcontrol *kcontrol, { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); struct hda_gen_spec *spec = codec->spec; - unsigned int adc_idx = kcontrol->id.index; + /* the ctls are created at once with multiple counts */ + unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx]; return 0; @@ -2685,7 +2686,7 @@ static int mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct hda_codec *codec = snd_kcontrol_chip(kcontrol); - unsigned int adc_idx = kcontrol->id.index; + unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); return mux_select(codec, adc_idx, ucontrol->value.enumerated.item[0]); } |