summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorTom Yan <tom.ty89@gmail.com>2020-08-17 20:20:11 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-03 12:29:34 +0300
commit8e6025686c8a00d08c710938488aa1618d570252 (patch)
tree1718f1b45117724a2a88a3d7cab53e74ad434406 /sound
parentee4dd74d08725c1abc9052e6e900c3105e9e7edc (diff)
downloadlinux-8e6025686c8a00d08c710938488aa1618d570252.tar.xz
ALSA: usb-audio: ignore broken processing/extension unit
[ Upstream commit d8d0db7bb358ef65d60726a61bfcd08eccff0bc0 ] Some devices have broken extension unit where getting current value doesn't work. Attempt that once when creating mixer control for it. If it fails, just ignore it, so that it won't cripple the device entirely (and/or make the error floods). Signed-off-by: Tom Yan <tom.ty89@gmail.com> Link: https://lore.kernel.org/r/5f3abc52.1c69fb81.9cf2.fe91@mx.google.com Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/mixer.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index eab0fd4fd7c3..e0b7174c1043 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -2367,7 +2367,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
int num_ins;
struct usb_mixer_elem_info *cval;
struct snd_kcontrol *kctl;
- int i, err, nameid, type, len;
+ int i, err, nameid, type, len, val;
const struct procunit_info *info;
const struct procunit_value_info *valinfo;
const struct usbmix_name_map *map;
@@ -2470,6 +2470,12 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
break;
}
+ err = get_cur_ctl_value(cval, cval->control << 8, &val);
+ if (err < 0) {
+ usb_mixer_elem_info_free(cval);
+ return -EINVAL;
+ }
+
kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
if (!kctl) {
usb_mixer_elem_info_free(cval);