|
@@ -2374,6 +2374,7 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
|
|
__u8 unitid = (index >> 8) & 0xff;
|
|
__u8 unitid = (index >> 8) & 0xff;
|
|
__u8 control = (value >> 8) & 0xff;
|
|
__u8 control = (value >> 8) & 0xff;
|
|
__u8 channel = value & 0xff;
|
|
__u8 channel = value & 0xff;
|
|
|
|
+ unsigned int count = 0;
|
|
|
|
|
|
if (channel >= MAX_CHANNELS) {
|
|
if (channel >= MAX_CHANNELS) {
|
|
usb_audio_dbg(mixer->chip,
|
|
usb_audio_dbg(mixer->chip,
|
|
@@ -2382,6 +2383,12 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
|
|
return;
|
|
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) {
|
|
for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) {
|
|
struct usb_mixer_elem_info *info;
|
|
struct usb_mixer_elem_info *info;
|
|
|
|
|
|
@@ -2389,7 +2396,7 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
|
|
continue;
|
|
continue;
|
|
|
|
|
|
info = (struct usb_mixer_elem_info *)list;
|
|
info = (struct usb_mixer_elem_info *)list;
|
|
- if (info->control != control)
|
|
|
|
|
|
+ if (count > 1 && info->control != control)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
switch (attribute) {
|
|
switch (attribute) {
|