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 scarlett2_usb_get(mixer, offset, &tmp, 1);
1395 tmp |= (1 << index);
1397 tmp &= ~(1 << index);
1402 /* Send the configuration parameter data */
1403 req.offset = cpu_to_le32(offset);
1404 req.bytes = cpu_to_le32(size);
1405 req.value = cpu_to_le32(value);
1406 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
1407 &req, sizeof(u32) * 2 + size,
1412 /* Activate the change */
1413 req2 = cpu_to_le32(config_item->activate);
1414 err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1415 &req2, sizeof(req2), NULL, 0);
1419 /* Schedule the change to be written to NVRAM */
1420 if (config_item->activate != SCARLETT2_USB_CONFIG_SAVE)
1421 schedule_delayed_work(&private->work, msecs_to_jiffies(2000));
1426 /* Send a USB message to get sync status; result placed in *sync */
1427 static int scarlett2_usb_get_sync_status(
1428 struct usb_mixer_interface *mixer,
1434 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC,
1435 NULL, 0, &data, sizeof(data));
1443 /* Send a USB message to get volume status; result placed in *buf */
1444 static int scarlett2_usb_get_volume_status(
1445 struct usb_mixer_interface *mixer,
1446 struct scarlett2_usb_volume_status *buf)
1448 return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
1452 /* Send a USB message to get the volumes for all inputs of one mix
1453 * and put the values into private->mix[]
1455 static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer,
1458 struct scarlett2_data *private = mixer->private_data;
1459 const struct scarlett2_device_info *info = private->info;
1462 info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1470 __le16 data[SCARLETT2_INPUT_MIX_MAX];
1472 req.mix_num = cpu_to_le16(mix_num);
1473 req.count = cpu_to_le16(num_mixer_in);
1475 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX,
1477 data, num_mixer_in * sizeof(u16));
1481 for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++) {
1482 u16 mixer_value = le16_to_cpu(data[i]);
1484 for (k = 0; k < SCARLETT2_MIXER_VALUE_COUNT; k++)
1485 if (scarlett2_mixer_values[k] >= mixer_value)
1487 if (k == SCARLETT2_MIXER_VALUE_COUNT)
1488 k = SCARLETT2_MIXER_MAX_VALUE;
1489 private->mix[j] = k;
1495 /* Send a USB message to set the volumes for all inputs of one mix
1496 * (values obtained from private->mix[])
1498 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
1501 struct scarlett2_data *private = mixer->private_data;
1502 const struct scarlett2_device_info *info = private->info;
1506 __le16 data[SCARLETT2_INPUT_MIX_MAX];
1511 info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1513 req.mix_num = cpu_to_le16(mix_num);
1515 for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
1516 req.data[i] = cpu_to_le16(
1517 scarlett2_mixer_values[private->mix[j]]
1520 return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
1521 &req, (num_mixer_in + 1) * sizeof(u16),
1525 /* Convert a port number index (per info->port_count) to a hardware ID */
1526 static u32 scarlett2_mux_src_num_to_id(
1527 const int port_count[][SCARLETT2_PORT_DIRNS], int num)
1532 port_type < SCARLETT2_PORT_TYPE_COUNT;
1534 if (num < port_count[port_type][SCARLETT2_PORT_IN])
1535 return scarlett2_ports[port_type].id | num;
1536 num -= port_count[port_type][SCARLETT2_PORT_IN];
1543 /* Convert a hardware ID to a port number index */
1544 static u32 scarlett2_mux_id_to_num(
1545 const int port_count[][SCARLETT2_PORT_DIRNS], int direction, u32 id)
1551 port_type < SCARLETT2_PORT_TYPE_COUNT;
1553 int base = scarlett2_ports[port_type].id;
1554 int count = port_count[port_type][direction];
1556 if (id >= base && id < base + count)
1557 return port_num + id - base;
1565 /* Convert one mux entry from the interface and load into private->mux[] */
1566 static void scarlett2_usb_populate_mux(struct scarlett2_data *private,
1569 const struct scarlett2_device_info *info = private->info;
1570 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1572 int dst_idx, src_idx;
1574 dst_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_OUT,
1579 if (dst_idx >= private->num_mux_dsts) {
1580 usb_audio_err(private->mixer->chip,
1581 "BUG: scarlett2_mux_id_to_num(%06x, OUT): %d >= %d",
1582 mux_entry, dst_idx, private->num_mux_dsts);
1586 src_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_IN,
1591 if (src_idx >= private->num_mux_srcs) {
1592 usb_audio_err(private->mixer->chip,
1593 "BUG: scarlett2_mux_id_to_num(%06x, IN): %d >= %d",
1594 mux_entry, src_idx, private->num_mux_srcs);
1598 private->mux[dst_idx] = src_idx;
1601 /* Send USB message to get mux inputs and then populate private->mux[] */
1602 static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
1604 struct scarlett2_data *private = mixer->private_data;
1605 int count = private->num_mux_dsts;
1613 __le32 data[SCARLETT2_MUX_MAX];
1615 private->mux_updated = 0;
1618 req.count = cpu_to_le16(count);
1620 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
1622 data, count * sizeof(u32));
1626 for (i = 0; i < count; i++)
1627 scarlett2_usb_populate_mux(private, le32_to_cpu(data[i]));
1632 /* Send USB messages to set mux inputs */
1633 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
1635 struct scarlett2_data *private = mixer->private_data;
1636 const struct scarlett2_device_info *info = private->info;
1637 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1643 __le32 data[SCARLETT2_MUX_MAX];
1648 /* set mux settings for each rate */
1649 for (table = 0; table < SCARLETT2_MUX_TABLES; table++) {
1650 const struct scarlett2_mux_entry *entry;
1652 /* i counts over the output array */
1655 req.num = cpu_to_le16(table);
1657 /* loop through each entry */
1658 for (entry = info->mux_assignment[table];
1662 int port_type = entry->port_type;
1663 int port_idx = entry->start;
1664 int mux_idx = scarlett2_get_port_start_num(port_count,
1665 SCARLETT2_PORT_OUT, port_type) + port_idx;
1666 int dst_id = scarlett2_ports[port_type].id + port_idx;
1670 for (j = 0; j < entry->count; j++)
1675 /* Non-empty mux slots use the lower 12 bits
1676 * for the destination and next 12 bits for
1679 for (j = 0; j < entry->count; j++) {
1680 int src_id = scarlett2_mux_src_num_to_id(
1681 port_count, private->mux[mux_idx++]);
1682 req.data[i++] = cpu_to_le32(dst_id |
1688 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
1689 &req, (i + 1) * sizeof(u32),
1698 /* Send USB message to get meter levels */
1699 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
1700 u16 num_meters, u16 *levels)
1707 u32 resp[SCARLETT2_MAX_METERS];
1711 req.num_meters = cpu_to_le16(num_meters);
1712 req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
1713 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER,
1714 &req, sizeof(req), resp, num_meters * sizeof(u32));
1718 /* copy, convert to u16 */
1719 for (i = 0; i < num_meters; i++)
1720 levels[i] = resp[i];
1725 /*** Control Functions ***/
1727 /* helper function to create a new control */
1728 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
1729 const struct snd_kcontrol_new *ncontrol,
1730 int index, int channels, const char *name,
1731 struct snd_kcontrol **kctl_return)
1733 struct snd_kcontrol *kctl;
1734 struct usb_mixer_elem_info *elem;
1737 elem = kzalloc(sizeof(*elem), GFP_KERNEL);
1741 /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code
1742 * ignores them for resume and other operations.
1743 * Also, the head.id field is set to 0, as we don't use this field.
1745 elem->head.mixer = mixer;
1746 elem->control = index;
1748 elem->channels = channels;
1749 elem->val_type = USB_MIXER_BESPOKEN;
1751 kctl = snd_ctl_new1(ncontrol, elem);
1756 kctl->private_free = snd_usb_mixer_elem_free;
1758 strscpy(kctl->id.name, name, sizeof(kctl->id.name));
1760 err = snd_usb_mixer_add_control(&elem->head, kctl);
1765 *kctl_return = kctl;
1770 /*** Sync Control ***/
1772 /* Update sync control after receiving notification that the status
1775 static int scarlett2_update_sync(struct usb_mixer_interface *mixer)
1777 struct scarlett2_data *private = mixer->private_data;
1779 private->sync_updated = 0;
1780 return scarlett2_usb_get_sync_status(mixer, &private->sync);
1783 static int scarlett2_sync_ctl_info(struct snd_kcontrol *kctl,
1784 struct snd_ctl_elem_info *uinfo)
1786 static const char *texts[2] = {
1787 "Unlocked", "Locked"
1789 return snd_ctl_enum_info(uinfo, 1, 2, texts);
1792 static int scarlett2_sync_ctl_get(struct snd_kcontrol *kctl,
1793 struct snd_ctl_elem_value *ucontrol)
1795 struct usb_mixer_elem_info *elem = kctl->private_data;
1796 struct usb_mixer_interface *mixer = elem->head.mixer;
1797 struct scarlett2_data *private = mixer->private_data;
1799 mutex_lock(&private->data_mutex);
1800 if (private->sync_updated)
1801 scarlett2_update_sync(mixer);
1802 ucontrol->value.enumerated.item[0] = private->sync;
1803 mutex_unlock(&private->data_mutex);
1808 static const struct snd_kcontrol_new scarlett2_sync_ctl = {
1809 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1810 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1812 .info = scarlett2_sync_ctl_info,
1813 .get = scarlett2_sync_ctl_get
1816 static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer)
1818 struct scarlett2_data *private = mixer->private_data;
1820 /* devices without a mixer also don't support reporting sync status */
1821 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
1824 return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl,
1825 0, 1, "Sync Status", &private->sync_ctl);
1828 /*** Analogue Line Out Volume Controls ***/
1830 /* Update hardware volume controls after receiving notification that
1833 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
1835 struct scarlett2_data *private = mixer->private_data;
1836 const struct scarlett2_device_info *info = private->info;
1837 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1838 struct scarlett2_usb_volume_status volume_status;
1840 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
1844 private->vol_updated = 0;
1846 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
1850 private->master_vol = clamp(
1851 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
1852 0, SCARLETT2_VOLUME_BIAS);
1854 if (info->line_out_hw_vol)
1855 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
1856 private->dim_mute[i] = !!volume_status.dim_mute[i];
1858 mute = private->dim_mute[SCARLETT2_BUTTON_MUTE];
1860 for (i = 0; i < num_line_out; i++)
1861 if (private->vol_sw_hw_switch[i]) {
1862 private->vol[i] = private->master_vol;
1863 private->mute_switch[i] = mute;
1869 static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
1870 struct snd_ctl_elem_info *uinfo)
1872 struct usb_mixer_elem_info *elem = kctl->private_data;
1874 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1875 uinfo->count = elem->channels;
1876 uinfo->value.integer.min = 0;
1877 uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
1878 uinfo->value.integer.step = 1;
1882 static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
1883 struct snd_ctl_elem_value *ucontrol)
1885 struct usb_mixer_elem_info *elem = kctl->private_data;
1886 struct usb_mixer_interface *mixer = elem->head.mixer;
1887 struct scarlett2_data *private = mixer->private_data;
1889 mutex_lock(&private->data_mutex);
1890 if (private->vol_updated)
1891 scarlett2_update_volumes(mixer);
1892 mutex_unlock(&private->data_mutex);
1894 ucontrol->value.integer.value[0] = private->master_vol;
1898 static int line_out_remap(struct scarlett2_data *private, int index)
1900 const struct scarlett2_device_info *info = private->info;
1902 if (!info->line_out_remap_enable)
1904 return info->line_out_remap[index];
1907 static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
1908 struct snd_ctl_elem_value *ucontrol)
1910 struct usb_mixer_elem_info *elem = kctl->private_data;
1911 struct usb_mixer_interface *mixer = elem->head.mixer;
1912 struct scarlett2_data *private = mixer->private_data;
1913 int index = line_out_remap(private, elem->control);
1915 mutex_lock(&private->data_mutex);
1916 if (private->vol_updated)
1917 scarlett2_update_volumes(mixer);
1918 mutex_unlock(&private->data_mutex);
1920 ucontrol->value.integer.value[0] = private->vol[index];
1924 static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
1925 struct snd_ctl_elem_value *ucontrol)
1927 struct usb_mixer_elem_info *elem = kctl->private_data;
1928 struct usb_mixer_interface *mixer = elem->head.mixer;
1929 struct scarlett2_data *private = mixer->private_data;
1930 int index = line_out_remap(private, elem->control);
1931 int oval, val, err = 0;
1933 mutex_lock(&private->data_mutex);
1935 oval = private->vol[index];
1936 val = ucontrol->value.integer.value[0];
1941 private->vol[index] = val;
1942 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1943 index, val - SCARLETT2_VOLUME_BIAS);
1948 mutex_unlock(&private->data_mutex);
1952 static const DECLARE_TLV_DB_MINMAX(
1953 db_scale_scarlett2_gain, -SCARLETT2_VOLUME_BIAS * 100, 0
1956 static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
1957 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1958 .access = SNDRV_CTL_ELEM_ACCESS_READ |
1959 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1961 .info = scarlett2_volume_ctl_info,
1962 .get = scarlett2_master_volume_ctl_get,
1963 .private_value = 0, /* max value */
1964 .tlv = { .p = db_scale_scarlett2_gain }
1967 static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
1968 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1969 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1970 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1972 .info = scarlett2_volume_ctl_info,
1973 .get = scarlett2_volume_ctl_get,
1974 .put = scarlett2_volume_ctl_put,
1975 .private_value = 0, /* max value */
1976 .tlv = { .p = db_scale_scarlett2_gain }
1979 /*** Mute Switch Controls ***/
1981 static int scarlett2_mute_ctl_get(struct snd_kcontrol *kctl,
1982 struct snd_ctl_elem_value *ucontrol)
1984 struct usb_mixer_elem_info *elem = kctl->private_data;
1985 struct usb_mixer_interface *mixer = elem->head.mixer;
1986 struct scarlett2_data *private = mixer->private_data;
1987 int index = line_out_remap(private, elem->control);
1989 mutex_lock(&private->data_mutex);
1990 if (private->vol_updated)
1991 scarlett2_update_volumes(mixer);
1992 mutex_unlock(&private->data_mutex);
1994 ucontrol->value.integer.value[0] = private->mute_switch[index];
1998 static int scarlett2_mute_ctl_put(struct snd_kcontrol *kctl,
1999 struct snd_ctl_elem_value *ucontrol)
2001 struct usb_mixer_elem_info *elem = kctl->private_data;
2002 struct usb_mixer_interface *mixer = elem->head.mixer;
2003 struct scarlett2_data *private = mixer->private_data;
2004 int index = line_out_remap(private, elem->control);
2005 int oval, val, err = 0;
2007 mutex_lock(&private->data_mutex);
2009 oval = private->mute_switch[index];
2010 val = !!ucontrol->value.integer.value[0];
2015 private->mute_switch[index] = val;
2017 /* Send mute change to the device */
2018 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2024 mutex_unlock(&private->data_mutex);
2028 static const struct snd_kcontrol_new scarlett2_mute_ctl = {
2029 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2031 .info = snd_ctl_boolean_mono_info,
2032 .get = scarlett2_mute_ctl_get,
2033 .put = scarlett2_mute_ctl_put,
2036 /*** HW/SW Volume Switch Controls ***/
2038 static void scarlett2_sw_hw_ctl_ro(struct scarlett2_data *private, int index)
2040 private->sw_hw_ctls[index]->vd[0].access &=
2041 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2044 static void scarlett2_sw_hw_ctl_rw(struct scarlett2_data *private, int index)
2046 private->sw_hw_ctls[index]->vd[0].access |=
2047 SNDRV_CTL_ELEM_ACCESS_WRITE;
2050 static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
2051 struct snd_ctl_elem_info *uinfo)
2053 static const char *const values[2] = {
2057 return snd_ctl_enum_info(uinfo, 1, 2, values);
2060 static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
2061 struct snd_ctl_elem_value *ucontrol)
2063 struct usb_mixer_elem_info *elem = kctl->private_data;
2064 struct scarlett2_data *private = elem->head.mixer->private_data;
2065 int index = line_out_remap(private, elem->control);
2067 ucontrol->value.enumerated.item[0] = private->vol_sw_hw_switch[index];
2071 static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer,
2072 int index, int value)
2074 struct scarlett2_data *private = mixer->private_data;
2075 struct snd_card *card = mixer->chip->card;
2077 /* Set/Clear write bits */
2079 private->vol_ctls[index]->vd[0].access |=
2080 SNDRV_CTL_ELEM_ACCESS_WRITE;
2081 private->mute_ctls[index]->vd[0].access |=
2082 SNDRV_CTL_ELEM_ACCESS_WRITE;
2084 private->vol_ctls[index]->vd[0].access &=
2085 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2086 private->mute_ctls[index]->vd[0].access &=
2087 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2090 /* Notify of write bit and possible value change */
2091 snd_ctl_notify(card,
2092 SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
2093 &private->vol_ctls[index]->id);
2094 snd_ctl_notify(card,
2095 SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
2096 &private->mute_ctls[index]->id);
2099 static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer,
2100 int ctl_index, int val)
2102 struct scarlett2_data *private = mixer->private_data;
2103 int index = line_out_remap(private, ctl_index);
2106 private->vol_sw_hw_switch[index] = val;
2108 /* Change access mode to RO (hardware controlled volume)
2109 * or RW (software controlled volume)
2111 scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val);
2113 /* Reset volume/mute to master volume/mute */
2114 private->vol[index] = private->master_vol;
2115 private->mute_switch[index] = private->dim_mute[SCARLETT2_BUTTON_MUTE];
2117 /* Set SW volume to current HW volume */
2118 err = scarlett2_usb_set_config(
2119 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
2120 index, private->master_vol - SCARLETT2_VOLUME_BIAS);
2124 /* Set SW mute to current HW mute */
2125 err = scarlett2_usb_set_config(
2126 mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2127 index, private->dim_mute[SCARLETT2_BUTTON_MUTE]);
2131 /* Send SW/HW switch change to the device */
2132 return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
2136 static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
2137 struct snd_ctl_elem_value *ucontrol)
2139 struct usb_mixer_elem_info *elem = kctl->private_data;
2140 struct usb_mixer_interface *mixer = elem->head.mixer;
2141 struct scarlett2_data *private = mixer->private_data;
2142 int ctl_index = elem->control;
2143 int index = line_out_remap(private, ctl_index);
2144 int oval, val, err = 0;
2146 mutex_lock(&private->data_mutex);
2148 oval = private->vol_sw_hw_switch[index];
2149 val = !!ucontrol->value.enumerated.item[0];
2154 err = scarlett2_sw_hw_change(mixer, ctl_index, val);
2159 mutex_unlock(&private->data_mutex);
2163 static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
2164 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2166 .info = scarlett2_sw_hw_enum_ctl_info,
2167 .get = scarlett2_sw_hw_enum_ctl_get,
2168 .put = scarlett2_sw_hw_enum_ctl_put,
2171 /*** Line Level/Instrument Level Switch Controls ***/
2173 static int scarlett2_update_input_other(struct usb_mixer_interface *mixer)
2175 struct scarlett2_data *private = mixer->private_data;
2176 const struct scarlett2_device_info *info = private->info;
2178 private->input_other_updated = 0;
2180 if (info->level_input_count) {
2181 int err = scarlett2_usb_get_config(
2182 mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2183 info->level_input_count + info->level_input_first,
2184 private->level_switch);
2189 if (info->pad_input_count) {
2190 int err = scarlett2_usb_get_config(
2191 mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2192 info->pad_input_count, private->pad_switch);
2197 if (info->air_input_count) {
2198 int err = scarlett2_usb_get_config(
2199 mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2200 info->air_input_count, private->air_switch);
2205 if (info->phantom_count) {
2206 int err = scarlett2_usb_get_config(
2207 mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2208 info->phantom_count, private->phantom_switch);
2212 err = scarlett2_usb_get_config(
2213 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
2214 1, &private->phantom_persistence);
2222 static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
2223 struct snd_ctl_elem_info *uinfo)
2225 static const char *const values[2] = {
2229 return snd_ctl_enum_info(uinfo, 1, 2, values);
2232 static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
2233 struct snd_ctl_elem_value *ucontrol)
2235 struct usb_mixer_elem_info *elem = kctl->private_data;
2236 struct usb_mixer_interface *mixer = elem->head.mixer;
2237 struct scarlett2_data *private = mixer->private_data;
2238 const struct scarlett2_device_info *info = private->info;
2240 int index = elem->control + info->level_input_first;
2242 mutex_lock(&private->data_mutex);
2243 if (private->input_other_updated)
2244 scarlett2_update_input_other(mixer);
2245 ucontrol->value.enumerated.item[0] = private->level_switch[index];
2246 mutex_unlock(&private->data_mutex);
2251 static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
2252 struct snd_ctl_elem_value *ucontrol)
2254 struct usb_mixer_elem_info *elem = kctl->private_data;
2255 struct usb_mixer_interface *mixer = elem->head.mixer;
2256 struct scarlett2_data *private = mixer->private_data;
2257 const struct scarlett2_device_info *info = private->info;
2259 int index = elem->control + info->level_input_first;
2260 int oval, val, err = 0;
2262 mutex_lock(&private->data_mutex);
2264 oval = private->level_switch[index];
2265 val = !!ucontrol->value.enumerated.item[0];
2270 private->level_switch[index] = val;
2272 /* Send switch change to the device */
2273 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2279 mutex_unlock(&private->data_mutex);
2283 static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
2284 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2286 .info = scarlett2_level_enum_ctl_info,
2287 .get = scarlett2_level_enum_ctl_get,
2288 .put = scarlett2_level_enum_ctl_put,
2291 /*** Pad Switch Controls ***/
2293 static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
2294 struct snd_ctl_elem_value *ucontrol)
2296 struct usb_mixer_elem_info *elem = kctl->private_data;
2297 struct usb_mixer_interface *mixer = elem->head.mixer;
2298 struct scarlett2_data *private = mixer->private_data;
2300 mutex_lock(&private->data_mutex);
2301 if (private->input_other_updated)
2302 scarlett2_update_input_other(mixer);
2303 ucontrol->value.integer.value[0] =
2304 private->pad_switch[elem->control];
2305 mutex_unlock(&private->data_mutex);
2310 static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
2311 struct snd_ctl_elem_value *ucontrol)
2313 struct usb_mixer_elem_info *elem = kctl->private_data;
2314 struct usb_mixer_interface *mixer = elem->head.mixer;
2315 struct scarlett2_data *private = mixer->private_data;
2317 int index = elem->control;
2318 int oval, val, err = 0;
2320 mutex_lock(&private->data_mutex);
2322 oval = private->pad_switch[index];
2323 val = !!ucontrol->value.integer.value[0];
2328 private->pad_switch[index] = val;
2330 /* Send switch change to the device */
2331 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2337 mutex_unlock(&private->data_mutex);
2341 static const struct snd_kcontrol_new scarlett2_pad_ctl = {
2342 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2344 .info = snd_ctl_boolean_mono_info,
2345 .get = scarlett2_pad_ctl_get,
2346 .put = scarlett2_pad_ctl_put,
2349 /*** Air Switch Controls ***/
2351 static int scarlett2_air_ctl_get(struct snd_kcontrol *kctl,
2352 struct snd_ctl_elem_value *ucontrol)
2354 struct usb_mixer_elem_info *elem = kctl->private_data;
2355 struct usb_mixer_interface *mixer = elem->head.mixer;
2356 struct scarlett2_data *private = mixer->private_data;
2358 mutex_lock(&private->data_mutex);
2359 if (private->input_other_updated)
2360 scarlett2_update_input_other(mixer);
2361 ucontrol->value.integer.value[0] = private->air_switch[elem->control];
2362 mutex_unlock(&private->data_mutex);
2367 static int scarlett2_air_ctl_put(struct snd_kcontrol *kctl,
2368 struct snd_ctl_elem_value *ucontrol)
2370 struct usb_mixer_elem_info *elem = kctl->private_data;
2371 struct usb_mixer_interface *mixer = elem->head.mixer;
2372 struct scarlett2_data *private = mixer->private_data;
2374 int index = elem->control;
2375 int oval, val, err = 0;
2377 mutex_lock(&private->data_mutex);
2379 oval = private->air_switch[index];
2380 val = !!ucontrol->value.integer.value[0];
2385 private->air_switch[index] = val;
2387 /* Send switch change to the device */
2388 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2394 mutex_unlock(&private->data_mutex);
2398 static const struct snd_kcontrol_new scarlett2_air_ctl = {
2399 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2401 .info = snd_ctl_boolean_mono_info,
2402 .get = scarlett2_air_ctl_get,
2403 .put = scarlett2_air_ctl_put,
2406 /*** Phantom Switch Controls ***/
2408 static int scarlett2_phantom_ctl_get(struct snd_kcontrol *kctl,
2409 struct snd_ctl_elem_value *ucontrol)
2411 struct usb_mixer_elem_info *elem = kctl->private_data;
2412 struct usb_mixer_interface *mixer = elem->head.mixer;
2413 struct scarlett2_data *private = mixer->private_data;
2415 mutex_lock(&private->data_mutex);
2416 if (private->input_other_updated)
2417 scarlett2_update_input_other(mixer);
2418 ucontrol->value.integer.value[0] =
2419 private->phantom_switch[elem->control];
2420 mutex_unlock(&private->data_mutex);
2425 static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
2426 struct snd_ctl_elem_value *ucontrol)
2428 struct usb_mixer_elem_info *elem = kctl->private_data;
2429 struct usb_mixer_interface *mixer = elem->head.mixer;
2430 struct scarlett2_data *private = mixer->private_data;
2432 int index = elem->control;
2433 int oval, val, err = 0;
2435 mutex_lock(&private->data_mutex);
2437 oval = private->phantom_switch[index];
2438 val = !!ucontrol->value.integer.value[0];
2443 private->phantom_switch[index] = val;
2445 /* Send switch change to the device */
2446 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2452 mutex_unlock(&private->data_mutex);
2456 static const struct snd_kcontrol_new scarlett2_phantom_ctl = {
2457 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2459 .info = snd_ctl_boolean_mono_info,
2460 .get = scarlett2_phantom_ctl_get,
2461 .put = scarlett2_phantom_ctl_put,
2464 /*** Phantom Persistence Control ***/
2466 static int scarlett2_phantom_persistence_ctl_get(
2467 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2469 struct usb_mixer_elem_info *elem = kctl->private_data;
2470 struct scarlett2_data *private = elem->head.mixer->private_data;
2472 ucontrol->value.integer.value[0] = private->phantom_persistence;
2476 static int scarlett2_phantom_persistence_ctl_put(
2477 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2479 struct usb_mixer_elem_info *elem = kctl->private_data;
2480 struct usb_mixer_interface *mixer = elem->head.mixer;
2481 struct scarlett2_data *private = mixer->private_data;
2483 int index = elem->control;
2484 int oval, val, err = 0;
2486 mutex_lock(&private->data_mutex);
2488 oval = private->phantom_persistence;
2489 val = !!ucontrol->value.integer.value[0];
2494 private->phantom_persistence = val;
2496 /* Send switch change to the device */
2497 err = scarlett2_usb_set_config(
2498 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val);
2503 mutex_unlock(&private->data_mutex);
2507 static const struct snd_kcontrol_new scarlett2_phantom_persistence_ctl = {
2508 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2510 .info = snd_ctl_boolean_mono_info,
2511 .get = scarlett2_phantom_persistence_ctl_get,
2512 .put = scarlett2_phantom_persistence_ctl_put,
2515 /*** Direct Monitor Control ***/
2517 static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
2519 struct scarlett2_data *private = mixer->private_data;
2520 const struct scarlett2_device_info *info = private->info;
2523 /* monitor_other_enable[0] enables speaker switching
2524 * monitor_other_enable[1] enables talkback
2526 u8 monitor_other_enable[2];
2528 /* monitor_other_switch[0] activates the alternate speakers
2529 * monitor_other_switch[1] activates talkback
2531 u8 monitor_other_switch[2];
2533 private->monitor_other_updated = 0;
2535 if (info->direct_monitor)
2536 return scarlett2_usb_get_config(
2537 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR,
2538 1, &private->direct_monitor_switch);
2540 /* if it doesn't do speaker switching then it also doesn't do
2543 if (!info->has_speaker_switching)
2546 err = scarlett2_usb_get_config(
2547 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2548 2, monitor_other_enable);
2552 err = scarlett2_usb_get_config(
2553 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2554 2, monitor_other_switch);
2558 if (!monitor_other_enable[0])
2559 private->speaker_switching_switch = 0;
2561 private->speaker_switching_switch = monitor_other_switch[0] + 1;
2563 if (info->has_talkback) {
2564 const int (*port_count)[SCARLETT2_PORT_DIRNS] =
2567 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2571 if (!monitor_other_enable[1])
2572 private->talkback_switch = 0;
2574 private->talkback_switch = monitor_other_switch[1] + 1;
2576 err = scarlett2_usb_get_config(mixer,
2577 SCARLETT2_CONFIG_TALKBACK_MAP,
2581 for (i = 0; i < num_mixes; i++, bitmap >>= 1)
2582 private->talkback_map[i] = bitmap & 1;
2588 static int scarlett2_direct_monitor_ctl_get(
2589 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2591 struct usb_mixer_elem_info *elem = kctl->private_data;
2592 struct usb_mixer_interface *mixer = elem->head.mixer;
2593 struct scarlett2_data *private = elem->head.mixer->private_data;
2595 mutex_lock(&private->data_mutex);
2596 if (private->monitor_other_updated)
2597 scarlett2_update_monitor_other(mixer);
2598 ucontrol->value.enumerated.item[0] = private->direct_monitor_switch;
2599 mutex_unlock(&private->data_mutex);
2604 static int scarlett2_direct_monitor_ctl_put(
2605 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2607 struct usb_mixer_elem_info *elem = kctl->private_data;
2608 struct usb_mixer_interface *mixer = elem->head.mixer;
2609 struct scarlett2_data *private = mixer->private_data;
2611 int index = elem->control;
2612 int oval, val, err = 0;
2614 mutex_lock(&private->data_mutex);
2616 oval = private->direct_monitor_switch;
2617 val = min(ucontrol->value.enumerated.item[0], 2U);
2622 private->direct_monitor_switch = val;
2624 /* Send switch change to the device */
2625 err = scarlett2_usb_set_config(
2626 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val);
2631 mutex_unlock(&private->data_mutex);
2635 static int scarlett2_direct_monitor_stereo_enum_ctl_info(
2636 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2638 static const char *const values[3] = {
2639 "Off", "Mono", "Stereo"
2642 return snd_ctl_enum_info(uinfo, 1, 3, values);
2645 /* Direct Monitor for Solo is mono-only and only needs a boolean control
2646 * Direct Monitor for 2i2 is selectable between Off/Mono/Stereo
2648 static const struct snd_kcontrol_new scarlett2_direct_monitor_ctl[2] = {
2650 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2652 .info = snd_ctl_boolean_mono_info,
2653 .get = scarlett2_direct_monitor_ctl_get,
2654 .put = scarlett2_direct_monitor_ctl_put,
2657 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2659 .info = scarlett2_direct_monitor_stereo_enum_ctl_info,
2660 .get = scarlett2_direct_monitor_ctl_get,
2661 .put = scarlett2_direct_monitor_ctl_put,
2665 static int scarlett2_add_direct_monitor_ctl(struct usb_mixer_interface *mixer)
2667 struct scarlett2_data *private = mixer->private_data;
2668 const struct scarlett2_device_info *info = private->info;
2671 if (!info->direct_monitor)
2674 s = info->direct_monitor == 1
2675 ? "Direct Monitor Playback Switch"
2676 : "Direct Monitor Playback Enum";
2678 return scarlett2_add_new_ctl(
2679 mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1],
2680 0, 1, s, &private->direct_monitor_ctl);
2683 /*** Speaker Switching Control ***/
2685 static int scarlett2_speaker_switch_enum_ctl_info(
2686 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2688 static const char *const values[3] = {
2689 "Off", "Main", "Alt"
2692 return snd_ctl_enum_info(uinfo, 1, 3, values);
2695 static int scarlett2_speaker_switch_enum_ctl_get(
2696 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2698 struct usb_mixer_elem_info *elem = kctl->private_data;
2699 struct usb_mixer_interface *mixer = elem->head.mixer;
2700 struct scarlett2_data *private = mixer->private_data;
2702 mutex_lock(&private->data_mutex);
2703 if (private->monitor_other_updated)
2704 scarlett2_update_monitor_other(mixer);
2705 ucontrol->value.enumerated.item[0] = private->speaker_switching_switch;
2706 mutex_unlock(&private->data_mutex);
2711 /* when speaker switching gets enabled, switch the main/alt speakers
2712 * to HW volume and disable those controls
2714 static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer)
2716 struct snd_card *card = mixer->chip->card;
2717 struct scarlett2_data *private = mixer->private_data;
2720 for (i = 0; i < 4; i++) {
2721 int index = line_out_remap(private, i);
2723 /* switch the main/alt speakers to HW volume */
2724 if (!private->vol_sw_hw_switch[index]) {
2725 err = scarlett2_sw_hw_change(private->mixer, i, 1);
2730 /* disable the line out SW/HW switch */
2731 scarlett2_sw_hw_ctl_ro(private, i);
2732 snd_ctl_notify(card,
2733 SNDRV_CTL_EVENT_MASK_VALUE |
2734 SNDRV_CTL_EVENT_MASK_INFO,
2735 &private->sw_hw_ctls[i]->id);
2738 /* when the next monitor-other notify comes in, update the mux
2741 private->speaker_switching_switched = 1;
2746 /* when speaker switching gets disabled, reenable the hw/sw controls
2747 * and invalidate the routing
2749 static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer)
2751 struct snd_card *card = mixer->chip->card;
2752 struct scarlett2_data *private = mixer->private_data;
2755 /* enable the line out SW/HW switch */
2756 for (i = 0; i < 4; i++) {
2757 scarlett2_sw_hw_ctl_rw(private, i);
2758 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2759 &private->sw_hw_ctls[i]->id);
2762 /* when the next monitor-other notify comes in, update the mux
2765 private->speaker_switching_switched = 1;
2768 static int scarlett2_speaker_switch_enum_ctl_put(
2769 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2771 struct usb_mixer_elem_info *elem = kctl->private_data;
2772 struct usb_mixer_interface *mixer = elem->head.mixer;
2773 struct scarlett2_data *private = mixer->private_data;
2775 int oval, val, err = 0;
2777 mutex_lock(&private->data_mutex);
2779 oval = private->speaker_switching_switch;
2780 val = min(ucontrol->value.enumerated.item[0], 2U);
2785 private->speaker_switching_switch = val;
2787 /* enable/disable speaker switching */
2788 err = scarlett2_usb_set_config(
2789 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2794 /* if speaker switching is enabled, select main or alt */
2795 err = scarlett2_usb_set_config(
2796 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2801 /* update controls if speaker switching gets enabled or disabled */
2803 err = scarlett2_speaker_switch_enable(mixer);
2804 else if (oval && !val)
2805 scarlett2_speaker_switch_disable(mixer);
2811 mutex_unlock(&private->data_mutex);
2815 static const struct snd_kcontrol_new scarlett2_speaker_switch_enum_ctl = {
2816 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2818 .info = scarlett2_speaker_switch_enum_ctl_info,
2819 .get = scarlett2_speaker_switch_enum_ctl_get,
2820 .put = scarlett2_speaker_switch_enum_ctl_put,
2823 static int scarlett2_add_speaker_switch_ctl(
2824 struct usb_mixer_interface *mixer)
2826 struct scarlett2_data *private = mixer->private_data;
2827 const struct scarlett2_device_info *info = private->info;
2829 if (!info->has_speaker_switching)
2832 return scarlett2_add_new_ctl(
2833 mixer, &scarlett2_speaker_switch_enum_ctl,
2834 0, 1, "Speaker Switching Playback Enum",
2835 &private->speaker_switching_ctl);
2838 /*** Talkback and Talkback Map Controls ***/
2840 static int scarlett2_talkback_enum_ctl_info(
2841 struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2843 static const char *const values[3] = {
2844 "Disabled", "Off", "On"
2847 return snd_ctl_enum_info(uinfo, 1, 3, values);
2850 static int scarlett2_talkback_enum_ctl_get(
2851 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2853 struct usb_mixer_elem_info *elem = kctl->private_data;
2854 struct usb_mixer_interface *mixer = elem->head.mixer;
2855 struct scarlett2_data *private = mixer->private_data;
2857 mutex_lock(&private->data_mutex);
2858 if (private->monitor_other_updated)
2859 scarlett2_update_monitor_other(mixer);
2860 ucontrol->value.enumerated.item[0] = private->talkback_switch;
2861 mutex_unlock(&private->data_mutex);
2866 static int scarlett2_talkback_enum_ctl_put(
2867 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2869 struct usb_mixer_elem_info *elem = kctl->private_data;
2870 struct usb_mixer_interface *mixer = elem->head.mixer;
2871 struct scarlett2_data *private = mixer->private_data;
2873 int oval, val, err = 0;
2875 mutex_lock(&private->data_mutex);
2877 oval = private->talkback_switch;
2878 val = min(ucontrol->value.enumerated.item[0], 2U);
2883 private->talkback_switch = val;
2885 /* enable/disable talkback */
2886 err = scarlett2_usb_set_config(
2887 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2892 /* if talkback is enabled, select main or alt */
2893 err = scarlett2_usb_set_config(
2894 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2900 mutex_unlock(&private->data_mutex);
2904 static const struct snd_kcontrol_new scarlett2_talkback_enum_ctl = {
2905 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2907 .info = scarlett2_talkback_enum_ctl_info,
2908 .get = scarlett2_talkback_enum_ctl_get,
2909 .put = scarlett2_talkback_enum_ctl_put,
2912 static int scarlett2_talkback_map_ctl_get(
2913 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2915 struct usb_mixer_elem_info *elem = kctl->private_data;
2916 struct usb_mixer_interface *mixer = elem->head.mixer;
2917 struct scarlett2_data *private = mixer->private_data;
2918 int index = elem->control;
2920 ucontrol->value.integer.value[0] = private->talkback_map[index];
2925 static int scarlett2_talkback_map_ctl_put(
2926 struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2928 struct usb_mixer_elem_info *elem = kctl->private_data;
2929 struct usb_mixer_interface *mixer = elem->head.mixer;
2930 struct scarlett2_data *private = mixer->private_data;
2931 const int (*port_count)[SCARLETT2_PORT_DIRNS] =
2932 private->info->port_count;
2933 int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2935 int index = elem->control;
2936 int oval, val, err = 0, i;
2939 mutex_lock(&private->data_mutex);
2941 oval = private->talkback_map[index];
2942 val = !!ucontrol->value.integer.value[0];
2947 private->talkback_map[index] = val;
2949 for (i = 0; i < num_mixes; i++)
2950 bitmap |= private->talkback_map[i] << i;
2952 /* Send updated bitmap to the device */
2953 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP,
2959 mutex_unlock(&private->data_mutex);
2963 static const struct snd_kcontrol_new scarlett2_talkback_map_ctl = {
2964 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2966 .info = snd_ctl_boolean_mono_info,
2967 .get = scarlett2_talkback_map_ctl_get,
2968 .put = scarlett2_talkback_map_ctl_put,
2971 static int scarlett2_add_talkback_ctls(
2972 struct usb_mixer_interface *mixer)
2974 struct scarlett2_data *private = mixer->private_data;
2975 const struct scarlett2_device_info *info = private->info;
2976 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2977 int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2979 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2981 if (!info->has_talkback)
2984 err = scarlett2_add_new_ctl(
2985 mixer, &scarlett2_talkback_enum_ctl,
2986 0, 1, "Talkback Playback Enum",
2987 &private->talkback_ctl);
2991 for (i = 0; i < num_mixes; i++) {
2992 snprintf(s, sizeof(s),
2993 "Talkback Mix %c Playback Switch", i + 'A');
2994 err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl,
3003 /*** Dim/Mute Controls ***/
3005 static int scarlett2_dim_mute_ctl_get(struct snd_kcontrol *kctl,
3006 struct snd_ctl_elem_value *ucontrol)
3008 struct usb_mixer_elem_info *elem = kctl->private_data;
3009 struct usb_mixer_interface *mixer = elem->head.mixer;
3010 struct scarlett2_data *private = mixer->private_data;
3012 mutex_lock(&private->data_mutex);
3013 if (private->vol_updated)
3014 scarlett2_update_volumes(mixer);
3015 mutex_unlock(&private->data_mutex);
3017 ucontrol->value.integer.value[0] = private->dim_mute[elem->control];
3021 static int scarlett2_dim_mute_ctl_put(struct snd_kcontrol *kctl,
3022 struct snd_ctl_elem_value *ucontrol)
3024 struct usb_mixer_elem_info *elem = kctl->private_data;
3025 struct usb_mixer_interface *mixer = elem->head.mixer;
3026 struct scarlett2_data *private = mixer->private_data;
3027 const struct scarlett2_device_info *info = private->info;
3028 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3030 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3032 int index = elem->control;
3033 int oval, val, err = 0, i;
3035 mutex_lock(&private->data_mutex);
3037 oval = private->dim_mute[index];
3038 val = !!ucontrol->value.integer.value[0];
3043 private->dim_mute[index] = val;
3045 /* Send switch change to the device */
3046 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE,
3051 if (index == SCARLETT2_BUTTON_MUTE)
3052 for (i = 0; i < num_line_out; i++) {
3053 int line_index = line_out_remap(private, i);
3055 if (private->vol_sw_hw_switch[line_index]) {
3056 private->mute_switch[line_index] = val;
3057 snd_ctl_notify(mixer->chip->card,
3058 SNDRV_CTL_EVENT_MASK_VALUE,
3059 &private->mute_ctls[i]->id);
3064 mutex_unlock(&private->data_mutex);
3068 static const struct snd_kcontrol_new scarlett2_dim_mute_ctl = {
3069 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3071 .info = snd_ctl_boolean_mono_info,
3072 .get = scarlett2_dim_mute_ctl_get,
3073 .put = scarlett2_dim_mute_ctl_put
3076 /*** Create the analogue output controls ***/
3078 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
3080 struct scarlett2_data *private = mixer->private_data;
3081 const struct scarlett2_device_info *info = private->info;
3082 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3084 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3086 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3088 /* Add R/O HW volume control */
3089 if (info->line_out_hw_vol) {
3090 snprintf(s, sizeof(s), "Master HW Playback Volume");
3091 err = scarlett2_add_new_ctl(mixer,
3092 &scarlett2_master_volume_ctl,
3093 0, 1, s, &private->master_vol_ctl);
3098 /* Add volume controls */
3099 for (i = 0; i < num_line_out; i++) {
3100 int index = line_out_remap(private, i);
3103 if (info->line_out_descrs[i])
3104 snprintf(s, sizeof(s),
3105 "Line %02d (%s) Playback Volume",
3106 i + 1, info->line_out_descrs[i]);
3108 snprintf(s, sizeof(s),
3109 "Line %02d Playback Volume",
3111 err = scarlett2_add_new_ctl(mixer,
3112 &scarlett2_line_out_volume_ctl,
3113 i, 1, s, &private->vol_ctls[i]);
3118 snprintf(s, sizeof(s),
3119 "Line %02d Mute Playback Switch",
3121 err = scarlett2_add_new_ctl(mixer,
3122 &scarlett2_mute_ctl,
3124 &private->mute_ctls[i]);
3128 /* Make the fader and mute controls read-only if the
3129 * SW/HW switch is set to HW
3131 if (private->vol_sw_hw_switch[index])
3132 scarlett2_vol_ctl_set_writable(mixer, i, 0);
3135 if (info->line_out_hw_vol) {
3136 snprintf(s, sizeof(s),
3137 "Line Out %02d Volume Control Playback Enum",
3139 err = scarlett2_add_new_ctl(mixer,
3140 &scarlett2_sw_hw_enum_ctl,
3142 &private->sw_hw_ctls[i]);
3146 /* Make the switch read-only if the line is
3147 * involved in speaker switching
3149 if (private->speaker_switching_switch && i < 4)
3150 scarlett2_sw_hw_ctl_ro(private, i);
3154 /* Add dim/mute controls */
3155 if (info->line_out_hw_vol)
3156 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++) {
3157 err = scarlett2_add_new_ctl(
3158 mixer, &scarlett2_dim_mute_ctl,
3159 i, 1, scarlett2_dim_mute_names[i],
3160 &private->dim_mute_ctls[i]);
3168 /*** Create the analogue input controls ***/
3170 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
3172 struct scarlett2_data *private = mixer->private_data;
3173 const struct scarlett2_device_info *info = private->info;
3175 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3176 const char *fmt = "Line In %d %s Capture %s";
3177 const char *fmt2 = "Line In %d-%d %s Capture %s";
3179 /* Add input level (line/inst) controls */
3180 for (i = 0; i < info->level_input_count; i++) {
3181 snprintf(s, sizeof(s), fmt, i + 1 + info->level_input_first,
3183 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
3184 i, 1, s, &private->level_ctls[i]);
3189 /* Add input pad controls */
3190 for (i = 0; i < info->pad_input_count; i++) {
3191 snprintf(s, sizeof(s), fmt, i + 1, "Pad", "Switch");
3192 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
3193 i, 1, s, &private->pad_ctls[i]);
3198 /* Add input air controls */
3199 for (i = 0; i < info->air_input_count; i++) {
3200 snprintf(s, sizeof(s), fmt, i + 1, "Air", "Switch");
3201 err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl,
3202 i, 1, s, &private->air_ctls[i]);
3207 /* Add input phantom controls */
3208 if (info->inputs_per_phantom == 1) {
3209 for (i = 0; i < info->phantom_count; i++) {
3210 scnprintf(s, sizeof(s), fmt, i + 1,
3211 "Phantom Power", "Switch");
3212 err = scarlett2_add_new_ctl(
3213 mixer, &scarlett2_phantom_ctl,
3214 i, 1, s, &private->phantom_ctls[i]);
3218 } else if (info->inputs_per_phantom > 1) {
3219 for (i = 0; i < info->phantom_count; i++) {
3220 int from = i * info->inputs_per_phantom + 1;
3221 int to = (i + 1) * info->inputs_per_phantom;
3223 scnprintf(s, sizeof(s), fmt2, from, to,
3224 "Phantom Power", "Switch");
3225 err = scarlett2_add_new_ctl(
3226 mixer, &scarlett2_phantom_ctl,
3227 i, 1, s, &private->phantom_ctls[i]);
3232 if (info->phantom_count) {
3233 err = scarlett2_add_new_ctl(
3234 mixer, &scarlett2_phantom_persistence_ctl, 0, 1,
3235 "Phantom Power Persistence Capture Switch", NULL);
3243 /*** Mixer Volume Controls ***/
3245 static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
3246 struct snd_ctl_elem_info *uinfo)
3248 struct usb_mixer_elem_info *elem = kctl->private_data;
3250 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3251 uinfo->count = elem->channels;
3252 uinfo->value.integer.min = 0;
3253 uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
3254 uinfo->value.integer.step = 1;
3258 static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
3259 struct snd_ctl_elem_value *ucontrol)
3261 struct usb_mixer_elem_info *elem = kctl->private_data;
3262 struct scarlett2_data *private = elem->head.mixer->private_data;
3264 ucontrol->value.integer.value[0] = private->mix[elem->control];
3268 static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
3269 struct snd_ctl_elem_value *ucontrol)
3271 struct usb_mixer_elem_info *elem = kctl->private_data;
3272 struct usb_mixer_interface *mixer = elem->head.mixer;
3273 struct scarlett2_data *private = mixer->private_data;
3274 const struct scarlett2_device_info *info = private->info;
3275 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3276 int oval, val, num_mixer_in, mix_num, err = 0;
3277 int index = elem->control;
3279 mutex_lock(&private->data_mutex);
3281 oval = private->mix[index];
3282 val = ucontrol->value.integer.value[0];
3283 num_mixer_in = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3284 mix_num = index / num_mixer_in;
3289 private->mix[index] = val;
3290 err = scarlett2_usb_set_mix(mixer, mix_num);
3295 mutex_unlock(&private->data_mutex);
3299 static const DECLARE_TLV_DB_MINMAX(
3300 db_scale_scarlett2_mixer,
3301 SCARLETT2_MIXER_MIN_DB * 100,
3302 SCARLETT2_MIXER_MAX_DB * 100
3305 static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
3306 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3307 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3308 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3310 .info = scarlett2_mixer_ctl_info,
3311 .get = scarlett2_mixer_ctl_get,
3312 .put = scarlett2_mixer_ctl_put,
3313 .private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
3314 .tlv = { .p = db_scale_scarlett2_mixer }
3317 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
3319 struct scarlett2_data *private = mixer->private_data;
3320 const struct scarlett2_device_info *info = private->info;
3321 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3324 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3327 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3329 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3331 for (i = 0, index = 0; i < num_outputs; i++)
3332 for (j = 0; j < num_inputs; j++, index++) {
3333 snprintf(s, sizeof(s),
3334 "Mix %c Input %02d Playback Volume",
3336 err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
3345 /*** Mux Source Selection Controls ***/
3347 static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
3348 struct snd_ctl_elem_info *uinfo)
3350 struct usb_mixer_elem_info *elem = kctl->private_data;
3351 struct scarlett2_data *private = elem->head.mixer->private_data;
3352 const struct scarlett2_device_info *info = private->info;
3353 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3354 unsigned int item = uinfo->value.enumerated.item;
3355 int items = private->num_mux_srcs;
3358 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3359 uinfo->count = elem->channels;
3360 uinfo->value.enumerated.items = items;
3363 item = uinfo->value.enumerated.item = items - 1;
3366 port_type < SCARLETT2_PORT_TYPE_COUNT;
3368 if (item < port_count[port_type][SCARLETT2_PORT_IN]) {
3369 const struct scarlett2_port *port =
3370 &scarlett2_ports[port_type];
3372 sprintf(uinfo->value.enumerated.name,
3373 port->src_descr, item + port->src_num_offset);
3376 item -= port_count[port_type][SCARLETT2_PORT_IN];
3382 static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
3383 struct snd_ctl_elem_value *ucontrol)
3385 struct usb_mixer_elem_info *elem = kctl->private_data;
3386 struct usb_mixer_interface *mixer = elem->head.mixer;
3387 struct scarlett2_data *private = mixer->private_data;
3388 const struct scarlett2_device_info *info = private->info;
3389 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3390 int line_out_count =
3391 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3392 int index = elem->control;
3394 if (index < line_out_count)
3395 index = line_out_remap(private, index);
3397 mutex_lock(&private->data_mutex);
3398 if (private->mux_updated)
3399 scarlett2_usb_get_mux(mixer);
3400 ucontrol->value.enumerated.item[0] = private->mux[index];
3401 mutex_unlock(&private->data_mutex);
3406 static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
3407 struct snd_ctl_elem_value *ucontrol)
3409 struct usb_mixer_elem_info *elem = kctl->private_data;
3410 struct usb_mixer_interface *mixer = elem->head.mixer;
3411 struct scarlett2_data *private = mixer->private_data;
3412 const struct scarlett2_device_info *info = private->info;
3413 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3414 int line_out_count =
3415 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3416 int index = elem->control;
3417 int oval, val, err = 0;
3419 if (index < line_out_count)
3420 index = line_out_remap(private, index);
3422 mutex_lock(&private->data_mutex);
3424 oval = private->mux[index];
3425 val = min(ucontrol->value.enumerated.item[0],
3426 private->num_mux_srcs - 1U);
3431 private->mux[index] = val;
3432 err = scarlett2_usb_set_mux(mixer);
3437 mutex_unlock(&private->data_mutex);
3441 static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
3442 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3444 .info = scarlett2_mux_src_enum_ctl_info,
3445 .get = scarlett2_mux_src_enum_ctl_get,
3446 .put = scarlett2_mux_src_enum_ctl_put,
3449 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
3451 struct scarlett2_data *private = mixer->private_data;
3452 const struct scarlett2_device_info *info = private->info;
3453 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3454 int port_type, channel, i;
3456 for (i = 0, port_type = 0;
3457 port_type < SCARLETT2_PORT_TYPE_COUNT;
3460 channel < port_count[port_type][SCARLETT2_PORT_OUT];
3463 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3464 const char *const descr =
3465 scarlett2_ports[port_type].dst_descr;
3467 snprintf(s, sizeof(s) - 5, descr, channel + 1);
3470 err = scarlett2_add_new_ctl(mixer,
3471 &scarlett2_mux_src_enum_ctl,
3473 &private->mux_ctls[i]);
3482 /*** Meter Controls ***/
3484 static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
3485 struct snd_ctl_elem_info *uinfo)
3487 struct usb_mixer_elem_info *elem = kctl->private_data;
3489 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3490 uinfo->count = elem->channels;
3491 uinfo->value.integer.min = 0;
3492 uinfo->value.integer.max = 4095;
3493 uinfo->value.integer.step = 1;
3497 static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
3498 struct snd_ctl_elem_value *ucontrol)
3500 struct usb_mixer_elem_info *elem = kctl->private_data;
3501 u16 meter_levels[SCARLETT2_MAX_METERS];
3504 err = scarlett2_usb_get_meter_levels(elem->head.mixer, elem->channels,
3509 for (i = 0; i < elem->channels; i++)
3510 ucontrol->value.integer.value[i] = meter_levels[i];
3515 static const struct snd_kcontrol_new scarlett2_meter_ctl = {
3516 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
3517 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
3519 .info = scarlett2_meter_ctl_info,
3520 .get = scarlett2_meter_ctl_get
3523 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
3525 struct scarlett2_data *private = mixer->private_data;
3527 /* devices without a mixer also don't support reporting levels */
3528 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3531 return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
3532 0, private->num_mux_dsts,
3533 "Level Meter", NULL);
3536 /*** MSD Controls ***/
3538 static int scarlett2_msd_ctl_get(struct snd_kcontrol *kctl,
3539 struct snd_ctl_elem_value *ucontrol)
3541 struct usb_mixer_elem_info *elem = kctl->private_data;
3542 struct scarlett2_data *private = elem->head.mixer->private_data;
3544 ucontrol->value.integer.value[0] = private->msd_switch;
3548 static int scarlett2_msd_ctl_put(struct snd_kcontrol *kctl,
3549 struct snd_ctl_elem_value *ucontrol)
3551 struct usb_mixer_elem_info *elem = kctl->private_data;
3552 struct usb_mixer_interface *mixer = elem->head.mixer;
3553 struct scarlett2_data *private = mixer->private_data;
3555 int oval, val, err = 0;
3557 mutex_lock(&private->data_mutex);
3559 oval = private->msd_switch;
3560 val = !!ucontrol->value.integer.value[0];
3565 private->msd_switch = val;
3567 /* Send switch change to the device */
3568 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3574 mutex_unlock(&private->data_mutex);
3578 static const struct snd_kcontrol_new scarlett2_msd_ctl = {
3579 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3581 .info = snd_ctl_boolean_mono_info,
3582 .get = scarlett2_msd_ctl_get,
3583 .put = scarlett2_msd_ctl_put,
3586 static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer)
3588 struct scarlett2_data *private = mixer->private_data;
3589 const struct scarlett2_device_info *info = private->info;
3591 if (!info->has_msd_mode)
3594 /* If MSD mode is off, hide the switch by default */
3595 if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE))
3598 /* Add MSD control */
3599 return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl,
3600 0, 1, "MSD Mode Switch", NULL);
3603 /*** Standalone Control ***/
3605 static int scarlett2_standalone_ctl_get(struct snd_kcontrol *kctl,
3606 struct snd_ctl_elem_value *ucontrol)
3608 struct usb_mixer_elem_info *elem = kctl->private_data;
3609 struct scarlett2_data *private = elem->head.mixer->private_data;
3611 ucontrol->value.integer.value[0] = private->standalone_switch;
3615 static int scarlett2_standalone_ctl_put(struct snd_kcontrol *kctl,
3616 struct snd_ctl_elem_value *ucontrol)
3618 struct usb_mixer_elem_info *elem = kctl->private_data;
3619 struct usb_mixer_interface *mixer = elem->head.mixer;
3620 struct scarlett2_data *private = mixer->private_data;
3622 int oval, val, err = 0;
3624 mutex_lock(&private->data_mutex);
3626 oval = private->standalone_switch;
3627 val = !!ucontrol->value.integer.value[0];
3632 private->standalone_switch = val;
3634 /* Send switch change to the device */
3635 err = scarlett2_usb_set_config(mixer,
3636 SCARLETT2_CONFIG_STANDALONE_SWITCH,
3642 mutex_unlock(&private->data_mutex);
3646 static const struct snd_kcontrol_new scarlett2_standalone_ctl = {
3647 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3649 .info = snd_ctl_boolean_mono_info,
3650 .get = scarlett2_standalone_ctl_get,
3651 .put = scarlett2_standalone_ctl_put,
3654 static int scarlett2_add_standalone_ctl(struct usb_mixer_interface *mixer)
3656 struct scarlett2_data *private = mixer->private_data;
3658 if (private->info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3661 /* Add standalone control */
3662 return scarlett2_add_new_ctl(mixer, &scarlett2_standalone_ctl,
3663 0, 1, "Standalone Switch", NULL);
3666 /*** Cleanup/Suspend Callbacks ***/
3668 static void scarlett2_private_free(struct usb_mixer_interface *mixer)
3670 struct scarlett2_data *private = mixer->private_data;
3672 cancel_delayed_work_sync(&private->work);
3674 mixer->private_data = NULL;
3677 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
3679 struct scarlett2_data *private = mixer->private_data;
3681 if (cancel_delayed_work_sync(&private->work))
3682 scarlett2_config_save(private->mixer);
3685 /*** Initialisation ***/
3687 static void scarlett2_count_mux_io(struct scarlett2_data *private)
3689 const struct scarlett2_device_info *info = private->info;
3690 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3691 int port_type, srcs = 0, dsts = 0;
3694 port_type < SCARLETT2_PORT_TYPE_COUNT;
3696 srcs += port_count[port_type][SCARLETT2_PORT_IN];
3697 dsts += port_count[port_type][SCARLETT2_PORT_OUT];
3700 private->num_mux_srcs = srcs;
3701 private->num_mux_dsts = dsts;
3704 /* Look through the interface descriptors for the Focusrite Control
3705 * interface (bInterfaceClass = 255 Vendor Specific Class) and set
3706 * bInterfaceNumber, bEndpointAddress, wMaxPacketSize, and bInterval
3709 static int scarlett2_find_fc_interface(struct usb_device *dev,
3710 struct scarlett2_data *private)
3712 struct usb_host_config *config = dev->actconfig;
3715 for (i = 0; i < config->desc.bNumInterfaces; i++) {
3716 struct usb_interface *intf = config->interface[i];
3717 struct usb_interface_descriptor *desc =
3718 &intf->altsetting[0].desc;
3719 struct usb_endpoint_descriptor *epd;
3721 if (desc->bInterfaceClass != 255)
3724 epd = get_endpoint(intf->altsetting, 0);
3725 private->bInterfaceNumber = desc->bInterfaceNumber;
3726 private->bEndpointAddress = epd->bEndpointAddress &
3727 USB_ENDPOINT_NUMBER_MASK;
3728 private->wMaxPacketSize = le16_to_cpu(epd->wMaxPacketSize);
3729 private->bInterval = epd->bInterval;
3736 /* Initialise private data */
3737 static int scarlett2_init_private(struct usb_mixer_interface *mixer,
3738 const struct scarlett2_device_info *info)
3740 struct scarlett2_data *private =
3741 kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
3746 mutex_init(&private->usb_mutex);
3747 mutex_init(&private->data_mutex);
3748 INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
3750 mixer->private_data = private;
3751 mixer->private_free = scarlett2_private_free;
3752 mixer->private_suspend = scarlett2_private_suspend;
3754 private->info = info;
3755 scarlett2_count_mux_io(private);
3756 private->scarlett2_seq = 0;
3757 private->mixer = mixer;
3759 return scarlett2_find_fc_interface(mixer->chip->dev, private);
3762 /* Cargo cult proprietary initialisation sequence */
3763 static int scarlett2_usb_init(struct usb_mixer_interface *mixer)
3765 struct usb_device *dev = mixer->chip->dev;
3766 struct scarlett2_data *private = mixer->private_data;
3770 if (usb_pipe_type_check(dev, usb_sndctrlpipe(dev, 0)))
3774 err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
3775 SCARLETT2_USB_CMD_INIT, buf, sizeof(buf));
3780 private->scarlett2_seq = 1;
3781 err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0);
3786 private->scarlett2_seq = 1;
3787 return scarlett2_usb(mixer, SCARLETT2_USB_INIT_2, NULL, 0, NULL, 84);
3790 /* Read configuration from the interface on start */
3791 static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
3793 struct scarlett2_data *private = mixer->private_data;
3794 const struct scarlett2_device_info *info = private->info;
3795 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3797 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3799 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3800 struct scarlett2_usb_volume_status volume_status;
3803 if (info->has_msd_mode) {
3804 err = scarlett2_usb_get_config(
3805 mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3806 1, &private->msd_switch);
3810 /* no other controls are created if MSD mode is on */
3811 if (private->msd_switch)
3815 err = scarlett2_update_input_other(mixer);
3819 err = scarlett2_update_monitor_other(mixer);
3823 /* the rest of the configuration is for devices with a mixer */
3824 if (info->config_set == SCARLETT2_CONFIG_SET_NO_MIXER)
3827 err = scarlett2_usb_get_config(
3828 mixer, SCARLETT2_CONFIG_STANDALONE_SWITCH,
3829 1, &private->standalone_switch);
3833 err = scarlett2_update_sync(mixer);
3837 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
3841 if (info->line_out_hw_vol)
3842 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3843 private->dim_mute[i] = !!volume_status.dim_mute[i];
3845 private->master_vol = clamp(
3846 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
3847 0, SCARLETT2_VOLUME_BIAS);
3849 for (i = 0; i < num_line_out; i++) {
3852 private->vol_sw_hw_switch[i] =
3853 info->line_out_hw_vol
3854 && volume_status.sw_hw_switch[i];
3856 volume = private->vol_sw_hw_switch[i]
3857 ? volume_status.master_vol
3858 : volume_status.sw_vol[i];
3859 volume = clamp(volume + SCARLETT2_VOLUME_BIAS,
3860 0, SCARLETT2_VOLUME_BIAS);
3861 private->vol[i] = volume;
3863 mute = private->vol_sw_hw_switch[i]
3864 ? private->dim_mute[SCARLETT2_BUTTON_MUTE]
3865 : volume_status.mute_switch[i];
3866 private->mute_switch[i] = mute;
3869 for (i = 0; i < num_mixer_out; i++) {
3870 err = scarlett2_usb_get_mix(mixer, i);
3875 return scarlett2_usb_get_mux(mixer);
3878 /* Notify on sync change */
3879 static void scarlett2_notify_sync(
3880 struct usb_mixer_interface *mixer)
3882 struct scarlett2_data *private = mixer->private_data;
3884 private->sync_updated = 1;
3886 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3887 &private->sync_ctl->id);
3890 /* Notify on monitor change */
3891 static void scarlett2_notify_monitor(
3892 struct usb_mixer_interface *mixer)
3894 struct snd_card *card = mixer->chip->card;
3895 struct scarlett2_data *private = mixer->private_data;
3896 const struct scarlett2_device_info *info = private->info;
3897 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3899 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3902 /* if line_out_hw_vol is 0, there are no controls to update */
3903 if (!info->line_out_hw_vol)
3906 private->vol_updated = 1;
3908 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3909 &private->master_vol_ctl->id);
3911 for (i = 0; i < num_line_out; i++)
3912 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
3913 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3914 &private->vol_ctls[i]->id);
3917 /* Notify on dim/mute change */
3918 static void scarlett2_notify_dim_mute(
3919 struct usb_mixer_interface *mixer)
3921 struct snd_card *card = mixer->chip->card;
3922 struct scarlett2_data *private = mixer->private_data;
3923 const struct scarlett2_device_info *info = private->info;
3924 const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3926 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3929 private->vol_updated = 1;
3931 if (!info->line_out_hw_vol)
3934 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3935 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3936 &private->dim_mute_ctls[i]->id);
3938 for (i = 0; i < num_line_out; i++)
3939 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
3940 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3941 &private->mute_ctls[i]->id);
3944 /* Notify on "input other" change (level/pad/air) */
3945 static void scarlett2_notify_input_other(
3946 struct usb_mixer_interface *mixer)
3948 struct snd_card *card = mixer->chip->card;
3949 struct scarlett2_data *private = mixer->private_data;
3950 const struct scarlett2_device_info *info = private->info;
3953 private->input_other_updated = 1;
3955 for (i = 0; i < info->level_input_count; i++)
3956 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3957 &private->level_ctls[i]->id);
3958 for (i = 0; i < info->pad_input_count; i++)
3959 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3960 &private->pad_ctls[i]->id);
3961 for (i = 0; i < info->air_input_count; i++)
3962 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3963 &private->air_ctls[i]->id);
3964 for (i = 0; i < info->phantom_count; i++)
3965 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3966 &private->phantom_ctls[i]->id);
3969 /* Notify on "monitor other" change (direct monitor, speaker
3970 * switching, talkback)
3972 static void scarlett2_notify_monitor_other(
3973 struct usb_mixer_interface *mixer)
3975 struct snd_card *card = mixer->chip->card;
3976 struct scarlett2_data *private = mixer->private_data;
3977 const struct scarlett2_device_info *info = private->info;
3979 private->monitor_other_updated = 1;
3981 if (info->direct_monitor) {
3982 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3983 &private->direct_monitor_ctl->id);
3987 if (info->has_speaker_switching)
3988 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3989 &private->speaker_switching_ctl->id);
3991 if (info->has_talkback)
3992 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3993 &private->talkback_ctl->id);
3995 /* if speaker switching was recently enabled or disabled,
3996 * invalidate the dim/mute and mux enum controls
3998 if (private->speaker_switching_switched) {
4001 scarlett2_notify_dim_mute(mixer);
4003 private->speaker_switching_switched = 0;
4004 private->mux_updated = 1;
4006 for (i = 0; i < private->num_mux_dsts; i++)
4007 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
4008 &private->mux_ctls[i]->id);
4012 /* Interrupt callback */
4013 static void scarlett2_notify(struct urb *urb)
4015 struct usb_mixer_interface *mixer = urb->context;
4016 int len = urb->actual_length;
4017 int ustatus = urb->status;
4020 if (ustatus != 0 || len != 8)
4023 data = le32_to_cpu(*(__le32 *)urb->transfer_buffer);
4024 if (data & SCARLETT2_USB_NOTIFY_SYNC)
4025 scarlett2_notify_sync(mixer);
4026 if (data & SCARLETT2_USB_NOTIFY_MONITOR)
4027 scarlett2_notify_monitor(mixer);
4028 if (data & SCARLETT2_USB_NOTIFY_DIM_MUTE)
4029 scarlett2_notify_dim_mute(mixer);
4030 if (data & SCARLETT2_USB_NOTIFY_INPUT_OTHER)
4031 scarlett2_notify_input_other(mixer);
4032 if (data & SCARLETT2_USB_NOTIFY_MONITOR_OTHER)
4033 scarlett2_notify_monitor_other(mixer);
4036 if (ustatus != -ENOENT &&
4037 ustatus != -ECONNRESET &&
4038 ustatus != -ESHUTDOWN) {
4039 urb->dev = mixer->chip->dev;
4040 usb_submit_urb(urb, GFP_ATOMIC);
4044 static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
4046 struct usb_device *dev = mixer->chip->dev;
4047 struct scarlett2_data *private = mixer->private_data;
4048 unsigned int pipe = usb_rcvintpipe(dev, private->bEndpointAddress);
4049 void *transfer_buffer;
4052 usb_audio_err(mixer->chip,
4053 "%s: mixer urb already in use!\n", __func__);
4057 if (usb_pipe_type_check(dev, pipe))
4060 mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
4064 transfer_buffer = kmalloc(private->wMaxPacketSize, GFP_KERNEL);
4065 if (!transfer_buffer)
4068 usb_fill_int_urb(mixer->urb, dev, pipe,
4069 transfer_buffer, private->wMaxPacketSize,
4070 scarlett2_notify, mixer, private->bInterval);
4072 return usb_submit_urb(mixer->urb, GFP_KERNEL);
4075 static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
4077 const struct scarlett2_device_info **info = scarlett2_devices;
4080 /* Find device in scarlett2_devices */
4081 while (*info && (*info)->usb_id != mixer->chip->usb_id)
4086 /* Initialise private data */
4087 err = scarlett2_init_private(mixer, *info);
4091 /* Send proprietary USB initialisation sequence */
4092 err = scarlett2_usb_init(mixer);
4096 /* Read volume levels and controls from the interface */
4097 err = scarlett2_read_configs(mixer);
4101 /* Create the MSD control */
4102 err = scarlett2_add_msd_ctl(mixer);
4106 /* If MSD mode is enabled, don't create any other controls */
4107 if (((struct scarlett2_data *)mixer->private_data)->msd_switch)
4110 /* Create the analogue output controls */
4111 err = scarlett2_add_line_out_ctls(mixer);
4115 /* Create the analogue input controls */
4116 err = scarlett2_add_line_in_ctls(mixer);
4120 /* Create the input, output, and mixer mux input selections */
4121 err = scarlett2_add_mux_enums(mixer);
4125 /* Create the matrix mixer controls */
4126 err = scarlett2_add_mixer_ctls(mixer);
4130 /* Create the level meter controls */
4131 err = scarlett2_add_meter_ctl(mixer);
4135 /* Create the sync control */
4136 err = scarlett2_add_sync_ctl(mixer);
4140 /* Create the direct monitor control */
4141 err = scarlett2_add_direct_monitor_ctl(mixer);
4145 /* Create the speaker switching control */
4146 err = scarlett2_add_speaker_switch_ctl(mixer);
4150 /* Create the talkback controls */
4151 err = scarlett2_add_talkback_ctls(mixer);
4155 /* Create the standalone control */
4156 err = scarlett2_add_standalone_ctl(mixer);
4160 /* Set up the interrupt polling */
4161 err = scarlett2_init_notify(mixer);
4168 int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
4170 struct snd_usb_audio *chip = mixer->chip;
4173 /* only use UAC_VERSION_2 */
4174 if (!mixer->protocol)
4177 if (!(chip->setup & SCARLETT2_ENABLE)) {
4178 usb_audio_info(chip,
4179 "Focusrite Scarlett Gen 2/3 Mixer Driver disabled; "
4180 "use options snd_usb_audio vid=0x%04x pid=0x%04x "
4181 "device_setup=1 to enable and report any issues "
4183 USB_ID_VENDOR(chip->usb_id),
4184 USB_ID_PRODUCT(chip->usb_id));
4188 usb_audio_info(chip,
4189 "Focusrite Scarlett Gen 2/3 Mixer Driver enabled pid=0x%04x",
4190 USB_ID_PRODUCT(chip->usb_id));
4192 err = snd_scarlett_gen2_controls_create(mixer);
4194 usb_audio_err(mixer->chip,
4195 "Error initialising Scarlett Mixer Driver: %d",