1 // SPDX-License-Identifier: GPL-2.0
3 * Focusrite Scarlett Gen 2/3 and Clarett+ Driver for ALSA
6 * - 6i6/18i8/18i20 Gen 2
7 * - Solo/2i2/4i4/8i6/18i8/18i20 Gen 3
10 * Copyright (c) 2018-2022 by Geoffrey D. Bennett <g at b4.vu>
11 * Copyright (c) 2020-2021 by Vladimir Sadovnikov <sadko4u@gmail.com>
12 * Copyright (c) 2022 by Christian Colglazier <christian@cacolglazier.com>
14 * Based on the Scarlett (Gen 1) Driver for ALSA:
16 * Copyright (c) 2013 by Tobias Hoffmann
17 * Copyright (c) 2013 by Robin Gareus <robin at gareus.org>
18 * Copyright (c) 2002 by Takashi Iwai <tiwai at suse.de>
19 * Copyright (c) 2014 by Chris J Arges <chris.j.arges at canonical.com>
21 * Many codes borrowed from audio.c by
22 * Alan Cox (alan at lxorguk.ukuu.org.uk)
23 * Thomas Sailer (sailer at ife.ee.ethz.ch)
26 * David Henningsson <david.henningsson at canonical.com>
29 /* The protocol was reverse engineered by looking at the communication
30 * between Focusrite Control 2.3.4 and the Focusrite(R) Scarlett 18i20
31 * (firmware 1083) using usbmon in July-August 2018.
33 * Scarlett 18i8 support added in April 2019.
35 * Scarlett 6i6 support added in June 2019 (thanks to Martin Wittmann
36 * for providing usbmon output and testing).
38 * Scarlett 4i4/8i6 Gen 3 support added in May 2020 (thanks to Laurent
39 * Debricon for donating a 4i4 and to Fredrik Unger for providing 8i6
40 * usbmon output and testing).
42 * Scarlett 18i8/18i20 Gen 3 support added in June 2020 (thanks to
43 * Darren Jaeckel, Alex Sedlack, and Clovis Lunel for providing usbmon
44 * output, protocol traces and testing).
46 * Support for loading mixer volume and mux configuration from the
47 * interface during driver initialisation added in May 2021 (thanks to
48 * Vladimir Sadovnikov for figuring out how).
50 * Support for Solo/2i2 Gen 3 added in May 2021 (thanks to Alexander
51 * Vorona for 2i2 protocol traces).
53 * Support for phantom power, direct monitoring, speaker switching,
54 * and talkback added in May-June 2021.
56 * Support for Clarett+ 8Pre added in Aug 2022 by Christian
59 * This ALSA mixer gives access to (model-dependent):
60 * - input, output, mixer-matrix muxes
61 * - mixer-matrix gain stages
62 * - gain/volume/mute controls
64 * - line/inst level, pad, and air controls
65 * - phantom power, direct monitor, speaker switching, and talkback
67 * - disable/enable MSD mode
68 * - disable/enable standalone mode
71 * /--------------\ 18chn 20chn /--------------\
72 * | Hardware in +--+------\ /-------------+--+ ALSA PCM out |
73 * \--------------/ | | | | \--------------/
77 * | +---------------+ | |
78 * | \ Matrix Mux / | |
85 * | +------------+ | |
89 * | | 18x10 Gain | | |
91 * | +-----+------+ | |
93 * |18chn |10chn | |20chn
98 * ===========================
99 * +---------------+ +--—------------+
100 * \ Output Mux / \ Capture Mux /
101 * +---+---+---+ +-----+-----+
105 * /--------------\ | | | /--------------\
106 * | S/PDIF, ADAT |<--/ |10chn \-->| ALSA PCM in |
107 * | Hardware out | | \--------------/
110 * +-------------+ Software gain per channel.
111 * | Master Gain |<-- 18i20 only: Switch per channel
112 * +------+------+ to select HW or SW gain control.
116 * | Analogue |<------/
121 * Gen 3 devices have a Mass Storage Device (MSD) mode where a small
122 * disk with registration and driver download information is presented
123 * to the host. To access the full functionality of the device without
124 * proprietary software, MSD mode can be disabled by:
125 * - holding down the 48V button for five seconds while powering on
127 * - using this driver and alsamixer to change the "MSD Mode" setting
128 * to Off and power-cycling the device
131 #include <linux/slab.h>
132 #include <linux/usb.h>
133 #include <linux/moduleparam.h>
135 #include <sound/control.h>
136 #include <sound/tlv.h>
138 #include "usbaudio.h"
142 #include "mixer_scarlett_gen2.h"
144 /* device_setup value to enable */
145 #define SCARLETT2_ENABLE 0x01
147 /* device_setup value to allow turning MSD mode back on */
148 #define SCARLETT2_MSD_ENABLE 0x02
150 /* some gui mixers can't handle negative ctl values */
151 #define SCARLETT2_VOLUME_BIAS 127
153 /* mixer range from -80dB to +6dB in 0.5dB steps */
154 #define SCARLETT2_MIXER_MIN_DB -80
155 #define SCARLETT2_MIXER_BIAS (-SCARLETT2_MIXER_MIN_DB * 2)
156 #define SCARLETT2_MIXER_MAX_DB 6
157 #define SCARLETT2_MIXER_MAX_VALUE \
158 ((SCARLETT2_MIXER_MAX_DB - SCARLETT2_MIXER_MIN_DB) * 2)
159 #define SCARLETT2_MIXER_VALUE_COUNT (SCARLETT2_MIXER_MAX_VALUE + 1)
161 /* map from (dB + 80) * 2 to mixer value
162 * for dB in 0 .. 172: int(8192 * pow(10, ((dB - 160) / 2 / 20)))
164 static const u16 scarlett2_mixer_values[SCARLETT2_MIXER_VALUE_COUNT] = {
165 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
166 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8,
167 9, 9, 10, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
168 23, 24, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 46, 48, 51,
169 54, 57, 61, 65, 68, 73, 77, 81, 86, 91, 97, 103, 109, 115,
170 122, 129, 137, 145, 154, 163, 173, 183, 194, 205, 217, 230,
171 244, 259, 274, 290, 307, 326, 345, 365, 387, 410, 434, 460,
172 487, 516, 547, 579, 614, 650, 689, 730, 773, 819, 867, 919,
173 973, 1031, 1092, 1157, 1225, 1298, 1375, 1456, 1543, 1634,
174 1731, 1833, 1942, 2057, 2179, 2308, 2445, 2590, 2744, 2906,
175 3078, 3261, 3454, 3659, 3876, 4105, 4349, 4606, 4879, 5168,
176 5475, 5799, 6143, 6507, 6892, 7301, 7733, 8192, 8677, 9191,
177 9736, 10313, 10924, 11571, 12257, 12983, 13752, 14567, 15430,
181 /* Maximum number of analogue outputs */
182 #define SCARLETT2_ANALOGUE_MAX 10
184 /* Maximum number of level and pad switches */
185 #define SCARLETT2_LEVEL_SWITCH_MAX 2
186 #define SCARLETT2_PAD_SWITCH_MAX 8
187 #define SCARLETT2_AIR_SWITCH_MAX 8
188 #define SCARLETT2_PHANTOM_SWITCH_MAX 2
190 /* Maximum number of inputs to the mixer */
191 #define SCARLETT2_INPUT_MIX_MAX 25
193 /* Maximum number of outputs from the mixer */
194 #define SCARLETT2_OUTPUT_MIX_MAX 12
196 /* Maximum size of the data in the USB mux assignment message:
197 * 20 inputs, 20 outputs, 25 matrix inputs, 12 spare
199 #define SCARLETT2_MUX_MAX 77
201 /* Maximum number of meters (sum of output port counts) */
202 #define SCARLETT2_MAX_METERS 65
204 /* There are three different sets of configuration parameters across
208 SCARLETT2_CONFIG_SET_NO_MIXER = 0,
209 SCARLETT2_CONFIG_SET_GEN_2 = 1,
210 SCARLETT2_CONFIG_SET_GEN_3 = 2,
211 SCARLETT2_CONFIG_SET_CLARETT = 3,
212 SCARLETT2_CONFIG_SET_COUNT = 4
215 /* Hardware port types:
216 * - None (no input to mux)
224 SCARLETT2_PORT_TYPE_NONE = 0,
225 SCARLETT2_PORT_TYPE_ANALOGUE = 1,
226 SCARLETT2_PORT_TYPE_SPDIF = 2,
227 SCARLETT2_PORT_TYPE_ADAT = 3,
228 SCARLETT2_PORT_TYPE_MIX = 4,
229 SCARLETT2_PORT_TYPE_PCM = 5,
230 SCARLETT2_PORT_TYPE_COUNT = 6,
233 /* I/O count of each port type kept in struct scarlett2_ports */
235 SCARLETT2_PORT_IN = 0,
236 SCARLETT2_PORT_OUT = 1,
237 SCARLETT2_PORT_DIRNS = 2,
240 /* Dim/Mute buttons on the 18i20 */
242 SCARLETT2_BUTTON_MUTE = 0,
243 SCARLETT2_BUTTON_DIM = 1,
244 SCARLETT2_DIM_MUTE_COUNT = 2,
247 static const char *const scarlett2_dim_mute_names[SCARLETT2_DIM_MUTE_COUNT] = {
248 "Mute Playback Switch", "Dim Playback Switch"
251 /* Description of each hardware port type:
252 * - id: hardware ID of this port type
253 * - src_descr: printf format string for mux input selections
254 * - src_num_offset: added to channel number for the fprintf
255 * - dst_descr: printf format string for mixer controls
257 struct scarlett2_port {
259 const char * const src_descr;
261 const char * const dst_descr;
264 static const struct scarlett2_port scarlett2_ports[SCARLETT2_PORT_TYPE_COUNT] = {
265 [SCARLETT2_PORT_TYPE_NONE] = {
269 [SCARLETT2_PORT_TYPE_ANALOGUE] = {
271 .src_descr = "Analogue %d",
273 .dst_descr = "Analogue Output %02d Playback"
275 [SCARLETT2_PORT_TYPE_SPDIF] = {
277 .src_descr = "S/PDIF %d",
279 .dst_descr = "S/PDIF Output %d Playback"
281 [SCARLETT2_PORT_TYPE_ADAT] = {
283 .src_descr = "ADAT %d",
285 .dst_descr = "ADAT Output %d Playback"
287 [SCARLETT2_PORT_TYPE_MIX] = {
289 .src_descr = "Mix %c",
290 .src_num_offset = 'A',
291 .dst_descr = "Mixer Input %02d Capture"
293 [SCARLETT2_PORT_TYPE_PCM] = {
295 .src_descr = "PCM %d",
297 .dst_descr = "PCM %02d Capture"
301 /* Number of mux tables: one for each band of sample rates
302 * (44.1/48kHz, 88.2/96kHz, and 176.4/176kHz)
304 #define SCARLETT2_MUX_TABLES 3
306 /* Maximum number of entries in a mux table */
307 #define SCARLETT2_MAX_MUX_ENTRIES 10
309 /* One entry within mux_assignment defines the port type and range of
310 * ports to add to the set_mux message. The end of the list is marked
313 struct scarlett2_mux_entry {
319 struct scarlett2_device_info {
320 u32 usb_id; /* USB device identifier */
322 /* Gen 3 devices have an internal MSD mode switch that needs
323 * to be disabled in order to access the full functionality of
328 /* which set of configuration parameters the device uses */
331 /* line out hw volume is sw controlled */
334 /* support for main/alt speaker switching */
335 u8 has_speaker_switching;
337 /* support for talkback microphone */
340 /* the number of analogue inputs with a software switchable
341 * level control that can be set to line or instrument
343 u8 level_input_count;
345 /* the first input with a level control (0-based) */
346 u8 level_input_first;
348 /* the number of analogue inputs with a software switchable
353 /* the number of analogue inputs with a software switchable
358 /* the number of phantom (48V) software switchable controls */
361 /* the number of inputs each phantom switch controls */
362 u8 inputs_per_phantom;
364 /* the number of direct monitor options
365 * (0 = none, 1 = mono only, 2 = mono/stereo)
369 /* remap analogue outputs; 18i8 Gen 3 has "line 3/4" connected
370 * internally to the analogue 7/8 outputs
372 u8 line_out_remap_enable;
373 u8 line_out_remap[SCARLETT2_ANALOGUE_MAX];
375 /* additional description for the line out volume controls */
376 const char * const line_out_descrs[SCARLETT2_ANALOGUE_MAX];
378 /* number of sources/destinations of each port type */
379 const int port_count[SCARLETT2_PORT_TYPE_COUNT][SCARLETT2_PORT_DIRNS];
381 /* layout/order of the entries in the set_mux message */
382 struct scarlett2_mux_entry mux_assignment[SCARLETT2_MUX_TABLES]
383 [SCARLETT2_MAX_MUX_ENTRIES];
386 struct scarlett2_data {
387 struct usb_mixer_interface *mixer;
388 struct mutex usb_mutex; /* prevent sending concurrent USB requests */
389 struct mutex data_mutex; /* lock access to this data */
390 struct delayed_work work;
391 const struct scarlett2_device_info *info;
392 __u8 bInterfaceNumber;
393 __u8 bEndpointAddress;
394 __u16 wMaxPacketSize;
401 u8 input_other_updated;
402 u8 monitor_other_updated;
404 u8 speaker_switching_switched;
407 u8 vol[SCARLETT2_ANALOGUE_MAX];
408 u8 vol_sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
409 u8 mute_switch[SCARLETT2_ANALOGUE_MAX];
410 u8 level_switch[SCARLETT2_LEVEL_SWITCH_MAX];
411 u8 pad_switch[SCARLETT2_PAD_SWITCH_MAX];
412 u8 dim_mute[SCARLETT2_DIM_MUTE_COUNT];
413 u8 air_switch[SCARLETT2_AIR_SWITCH_MAX];
414 u8 phantom_switch[SCARLETT2_PHANTOM_SWITCH_MAX];
415 u8 phantom_persistence;
416 u8 direct_monitor_switch;
417 u8 speaker_switching_switch;
419 u8 talkback_map[SCARLETT2_OUTPUT_MIX_MAX];
421 u8 standalone_switch;
422 struct snd_kcontrol *sync_ctl;
423 struct snd_kcontrol *master_vol_ctl;
424 struct snd_kcontrol *vol_ctls[SCARLETT2_ANALOGUE_MAX];
425 struct snd_kcontrol *sw_hw_ctls[SCARLETT2_ANALOGUE_MAX];
426 struct snd_kcontrol *mute_ctls[SCARLETT2_ANALOGUE_MAX];
427 struct snd_kcontrol *dim_mute_ctls[SCARLETT2_DIM_MUTE_COUNT];
428 struct snd_kcontrol *level_ctls[SCARLETT2_LEVEL_SWITCH_MAX];
429 struct snd_kcontrol *pad_ctls[SCARLETT2_PAD_SWITCH_MAX];
430 struct snd_kcontrol *air_ctls[SCARLETT2_AIR_SWITCH_MAX];
431 struct snd_kcontrol *phantom_ctls[SCARLETT2_PHANTOM_SWITCH_MAX];
432 struct snd_kcontrol *mux_ctls[SCARLETT2_MUX_MAX];
433 struct snd_kcontrol *direct_monitor_ctl;
434 struct snd_kcontrol *speaker_switching_ctl;
435 struct snd_kcontrol *talkback_ctl;
436 u8 mux[SCARLETT2_MUX_MAX];
437 u8 mix[SCARLETT2_INPUT_MIX_MAX * SCARLETT2_OUTPUT_MIX_MAX];
440 /*** Model-specific data ***/
442 static const struct scarlett2_device_info s6i6_gen2_info = {
443 .usb_id = USB_ID(0x1235, 0x8203),
445 .config_set = SCARLETT2_CONFIG_SET_GEN_2,
446 .level_input_count = 2,
447 .pad_input_count = 2,
457 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
458 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 4, 4 },
459 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
460 [SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
461 [SCARLETT2_PORT_TYPE_PCM] = { 6, 6 },
464 .mux_assignment = { {
465 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
466 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
467 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
468 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
469 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
472 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
473 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
474 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
475 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
476 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
479 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
480 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
481 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
482 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
483 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
488 static const struct scarlett2_device_info s18i8_gen2_info = {
489 .usb_id = USB_ID(0x1235, 0x8204),
491 .config_set = SCARLETT2_CONFIG_SET_GEN_2,
492 .level_input_count = 2,
493 .pad_input_count = 4,
505 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
506 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 8, 6 },
507 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
508 [SCARLETT2_PORT_TYPE_ADAT] = { 8, 0 },
509 [SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
510 [SCARLETT2_PORT_TYPE_PCM] = { 8, 18 },
513 .mux_assignment = { {
514 { SCARLETT2_PORT_TYPE_PCM, 0, 18 },
515 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
516 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
517 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
518 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
521 { SCARLETT2_PORT_TYPE_PCM, 0, 14 },
522 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
523 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
524 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
525 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
528 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
529 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 6 },
530 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
531 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
532 { SCARLETT2_PORT_TYPE_NONE, 0, 4 },
537 static const struct scarlett2_device_info s18i20_gen2_info = {
538 .usb_id = USB_ID(0x1235, 0x8201),
540 .config_set = SCARLETT2_CONFIG_SET_GEN_2,
541 .line_out_hw_vol = 1,
557 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
558 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 8, 10 },
559 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
560 [SCARLETT2_PORT_TYPE_ADAT] = { 8, 8 },
561 [SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
562 [SCARLETT2_PORT_TYPE_PCM] = { 20, 18 },
565 .mux_assignment = { {
566 { SCARLETT2_PORT_TYPE_PCM, 0, 18 },
567 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
568 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
569 { SCARLETT2_PORT_TYPE_ADAT, 0, 8 },
570 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
571 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
574 { SCARLETT2_PORT_TYPE_PCM, 0, 14 },
575 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
576 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
577 { SCARLETT2_PORT_TYPE_ADAT, 0, 4 },
578 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
579 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
582 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
583 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
584 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
585 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
586 { SCARLETT2_PORT_TYPE_NONE, 0, 6 },
591 static const struct scarlett2_device_info solo_gen3_info = {
592 .usb_id = USB_ID(0x1235, 0x8211),
595 .config_set = SCARLETT2_CONFIG_SET_NO_MIXER,
596 .level_input_count = 1,
597 .level_input_first = 1,
598 .air_input_count = 1,
600 .inputs_per_phantom = 1,
604 static const struct scarlett2_device_info s2i2_gen3_info = {
605 .usb_id = USB_ID(0x1235, 0x8210),
608 .config_set = SCARLETT2_CONFIG_SET_NO_MIXER,
609 .level_input_count = 2,
610 .air_input_count = 2,
612 .inputs_per_phantom = 2,
616 static const struct scarlett2_device_info s4i4_gen3_info = {
617 .usb_id = USB_ID(0x1235, 0x8212),
620 .config_set = SCARLETT2_CONFIG_SET_GEN_3,
621 .level_input_count = 2,
622 .pad_input_count = 2,
623 .air_input_count = 2,
625 .inputs_per_phantom = 2,
635 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
636 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 4, 4 },
637 [SCARLETT2_PORT_TYPE_MIX] = { 6, 8 },
638 [SCARLETT2_PORT_TYPE_PCM] = { 4, 6 },
641 .mux_assignment = { {
642 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
643 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
644 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
645 { SCARLETT2_PORT_TYPE_NONE, 0, 16 },
648 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
649 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
650 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
651 { SCARLETT2_PORT_TYPE_NONE, 0, 16 },
654 { SCARLETT2_PORT_TYPE_PCM, 0, 6 },
655 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
656 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
657 { SCARLETT2_PORT_TYPE_NONE, 0, 16 },
662 static const struct scarlett2_device_info s8i6_gen3_info = {
663 .usb_id = USB_ID(0x1235, 0x8213),
666 .config_set = SCARLETT2_CONFIG_SET_GEN_3,
667 .level_input_count = 2,
668 .pad_input_count = 2,
669 .air_input_count = 2,
671 .inputs_per_phantom = 2,
681 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
682 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 6, 4 },
683 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
684 [SCARLETT2_PORT_TYPE_MIX] = { 8, 8 },
685 [SCARLETT2_PORT_TYPE_PCM] = { 6, 10 },
688 .mux_assignment = { {
689 { SCARLETT2_PORT_TYPE_PCM, 0, 8 },
690 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
691 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
692 { SCARLETT2_PORT_TYPE_PCM, 8, 2 },
693 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
694 { SCARLETT2_PORT_TYPE_NONE, 0, 18 },
697 { SCARLETT2_PORT_TYPE_PCM, 0, 8 },
698 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
699 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
700 { SCARLETT2_PORT_TYPE_PCM, 8, 2 },
701 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
702 { SCARLETT2_PORT_TYPE_NONE, 0, 18 },
705 { SCARLETT2_PORT_TYPE_PCM, 0, 8 },
706 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 4 },
707 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
708 { SCARLETT2_PORT_TYPE_PCM, 8, 2 },
709 { SCARLETT2_PORT_TYPE_MIX, 0, 8 },
710 { SCARLETT2_PORT_TYPE_NONE, 0, 18 },
715 static const struct scarlett2_device_info s18i8_gen3_info = {
716 .usb_id = USB_ID(0x1235, 0x8214),
719 .config_set = SCARLETT2_CONFIG_SET_GEN_3,
720 .line_out_hw_vol = 1,
721 .has_speaker_switching = 1,
722 .level_input_count = 2,
723 .pad_input_count = 4,
724 .air_input_count = 4,
726 .inputs_per_phantom = 2,
728 .line_out_remap_enable = 1,
729 .line_out_remap = { 0, 1, 6, 7, 2, 3, 4, 5 },
743 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
744 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 8, 8 },
745 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
746 [SCARLETT2_PORT_TYPE_ADAT] = { 8, 0 },
747 [SCARLETT2_PORT_TYPE_MIX] = { 10, 20 },
748 [SCARLETT2_PORT_TYPE_PCM] = { 8, 20 },
751 .mux_assignment = { {
752 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
753 { SCARLETT2_PORT_TYPE_PCM, 12, 8 },
754 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 2 },
755 { SCARLETT2_PORT_TYPE_ANALOGUE, 6, 2 },
756 { SCARLETT2_PORT_TYPE_ANALOGUE, 2, 4 },
757 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
758 { SCARLETT2_PORT_TYPE_PCM, 10, 2 },
759 { SCARLETT2_PORT_TYPE_MIX, 0, 20 },
760 { SCARLETT2_PORT_TYPE_NONE, 0, 10 },
763 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
764 { SCARLETT2_PORT_TYPE_PCM, 12, 4 },
765 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 2 },
766 { SCARLETT2_PORT_TYPE_ANALOGUE, 6, 2 },
767 { SCARLETT2_PORT_TYPE_ANALOGUE, 2, 4 },
768 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
769 { SCARLETT2_PORT_TYPE_PCM, 10, 2 },
770 { SCARLETT2_PORT_TYPE_MIX, 0, 20 },
771 { SCARLETT2_PORT_TYPE_NONE, 0, 10 },
774 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
775 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 2 },
776 { SCARLETT2_PORT_TYPE_ANALOGUE, 6, 2 },
777 { SCARLETT2_PORT_TYPE_ANALOGUE, 2, 4 },
778 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
779 { SCARLETT2_PORT_TYPE_MIX, 0, 20 },
780 { SCARLETT2_PORT_TYPE_NONE, 0, 10 },
785 static const struct scarlett2_device_info s18i20_gen3_info = {
786 .usb_id = USB_ID(0x1235, 0x8215),
789 .config_set = SCARLETT2_CONFIG_SET_GEN_3,
790 .line_out_hw_vol = 1,
791 .has_speaker_switching = 1,
793 .level_input_count = 2,
794 .pad_input_count = 8,
795 .air_input_count = 8,
797 .inputs_per_phantom = 4,
813 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
814 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 9, 10 },
815 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
816 [SCARLETT2_PORT_TYPE_ADAT] = { 8, 8 },
817 [SCARLETT2_PORT_TYPE_MIX] = { 12, 25 },
818 [SCARLETT2_PORT_TYPE_PCM] = { 20, 20 },
821 .mux_assignment = { {
822 { SCARLETT2_PORT_TYPE_PCM, 0, 8 },
823 { SCARLETT2_PORT_TYPE_PCM, 10, 10 },
824 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
825 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
826 { SCARLETT2_PORT_TYPE_ADAT, 0, 8 },
827 { SCARLETT2_PORT_TYPE_PCM, 8, 2 },
828 { SCARLETT2_PORT_TYPE_MIX, 0, 25 },
829 { SCARLETT2_PORT_TYPE_NONE, 0, 12 },
832 { SCARLETT2_PORT_TYPE_PCM, 0, 8 },
833 { SCARLETT2_PORT_TYPE_PCM, 10, 8 },
834 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
835 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
836 { SCARLETT2_PORT_TYPE_ADAT, 0, 8 },
837 { SCARLETT2_PORT_TYPE_PCM, 8, 2 },
838 { SCARLETT2_PORT_TYPE_MIX, 0, 25 },
839 { SCARLETT2_PORT_TYPE_NONE, 0, 10 },
842 { SCARLETT2_PORT_TYPE_PCM, 0, 10 },
843 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
844 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
845 { SCARLETT2_PORT_TYPE_NONE, 0, 24 },
850 static const struct scarlett2_device_info clarett_8pre_info = {
851 .usb_id = USB_ID(0x1235, 0x820c),
853 .config_set = SCARLETT2_CONFIG_SET_CLARETT,
854 .line_out_hw_vol = 1,
855 .level_input_count = 2,
856 .air_input_count = 8,
872 [SCARLETT2_PORT_TYPE_NONE] = { 1, 0 },
873 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 8, 10 },
874 [SCARLETT2_PORT_TYPE_SPDIF] = { 2, 2 },
875 [SCARLETT2_PORT_TYPE_ADAT] = { 8, 8 },
876 [SCARLETT2_PORT_TYPE_MIX] = { 10, 18 },
877 [SCARLETT2_PORT_TYPE_PCM] = { 20, 18 },
880 .mux_assignment = { {
881 { SCARLETT2_PORT_TYPE_PCM, 0, 18 },
882 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
883 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
884 { SCARLETT2_PORT_TYPE_ADAT, 0, 8 },
885 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
886 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
889 { SCARLETT2_PORT_TYPE_PCM, 0, 14 },
890 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
891 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
892 { SCARLETT2_PORT_TYPE_ADAT, 0, 4 },
893 { SCARLETT2_PORT_TYPE_MIX, 0, 18 },
894 { SCARLETT2_PORT_TYPE_NONE, 0, 8 },
897 { SCARLETT2_PORT_TYPE_PCM, 0, 12 },
898 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
899 { SCARLETT2_PORT_TYPE_SPDIF, 0, 2 },
900 { SCARLETT2_PORT_TYPE_NONE, 0, 22 },
905 static const struct scarlett2_device_info *scarlett2_devices[] = {
906 /* Supported Gen 2 devices */
911 /* Supported Gen 3 devices */
919 /* Supported Clarett+ devices */
926 /* get the starting port index number for a given port type/direction */
927 static int scarlett2_get_port_start_num(
928 const int port_count[][SCARLETT2_PORT_DIRNS],
929 int direction, int port_type)
933 for (i = 0; i < port_type; i++)
934 num += port_count[i][direction];
939 /*** USB Interactions ***/
941 /* Notifications from the interface */
942 #define SCARLETT2_USB_NOTIFY_SYNC 0x00000008
943 #define SCARLETT2_USB_NOTIFY_DIM_MUTE 0x00200000
944 #define SCARLETT2_USB_NOTIFY_MONITOR 0x00400000
945 #define SCARLETT2_USB_NOTIFY_INPUT_OTHER 0x00800000
946 #define SCARLETT2_USB_NOTIFY_MONITOR_OTHER 0x01000000
948 /* Commands for sending/receiving requests/responses */
949 #define SCARLETT2_USB_CMD_INIT 0
950 #define SCARLETT2_USB_CMD_REQ 2
951 #define SCARLETT2_USB_CMD_RESP 3
953 #define SCARLETT2_USB_INIT_1 0x00000000
954 #define SCARLETT2_USB_INIT_2 0x00000002
955 #define SCARLETT2_USB_GET_METER 0x00001001
956 #define SCARLETT2_USB_GET_MIX 0x00002001
957 #define SCARLETT2_USB_SET_MIX 0x00002002
958 #define SCARLETT2_USB_GET_MUX 0x00003001
959 #define SCARLETT2_USB_SET_MUX 0x00003002
960 #define SCARLETT2_USB_GET_SYNC 0x00006004
961 #define SCARLETT2_USB_GET_DATA 0x00800000
962 #define SCARLETT2_USB_SET_DATA 0x00800001
963 #define SCARLETT2_USB_DATA_CMD 0x00800002
965 #define SCARLETT2_USB_CONFIG_SAVE 6
967 #define SCARLETT2_USB_VOLUME_STATUS_OFFSET 0x31
968 #define SCARLETT2_USB_METER_LEVELS_GET_MAGIC 1
970 /* volume status is read together (matches scarlett2_config_items[1]) */
971 struct scarlett2_usb_volume_status {
972 /* dim/mute buttons */
973 u8 dim_mute[SCARLETT2_DIM_MUTE_COUNT];
977 /* software volume setting */
978 s16 sw_vol[SCARLETT2_ANALOGUE_MAX];
980 /* actual volume of output inc. dim (-18dB) */
981 s16 hw_vol[SCARLETT2_ANALOGUE_MAX];
983 /* internal mute buttons */
984 u8 mute_switch[SCARLETT2_ANALOGUE_MAX];
986 /* sw (0) or hw (1) controlled */
987 u8 sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
991 /* front panel volume knob */
995 /* Configuration parameters that can be read and written */
997 SCARLETT2_CONFIG_DIM_MUTE = 0,
998 SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
999 SCARLETT2_CONFIG_MUTE_SWITCH = 2,
1000 SCARLETT2_CONFIG_SW_HW_SWITCH = 3,
1001 SCARLETT2_CONFIG_LEVEL_SWITCH = 4,
1002 SCARLETT2_CONFIG_PAD_SWITCH = 5,
1003 SCARLETT2_CONFIG_MSD_SWITCH = 6,
1004 SCARLETT2_CONFIG_AIR_SWITCH = 7,
1005 SCARLETT2_CONFIG_STANDALONE_SWITCH = 8,
1006 SCARLETT2_CONFIG_PHANTOM_SWITCH = 9,
1007 SCARLETT2_CONFIG_PHANTOM_PERSISTENCE = 10,
1008 SCARLETT2_CONFIG_DIRECT_MONITOR = 11,
1009 SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH = 12,
1010 SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE = 13,
1011 SCARLETT2_CONFIG_TALKBACK_MAP = 14,
1012 SCARLETT2_CONFIG_COUNT = 15
1015 /* Location, size, and activation command number for the configuration
1016 * parameters. Size is in bits and may be 1, 8, or 16.
1018 struct scarlett2_config {
1024 static const struct scarlett2_config
1025 scarlett2_config_items[SCARLETT2_CONFIG_SET_COUNT]
1026 [SCARLETT2_CONFIG_COUNT] =
1028 /* Devices without a mixer (Gen 3 Solo and 2i2) */
1030 [SCARLETT2_CONFIG_MSD_SWITCH] = {
1031 .offset = 0x04, .size = 8, .activate = 6 },
1033 [SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
1034 .offset = 0x05, .size = 8, .activate = 6 },
1036 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
1037 .offset = 0x06, .size = 8, .activate = 3 },
1039 [SCARLETT2_CONFIG_DIRECT_MONITOR] = {
1040 .offset = 0x07, .size = 8, .activate = 4 },
1042 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
1043 .offset = 0x08, .size = 1, .activate = 7 },
1045 [SCARLETT2_CONFIG_AIR_SWITCH] = {
1046 .offset = 0x09, .size = 1, .activate = 8 },
1048 /* Gen 2 devices: 6i6, 18i8, 18i20 */
1050 [SCARLETT2_CONFIG_DIM_MUTE] = {
1051 .offset = 0x31, .size = 8, .activate = 2 },
1053 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
1054 .offset = 0x34, .size = 16, .activate = 1 },
1056 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
1057 .offset = 0x5c, .size = 8, .activate = 1 },
1059 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
1060 .offset = 0x66, .size = 8, .activate = 3 },
1062 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
1063 .offset = 0x7c, .size = 8, .activate = 7 },
1065 [SCARLETT2_CONFIG_PAD_SWITCH] = {
1066 .offset = 0x84, .size = 8, .activate = 8 },
1068 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
1069 .offset = 0x8d, .size = 8, .activate = 6 },
1071 /* Gen 3 devices: 4i4, 8i6, 18i8, 18i20 */
1073 [SCARLETT2_CONFIG_DIM_MUTE] = {
1074 .offset = 0x31, .size = 8, .activate = 2 },
1076 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
1077 .offset = 0x34, .size = 16, .activate = 1 },
1079 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
1080 .offset = 0x5c, .size = 8, .activate = 1 },
1082 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
1083 .offset = 0x66, .size = 8, .activate = 3 },
1085 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
1086 .offset = 0x7c, .size = 8, .activate = 7 },
1088 [SCARLETT2_CONFIG_PAD_SWITCH] = {
1089 .offset = 0x84, .size = 8, .activate = 8 },
1091 [SCARLETT2_CONFIG_AIR_SWITCH] = {
1092 .offset = 0x8c, .size = 8, .activate = 8 },
1094 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
1095 .offset = 0x95, .size = 8, .activate = 6 },
1097 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
1098 .offset = 0x9c, .size = 1, .activate = 8 },
1100 [SCARLETT2_CONFIG_MSD_SWITCH] = {
1101 .offset = 0x9d, .size = 8, .activate = 6 },
1103 [SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
1104 .offset = 0x9e, .size = 8, .activate = 6 },
1106 [SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH] = {
1107 .offset = 0x9f, .size = 1, .activate = 10 },
1109 [SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE] = {
1110 .offset = 0xa0, .size = 1, .activate = 10 },
1112 [SCARLETT2_CONFIG_TALKBACK_MAP] = {
1113 .offset = 0xb0, .size = 16, .activate = 10 },
1117 [SCARLETT2_CONFIG_DIM_MUTE] = {
1118 .offset = 0x31, .size = 8, .activate = 2 },
1120 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
1121 .offset = 0x34, .size = 16, .activate = 1 },
1123 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
1124 .offset = 0x5c, .size = 8, .activate = 1 },
1126 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
1127 .offset = 0x66, .size = 8, .activate = 3 },
1129 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
1130 .offset = 0x7c, .size = 8, .activate = 7 },
1132 [SCARLETT2_CONFIG_AIR_SWITCH] = {
1133 .offset = 0x95, .size = 8, .activate = 8 },
1135 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
1136 .offset = 0x8d, .size = 8, .activate = 6 },
1139 /* proprietary request/response format */
1140 struct scarlett2_usb_packet {
1149 static void scarlett2_fill_request_header(struct scarlett2_data *private,
1150 struct scarlett2_usb_packet *req,
1151 u32 cmd, u16 req_size)
1153 /* sequence must go up by 1 for each request */
1154 u16 seq = private->scarlett2_seq++;
1156 req->cmd = cpu_to_le32(cmd);
1157 req->size = cpu_to_le16(req_size);
1158 req->seq = cpu_to_le16(seq);
1163 static int scarlett2_usb_tx(struct usb_device *dev, int interface,
1164 void *buf, u16 size)
1166 return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1167 SCARLETT2_USB_CMD_REQ,
1168 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1169 0, interface, buf, size);
1172 static int scarlett2_usb_rx(struct usb_device *dev, int interface,
1173 u32 usb_req, void *buf, u16 size)
1175 return snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
1177 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1178 0, interface, buf, size);
1181 /* Send a proprietary format request to the Scarlett interface */
1182 static int scarlett2_usb(
1183 struct usb_mixer_interface *mixer, u32 cmd,
1184 void *req_data, u16 req_size, void *resp_data, u16 resp_size)
1186 struct scarlett2_data *private = mixer->private_data;
1187 struct usb_device *dev = mixer->chip->dev;
1188 struct scarlett2_usb_packet *req, *resp = NULL;
1189 size_t req_buf_size = struct_size(req, data, req_size);
1190 size_t resp_buf_size = struct_size(resp, data, resp_size);
1193 req = kmalloc(req_buf_size, GFP_KERNEL);
1199 resp = kmalloc(resp_buf_size, GFP_KERNEL);
1205 mutex_lock(&private->usb_mutex);
1207 /* build request message and send it */
1209 scarlett2_fill_request_header(private, req, cmd, req_size);
1212 memcpy(req->data, req_data, req_size);
1214 err = scarlett2_usb_tx(dev, private->bInterfaceNumber,
1217 if (err != req_buf_size) {
1220 "Scarlett Gen 2/3 USB request result cmd %x was %d\n",
1226 /* send a second message to get the response */
1228 err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
1229 SCARLETT2_USB_CMD_RESP,
1230 resp, resp_buf_size);
1232 /* validate the response */
1234 if (err != resp_buf_size) {
1237 "Scarlett Gen 2/3 USB response result cmd %x was %d "
1239 cmd, err, resp_buf_size);
1244 /* cmd/seq/size should match except when initialising
1245 * seq sent = 1, response = 0
1247 if (resp->cmd != req->cmd ||
1248 (resp->seq != req->seq &&
1249 (le16_to_cpu(req->seq) != 1 || resp->seq != 0)) ||
1250 resp_size != le16_to_cpu(resp->size) ||
1255 "Scarlett Gen 2/3 USB invalid response; "
1256 "cmd tx/rx %d/%d seq %d/%d size %d/%d "
1257 "error %d pad %d\n",
1258 le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
1259 le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
1260 resp_size, le16_to_cpu(resp->size),
1261 le32_to_cpu(resp->error),
1262 le32_to_cpu(resp->pad));
1267 if (resp_data && resp_size > 0)
1268 memcpy(resp_data, resp->data, resp_size);
1271 mutex_unlock(&private->usb_mutex);
1278 /* Send a USB message to get data; result placed in *buf */
1279 static int scarlett2_usb_get(
1280 struct usb_mixer_interface *mixer,
1281 int offset, void *buf, int size)
1288 req.offset = cpu_to_le32(offset);
1289 req.size = cpu_to_le32(size);
1290 return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
1291 &req, sizeof(req), buf, size);
1294 /* Send a USB message to get configuration parameters; result placed in *buf */
1295 static int scarlett2_usb_get_config(
1296 struct usb_mixer_interface *mixer,
1297 int config_item_num, int count, void *buf)
1299 struct scarlett2_data *private = mixer->private_data;
1300 const struct scarlett2_device_info *info = private->info;
1301 const struct scarlett2_config *config_item =
1302 &scarlett2_config_items[info->config_set][config_item_num];
1307 /* For byte-sized parameters, retrieve directly into buf */
1308 if (config_item->size >= 8) {
1309 size = config_item->size / 8 * count;
1310 err = scarlett2_usb_get(mixer, config_item->offset, buf, size);
1316 for (i = 0; i < count; i++, buf_16++)
1317 *buf_16 = le16_to_cpu(*(__le16 *)buf_16);
1322 /* For bit-sized parameters, retrieve into value */
1323 err = scarlett2_usb_get(mixer, config_item->offset, &value, 1);
1327 /* then unpack from value into buf[] */
1329 for (i = 0; i < 8 && i < count; i++, value >>= 1)
1330 *buf_8++ = value & 1;
1335 /* Send SCARLETT2_USB_DATA_CMD SCARLETT2_USB_CONFIG_SAVE */
1336 static void scarlett2_config_save(struct usb_mixer_interface *mixer)
1338 __le32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
1340 int err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1344 usb_audio_err(mixer->chip, "config save failed: %d\n", err);
1347 /* Delayed work to save config */
1348 static void scarlett2_config_save_work(struct work_struct *work)
1350 struct scarlett2_data *private =
1351 container_of(work, struct scarlett2_data, work.work);
1353 scarlett2_config_save(private->mixer);
1356 /* Send a USB message to set a SCARLETT2_CONFIG_* parameter */
1357 static int scarlett2_usb_set_config(
1358 struct usb_mixer_interface *mixer,
1359 int config_item_num, int index, int value)
1361 struct scarlett2_data *private = mixer->private_data;
1362 const struct scarlett2_device_info *info = private->info;
1363 const struct scarlett2_config *config_item =
1364 &scarlett2_config_items[info->config_set][config_item_num];
1374 /* Cancel any pending NVRAM save */
1375 cancel_delayed_work_sync(&private->work);
1377 /* Convert config_item->size in bits to size in bytes and
1380 if (config_item->size >= 8) {
1381 size = config_item->size / 8;
1382 offset = config_item->offset + index * size;
1384 /* If updating a bit, retrieve the old value, set/clear the
1385 * bit as needed, and update value
1391 offset = config_item->offset;
1393 err = scarlett2_usb_get(mixer, offset, &tmp, 1);
1398 tmp |= (1 << index);
1400 tmp &= ~(1 << index);
1405 /* Send the configuration parameter data */
1406 req.offset = cpu_to_le32(offset);
1407 req.bytes = cpu_to_le32(size);
1408 req.value = cpu_to_le32(value);
1409 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
1410 &req, sizeof(u32) * 2 + size,
1415 /* Activate the change */
1416 req2 = cpu_to_le32(config_item->activate);
1417 err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1418 &req2, sizeof(req2), NULL, 0);
1422 /* Schedule the change to be written to NVRAM */
1423 if (config_item->activate != SCARLETT2_USB_CONFIG_SAVE)
1424 schedule_delayed_work(&private->work, msecs_to_jiffies(2000));
1429 /* Send a USB message to get sync status; result placed in *sync */
1430 static int scarlett2_usb_get_sync_status(
1431 struct usb_mixer_interface *mixer,
1437 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC,
1438 NULL, 0, &data, sizeof(data));
1446 /* Send a USB message to get volume status; result placed in *buf */
1447 static int scarlett2_usb_get_volume_status(
1448 struct usb_mixer_interface *mixer,
1449 struct scarlett2_usb_volume_status *buf)
1451 return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
1455 /* Send a USB message to get the volumes for all inputs of one mix
1456 * and put the values into private->mix[]
1458 static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer,
1461 struct scarlett2_data *private = mixer->private_data;
1462 const struct scarlett2_device_info *info = private->info;
1465 info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1473 __le16 data[SCARLETT2_INPUT_MIX_MAX];
1475 req.mix_num = cpu_to_le16(mix_num);
1476 req.count = cpu_to_le16(num_mixer_in);
1478 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX,
1480 data, num_mixer_in * sizeof(u16));
1484 for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++) {
1485 u16 mixer_value = le16_to_cpu(data[i]);
1487 for (k = 0; k < SCARLETT2_MIXER_VALUE_COUNT; k++)
1488 if (scarlett2_mixer_values[k] >= mixer_value)
1490 if (k == SCARLETT2_MIXER_VALUE_COUNT)
1491 k = SCARLETT2_MIXER_MAX_VALUE;
1492 private->mix[j] = k;
1498 /* Send a USB message to set the volumes for all inputs of one mix
1499 * (values obtained from private->mix[])
1501 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
1504 struct scarlett2_data *private = mixer->private_data;
1505 const struct scarlett2_device_info *info = private->info;
1509 __le16 data[SCARLETT2_INPUT_MIX_MAX];
1514 info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1516 req.mix_num = cpu_to_le16(mix_num);
1518 for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
1519 req.data[i] = cpu_to_le16(
1520 scarlett2_mixer_values[private->mix[j]]
1523 return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
1524 &req, (num_mixer_in + 1) * sizeof(u16),
1528 /* Convert a port number index (per info->port_count) to a hardware ID */
1529 static u32 scarlett2_mux_src_num_to_id(
1530 const int port_count[][SCARLETT2_PORT_DIRNS], int num)
1535 port_type < SCARLETT2_PORT_TYPE_COUNT;
1537 if (num < port_count[port_type][SCARLETT2_PORT_IN])
1538 return scarlett2_ports[port_type].id | num;
1539 num -= port_count[port_type][SCARLETT2_PORT_IN];
1546 /* Convert a hardware ID to a port number index */
1547 static u32 scarlett2_mux_id_to_num(
1548 const int port_count[][SCARLETT2_PORT_DIRNS], int direction, u32 id)
1554 port_type < SCARLETT2_PORT_TYPE_COUNT;
1556 int base = scarlett2_ports[port_type].id;
1557 int count = port_count[port_type][direction];
1559 if (id >= base && id < base + count)
1560 return port_num + id - base;
1568 /* Convert one mux entry from the interface and load into private->mux[] */
1569 static void scarlett2_usb_populate_mux(struct scarlett2_data *private,
1572 const struct scarlett2_device_info *info = private->info;
1573 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1575 int dst_idx, src_idx;
1577 dst_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_OUT,
1582 if (dst_idx >= private->num_mux_dsts) {
1583 usb_audio_err(private->mixer->chip,
1584 "BUG: scarlett2_mux_id_to_num(%06x, OUT): %d >= %d",
1585 mux_entry, dst_idx, private->num_mux_dsts);
1589 src_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_IN,
1594 if (src_idx >= private->num_mux_srcs) {
1595 usb_audio_err(private->mixer->chip,
1596 "BUG: scarlett2_mux_id_to_num(%06x, IN): %d >= %d",
1597 mux_entry, src_idx, private->num_mux_srcs);
1601 private->mux[dst_idx] = src_idx;
1604 /* Send USB message to get mux inputs and then populate private->mux[] */
1605 static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
1607 struct scarlett2_data *private = mixer->private_data;
1608 int count = private->num_mux_dsts;
1616 __le32 data[SCARLETT2_MUX_MAX];
1618 private->mux_updated = 0;
1621 req.count = cpu_to_le16(count);
1623 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
1625 data, count * sizeof(u32));
1629 for (i = 0; i < count; i++)
1630 scarlett2_usb_populate_mux(private, le32_to_cpu(data[i]));
1635 /* Send USB messages to set mux inputs */
1636 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
1638 struct scarlett2_data *private = mixer->private_data;
1639 const struct scarlett2_device_info *info = private->info;
1640 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1646 __le32 data[SCARLETT2_MUX_MAX];
1651 /* set mux settings for each rate */
1652 for (table = 0; table < SCARLETT2_MUX_TABLES; table++) {
1653 const struct scarlett2_mux_entry *entry;
1655 /* i counts over the output array */
1658 req.num = cpu_to_le16(table);
1660 /* loop through each entry */
1661 for (entry = info->mux_assignment[table];
1665 int port_type = entry->port_type;
1666 int port_idx = entry->start;
1667 int mux_idx = scarlett2_get_port_start_num(port_count,
1668 SCARLETT2_PORT_OUT, port_type) + port_idx;
1669 int dst_id = scarlett2_ports[port_type].id + port_idx;
1673 for (j = 0; j < entry->count; j++)
1678 /* Non-empty mux slots use the lower 12 bits
1679 * for the destination and next 12 bits for
1682 for (j = 0; j < entry->count; j++) {
1683 int src_id = scarlett2_mux_src_num_to_id(
1684 port_count, private->mux[mux_idx++]);
1685 req.data[i++] = cpu_to_le32(dst_id |
1691 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
1692 &req, (i + 1) * sizeof(u32),
1701 /* Send USB message to get meter levels */
1702 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
1703 u16 num_meters, u16 *levels)
1710 u32 resp[SCARLETT2_MAX_METERS];
1714 req.num_meters = cpu_to_le16(num_meters);
1715 req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
1716 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER,
1717 &req, sizeof(req), resp, num_meters * sizeof(u32));
1721 /* copy, convert to u16 */
1722 for (i = 0; i < num_meters; i++)
1723 levels[i] = resp[i];
1728 /*** Control Functions ***/
1730 /* helper function to create a new control */
1731 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
1732 const struct snd_kcontrol_new *ncontrol,
1733 int index, int channels, const char *name,
1734 struct snd_kcontrol **kctl_return)
1736 struct snd_kcontrol *kctl;
1737 struct usb_mixer_elem_info *elem;
1740 elem = kzalloc(sizeof(*elem), GFP_KERNEL);
1744 /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code
1745 * ignores them for resume and other operations.
1746 * Also, the head.id field is set to 0, as we don't use this field.
1748 elem->head.mixer = mixer;
1749 elem->control = index;
1751 elem->channels = channels;
1752 elem->val_type = USB_MIXER_BESPOKEN;
1754 kctl = snd_ctl_new1(ncontrol, elem);
1759 kctl->private_free = snd_usb_mixer_elem_free;
1761 strscpy(kctl->id.name, name, sizeof(kctl->id.name));
1763 err = snd_usb_mixer_add_control(&elem->head, kctl);
1768 *kctl_return = kctl;
1773 /*** Sync Control ***/
1775 /* Update sync control after receiving notification that the status
1778 static int scarlett2_update_sync(struct usb_mixer_interface *mixer)
1780 struct scarlett2_data *private = mixer->private_data;
1782 private->sync_updated = 0;
1783 return scarlett2_usb_get_sync_status(mixer, &private->sync);
1786 static int scarlett2_sync_ctl_info(struct snd_kcontrol *kctl,
1787 struct snd_ctl_elem_info *uinfo)
1789 static const char *texts[2] = {
1790 "Unlocked", "Locked"
1792 return snd_ctl_enum_info(uinfo, 1, 2, texts);
1795 static int scarlett2_sync_ctl_get(struct snd_kcontrol *kctl,
1796 struct snd_ctl_elem_value *ucontrol)
1798 struct usb_mixer_elem_info *elem = kctl->private_data;
1799 struct usb_mixer_interface *mixer = elem->head.mixer;
1800 struct scarlett2_data *private = mixer->private_data;
1803 mutex_lock(&private->data_mutex);
1805 if (private->sync_updated) {
1806 err = scarlett2_update_sync(mixer);
1810 ucontrol->value.enumerated.item[0] = private->sync;
1813 mutex_unlock(&private->data_mutex);
1817 static const struct snd_kcontrol_new scarlett2_sync_ctl = {
1818 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1819 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1821 .info = scarlett2_sync_ctl_info,
1822 .get = scarlett2_sync_ctl_get
1825 static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer)
1827 struct scarlett2_data *private = mixer->private_data;
1829 /* devices without a mixer also don't support reporting sync status */
1830 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
1833 return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl,
1834 0, 1, "Sync Status", &private->sync_ctl);
1837 /*** Analogue Line Out Volume Controls ***/
1839 /* Update hardware volume controls after receiving notification that
1842 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
1844 struct scarlett2_data *private = mixer->private_data;
1845 const struct scarlett2_device_info *info = private->info;
1846 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1847 struct scarlett2_usb_volume_status volume_status;
1849 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
1853 private->vol_updated = 0;
1855 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
1859 private->master_vol = clamp(
1860 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
1861 0, SCARLETT2_VOLUME_BIAS);
1863 if (info->line_out_hw_vol)
1864 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
1865 private->dim_mute[i] = !!volume_status.dim_mute[i];
1867 mute = private->dim_mute[SCARLETT2_BUTTON_MUTE];
1869 for (i = 0; i < num_line_out; i++)
1870 if (private->vol_sw_hw_switch[i]) {
1871 private->vol[i] = private->master_vol;
1872 private->mute_switch[i] = mute;
1878 static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
1879 struct snd_ctl_elem_info *uinfo)
1881 struct usb_mixer_elem_info *elem = kctl->private_data;
1883 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1884 uinfo->count = elem->channels;
1885 uinfo->value.integer.min = 0;
1886 uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
1887 uinfo->value.integer.step = 1;
1891 static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
1892 struct snd_ctl_elem_value *ucontrol)
1894 struct usb_mixer_elem_info *elem = kctl->private_data;
1895 struct usb_mixer_interface *mixer = elem->head.mixer;
1896 struct scarlett2_data *private = mixer->private_data;
1899 mutex_lock(&private->data_mutex);
1901 if (private->vol_updated) {
1902 err = scarlett2_update_volumes(mixer);
1906 ucontrol->value.integer.value[0] = private->master_vol;
1909 mutex_unlock(&private->data_mutex);
1913 static int line_out_remap(struct scarlett2_data *private, int index)
1915 const struct scarlett2_device_info *info = private->info;
1916 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1917 int line_out_count =
1918 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
1920 if (!info->line_out_remap_enable)
1923 if (index >= line_out_count)
1926 return info->line_out_remap[index];
1929 static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
1930 struct snd_ctl_elem_value *ucontrol)
1932 struct usb_mixer_elem_info *elem = kctl->private_data;
1933 struct usb_mixer_interface *mixer = elem->head.mixer;
1934 struct scarlett2_data *private = mixer->private_data;
1935 int index = line_out_remap(private, elem->control);
1938 mutex_lock(&private->data_mutex);
1940 if (private->vol_updated) {
1941 err = scarlett2_update_volumes(mixer);
1945 ucontrol->value.integer.value[0] = private->vol[index];
1948 mutex_unlock(&private->data_mutex);
1952 static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
1953 struct snd_ctl_elem_value *ucontrol)
1955 struct usb_mixer_elem_info *elem = kctl->private_data;
1956 struct usb_mixer_interface *mixer = elem->head.mixer;
1957 struct scarlett2_data *private = mixer->private_data;
1958 int index = line_out_remap(private, elem->control);
1959 int oval, val, err = 0;
1961 mutex_lock(&private->data_mutex);
1963 oval = private->vol[index];
1964 val = ucontrol->value.integer.value[0];
1969 private->vol[index] = val;
1970 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1971 index, val - SCARLETT2_VOLUME_BIAS);
1976 mutex_unlock(&private->data_mutex);
1980 static const DECLARE_TLV_DB_MINMAX(
1981 db_scale_scarlett2_gain, -SCARLETT2_VOLUME_BIAS * 100, 0
1984 static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
1985 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1986 .access = SNDRV_CTL_ELEM_ACCESS_READ |
1987 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1989 .info = scarlett2_volume_ctl_info,
1990 .get = scarlett2_master_volume_ctl_get,
1991 .private_value = 0, /* max value */
1992 .tlv = { .p = db_scale_scarlett2_gain }
1995 static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
1996 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1997 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1998 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
2000 .info = scarlett2_volume_ctl_info,
2001 .get = scarlett2_volume_ctl_get,
2002 .put = scarlett2_volume_ctl_put,
2003 .private_value = 0, /* max value */
2004 .tlv = { .p = db_scale_scarlett2_gain }
2007 /*** Mute Switch Controls ***/
2009 static int scarlett2_mute_ctl_get(struct snd_kcontrol *kctl,
2010 struct snd_ctl_elem_value *ucontrol)
2012 struct usb_mixer_elem_info *elem = kctl->private_data;
2013 struct usb_mixer_interface *mixer = elem->head.mixer;
2014 struct scarlett2_data *private = mixer->private_data;
2015 int index = line_out_remap(private, elem->control);
2018 mutex_lock(&private->data_mutex);
2020 if (private->vol_updated) {
2021 err = scarlett2_update_volumes(mixer);
2025 ucontrol->value.integer.value[0] = private->mute_switch[index];
2028 mutex_unlock(&private->data_mutex);
2032 static int scarlett2_mute_ctl_put(struct snd_kcontrol *kctl,
2033 struct snd_ctl_elem_value *ucontrol)
2035 struct usb_mixer_elem_info *elem = kctl->private_data;
2036 struct usb_mixer_interface *mixer = elem->head.mixer;
2037 struct scarlett2_data *private = mixer->private_data;
2038 int index = line_out_remap(private, elem->control);
2039 int oval, val, err = 0;
2041 mutex_lock(&private->data_mutex);
2043 oval = private->mute_switch[index];
2044 val = !!ucontrol->value.integer.value[0];
2049 private->mute_switch[index] = val;
2051 /* Send mute change to the device */
2052 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2058 mutex_unlock(&private->data_mutex);
2062 static const struct snd_kcontrol_new scarlett2_mute_ctl = {
2063 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2065 .info = snd_ctl_boolean_mono_info,
2066 .get = scarlett2_mute_ctl_get,
2067 .put = scarlett2_mute_ctl_put,
2070 /*** HW/SW Volume Switch Controls ***/
2072 static void scarlett2_sw_hw_ctl_ro(struct scarlett2_data *private, int index)
2074 private->sw_hw_ctls[index]->vd[0].access &=
2075 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2078 static void scarlett2_sw_hw_ctl_rw(struct scarlett2_data *private, int index)
2080 private->sw_hw_ctls[index]->vd[0].access |=
2081 SNDRV_CTL_ELEM_ACCESS_WRITE;
2084 static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
2085 struct snd_ctl_elem_info *uinfo)
2087 static const char *const values[2] = {
2091 return snd_ctl_enum_info(uinfo, 1, 2, values);
2094 static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
2095 struct snd_ctl_elem_value *ucontrol)
2097 struct usb_mixer_elem_info *elem = kctl->private_data;
2098 struct scarlett2_data *private = elem->head.mixer->private_data;
2099 int index = line_out_remap(private, elem->control);
2101 ucontrol->value.enumerated.item[0] = private->vol_sw_hw_switch[index];
2105 static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer,
2106 int index, int value)
2108 struct scarlett2_data *private = mixer->private_data;
2109 struct snd_card *card = mixer->chip->card;
2111 /* Set/Clear write bits */
2113 private->vol_ctls[index]->vd[0].access |=
2114 SNDRV_CTL_ELEM_ACCESS_WRITE;
2115 private->mute_ctls[index]->vd[0].access |=
2116 SNDRV_CTL_ELEM_ACCESS_WRITE;
2118 private->vol_ctls[index]->vd[0].access &=
2119 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2120 private->mute_ctls[index]->vd[0].access &=
2121 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2124 /* Notify of write bit and possible value change */
2125 snd_ctl_notify(card,
2126 SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
2127 &private->vol_ctls[index]->id);
2128 snd_ctl_notify(card,
2129 SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
2130 &private->mute_ctls[index]->id);
2133 static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer,
2134 int ctl_index, int val)
2136 struct scarlett2_data *private = mixer->private_data;
2137 int index = line_out_remap(private, ctl_index);
2140 private->vol_sw_hw_switch[index] = val;
2142 /* Change access mode to RO (hardware controlled volume)
2143 * or RW (software controlled volume)
2145 scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val);
2147 /* Reset volume/mute to master volume/mute */
2148 private->vol[index] = private->master_vol;
2149 private->mute_switch[index] = private->dim_mute[SCARLETT2_BUTTON_MUTE];
2151 /* Set SW volume to current HW volume */
2152 err = scarlett2_usb_set_config(
2153 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
2154 index, private->master_vol - SCARLETT2_VOLUME_BIAS);
2158 /* Set SW mute to current HW mute */
2159 err = scarlett2_usb_set_config(
2160 mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2161 index, private->dim_mute[SCARLETT2_BUTTON_MUTE]);
2165 /* Send SW/HW switch change to the device */
2166 return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
2170 static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
2171 struct snd_ctl_elem_value *ucontrol)
2173 struct usb_mixer_elem_info *elem = kctl->private_data;
2174 struct usb_mixer_interface *mixer = elem->head.mixer;
2175 struct scarlett2_data *private = mixer->private_data;
2176 int ctl_index = elem->control;
2177 int index = line_out_remap(private, ctl_index);
2178 int oval, val, err = 0;
2180 mutex_lock(&private->data_mutex);
2182 oval = private->vol_sw_hw_switch[index];
2183 val = !!ucontrol->value.enumerated.item[0];
2188 err = scarlett2_sw_hw_change(mixer, ctl_index, val);
2193 mutex_unlock(&private->data_mutex);
2197 static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
2198 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2200 .info = scarlett2_sw_hw_enum_ctl_info,
2201 .get = scarlett2_sw_hw_enum_ctl_get,
2202 .put = scarlett2_sw_hw_enum_ctl_put,
2205 /*** Line Level/Instrument Level Switch Controls ***/
2207 static int scarlett2_update_input_other(struct usb_mixer_interface *mixer)
2209 struct scarlett2_data *private = mixer->private_data;
2210 const struct scarlett2_device_info *info = private->info;
2212 private->input_other_updated = 0;
2214 if (info->level_input_count) {
2215 int err = scarlett2_usb_get_config(
2216 mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2217 info->level_input_count + info->level_input_first,
2218 private->level_switch);
2223 if (info->pad_input_count) {
2224 int err = scarlett2_usb_get_config(
2225 mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2226 info->pad_input_count, private->pad_switch);
2231 if (info->air_input_count) {
2232 int err = scarlett2_usb_get_config(
2233 mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2234 info->air_input_count, private->air_switch);
2239 if (info->phantom_count) {
2240 int err = scarlett2_usb_get_config(
2241 mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2242 info->phantom_count, private->phantom_switch);
2246 err = scarlett2_usb_get_config(
2247 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
2248 1, &private->phantom_persistence);
2256 static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
2257 struct snd_ctl_elem_info *uinfo)
2259 static const char *const values[2] = {
2263 return snd_ctl_enum_info(uinfo, 1, 2, values);
2266 static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
2267 struct snd_ctl_elem_value *ucontrol)
2269 struct usb_mixer_elem_info *elem = kctl->private_data;
2270 struct usb_mixer_interface *mixer = elem->head.mixer;
2271 struct scarlett2_data *private = mixer->private_data;
2272 const struct scarlett2_device_info *info = private->info;
2274 int index = elem->control + info->level_input_first;
2277 mutex_lock(&private->data_mutex);
2279 if (private->input_other_updated) {
2280 err = scarlett2_update_input_other(mixer);
2284 ucontrol->value.enumerated.item[0] = private->level_switch[index];
2287 mutex_unlock(&private->data_mutex);
2291 static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
2292 struct snd_ctl_elem_value *ucontrol)
2294 struct usb_mixer_elem_info *elem = kctl->private_data;
2295 struct usb_mixer_interface *mixer = elem->head.mixer;
2296 struct scarlett2_data *private = mixer->private_data;
2297 const struct scarlett2_device_info *info = private->info;
2299 int index = elem->control + info->level_input_first;
2300 int oval, val, err = 0;
2302 mutex_lock(&private->data_mutex);
2304 oval = private->level_switch[index];
2305 val = !!ucontrol->value.enumerated.item[0];
2310 private->level_switch[index] = val;
2312 /* Send switch change to the device */
2313 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2319 mutex_unlock(&private->data_mutex);
2323 static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
2324 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2326 .info = scarlett2_level_enum_ctl_info,
2327 .get = scarlett2_level_enum_ctl_get,
2328 .put = scarlett2_level_enum_ctl_put,
2331 /*** Pad Switch Controls ***/
2333 static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
2334 struct snd_ctl_elem_value *ucontrol)
2336 struct usb_mixer_elem_info *elem = kctl->private_data;
2337 struct usb_mixer_interface *mixer = elem->head.mixer;
2338 struct scarlett2_data *private = mixer->private_data;
2341 mutex_lock(&private->data_mutex);
2343 if (private->input_other_updated) {
2344 err = scarlett2_update_input_other(mixer);
2348 ucontrol->value.integer.value[0] =
2349 private->pad_switch[elem->control];
2352 mutex_unlock(&private->data_mutex);
2356 static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
2357 struct snd_ctl_elem_value *ucontrol)
2359 struct usb_mixer_elem_info *elem = kctl->private_data;
2360 struct usb_mixer_interface *mixer = elem->head.mixer;
2361 struct scarlett2_data *private = mixer->private_data;
2363 int index = elem->control;
2364 int oval, val, err = 0;
2366 mutex_lock(&private->data_mutex);
2368 oval = private->pad_switch[index];
2369 val = !!ucontrol->value.integer.value[0];
2374 private->pad_switch[index] = val;
2376 /* Send switch change to the device */
2377 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2383 mutex_unlock(&private->data_mutex);
2387 static const struct snd_kcontrol_new scarlett2_pad_ctl = {
2388 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2390 .info = snd_ctl_boolean_mono_info,
2391 .get = scarlett2_pad_ctl_get,
2392 .put = scarlett2_pad_ctl_put,
2395 /*** Air Switch Controls ***/
2397 static int scarlett2_air_ctl_get(struct snd_kcontrol *kctl,
2398 struct snd_ctl_elem_value *ucontrol)
2400 struct usb_mixer_elem_info *elem = kctl->private_data;
2401 struct usb_mixer_interface *mixer = elem->head.mixer;
2402 struct scarlett2_data *private = mixer->private_data;
2405 mutex_lock(&private->data_mutex);
2407 if (private->input_other_updated) {
2408 err = scarlett2_update_input_other(mixer);
2412 ucontrol->value.integer.value[0] = private->air_switch[elem->control];
2415 mutex_unlock(&private->data_mutex);
2419 static int scarlett2_air_ctl_put(struct snd_kcontrol *kctl,
2420 struct snd_ctl_elem_value *ucontrol)
2422 struct usb_mixer_elem_info *elem = kctl->private_data;
2423 struct usb_mixer_interface *mixer = elem->head.mixer;
2424 struct scarlett2_data *private = mixer->private_data;
2426 int index = elem->control;
2427 int oval, val, err = 0;
2429 mutex_lock(&private->data_mutex);
2431 oval = private->air_switch[index];
2432 val = !!ucontrol->value.integer.value[0];
2437 private->air_switch[index] = val;
2439 /* Send switch change to the device */
2440 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2446 mutex_unlock(&private->data_mutex);
2450 static const struct snd_kcontrol_new scarlett2_air_ctl = {
2451 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2453 .info = snd_ctl_boolean_mono_info,
2454 .get = scarlett2_air_ctl_get,
2455 .put = scarlett2_air_ctl_put,
2458 /*** Phantom Switch Controls ***/
2460 static int scarlett2_phantom_ctl_get(struct snd_kcontrol *kctl,
2461 struct snd_ctl_elem_value *ucontrol)
2463 struct usb_mixer_elem_info *elem = kctl->private_data;
2464 struct usb_mixer_interface *mixer = elem->head.mixer;
2465 struct scarlett2_data *private = mixer->private_data;
2468 mutex_lock(&private->data_mutex);
2470 if (private->input_other_updated) {
2471 err = scarlett2_update_input_other(mixer);
2475 ucontrol->value.integer.value[0] =
2476 private->phantom_switch[elem->control];
2479 mutex_unlock(&private->data_mutex);
2483 static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
2484 struct snd_ctl_elem_value *ucontrol)
2486 struct usb_mixer_elem_info *elem = kctl->private_data;
2487 struct usb_mixer_interface *mixer = elem->head.mixer;
2488 struct scarlett2_data *private = mixer->private_data;
2490 int index = elem->control;
2491 int oval, val, err = 0;
2493 mutex_lock(&private->data_mutex);
2495 oval = private->phantom_switch[index];
2496 val = !!ucontrol->value.integer.value[0];
2501 private->phantom_switch[index] = val;
2503 /* Send switch change to the device */
2504 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2510 mutex_unlock(&private->data_mutex);
2514 static const struct snd_kcontrol_new scarlett2_phantom_ctl = {
2515 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2517 .info = snd_ctl_boolean_mono_info,
2518 .get = scarlett2_phantom_ctl_get,
2519 .put = scarlett2_phantom_ctl_put,
2522 /*** Phantom Persistence Control ***/
2524 static int scarlett2_phantom_persistence_ctl_get(
2525 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2527 struct usb_mixer_elem_info *elem = kctl->private_data;
2528 struct scarlett2_data *private = elem->head.mixer->private_data;
2530 ucontrol->value.integer.value[0] = private->phantom_persistence;
2534 static int scarlett2_phantom_persistence_ctl_put(
2535 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2537 struct usb_mixer_elem_info *elem = kctl->private_data;
2538 struct usb_mixer_interface *mixer = elem->head.mixer;
2539 struct scarlett2_data *private = mixer->private_data;
2541 int index = elem->control;
2542 int oval, val, err = 0;
2544 mutex_lock(&private->data_mutex);
2546 oval = private->phantom_persistence;
2547 val = !!ucontrol->value.integer.value[0];
2552 private->phantom_persistence = val;
2554 /* Send switch change to the device */
2555 err = scarlett2_usb_set_config(
2556 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val);
2561 mutex_unlock(&private->data_mutex);
2565 static const struct snd_kcontrol_new scarlett2_phantom_persistence_ctl = {
2566 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2568 .info = snd_ctl_boolean_mono_info,
2569 .get = scarlett2_phantom_persistence_ctl_get,
2570 .put = scarlett2_phantom_persistence_ctl_put,
2573 /*** Direct Monitor Control ***/
2575 static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
2577 struct scarlett2_data *private = mixer->private_data;
2578 const struct scarlett2_device_info *info = private->info;
2581 /* monitor_other_enable[0] enables speaker switching
2582 * monitor_other_enable[1] enables talkback
2584 u8 monitor_other_enable[2];
2586 /* monitor_other_switch[0] activates the alternate speakers
2587 * monitor_other_switch[1] activates talkback
2589 u8 monitor_other_switch[2];
2591 private->monitor_other_updated = 0;
2593 if (info->direct_monitor)
2594 return scarlett2_usb_get_config(
2595 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR,
2596 1, &private->direct_monitor_switch);
2598 /* if it doesn't do speaker switching then it also doesn't do
2601 if (!info->has_speaker_switching)
2604 err = scarlett2_usb_get_config(
2605 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2606 2, monitor_other_enable);
2610 err = scarlett2_usb_get_config(
2611 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2612 2, monitor_other_switch);
2616 if (!monitor_other_enable[0])
2617 private->speaker_switching_switch = 0;
2619 private->speaker_switching_switch = monitor_other_switch[0] + 1;
2621 if (info->has_talkback) {
2622 const int (*port_count)[SCARLETT2_PORT_DIRNS] =
2625 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2629 if (!monitor_other_enable[1])
2630 private->talkback_switch = 0;
2632 private->talkback_switch = monitor_other_switch[1] + 1;
2634 err = scarlett2_usb_get_config(mixer,
2635 SCARLETT2_CONFIG_TALKBACK_MAP,
2639 for (i = 0; i < num_mixes; i++, bitmap >>= 1)
2640 private->talkback_map[i] = bitmap & 1;
2646 static int scarlett2_direct_monitor_ctl_get(
2647 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2649 struct usb_mixer_elem_info *elem = kctl->private_data;
2650 struct usb_mixer_interface *mixer = elem->head.mixer;
2651 struct scarlett2_data *private = elem->head.mixer->private_data;
2654 mutex_lock(&private->data_mutex);
2656 if (private->monitor_other_updated) {
2657 err = scarlett2_update_monitor_other(mixer);
2661 ucontrol->value.enumerated.item[0] = private->direct_monitor_switch;
2664 mutex_unlock(&private->data_mutex);
2668 static int scarlett2_direct_monitor_ctl_put(
2669 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2671 struct usb_mixer_elem_info *elem = kctl->private_data;
2672 struct usb_mixer_interface *mixer = elem->head.mixer;
2673 struct scarlett2_data *private = mixer->private_data;
2675 int index = elem->control;
2676 int oval, val, err = 0;
2678 mutex_lock(&private->data_mutex);
2680 oval = private->direct_monitor_switch;
2681 val = min(ucontrol->value.enumerated.item[0], 2U);
2686 private->direct_monitor_switch = val;
2688 /* Send switch change to the device */
2689 err = scarlett2_usb_set_config(
2690 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val);
2695 mutex_unlock(&private->data_mutex);
2699 static int scarlett2_direct_monitor_stereo_enum_ctl_info(
2700 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2702 static const char *const values[3] = {
2703 "Off", "Mono", "Stereo"
2706 return snd_ctl_enum_info(uinfo, 1, 3, values);
2709 /* Direct Monitor for Solo is mono-only and only needs a boolean control
2710 * Direct Monitor for 2i2 is selectable between Off/Mono/Stereo
2712 static const struct snd_kcontrol_new scarlett2_direct_monitor_ctl[2] = {
2714 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2716 .info = snd_ctl_boolean_mono_info,
2717 .get = scarlett2_direct_monitor_ctl_get,
2718 .put = scarlett2_direct_monitor_ctl_put,
2721 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2723 .info = scarlett2_direct_monitor_stereo_enum_ctl_info,
2724 .get = scarlett2_direct_monitor_ctl_get,
2725 .put = scarlett2_direct_monitor_ctl_put,
2729 static int scarlett2_add_direct_monitor_ctl(struct usb_mixer_interface *mixer)
2731 struct scarlett2_data *private = mixer->private_data;
2732 const struct scarlett2_device_info *info = private->info;
2735 if (!info->direct_monitor)
2738 s = info->direct_monitor == 1
2739 ? "Direct Monitor Playback Switch"
2740 : "Direct Monitor Playback Enum";
2742 return scarlett2_add_new_ctl(
2743 mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1],
2744 0, 1, s, &private->direct_monitor_ctl);
2747 /*** Speaker Switching Control ***/
2749 static int scarlett2_speaker_switch_enum_ctl_info(
2750 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2752 static const char *const values[3] = {
2753 "Off", "Main", "Alt"
2756 return snd_ctl_enum_info(uinfo, 1, 3, values);
2759 static int scarlett2_speaker_switch_enum_ctl_get(
2760 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2762 struct usb_mixer_elem_info *elem = kctl->private_data;
2763 struct usb_mixer_interface *mixer = elem->head.mixer;
2764 struct scarlett2_data *private = mixer->private_data;
2767 mutex_lock(&private->data_mutex);
2769 if (private->monitor_other_updated) {
2770 err = scarlett2_update_monitor_other(mixer);
2774 ucontrol->value.enumerated.item[0] = private->speaker_switching_switch;
2777 mutex_unlock(&private->data_mutex);
2781 /* when speaker switching gets enabled, switch the main/alt speakers
2782 * to HW volume and disable those controls
2784 static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer)
2786 struct snd_card *card = mixer->chip->card;
2787 struct scarlett2_data *private = mixer->private_data;
2790 for (i = 0; i < 4; i++) {
2791 int index = line_out_remap(private, i);
2793 /* switch the main/alt speakers to HW volume */
2794 if (!private->vol_sw_hw_switch[index]) {
2795 err = scarlett2_sw_hw_change(private->mixer, i, 1);
2800 /* disable the line out SW/HW switch */
2801 scarlett2_sw_hw_ctl_ro(private, i);
2802 snd_ctl_notify(card,
2803 SNDRV_CTL_EVENT_MASK_VALUE |
2804 SNDRV_CTL_EVENT_MASK_INFO,
2805 &private->sw_hw_ctls[i]->id);
2808 /* when the next monitor-other notify comes in, update the mux
2811 private->speaker_switching_switched = 1;
2816 /* when speaker switching gets disabled, reenable the hw/sw controls
2817 * and invalidate the routing
2819 static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer)
2821 struct snd_card *card = mixer->chip->card;
2822 struct scarlett2_data *private = mixer->private_data;
2825 /* enable the line out SW/HW switch */
2826 for (i = 0; i < 4; i++) {
2827 scarlett2_sw_hw_ctl_rw(private, i);
2828 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2829 &private->sw_hw_ctls[i]->id);
2832 /* when the next monitor-other notify comes in, update the mux
2835 private->speaker_switching_switched = 1;
2838 static int scarlett2_speaker_switch_enum_ctl_put(
2839 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2841 struct usb_mixer_elem_info *elem = kctl->private_data;
2842 struct usb_mixer_interface *mixer = elem->head.mixer;
2843 struct scarlett2_data *private = mixer->private_data;
2845 int oval, val, err = 0;
2847 mutex_lock(&private->data_mutex);
2849 oval = private->speaker_switching_switch;
2850 val = min(ucontrol->value.enumerated.item[0], 2U);
2855 private->speaker_switching_switch = val;
2857 /* enable/disable speaker switching */
2858 err = scarlett2_usb_set_config(
2859 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2864 /* if speaker switching is enabled, select main or alt */
2865 err = scarlett2_usb_set_config(
2866 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2871 /* update controls if speaker switching gets enabled or disabled */
2873 err = scarlett2_speaker_switch_enable(mixer);
2874 else if (oval && !val)
2875 scarlett2_speaker_switch_disable(mixer);
2881 mutex_unlock(&private->data_mutex);
2885 static const struct snd_kcontrol_new scarlett2_speaker_switch_enum_ctl = {
2886 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2888 .info = scarlett2_speaker_switch_enum_ctl_info,
2889 .get = scarlett2_speaker_switch_enum_ctl_get,
2890 .put = scarlett2_speaker_switch_enum_ctl_put,
2893 static int scarlett2_add_speaker_switch_ctl(
2894 struct usb_mixer_interface *mixer)
2896 struct scarlett2_data *private = mixer->private_data;
2897 const struct scarlett2_device_info *info = private->info;
2899 if (!info->has_speaker_switching)
2902 return scarlett2_add_new_ctl(
2903 mixer, &scarlett2_speaker_switch_enum_ctl,
2904 0, 1, "Speaker Switching Playback Enum",
2905 &private->speaker_switching_ctl);
2908 /*** Talkback and Talkback Map Controls ***/
2910 static int scarlett2_talkback_enum_ctl_info(
2911 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2913 static const char *const values[3] = {
2914 "Disabled", "Off", "On"
2917 return snd_ctl_enum_info(uinfo, 1, 3, values);
2920 static int scarlett2_talkback_enum_ctl_get(
2921 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2923 struct usb_mixer_elem_info *elem = kctl->private_data;
2924 struct usb_mixer_interface *mixer = elem->head.mixer;
2925 struct scarlett2_data *private = mixer->private_data;
2928 mutex_lock(&private->data_mutex);
2930 if (private->monitor_other_updated) {
2931 err = scarlett2_update_monitor_other(mixer);
2935 ucontrol->value.enumerated.item[0] = private->talkback_switch;
2938 mutex_unlock(&private->data_mutex);
2942 static int scarlett2_talkback_enum_ctl_put(
2943 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2945 struct usb_mixer_elem_info *elem = kctl->private_data;
2946 struct usb_mixer_interface *mixer = elem->head.mixer;
2947 struct scarlett2_data *private = mixer->private_data;
2949 int oval, val, err = 0;
2951 mutex_lock(&private->data_mutex);
2953 oval = private->talkback_switch;
2954 val = min(ucontrol->value.enumerated.item[0], 2U);
2959 private->talkback_switch = val;
2961 /* enable/disable talkback */
2962 err = scarlett2_usb_set_config(
2963 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2968 /* if talkback is enabled, select main or alt */
2969 err = scarlett2_usb_set_config(
2970 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2976 mutex_unlock(&private->data_mutex);
2980 static const struct snd_kcontrol_new scarlett2_talkback_enum_ctl = {
2981 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2983 .info = scarlett2_talkback_enum_ctl_info,
2984 .get = scarlett2_talkback_enum_ctl_get,
2985 .put = scarlett2_talkback_enum_ctl_put,
2988 static int scarlett2_talkback_map_ctl_get(
2989 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2991 struct usb_mixer_elem_info *elem = kctl->private_data;
2992 struct usb_mixer_interface *mixer = elem->head.mixer;
2993 struct scarlett2_data *private = mixer->private_data;
2994 int index = elem->control;
2996 ucontrol->value.integer.value[0] = private->talkback_map[index];
3001 static int scarlett2_talkback_map_ctl_put(
3002 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3004 struct usb_mixer_elem_info *elem = kctl->private_data;
3005 struct usb_mixer_interface *mixer = elem->head.mixer;
3006 struct scarlett2_data *private = mixer->private_data;
3007 const int (*port_count)[SCARLETT2_PORT_DIRNS] =
3008 private->info->port_count;
3009 int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3011 int index = elem->control;
3012 int oval, val, err = 0, i;
3015 mutex_lock(&private->data_mutex);
3017 oval = private->talkback_map[index];
3018 val = !!ucontrol->value.integer.value[0];
3023 private->talkback_map[index] = val;
3025 for (i = 0; i < num_mixes; i++)
3026 bitmap |= private->talkback_map[i] << i;
3028 /* Send updated bitmap to the device */
3029 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP,
3035 mutex_unlock(&private->data_mutex);
3039 static const struct snd_kcontrol_new scarlett2_talkback_map_ctl = {
3040 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3042 .info = snd_ctl_boolean_mono_info,
3043 .get = scarlett2_talkback_map_ctl_get,
3044 .put = scarlett2_talkback_map_ctl_put,
3047 static int scarlett2_add_talkback_ctls(
3048 struct usb_mixer_interface *mixer)
3050 struct scarlett2_data *private = mixer->private_data;
3051 const struct scarlett2_device_info *info = private->info;
3052 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3053 int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3055 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3057 if (!info->has_talkback)
3060 err = scarlett2_add_new_ctl(
3061 mixer, &scarlett2_talkback_enum_ctl,
3062 0, 1, "Talkback Playback Enum",
3063 &private->talkback_ctl);
3067 for (i = 0; i < num_mixes; i++) {
3068 snprintf(s, sizeof(s),
3069 "Talkback Mix %c Playback Switch", i + 'A');
3070 err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl,
3079 /*** Dim/Mute Controls ***/
3081 static int scarlett2_dim_mute_ctl_get(struct snd_kcontrol *kctl,
3082 struct snd_ctl_elem_value *ucontrol)
3084 struct usb_mixer_elem_info *elem = kctl->private_data;
3085 struct usb_mixer_interface *mixer = elem->head.mixer;
3086 struct scarlett2_data *private = mixer->private_data;
3089 mutex_lock(&private->data_mutex);
3091 if (private->vol_updated) {
3092 err = scarlett2_update_volumes(mixer);
3096 ucontrol->value.integer.value[0] = private->dim_mute[elem->control];
3099 mutex_unlock(&private->data_mutex);
3103 static int scarlett2_dim_mute_ctl_put(struct snd_kcontrol *kctl,
3104 struct snd_ctl_elem_value *ucontrol)
3106 struct usb_mixer_elem_info *elem = kctl->private_data;
3107 struct usb_mixer_interface *mixer = elem->head.mixer;
3108 struct scarlett2_data *private = mixer->private_data;
3109 const struct scarlett2_device_info *info = private->info;
3110 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3112 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3114 int index = elem->control;
3115 int oval, val, err = 0, i;
3117 mutex_lock(&private->data_mutex);
3119 oval = private->dim_mute[index];
3120 val = !!ucontrol->value.integer.value[0];
3125 private->dim_mute[index] = val;
3127 /* Send switch change to the device */
3128 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE,
3133 if (index == SCARLETT2_BUTTON_MUTE)
3134 for (i = 0; i < num_line_out; i++) {
3135 int line_index = line_out_remap(private, i);
3137 if (private->vol_sw_hw_switch[line_index]) {
3138 private->mute_switch[line_index] = val;
3139 snd_ctl_notify(mixer->chip->card,
3140 SNDRV_CTL_EVENT_MASK_VALUE,
3141 &private->mute_ctls[i]->id);
3146 mutex_unlock(&private->data_mutex);
3150 static const struct snd_kcontrol_new scarlett2_dim_mute_ctl = {
3151 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3153 .info = snd_ctl_boolean_mono_info,
3154 .get = scarlett2_dim_mute_ctl_get,
3155 .put = scarlett2_dim_mute_ctl_put
3158 /*** Create the analogue output controls ***/
3160 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
3162 struct scarlett2_data *private = mixer->private_data;
3163 const struct scarlett2_device_info *info = private->info;
3164 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3166 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3168 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3170 /* Add R/O HW volume control */
3171 if (info->line_out_hw_vol) {
3172 snprintf(s, sizeof(s), "Master HW Playback Volume");
3173 err = scarlett2_add_new_ctl(mixer,
3174 &scarlett2_master_volume_ctl,
3175 0, 1, s, &private->master_vol_ctl);
3180 /* Add volume controls */
3181 for (i = 0; i < num_line_out; i++) {
3182 int index = line_out_remap(private, i);
3185 if (info->line_out_descrs[i])
3186 snprintf(s, sizeof(s),
3187 "Line %02d (%s) Playback Volume",
3188 i + 1, info->line_out_descrs[i]);
3190 snprintf(s, sizeof(s),
3191 "Line %02d Playback Volume",
3193 err = scarlett2_add_new_ctl(mixer,
3194 &scarlett2_line_out_volume_ctl,
3195 i, 1, s, &private->vol_ctls[i]);
3200 snprintf(s, sizeof(s),
3201 "Line %02d Mute Playback Switch",
3203 err = scarlett2_add_new_ctl(mixer,
3204 &scarlett2_mute_ctl,
3206 &private->mute_ctls[i]);
3210 /* Make the fader and mute controls read-only if the
3211 * SW/HW switch is set to HW
3213 if (private->vol_sw_hw_switch[index])
3214 scarlett2_vol_ctl_set_writable(mixer, i, 0);
3217 if (info->line_out_hw_vol) {
3218 snprintf(s, sizeof(s),
3219 "Line Out %02d Volume Control Playback Enum",
3221 err = scarlett2_add_new_ctl(mixer,
3222 &scarlett2_sw_hw_enum_ctl,
3224 &private->sw_hw_ctls[i]);
3228 /* Make the switch read-only if the line is
3229 * involved in speaker switching
3231 if (private->speaker_switching_switch && i < 4)
3232 scarlett2_sw_hw_ctl_ro(private, i);
3236 /* Add dim/mute controls */
3237 if (info->line_out_hw_vol)
3238 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++) {
3239 err = scarlett2_add_new_ctl(
3240 mixer, &scarlett2_dim_mute_ctl,
3241 i, 1, scarlett2_dim_mute_names[i],
3242 &private->dim_mute_ctls[i]);
3250 /*** Create the analogue input controls ***/
3252 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
3254 struct scarlett2_data *private = mixer->private_data;
3255 const struct scarlett2_device_info *info = private->info;
3257 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3258 const char *fmt = "Line In %d %s Capture %s";
3259 const char *fmt2 = "Line In %d-%d %s Capture %s";
3261 /* Add input level (line/inst) controls */
3262 for (i = 0; i < info->level_input_count; i++) {
3263 snprintf(s, sizeof(s), fmt, i + 1 + info->level_input_first,
3265 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
3266 i, 1, s, &private->level_ctls[i]);
3271 /* Add input pad controls */
3272 for (i = 0; i < info->pad_input_count; i++) {
3273 snprintf(s, sizeof(s), fmt, i + 1, "Pad", "Switch");
3274 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
3275 i, 1, s, &private->pad_ctls[i]);
3280 /* Add input air controls */
3281 for (i = 0; i < info->air_input_count; i++) {
3282 snprintf(s, sizeof(s), fmt, i + 1, "Air", "Switch");
3283 err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl,
3284 i, 1, s, &private->air_ctls[i]);
3289 /* Add input phantom controls */
3290 if (info->inputs_per_phantom == 1) {
3291 for (i = 0; i < info->phantom_count; i++) {
3292 scnprintf(s, sizeof(s), fmt, i + 1,
3293 "Phantom Power", "Switch");
3294 err = scarlett2_add_new_ctl(
3295 mixer, &scarlett2_phantom_ctl,
3296 i, 1, s, &private->phantom_ctls[i]);
3300 } else if (info->inputs_per_phantom > 1) {
3301 for (i = 0; i < info->phantom_count; i++) {
3302 int from = i * info->inputs_per_phantom + 1;
3303 int to = (i + 1) * info->inputs_per_phantom;
3305 scnprintf(s, sizeof(s), fmt2, from, to,
3306 "Phantom Power", "Switch");
3307 err = scarlett2_add_new_ctl(
3308 mixer, &scarlett2_phantom_ctl,
3309 i, 1, s, &private->phantom_ctls[i]);
3314 if (info->phantom_count) {
3315 err = scarlett2_add_new_ctl(
3316 mixer, &scarlett2_phantom_persistence_ctl, 0, 1,
3317 "Phantom Power Persistence Capture Switch", NULL);
3325 /*** Mixer Volume Controls ***/
3327 static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
3328 struct snd_ctl_elem_info *uinfo)
3330 struct usb_mixer_elem_info *elem = kctl->private_data;
3332 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3333 uinfo->count = elem->channels;
3334 uinfo->value.integer.min = 0;
3335 uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
3336 uinfo->value.integer.step = 1;
3340 static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
3341 struct snd_ctl_elem_value *ucontrol)
3343 struct usb_mixer_elem_info *elem = kctl->private_data;
3344 struct scarlett2_data *private = elem->head.mixer->private_data;
3346 ucontrol->value.integer.value[0] = private->mix[elem->control];
3350 static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
3351 struct snd_ctl_elem_value *ucontrol)
3353 struct usb_mixer_elem_info *elem = kctl->private_data;
3354 struct usb_mixer_interface *mixer = elem->head.mixer;
3355 struct scarlett2_data *private = mixer->private_data;
3356 const struct scarlett2_device_info *info = private->info;
3357 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3358 int oval, val, num_mixer_in, mix_num, err = 0;
3359 int index = elem->control;
3361 mutex_lock(&private->data_mutex);
3363 oval = private->mix[index];
3364 val = clamp(ucontrol->value.integer.value[0],
3365 0L, (long)SCARLETT2_MIXER_MAX_VALUE);
3366 num_mixer_in = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3367 mix_num = index / num_mixer_in;
3372 private->mix[index] = val;
3373 err = scarlett2_usb_set_mix(mixer, mix_num);
3378 mutex_unlock(&private->data_mutex);
3382 static const DECLARE_TLV_DB_MINMAX(
3383 db_scale_scarlett2_mixer,
3384 SCARLETT2_MIXER_MIN_DB * 100,
3385 SCARLETT2_MIXER_MAX_DB * 100
3388 static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
3389 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3390 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3391 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3393 .info = scarlett2_mixer_ctl_info,
3394 .get = scarlett2_mixer_ctl_get,
3395 .put = scarlett2_mixer_ctl_put,
3396 .private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
3397 .tlv = { .p = db_scale_scarlett2_mixer }
3400 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
3402 struct scarlett2_data *private = mixer->private_data;
3403 const struct scarlett2_device_info *info = private->info;
3404 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3407 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3410 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3412 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3414 for (i = 0, index = 0; i < num_outputs; i++)
3415 for (j = 0; j < num_inputs; j++, index++) {
3416 snprintf(s, sizeof(s),
3417 "Mix %c Input %02d Playback Volume",
3419 err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
3428 /*** Mux Source Selection Controls ***/
3430 static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
3431 struct snd_ctl_elem_info *uinfo)
3433 struct usb_mixer_elem_info *elem = kctl->private_data;
3434 struct scarlett2_data *private = elem->head.mixer->private_data;
3435 const struct scarlett2_device_info *info = private->info;
3436 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3437 unsigned int item = uinfo->value.enumerated.item;
3438 int items = private->num_mux_srcs;
3441 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3442 uinfo->count = elem->channels;
3443 uinfo->value.enumerated.items = items;
3446 item = uinfo->value.enumerated.item = items - 1;
3449 port_type < SCARLETT2_PORT_TYPE_COUNT;
3451 if (item < port_count[port_type][SCARLETT2_PORT_IN]) {
3452 const struct scarlett2_port *port =
3453 &scarlett2_ports[port_type];
3455 sprintf(uinfo->value.enumerated.name,
3456 port->src_descr, item + port->src_num_offset);
3459 item -= port_count[port_type][SCARLETT2_PORT_IN];
3465 static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
3466 struct snd_ctl_elem_value *ucontrol)
3468 struct usb_mixer_elem_info *elem = kctl->private_data;
3469 struct usb_mixer_interface *mixer = elem->head.mixer;
3470 struct scarlett2_data *private = mixer->private_data;
3471 int index = line_out_remap(private, elem->control);
3474 mutex_lock(&private->data_mutex);
3476 if (private->mux_updated) {
3477 err = scarlett2_usb_get_mux(mixer);
3481 ucontrol->value.enumerated.item[0] = private->mux[index];
3484 mutex_unlock(&private->data_mutex);
3488 static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
3489 struct snd_ctl_elem_value *ucontrol)
3491 struct usb_mixer_elem_info *elem = kctl->private_data;
3492 struct usb_mixer_interface *mixer = elem->head.mixer;
3493 struct scarlett2_data *private = mixer->private_data;
3494 int index = line_out_remap(private, elem->control);
3495 int oval, val, err = 0;
3497 mutex_lock(&private->data_mutex);
3499 oval = private->mux[index];
3500 val = min(ucontrol->value.enumerated.item[0],
3501 private->num_mux_srcs - 1U);
3506 private->mux[index] = val;
3507 err = scarlett2_usb_set_mux(mixer);
3512 mutex_unlock(&private->data_mutex);
3516 static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
3517 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3519 .info = scarlett2_mux_src_enum_ctl_info,
3520 .get = scarlett2_mux_src_enum_ctl_get,
3521 .put = scarlett2_mux_src_enum_ctl_put,
3524 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
3526 struct scarlett2_data *private = mixer->private_data;
3527 const struct scarlett2_device_info *info = private->info;
3528 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3529 int port_type, channel, i;
3531 for (i = 0, port_type = 0;
3532 port_type < SCARLETT2_PORT_TYPE_COUNT;
3535 channel < port_count[port_type][SCARLETT2_PORT_OUT];
3538 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3539 const char *const descr =
3540 scarlett2_ports[port_type].dst_descr;
3542 snprintf(s, sizeof(s) - 5, descr, channel + 1);
3545 err = scarlett2_add_new_ctl(mixer,
3546 &scarlett2_mux_src_enum_ctl,
3548 &private->mux_ctls[i]);
3557 /*** Meter Controls ***/
3559 static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
3560 struct snd_ctl_elem_info *uinfo)
3562 struct usb_mixer_elem_info *elem = kctl->private_data;
3564 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3565 uinfo->count = elem->channels;
3566 uinfo->value.integer.min = 0;
3567 uinfo->value.integer.max = 4095;
3568 uinfo->value.integer.step = 1;
3572 static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
3573 struct snd_ctl_elem_value *ucontrol)
3575 struct usb_mixer_elem_info *elem = kctl->private_data;
3576 u16 meter_levels[SCARLETT2_MAX_METERS];
3579 err = scarlett2_usb_get_meter_levels(elem->head.mixer, elem->channels,
3584 for (i = 0; i < elem->channels; i++)
3585 ucontrol->value.integer.value[i] = meter_levels[i];
3590 static const struct snd_kcontrol_new scarlett2_meter_ctl = {
3591 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
3592 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
3594 .info = scarlett2_meter_ctl_info,
3595 .get = scarlett2_meter_ctl_get
3598 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
3600 struct scarlett2_data *private = mixer->private_data;
3602 /* devices without a mixer also don't support reporting levels */
3603 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3606 return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
3607 0, private->num_mux_dsts,
3608 "Level Meter", NULL);
3611 /*** MSD Controls ***/
3613 static int scarlett2_msd_ctl_get(struct snd_kcontrol *kctl,
3614 struct snd_ctl_elem_value *ucontrol)
3616 struct usb_mixer_elem_info *elem = kctl->private_data;
3617 struct scarlett2_data *private = elem->head.mixer->private_data;
3619 ucontrol->value.integer.value[0] = private->msd_switch;
3623 static int scarlett2_msd_ctl_put(struct snd_kcontrol *kctl,
3624 struct snd_ctl_elem_value *ucontrol)
3626 struct usb_mixer_elem_info *elem = kctl->private_data;
3627 struct usb_mixer_interface *mixer = elem->head.mixer;
3628 struct scarlett2_data *private = mixer->private_data;
3630 int oval, val, err = 0;
3632 mutex_lock(&private->data_mutex);
3634 oval = private->msd_switch;
3635 val = !!ucontrol->value.integer.value[0];
3640 private->msd_switch = val;
3642 /* Send switch change to the device */
3643 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3649 mutex_unlock(&private->data_mutex);
3653 static const struct snd_kcontrol_new scarlett2_msd_ctl = {
3654 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3656 .info = snd_ctl_boolean_mono_info,
3657 .get = scarlett2_msd_ctl_get,
3658 .put = scarlett2_msd_ctl_put,
3661 static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer)
3663 struct scarlett2_data *private = mixer->private_data;
3664 const struct scarlett2_device_info *info = private->info;
3666 if (!info->has_msd_mode)
3669 /* If MSD mode is off, hide the switch by default */
3670 if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE))
3673 /* Add MSD control */
3674 return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl,
3675 0, 1, "MSD Mode Switch", NULL);
3678 /*** Standalone Control ***/
3680 static int scarlett2_standalone_ctl_get(struct snd_kcontrol *kctl,
3681 struct snd_ctl_elem_value *ucontrol)
3683 struct usb_mixer_elem_info *elem = kctl->private_data;
3684 struct scarlett2_data *private = elem->head.mixer->private_data;
3686 ucontrol->value.integer.value[0] = private->standalone_switch;
3690 static int scarlett2_standalone_ctl_put(struct snd_kcontrol *kctl,
3691 struct snd_ctl_elem_value *ucontrol)
3693 struct usb_mixer_elem_info *elem = kctl->private_data;
3694 struct usb_mixer_interface *mixer = elem->head.mixer;
3695 struct scarlett2_data *private = mixer->private_data;
3697 int oval, val, err = 0;
3699 mutex_lock(&private->data_mutex);
3701 oval = private->standalone_switch;
3702 val = !!ucontrol->value.integer.value[0];
3707 private->standalone_switch = val;
3709 /* Send switch change to the device */
3710 err = scarlett2_usb_set_config(mixer,
3711 SCARLETT2_CONFIG_STANDALONE_SWITCH,
3717 mutex_unlock(&private->data_mutex);
3721 static const struct snd_kcontrol_new scarlett2_standalone_ctl = {
3722 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3724 .info = snd_ctl_boolean_mono_info,
3725 .get = scarlett2_standalone_ctl_get,
3726 .put = scarlett2_standalone_ctl_put,
3729 static int scarlett2_add_standalone_ctl(struct usb_mixer_interface *mixer)
3731 struct scarlett2_data *private = mixer->private_data;
3733 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3736 /* Add standalone control */
3737 return scarlett2_add_new_ctl(mixer, &scarlett2_standalone_ctl,
3738 0, 1, "Standalone Switch", NULL);
3741 /*** Cleanup/Suspend Callbacks ***/
3743 static void scarlett2_private_free(struct usb_mixer_interface *mixer)
3745 struct scarlett2_data *private = mixer->private_data;
3747 cancel_delayed_work_sync(&private->work);
3749 mixer->private_data = NULL;
3752 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
3754 struct scarlett2_data *private = mixer->private_data;
3756 if (cancel_delayed_work_sync(&private->work))
3757 scarlett2_config_save(private->mixer);
3760 /*** Initialisation ***/
3762 static void scarlett2_count_mux_io(struct scarlett2_data *private)
3764 const struct scarlett2_device_info *info = private->info;
3765 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3766 int port_type, srcs = 0, dsts = 0;
3769 port_type < SCARLETT2_PORT_TYPE_COUNT;
3771 srcs += port_count[port_type][SCARLETT2_PORT_IN];
3772 dsts += port_count[port_type][SCARLETT2_PORT_OUT];
3775 private->num_mux_srcs = srcs;
3776 private->num_mux_dsts = dsts;
3779 /* Look through the interface descriptors for the Focusrite Control
3780 * interface (bInterfaceClass = 255 Vendor Specific Class) and set
3781 * bInterfaceNumber, bEndpointAddress, wMaxPacketSize, and bInterval
3784 static int scarlett2_find_fc_interface(struct usb_device *dev,
3785 struct scarlett2_data *private)
3787 struct usb_host_config *config = dev->actconfig;
3790 for (i = 0; i < config->desc.bNumInterfaces; i++) {
3791 struct usb_interface *intf = config->interface[i];
3792 struct usb_interface_descriptor *desc =
3793 &intf->altsetting[0].desc;
3794 struct usb_endpoint_descriptor *epd;
3796 if (desc->bInterfaceClass != 255)
3799 epd = get_endpoint(intf->altsetting, 0);
3800 private->bInterfaceNumber = desc->bInterfaceNumber;
3801 private->bEndpointAddress = epd->bEndpointAddress &
3802 USB_ENDPOINT_NUMBER_MASK;
3803 private->wMaxPacketSize = le16_to_cpu(epd->wMaxPacketSize);
3804 private->bInterval = epd->bInterval;
3811 /* Initialise private data */
3812 static int scarlett2_init_private(struct usb_mixer_interface *mixer,
3813 const struct scarlett2_device_info *info)
3815 struct scarlett2_data *private =
3816 kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
3821 mutex_init(&private->usb_mutex);
3822 mutex_init(&private->data_mutex);
3823 INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
3825 mixer->private_data = private;
3826 mixer->private_free = scarlett2_private_free;
3827 mixer->private_suspend = scarlett2_private_suspend;
3829 private->info = info;
3830 scarlett2_count_mux_io(private);
3831 private->scarlett2_seq = 0;
3832 private->mixer = mixer;
3834 return scarlett2_find_fc_interface(mixer->chip->dev, private);
3837 /* Cargo cult proprietary initialisation sequence */
3838 static int scarlett2_usb_init(struct usb_mixer_interface *mixer)
3840 struct usb_device *dev = mixer->chip->dev;
3841 struct scarlett2_data *private = mixer->private_data;
3845 if (usb_pipe_type_check(dev, usb_sndctrlpipe(dev, 0)))
3849 err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
3850 SCARLETT2_USB_CMD_INIT, buf, sizeof(buf));
3855 private->scarlett2_seq = 1;
3856 err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0);
3861 private->scarlett2_seq = 1;
3862 return scarlett2_usb(mixer, SCARLETT2_USB_INIT_2, NULL, 0, NULL, 84);
3865 /* Read configuration from the interface on start */
3866 static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
3868 struct scarlett2_data *private = mixer->private_data;
3869 const struct scarlett2_device_info *info = private->info;
3870 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3872 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3874 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3875 struct scarlett2_usb_volume_status volume_status;
3878 if (info->has_msd_mode) {
3879 err = scarlett2_usb_get_config(
3880 mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3881 1, &private->msd_switch);
3885 /* no other controls are created if MSD mode is on */
3886 if (private->msd_switch)
3890 err = scarlett2_update_input_other(mixer);
3894 err = scarlett2_update_monitor_other(mixer);
3898 /* the rest of the configuration is for devices with a mixer */
3899 if (info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3902 err = scarlett2_usb_get_config(
3903 mixer, SCARLETT2_CONFIG_STANDALONE_SWITCH,
3904 1, &private->standalone_switch);
3908 err = scarlett2_update_sync(mixer);
3912 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
3916 if (info->line_out_hw_vol)
3917 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3918 private->dim_mute[i] = !!volume_status.dim_mute[i];
3920 private->master_vol = clamp(
3921 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
3922 0, SCARLETT2_VOLUME_BIAS);
3924 for (i = 0; i < num_line_out; i++) {
3927 private->vol_sw_hw_switch[i] =
3928 info->line_out_hw_vol
3929 && volume_status.sw_hw_switch[i];
3931 volume = private->vol_sw_hw_switch[i]
3932 ? volume_status.master_vol
3933 : volume_status.sw_vol[i];
3934 volume = clamp(volume + SCARLETT2_VOLUME_BIAS,
3935 0, SCARLETT2_VOLUME_BIAS);
3936 private->vol[i] = volume;
3938 mute = private->vol_sw_hw_switch[i]
3939 ? private->dim_mute[SCARLETT2_BUTTON_MUTE]
3940 : volume_status.mute_switch[i];
3941 private->mute_switch[i] = mute;
3944 for (i = 0; i < num_mixer_out; i++) {
3945 err = scarlett2_usb_get_mix(mixer, i);
3950 return scarlett2_usb_get_mux(mixer);
3953 /* Notify on sync change */
3954 static void scarlett2_notify_sync(
3955 struct usb_mixer_interface *mixer)
3957 struct scarlett2_data *private = mixer->private_data;
3959 private->sync_updated = 1;
3961 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3962 &private->sync_ctl->id);
3965 /* Notify on monitor change */
3966 static void scarlett2_notify_monitor(
3967 struct usb_mixer_interface *mixer)
3969 struct snd_card *card = mixer->chip->card;
3970 struct scarlett2_data *private = mixer->private_data;
3971 const struct scarlett2_device_info *info = private->info;
3972 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3974 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3977 /* if line_out_hw_vol is 0, there are no controls to update */
3978 if (!info->line_out_hw_vol)
3981 private->vol_updated = 1;
3983 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3984 &private->master_vol_ctl->id);
3986 for (i = 0; i < num_line_out; i++)
3987 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
3988 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3989 &private->vol_ctls[i]->id);
3992 /* Notify on dim/mute change */
3993 static void scarlett2_notify_dim_mute(
3994 struct usb_mixer_interface *mixer)
3996 struct snd_card *card = mixer->chip->card;
3997 struct scarlett2_data *private = mixer->private_data;
3998 const struct scarlett2_device_info *info = private->info;
3999 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
4001 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
4004 private->vol_updated = 1;
4006 if (!info->line_out_hw_vol)
4009 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
4010 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4011 &private->dim_mute_ctls[i]->id);
4013 for (i = 0; i < num_line_out; i++)
4014 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
4015 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4016 &private->mute_ctls[i]->id);
4019 /* Notify on "input other" change (level/pad/air) */
4020 static void scarlett2_notify_input_other(
4021 struct usb_mixer_interface *mixer)
4023 struct snd_card *card = mixer->chip->card;
4024 struct scarlett2_data *private = mixer->private_data;
4025 const struct scarlett2_device_info *info = private->info;
4028 private->input_other_updated = 1;
4030 for (i = 0; i < info->level_input_count; i++)
4031 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4032 &private->level_ctls[i]->id);
4033 for (i = 0; i < info->pad_input_count; i++)
4034 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4035 &private->pad_ctls[i]->id);
4036 for (i = 0; i < info->air_input_count; i++)
4037 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4038 &private->air_ctls[i]->id);
4039 for (i = 0; i < info->phantom_count; i++)
4040 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4041 &private->phantom_ctls[i]->id);
4044 /* Notify on "monitor other" change (direct monitor, speaker
4045 * switching, talkback)
4047 static void scarlett2_notify_monitor_other(
4048 struct usb_mixer_interface *mixer)
4050 struct snd_card *card = mixer->chip->card;
4051 struct scarlett2_data *private = mixer->private_data;
4052 const struct scarlett2_device_info *info = private->info;
4054 private->monitor_other_updated = 1;
4056 if (info->direct_monitor) {
4057 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4058 &private->direct_monitor_ctl->id);
4062 if (info->has_speaker_switching)
4063 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4064 &private->speaker_switching_ctl->id);
4066 if (info->has_talkback)
4067 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4068 &private->talkback_ctl->id);
4070 /* if speaker switching was recently enabled or disabled,
4071 * invalidate the dim/mute and mux enum controls
4073 if (private->speaker_switching_switched) {
4076 scarlett2_notify_dim_mute(mixer);
4078 private->speaker_switching_switched = 0;
4079 private->mux_updated = 1;
4081 for (i = 0; i < private->num_mux_dsts; i++)
4082 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4083 &private->mux_ctls[i]->id);
4087 /* Interrupt callback */
4088 static void scarlett2_notify(struct urb *urb)
4090 struct usb_mixer_interface *mixer = urb->context;
4091 int len = urb->actual_length;
4092 int ustatus = urb->status;
4095 if (ustatus != 0 || len != 8)
4098 data = le32_to_cpu(*(__le32 *)urb->transfer_buffer);
4099 if (data & SCARLETT2_USB_NOTIFY_SYNC)
4100 scarlett2_notify_sync(mixer);
4101 if (data & SCARLETT2_USB_NOTIFY_MONITOR)
4102 scarlett2_notify_monitor(mixer);
4103 if (data & SCARLETT2_USB_NOTIFY_DIM_MUTE)
4104 scarlett2_notify_dim_mute(mixer);
4105 if (data & SCARLETT2_USB_NOTIFY_INPUT_OTHER)
4106 scarlett2_notify_input_other(mixer);
4107 if (data & SCARLETT2_USB_NOTIFY_MONITOR_OTHER)
4108 scarlett2_notify_monitor_other(mixer);
4111 if (ustatus != -ENOENT &&
4112 ustatus != -ECONNRESET &&
4113 ustatus != -ESHUTDOWN) {
4114 urb->dev = mixer->chip->dev;
4115 usb_submit_urb(urb, GFP_ATOMIC);
4119 static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
4121 struct usb_device *dev = mixer->chip->dev;
4122 struct scarlett2_data *private = mixer->private_data;
4123 unsigned int pipe = usb_rcvintpipe(dev, private->bEndpointAddress);
4124 void *transfer_buffer;
4127 usb_audio_err(mixer->chip,
4128 "%s: mixer urb already in use!\n", __func__);
4132 if (usb_pipe_type_check(dev, pipe))
4135 mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
4139 transfer_buffer = kmalloc(private->wMaxPacketSize, GFP_KERNEL);
4140 if (!transfer_buffer)
4143 usb_fill_int_urb(mixer->urb, dev, pipe,
4144 transfer_buffer, private->wMaxPacketSize,
4145 scarlett2_notify, mixer, private->bInterval);
4147 return usb_submit_urb(mixer->urb, GFP_KERNEL);
4150 static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
4152 const struct scarlett2_device_info **info = scarlett2_devices;
4155 /* Find device in scarlett2_devices */
4156 while (*info && (*info)->usb_id != mixer->chip->usb_id)
4161 /* Initialise private data */
4162 err = scarlett2_init_private(mixer, *info);
4166 /* Send proprietary USB initialisation sequence */
4167 err = scarlett2_usb_init(mixer);
4171 /* Read volume levels and controls from the interface */
4172 err = scarlett2_read_configs(mixer);
4176 /* Create the MSD control */
4177 err = scarlett2_add_msd_ctl(mixer);
4181 /* If MSD mode is enabled, don't create any other controls */
4182 if (((struct scarlett2_data *)mixer->private_data)->msd_switch)
4185 /* Create the analogue output controls */
4186 err = scarlett2_add_line_out_ctls(mixer);
4190 /* Create the analogue input controls */
4191 err = scarlett2_add_line_in_ctls(mixer);
4195 /* Create the input, output, and mixer mux input selections */
4196 err = scarlett2_add_mux_enums(mixer);
4200 /* Create the matrix mixer controls */
4201 err = scarlett2_add_mixer_ctls(mixer);
4205 /* Create the level meter controls */
4206 err = scarlett2_add_meter_ctl(mixer);
4210 /* Create the sync control */
4211 err = scarlett2_add_sync_ctl(mixer);
4215 /* Create the direct monitor control */
4216 err = scarlett2_add_direct_monitor_ctl(mixer);
4220 /* Create the speaker switching control */
4221 err = scarlett2_add_speaker_switch_ctl(mixer);
4225 /* Create the talkback controls */
4226 err = scarlett2_add_talkback_ctls(mixer);
4230 /* Create the standalone control */
4231 err = scarlett2_add_standalone_ctl(mixer);
4235 /* Set up the interrupt polling */
4236 err = scarlett2_init_notify(mixer);
4243 int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
4245 struct snd_usb_audio *chip = mixer->chip;
4248 /* only use UAC_VERSION_2 */
4249 if (!mixer->protocol)
4252 if (!(chip->setup & SCARLETT2_ENABLE)) {
4253 usb_audio_info(chip,
4254 "Focusrite Scarlett Gen 2/3 Mixer Driver disabled; "
4255 "use options snd_usb_audio vid=0x%04x pid=0x%04x "
4256 "device_setup=1 to enable and report any issues "
4258 USB_ID_VENDOR(chip->usb_id),
4259 USB_ID_PRODUCT(chip->usb_id));
4263 usb_audio_info(chip,
4264 "Focusrite Scarlett Gen 2/3 Mixer Driver enabled pid=0x%04x",
4265 USB_ID_PRODUCT(chip->usb_id));
4267 err = snd_scarlett_gen2_controls_create(mixer);
4269 usb_audio_err(mixer->chip,
4270 "Error initialising Scarlett Mixer Driver: %d",