ALSA: scarlett2: Add support for DSP mux channels
authorGeoffrey D. Bennett <g@b4.vu>
Tue, 26 Dec 2023 18:08:34 +0000 (04:38 +1030)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Dec 2023 14:52:13 +0000 (15:52 +0100)
The DSP mux channels in the Scarlett 4th Gen appear as
SCARLETT2_PORT_TYPE_MIX ports but do not have corresponding mixer
controls. Add a dsp_count option to the device info struct to exclude
those DSP channels from the num_mix_in/num_mix_out counts.

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

index 13f65d9637784895e084255e19b3bb260abfbdec..59f178dc8050da2c03bc9dbb1bb2a8d5e65ce355 100644 (file)
@@ -706,6 +706,9 @@ struct scarlett2_device_info {
         */
        u8 direct_monitor;
 
+       /* the number of DSP channels */
+       u8 dsp_count;
+
        /* remap analogue outputs; 18i8 Gen 3 has "line 3/4" connected
         * internally to the analogue 7/8 outputs
         */
@@ -5827,12 +5830,17 @@ static void scarlett2_count_io(struct scarlett2_data *private)
        private->num_mux_srcs = srcs;
        private->num_mux_dsts = dsts;
 
-       /* Mixer inputs are mux outputs and vice versa */
+       /* Mixer inputs are mux outputs and vice versa.
+        * Scarlett Gen 4 DSP I/O uses SCARLETT2_PORT_TYPE_MIX but
+        * doesn't have mixer controls.
+        */
        private->num_mix_in =
-               port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
+               port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT] -
+                       info->dsp_count;
 
        private->num_mix_out =
-               port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
+               port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN] -
+                       info->dsp_count;
 
        /* Number of analogue line outputs */
        private->num_line_out =