Merge tag 'asoc-v4.7-fix-hdac' of git://git.kernel.org/pub/scm/linux/kernel/git/broon...
[cascardo/linux.git] / sound / usb / mixer.c
index cab6f52..2f8c388 100644 (file)
@@ -2374,6 +2374,7 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
        __u8 unitid = (index >> 8) & 0xff;
        __u8 control = (value >> 8) & 0xff;
        __u8 channel = value & 0xff;
+       unsigned int count = 0;
 
        if (channel >= MAX_CHANNELS) {
                usb_audio_dbg(mixer->chip,
@@ -2382,6 +2383,12 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
                return;
        }
 
+       for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem)
+               count++;
+
+       if (count == 0)
+               return;
+
        for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) {
                struct usb_mixer_elem_info *info;
 
@@ -2389,7 +2396,7 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
                        continue;
 
                info = (struct usb_mixer_elem_info *)list;
-               if (info->control != control)
+               if (count > 1 && info->control != control)
                        continue;
 
                switch (attribute) {