ALSA: scarlett2: Handle Gen 4 Direct Monitor mix updates
authorGeoffrey D. Bennett <g@b4.vu>
Tue, 26 Dec 2023 18:08:20 +0000 (04:38 +1030)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Dec 2023 14:52:13 +0000 (15:52 +0100)
When the Direct Monitor feature on the Scarlett 4th Gen Solo and 2i2
interfaces is used, the Mix A and B gains are updated by the
interface. This patch calls snd_ctl_notify() for the ALSA mix controls
when a Direct Monitor notification is received.

Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/713d032e343e0547212368919bef17d6fa1c9d29.1703612638.git.g@b4.vu
sound/usb/mixer_scarlett2.c

index d6e2f69c32b99198c907e69d34d761074d90e096..501444cf0f15cac0791f89de4c7bd9f1069fb194 100644 (file)
@@ -6285,11 +6285,23 @@ static void scarlett2_notify_direct_monitor(struct usb_mixer_interface *mixer)
 {
        struct snd_card *card = mixer->chip->card;
        struct scarlett2_data *private = mixer->private_data;
+       int count = private->num_mix_in * private->num_mix_out;
+       int i;
 
        private->direct_monitor_updated = 1;
 
        snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
                       &private->direct_monitor_ctl->id);
+
+       if (!scarlett2_has_mixer(private))
+               return;
+
+       private->mix_updated = 1;
+
+       /* Notify of change to the mix controls */
+       for (i = 0; i < count; i++)
+               snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
+                              &private->mix_ctls[i]->id);
 }
 
 /* Notify on power change */