GNU Linux-libre 6.8.9-gnu
[releases.git] / sound / usb / mixer_scarlett2.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *   Focusrite Scarlett 2 Protocol Driver for ALSA
4  *   (including Scarlett 2nd Gen, 3rd Gen, 4th Gen, Clarett USB, and
5  *   Clarett+ series products)
6  *
7  *   Supported models:
8  *   - 6i6/18i8/18i20 Gen 2
9  *   - Solo/2i2/4i4/8i6/18i8/18i20 Gen 3
10  *   - Solo/2i2/4i4 Gen 4
11  *   - Clarett 2Pre/4Pre/8Pre USB
12  *   - Clarett+ 2Pre/4Pre/8Pre
13  *
14  *   Copyright (c) 2018-2023 by Geoffrey D. Bennett <g at b4.vu>
15  *   Copyright (c) 2020-2021 by Vladimir Sadovnikov <sadko4u@gmail.com>
16  *   Copyright (c) 2022 by Christian Colglazier <christian@cacolglazier.com>
17  *
18  *   Based on the Scarlett (Gen 1) Driver for ALSA:
19  *
20  *   Copyright (c) 2013 by Tobias Hoffmann
21  *   Copyright (c) 2013 by Robin Gareus <robin at gareus.org>
22  *   Copyright (c) 2002 by Takashi Iwai <tiwai at suse.de>
23  *   Copyright (c) 2014 by Chris J Arges <chris.j.arges at canonical.com>
24  *
25  *   Many codes borrowed from audio.c by
26  *     Alan Cox (alan at lxorguk.ukuu.org.uk)
27  *     Thomas Sailer (sailer at ife.ee.ethz.ch)
28  *
29  *   Code cleanup:
30  *   David Henningsson <david.henningsson at canonical.com>
31  */
32
33 /* The protocol was reverse engineered by looking at the communication
34  * between Focusrite Control 2.3.4 and the Focusrite(R) Scarlett 18i20
35  * (firmware 1083) using usbmon in July-August 2018.
36  *
37  * Scarlett 18i8 support added in April 2019.
38  *
39  * Scarlett 6i6 support added in June 2019 (thanks to Martin Wittmann
40  * for providing usbmon output and testing).
41  *
42  * Scarlett 4i4/8i6 Gen 3 support added in May 2020 (thanks to Laurent
43  * Debricon for donating a 4i4 and to Fredrik Unger for providing 8i6
44  * usbmon output and testing).
45  *
46  * Scarlett 18i8/18i20 Gen 3 support added in June 2020 (thanks to
47  * Darren Jaeckel, Alex Sedlack, and Clovis Lunel for providing usbmon
48  * output, protocol traces and testing).
49  *
50  * Support for loading mixer volume and mux configuration from the
51  * interface during driver initialisation added in May 2021 (thanks to
52  * Vladimir Sadovnikov for figuring out how).
53  *
54  * Support for Solo/2i2 Gen 3 added in May 2021 (thanks to Alexander
55  * Vorona for 2i2 protocol traces).
56  *
57  * Support for phantom power, direct monitoring, speaker switching,
58  * and talkback added in May-June 2021.
59  *
60  * Support for Clarett+ 8Pre added in Aug 2022 by Christian
61  * Colglazier.
62  *
63  * Support for Clarett 8Pre USB added in Sep 2023 (thanks to Philippe
64  * Perrot for confirmation).
65  *
66  * Support for Clarett+ 4Pre and 2Pre added in Sep 2023 (thanks to
67  * Gregory Rozzo for donating a 4Pre, and David Sherwood and Patrice
68  * Peterson for usbmon output).
69  *
70  * Support for Clarett 2Pre and 4Pre USB added in Oct 2023.
71  *
72  * Support for firmware updates added in Dec 2023.
73  *
74  * Support for Scarlett Solo/2i2/4i4 Gen 4 added in Dec 2023 (thanks
75  * to many LinuxMusicians people and to Focusrite for hardware
76  * donations).
77  *
78  * This ALSA mixer gives access to (model-dependent):
79  *  - input, output, mixer-matrix muxes
80  *  - mixer-matrix gain stages
81  *  - gain/volume/mute controls
82  *  - level meters
83  *  - line/inst level, pad, and air controls
84  *  - phantom power, direct monitor, speaker switching, and talkback
85  *    controls
86  *  - disable/enable MSD mode
87  *  - disable/enable standalone mode
88  *  - input gain, autogain, safe mode
89  *  - direct monitor mixes
90  *
91  * <ditaa>
92  *    /--------------\    18chn            20chn     /--------------\
93  *    | Hardware  in +--+------\    /-------------+--+ ALSA PCM out |
94  *    \--------------/  |      |    |             |  \--------------/
95  *                      |      |    |    /-----\  |
96  *                      |      |    |    |     |  |
97  *                      |      v    v    v     |  |
98  *                      |   +---------------+  |  |
99  *                      |    \ Matrix  Mux /   |  |
100  *                      |     +-----+-----+    |  |
101  *                      |           |          |  |
102  *                      |           |18chn     |  |
103  *                      |           |          |  |
104  *                      |           |     10chn|  |
105  *                      |           v          |  |
106  *                      |     +------------+   |  |
107  *                      |     | Mixer      |   |  |
108  *                      |     |     Matrix |   |  |
109  *                      |     |            |   |  |
110  *                      |     | 18x10 Gain |   |  |
111  *                      |     |   stages   |   |  |
112  *                      |     +-----+------+   |  |
113  *                      |           |          |  |
114  *                      |18chn      |10chn     |  |20chn
115  *                      |           |          |  |
116  *                      |           +----------/  |
117  *                      |           |             |
118  *                      v           v             v
119  *                      ===========================
120  *               +---------------+       +--—------------+
121  *                \ Output  Mux /         \ Capture Mux /
122  *                 +---+---+---+           +-----+-----+
123  *                     |   |                     |
124  *                10chn|   |                     |18chn
125  *                     |   |                     |
126  *  /--------------\   |   |                     |   /--------------\
127  *  | S/PDIF, ADAT |<--/   |10chn                \-->| ALSA PCM in  |
128  *  | Hardware out |       |                         \--------------/
129  *  \--------------/       |
130  *                         v
131  *                  +-------------+    Software gain per channel.
132  *                  | Master Gain |<-- 18i20 only: Switch per channel
133  *                  +------+------+    to select HW or SW gain control.
134  *                         |
135  *                         |10chn
136  *  /--------------\       |
137  *  | Analogue     |<------/
138  *  | Hardware out |
139  *  \--------------/
140  * </ditaa>
141  *
142  * Gen 3/4 devices have a Mass Storage Device (MSD) mode where a small
143  * disk with registration and driver download information is presented
144  * to the host. To access the full functionality of the device without
145  * proprietary software, MSD mode can be disabled by:
146  * - holding down the 48V button for five seconds while powering on
147  *   the device, or
148  * - using this driver and alsamixer to change the "MSD Mode" setting
149  *   to Off and power-cycling the device
150  */
151
152 #include <linux/slab.h>
153 #include <linux/usb.h>
154 #include <linux/moduleparam.h>
155
156 #include <sound/control.h>
157 #include <sound/tlv.h>
158 #include <sound/hwdep.h>
159
160 #include <uapi/sound/scarlett2.h>
161
162 #include "usbaudio.h"
163 #include "mixer.h"
164 #include "helper.h"
165
166 #include "mixer_scarlett2.h"
167
168 /* device_setup value to allow turning MSD mode back on */
169 #define SCARLETT2_MSD_ENABLE 0x02
170
171 /* device_setup value to disable this mixer driver */
172 #define SCARLETT2_DISABLE 0x04
173
174 /* some gui mixers can't handle negative ctl values */
175 #define SCARLETT2_VOLUME_BIAS 127
176
177 /* maximum preamp input gain and value
178  * values are from 0 to 70, preamp gain is from 0 to 69 dB
179  */
180 #define SCARLETT2_MAX_GAIN_VALUE 70
181 #define SCARLETT2_MAX_GAIN_DB 69
182
183 /* mixer range from -80dB to +6dB in 0.5dB steps */
184 #define SCARLETT2_MIXER_MIN_DB -80
185 #define SCARLETT2_MIXER_BIAS (-SCARLETT2_MIXER_MIN_DB * 2)
186 #define SCARLETT2_MIXER_MAX_DB 6
187 #define SCARLETT2_MIXER_MAX_VALUE \
188         ((SCARLETT2_MIXER_MAX_DB - SCARLETT2_MIXER_MIN_DB) * 2)
189 #define SCARLETT2_MIXER_VALUE_COUNT (SCARLETT2_MIXER_MAX_VALUE + 1)
190
191 /* map from (dB + 80) * 2 to mixer value
192  * for dB in 0 .. 172: int(8192 * pow(10, ((dB - 160) / 2 / 20)))
193  */
194 static const u16 scarlett2_mixer_values[SCARLETT2_MIXER_VALUE_COUNT] = {
195         0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
196         2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8,
197         9, 9, 10, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
198         23, 24, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 46, 48, 51,
199         54, 57, 61, 65, 68, 73, 77, 81, 86, 91, 97, 103, 109, 115,
200         122, 129, 137, 145, 154, 163, 173, 183, 194, 205, 217, 230,
201         244, 259, 274, 290, 307, 326, 345, 365, 387, 410, 434, 460,
202         487, 516, 547, 579, 614, 650, 689, 730, 773, 819, 867, 919,
203         973, 1031, 1092, 1157, 1225, 1298, 1375, 1456, 1543, 1634,
204         1731, 1833, 1942, 2057, 2179, 2308, 2445, 2590, 2744, 2906,
205         3078, 3261, 3454, 3659, 3876, 4105, 4349, 4606, 4879, 5168,
206         5475, 5799, 6143, 6507, 6892, 7301, 7733, 8192, 8677, 9191,
207         9736, 10313, 10924, 11571, 12257, 12983, 13752, 14567, 15430,
208         16345
209 };
210
211 /* Maximum number of analogue outputs */
212 #define SCARLETT2_ANALOGUE_MAX 10
213
214 /* Maximum number of various input controls */
215 #define SCARLETT2_LEVEL_SWITCH_MAX 2
216 #define SCARLETT2_PAD_SWITCH_MAX 8
217 #define SCARLETT2_AIR_SWITCH_MAX 8
218 #define SCARLETT2_PHANTOM_SWITCH_MAX 2
219 #define SCARLETT2_INPUT_GAIN_MAX 2
220
221 /* Maximum number of inputs to the mixer */
222 #define SCARLETT2_INPUT_MIX_MAX 25
223
224 /* Maximum number of outputs from the mixer */
225 #define SCARLETT2_OUTPUT_MIX_MAX 12
226
227 /* Maximum number of mixer gain controls */
228 #define SCARLETT2_MIX_MAX (SCARLETT2_INPUT_MIX_MAX * SCARLETT2_OUTPUT_MIX_MAX)
229
230 /* Maximum number of direct monitor mixer gain controls
231  * 1 (Solo) or 2 (2i2) direct monitor selections (Mono & Stereo)
232  * 2 Mix outputs (A/Left & B/Right)
233  * 4 Mix inputs
234  */
235 #define SCARLETT2_MONITOR_MIX_MAX (2 * 2 * 4)
236
237 /* Maximum size of the data in the USB mux assignment message:
238  * 20 inputs, 20 outputs, 25 matrix inputs, 12 spare
239  */
240 #define SCARLETT2_MUX_MAX 77
241
242 /* Maximum number of sources (sum of input port counts) */
243 #define SCARLETT2_MAX_SRCS 52
244
245 /* Maximum number of meters (sum of output port counts) */
246 #define SCARLETT2_MAX_METERS 65
247
248 /* Hardware port types:
249  * - None (no input to mux)
250  * - Analogue I/O
251  * - S/PDIF I/O
252  * - ADAT I/O
253  * - Mixer I/O
254  * - PCM I/O
255  */
256 enum {
257         SCARLETT2_PORT_TYPE_NONE,
258         SCARLETT2_PORT_TYPE_ANALOGUE,
259         SCARLETT2_PORT_TYPE_SPDIF,
260         SCARLETT2_PORT_TYPE_ADAT,
261         SCARLETT2_PORT_TYPE_MIX,
262         SCARLETT2_PORT_TYPE_PCM,
263         SCARLETT2_PORT_TYPE_COUNT
264 };
265
266 /* I/O count of each port type kept in struct scarlett2_ports */
267 enum {
268         SCARLETT2_PORT_IN,
269         SCARLETT2_PORT_OUT,
270         SCARLETT2_PORT_DIRNS
271 };
272
273 /* Dim/Mute buttons on the 18i20 */
274 enum {
275         SCARLETT2_BUTTON_MUTE,
276         SCARLETT2_BUTTON_DIM,
277         SCARLETT2_DIM_MUTE_COUNT
278 };
279
280 /* Flash Write State */
281 enum {
282         SCARLETT2_FLASH_WRITE_STATE_IDLE,
283         SCARLETT2_FLASH_WRITE_STATE_SELECTED,
284         SCARLETT2_FLASH_WRITE_STATE_ERASING,
285         SCARLETT2_FLASH_WRITE_STATE_WRITE
286 };
287
288 static const char *const scarlett2_dim_mute_names[SCARLETT2_DIM_MUTE_COUNT] = {
289         "Mute Playback Switch", "Dim Playback Switch"
290 };
291
292 /* The autogain_status is set based on the autogain_switch and
293  * raw_autogain_status values.
294  *
295  * If autogain_switch is set, autogain_status is set to 0 (Running).
296  * The other status values are from the raw_autogain_status value + 1.
297  */
298 static const char *const scarlett2_autogain_status_texts[] = {
299         "Running",
300         "Success",
301         "SuccessDRover",
302         "WarnMinGainLimit",
303         "FailDRunder",
304         "FailMaxGainLimit",
305         "FailClipped",
306         "Cancelled",
307         "Invalid"
308 };
309
310 /* Power Status Values */
311 enum {
312         SCARLETT2_POWER_STATUS_EXT,
313         SCARLETT2_POWER_STATUS_BUS,
314         SCARLETT2_POWER_STATUS_FAIL,
315         SCARLETT2_POWER_STATUS_COUNT
316 };
317
318 /* Notification callback functions */
319 struct scarlett2_notification {
320         u32 mask;
321         void (*func)(struct usb_mixer_interface *mixer);
322 };
323
324 static void scarlett2_notify_sync(struct usb_mixer_interface *mixer);
325 static void scarlett2_notify_dim_mute(struct usb_mixer_interface *mixer);
326 static void scarlett2_notify_monitor(struct usb_mixer_interface *mixer);
327 static void scarlett2_notify_volume(struct usb_mixer_interface *mixer);
328 static void scarlett2_notify_input_level(struct usb_mixer_interface *mixer);
329 static void scarlett2_notify_input_pad(struct usb_mixer_interface *mixer);
330 static void scarlett2_notify_input_air(struct usb_mixer_interface *mixer);
331 static void scarlett2_notify_input_phantom(struct usb_mixer_interface *mixer);
332 static void scarlett2_notify_input_other(struct usb_mixer_interface *mixer);
333 static void scarlett2_notify_input_select(struct usb_mixer_interface *mixer);
334 static void scarlett2_notify_input_gain(struct usb_mixer_interface *mixer);
335 static void scarlett2_notify_autogain(struct usb_mixer_interface *mixer);
336 static void scarlett2_notify_input_safe(struct usb_mixer_interface *mixer);
337 static void scarlett2_notify_monitor_other(struct usb_mixer_interface *mixer);
338 static void scarlett2_notify_direct_monitor(struct usb_mixer_interface *mixer);
339 static void scarlett2_notify_power_status(struct usb_mixer_interface *mixer);
340 static void scarlett2_notify_pcm_input_switch(
341                                         struct usb_mixer_interface *mixer);
342
343 /* Arrays of notification callback functions */
344
345 static const struct scarlett2_notification scarlett2_notifications[] = {
346         { 0x00000001, NULL }, /* ack, gets ignored */
347         { 0x00000008, scarlett2_notify_sync },
348         { 0x00200000, scarlett2_notify_dim_mute },
349         { 0x00400000, scarlett2_notify_monitor },
350         { 0x00800000, scarlett2_notify_input_other },
351         { 0x01000000, scarlett2_notify_monitor_other },
352         { 0, NULL }
353 };
354
355 static const struct scarlett2_notification scarlett3a_notifications[] = {
356         { 0x00000001, NULL }, /* ack, gets ignored */
357         { 0x00800000, scarlett2_notify_input_other },
358         { 0x01000000, scarlett2_notify_direct_monitor },
359         { 0, NULL }
360 };
361
362 static const struct scarlett2_notification scarlett4_solo_notifications[] = {
363         { 0x00000001, NULL }, /* ack, gets ignored */
364         { 0x00000008, scarlett2_notify_sync },
365         { 0x00400000, scarlett2_notify_input_air },
366         { 0x00800000, scarlett2_notify_direct_monitor },
367         { 0x01000000, scarlett2_notify_input_level },
368         { 0x02000000, scarlett2_notify_input_phantom },
369         { 0x04000000, scarlett2_notify_pcm_input_switch },
370         { 0, NULL }
371 };
372
373 static const struct scarlett2_notification scarlett4_2i2_notifications[] = {
374         { 0x00000001, NULL }, /* ack, gets ignored */
375         { 0x00000008, scarlett2_notify_sync },
376         { 0x00200000, scarlett2_notify_input_safe },
377         { 0x00400000, scarlett2_notify_autogain },
378         { 0x00800000, scarlett2_notify_input_air },
379         { 0x01000000, scarlett2_notify_direct_monitor },
380         { 0x02000000, scarlett2_notify_input_select },
381         { 0x04000000, scarlett2_notify_input_level },
382         { 0x08000000, scarlett2_notify_input_phantom },
383         { 0x10000000, NULL }, /* power status, ignored */
384         { 0x40000000, scarlett2_notify_input_gain },
385         { 0x80000000, NULL }, /* power status, ignored */
386         { 0, NULL }
387 };
388
389 static const struct scarlett2_notification scarlett4_4i4_notifications[] = {
390         { 0x00000001, NULL }, /* ack, gets ignored */
391         { 0x00000008, scarlett2_notify_sync },
392         { 0x00200000, scarlett2_notify_input_safe },
393         { 0x00400000, scarlett2_notify_autogain },
394         { 0x00800000, scarlett2_notify_input_air },
395         { 0x01000000, scarlett2_notify_input_select },
396         { 0x02000000, scarlett2_notify_input_level },
397         { 0x04000000, scarlett2_notify_input_phantom },
398         { 0x08000000, scarlett2_notify_power_status }, /* power external */
399         { 0x20000000, scarlett2_notify_input_gain },
400         { 0x40000000, scarlett2_notify_power_status }, /* power status */
401         { 0x80000000, scarlett2_notify_volume },
402         { 0, NULL }
403 };
404
405 /* Configuration parameters that can be read and written */
406 enum {
407         SCARLETT2_CONFIG_DIM_MUTE,
408         SCARLETT2_CONFIG_LINE_OUT_VOLUME,
409         SCARLETT2_CONFIG_MUTE_SWITCH,
410         SCARLETT2_CONFIG_SW_HW_SWITCH,
411         SCARLETT2_CONFIG_MASTER_VOLUME,
412         SCARLETT2_CONFIG_HEADPHONE_VOLUME,
413         SCARLETT2_CONFIG_LEVEL_SWITCH,
414         SCARLETT2_CONFIG_PAD_SWITCH,
415         SCARLETT2_CONFIG_MSD_SWITCH,
416         SCARLETT2_CONFIG_AIR_SWITCH,
417         SCARLETT2_CONFIG_STANDALONE_SWITCH,
418         SCARLETT2_CONFIG_PHANTOM_SWITCH,
419         SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
420         SCARLETT2_CONFIG_DIRECT_MONITOR,
421         SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
422         SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
423         SCARLETT2_CONFIG_TALKBACK_MAP,
424         SCARLETT2_CONFIG_AUTOGAIN_SWITCH,
425         SCARLETT2_CONFIG_AUTOGAIN_STATUS,
426         SCARLETT2_CONFIG_INPUT_GAIN,
427         SCARLETT2_CONFIG_SAFE_SWITCH,
428         SCARLETT2_CONFIG_INPUT_SELECT_SWITCH,
429         SCARLETT2_CONFIG_INPUT_LINK_SWITCH,
430         SCARLETT2_CONFIG_POWER_EXT,
431         SCARLETT2_CONFIG_POWER_LOW,
432         SCARLETT2_CONFIG_PCM_INPUT_SWITCH,
433         SCARLETT2_CONFIG_DIRECT_MONITOR_GAIN,
434         SCARLETT2_CONFIG_COUNT
435 };
436
437 /* Location, size, and activation command number for the configuration
438  * parameters. Size is in bits and may be 0, 1, 8, or 16.
439  *
440  * A size of 0 indicates that the parameter is a byte-sized Scarlett
441  * Gen 4 configuration which is written through the gen4_write_addr
442  * location (but still read through the given offset location).
443  *
444  * Some Gen 4 configuration parameters are written with 0x02 for a
445  * desired value of 0x01, and 0x03 for 0x00. These are indicated with
446  * mute set to 1. 0x02 and 0x03 are temporary values while the device
447  * makes the change and the channel and/or corresponding DSP channel
448  * output is muted.
449  */
450 struct scarlett2_config {
451         u16 offset;
452         u8 size;
453         u8 activate;
454         u8 mute;
455 };
456
457 struct scarlett2_config_set {
458         const struct scarlett2_notification *notifications;
459         u16 gen4_write_addr;
460         const struct scarlett2_config items[SCARLETT2_CONFIG_COUNT];
461 };
462
463 /* Gen 2 devices without SW/HW volume switch: 6i6, 18i8 */
464
465 static const struct scarlett2_config_set scarlett2_config_set_gen2a = {
466         .notifications = scarlett2_notifications,
467         .items = {
468                 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
469                         .offset = 0x34, .size = 16, .activate = 1 },
470
471                 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
472                         .offset = 0x5c, .size = 8, .activate = 1 },
473
474                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
475                         .offset = 0x7c, .size = 8, .activate = 7 },
476
477                 [SCARLETT2_CONFIG_PAD_SWITCH] = {
478                         .offset = 0x84, .size = 8, .activate = 8 },
479
480                 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
481                         .offset = 0x8d, .size = 8, .activate = 6 },
482         }
483 };
484
485 /* Gen 2 devices with SW/HW volume switch: 18i20 */
486
487 static const struct scarlett2_config_set scarlett2_config_set_gen2b = {
488         .notifications = scarlett2_notifications,
489         .items = {
490                 [SCARLETT2_CONFIG_DIM_MUTE] = {
491                         .offset = 0x31, .size = 8, .activate = 2 },
492
493                 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
494                         .offset = 0x34, .size = 16, .activate = 1 },
495
496                 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
497                         .offset = 0x5c, .size = 8, .activate = 1 },
498
499                 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
500                         .offset = 0x66, .size = 8, .activate = 3 },
501
502                 [SCARLETT2_CONFIG_MASTER_VOLUME] = {
503                         .offset = 0x76, .size = 16 },
504
505                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
506                         .offset = 0x7c, .size = 8, .activate = 7 },
507
508                 [SCARLETT2_CONFIG_PAD_SWITCH] = {
509                         .offset = 0x84, .size = 8, .activate = 8 },
510
511                 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
512                         .offset = 0x8d, .size = 8, .activate = 6 },
513         }
514 };
515
516 /* Gen 3 devices without a mixer (Solo and 2i2) */
517 static const struct scarlett2_config_set scarlett2_config_set_gen3a = {
518         .notifications = scarlett3a_notifications,
519         .items = {
520                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
521                         .offset = 0x04, .size = 8, .activate = 6 },
522
523                 [SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
524                         .offset = 0x05, .size = 8, .activate = 6 },
525
526                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
527                         .offset = 0x06, .size = 8, .activate = 3 },
528
529                 [SCARLETT2_CONFIG_DIRECT_MONITOR] = {
530                         .offset = 0x07, .size = 8, .activate = 4 },
531
532                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
533                         .offset = 0x08, .size = 1, .activate = 7 },
534
535                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
536                         .offset = 0x09, .size = 1, .activate = 8 },
537         }
538 };
539
540 /* Gen 3 devices without SW/HW volume switch: 4i4, 8i6 */
541 static const struct scarlett2_config_set scarlett2_config_set_gen3b = {
542         .notifications = scarlett2_notifications,
543         .items = {
544                 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
545                         .offset = 0x34, .size = 16, .activate = 1 },
546
547                 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
548                         .offset = 0x5c, .size = 8, .activate = 1 },
549
550                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
551                         .offset = 0x7c, .size = 8, .activate = 7 },
552
553                 [SCARLETT2_CONFIG_PAD_SWITCH] = {
554                         .offset = 0x84, .size = 8, .activate = 8 },
555
556                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
557                         .offset = 0x8c, .size = 8, .activate = 8 },
558
559                 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
560                         .offset = 0x95, .size = 8, .activate = 6 },
561
562                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
563                         .offset = 0x9c, .size = 1, .activate = 8 },
564
565                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
566                         .offset = 0x9d, .size = 8, .activate = 6 },
567
568                 [SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
569                         .offset = 0x9e, .size = 8, .activate = 6 },
570         }
571 };
572
573 /* Gen 3 devices with SW/HW volume switch: 18i8, 18i20 */
574 static const struct scarlett2_config_set scarlett2_config_set_gen3c = {
575         .notifications = scarlett2_notifications,
576         .items = {
577                 [SCARLETT2_CONFIG_DIM_MUTE] = {
578                         .offset = 0x31, .size = 8, .activate = 2 },
579
580                 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
581                         .offset = 0x34, .size = 16, .activate = 1 },
582
583                 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
584                         .offset = 0x5c, .size = 8, .activate = 1 },
585
586                 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
587                         .offset = 0x66, .size = 8, .activate = 3 },
588
589                 [SCARLETT2_CONFIG_MASTER_VOLUME] = {
590                         .offset = 0x76, .size = 16 },
591
592                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
593                         .offset = 0x7c, .size = 8, .activate = 7 },
594
595                 [SCARLETT2_CONFIG_PAD_SWITCH] = {
596                         .offset = 0x84, .size = 8, .activate = 8 },
597
598                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
599                         .offset = 0x8c, .size = 8, .activate = 8 },
600
601                 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
602                         .offset = 0x95, .size = 8, .activate = 6 },
603
604                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
605                         .offset = 0x9c, .size = 1, .activate = 8 },
606
607                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
608                         .offset = 0x9d, .size = 8, .activate = 6 },
609
610                 [SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
611                         .offset = 0x9e, .size = 8, .activate = 6 },
612
613                 [SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH] = {
614                         .offset = 0x9f, .size = 1, .activate = 10 },
615
616                 [SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE] = {
617                         .offset = 0xa0, .size = 1, .activate = 10 },
618
619                 [SCARLETT2_CONFIG_TALKBACK_MAP] = {
620                         .offset = 0xb0, .size = 16, .activate = 10 },
621         }
622 };
623
624 /* Solo Gen 4 */
625 static const struct scarlett2_config_set scarlett2_config_set_gen4_solo = {
626         .notifications = scarlett4_solo_notifications,
627         .gen4_write_addr = 0xd8,
628         .items = {
629                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
630                         .offset = 0x47, .size = 8, .activate = 4 },
631
632                 [SCARLETT2_CONFIG_DIRECT_MONITOR] = {
633                         .offset = 0x108, .activate = 12 },
634
635                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
636                         .offset = 0x46, .activate = 9, .mute = 1 },
637
638                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
639                         .offset = 0x3d, .activate = 10, .mute = 1 },
640
641                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
642                         .offset = 0x3e, .activate = 11 },
643
644                 [SCARLETT2_CONFIG_PCM_INPUT_SWITCH] = {
645                         .offset = 0x206, .activate = 25 },
646
647                 [SCARLETT2_CONFIG_DIRECT_MONITOR_GAIN] = {
648                         .offset = 0x232, .size = 16, .activate = 26 }
649         }
650 };
651
652 /* 2i2 Gen 4 */
653 static const struct scarlett2_config_set scarlett2_config_set_gen4_2i2 = {
654         .notifications = scarlett4_2i2_notifications,
655         .gen4_write_addr = 0xfc,
656         .items = {
657                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
658                         .offset = 0x49, .size = 8, .activate = 4 }, // 0x41 ??
659
660                 [SCARLETT2_CONFIG_DIRECT_MONITOR] = {
661                         .offset = 0x14a, .activate = 16 },
662
663                 [SCARLETT2_CONFIG_AUTOGAIN_SWITCH] = {
664                         .offset = 0x135, .activate = 10 },
665
666                 [SCARLETT2_CONFIG_AUTOGAIN_STATUS] = {
667                         .offset = 0x137 },
668
669                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
670                         .offset = 0x48, .activate = 11, .mute = 1 },
671
672                 [SCARLETT2_CONFIG_INPUT_GAIN] = {
673                         .offset = 0x4b, .activate = 12 },
674
675                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
676                         .offset = 0x3c, .activate = 13, .mute = 1 },
677
678                 [SCARLETT2_CONFIG_SAFE_SWITCH] = {
679                         .offset = 0x147, .activate = 14 },
680
681                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
682                         .offset = 0x3e, .activate = 15 },
683
684                 [SCARLETT2_CONFIG_INPUT_SELECT_SWITCH] = {
685                         .offset = 0x14b, .activate = 17 },
686
687                 [SCARLETT2_CONFIG_INPUT_LINK_SWITCH] = {
688                         .offset = 0x14e, .activate = 18 },
689
690                 [SCARLETT2_CONFIG_DIRECT_MONITOR_GAIN] = {
691                         .offset = 0x2a0, .size = 16, .activate = 36 }
692         }
693 };
694
695 /* 4i4 Gen 4 */
696 static const struct scarlett2_config_set scarlett2_config_set_gen4_4i4 = {
697         .notifications = scarlett4_4i4_notifications,
698         .gen4_write_addr = 0x130,
699         .items = {
700                 [SCARLETT2_CONFIG_MSD_SWITCH] = {
701                         .offset = 0x5c, .size = 8, .activate = 4 },
702
703                 [SCARLETT2_CONFIG_AUTOGAIN_SWITCH] = {
704                         .offset = 0x13e, .activate = 10 },
705
706                 [SCARLETT2_CONFIG_AUTOGAIN_STATUS] = {
707                         .offset = 0x140 },
708
709                 [SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
710                         .offset = 0x5a, .activate = 11, .mute = 1 },
711
712                 [SCARLETT2_CONFIG_INPUT_GAIN] = {
713                         .offset = 0x5e, .activate = 12 },
714
715                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
716                         .offset = 0x4e, .activate = 13, .mute = 1 },
717
718                 [SCARLETT2_CONFIG_SAFE_SWITCH] = {
719                         .offset = 0x150, .activate = 14 },
720
721                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
722                         .offset = 0x50, .activate = 15 },
723
724                 [SCARLETT2_CONFIG_INPUT_SELECT_SWITCH] = {
725                         .offset = 0x153, .activate = 16 },
726
727                 [SCARLETT2_CONFIG_INPUT_LINK_SWITCH] = {
728                         .offset = 0x156, .activate = 17 },
729
730                 [SCARLETT2_CONFIG_MASTER_VOLUME] = {
731                         .offset = 0x32, .size = 16 },
732
733                 [SCARLETT2_CONFIG_HEADPHONE_VOLUME] = {
734                         .offset = 0x3a, .size = 16 },
735
736                 [SCARLETT2_CONFIG_POWER_EXT] = {
737                         .offset = 0x168 },
738
739                 [SCARLETT2_CONFIG_POWER_LOW] = {
740                         .offset = 0x16d }
741         }
742 };
743
744 /* Clarett USB and Clarett+ devices: 2Pre, 4Pre, 8Pre */
745 static const struct scarlett2_config_set scarlett2_config_set_clarett = {
746         .notifications = scarlett2_notifications,
747         .items = {
748                 [SCARLETT2_CONFIG_DIM_MUTE] = {
749                         .offset = 0x31, .size = 8, .activate = 2 },
750
751                 [SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
752                         .offset = 0x34, .size = 16, .activate = 1 },
753
754                 [SCARLETT2_CONFIG_MUTE_SWITCH] = {
755                         .offset = 0x5c, .size = 8, .activate = 1 },
756
757                 [SCARLETT2_CONFIG_SW_HW_SWITCH] = {
758                         .offset = 0x66, .size = 8, .activate = 3 },
759
760                 [SCARLETT2_CONFIG_MASTER_VOLUME] = {
761                         .offset = 0x76, .size = 16 },
762
763                 [SCARLETT2_CONFIG_LEVEL_SWITCH] = {
764                         .offset = 0x7c, .size = 8, .activate = 7 },
765
766                 [SCARLETT2_CONFIG_AIR_SWITCH] = {
767                         .offset = 0x95, .size = 8, .activate = 8 },
768
769                 [SCARLETT2_CONFIG_STANDALONE_SWITCH] = {
770                         .offset = 0x8d, .size = 8, .activate = 6 },
771         }
772 };
773
774 /* Description of each hardware port type:
775  * - id: hardware ID of this port type
776  * - src_descr: printf format string for mux input selections
777  * - src_num_offset: added to channel number for the fprintf
778  * - dst_descr: printf format string for mixer controls
779  */
780 struct scarlett2_port {
781         u16 id;
782         const char * const src_descr;
783         int src_num_offset;
784         const char * const dst_descr;
785         const char * const dsp_src_descr;
786         const char * const dsp_dst_descr;
787 };
788
789 static const struct scarlett2_port scarlett2_ports[SCARLETT2_PORT_TYPE_COUNT] = {
790         [SCARLETT2_PORT_TYPE_NONE] = {
791                 .id = 0x000,
792                 .src_descr = "Off"
793         },
794         [SCARLETT2_PORT_TYPE_ANALOGUE] = {
795                 .id = 0x080,
796                 .src_descr = "Analogue %d",
797                 .src_num_offset = 1,
798                 .dst_descr = "Analogue Output %02d Playback"
799         },
800         [SCARLETT2_PORT_TYPE_SPDIF] = {
801                 .id = 0x180,
802                 .src_descr = "S/PDIF %d",
803                 .src_num_offset = 1,
804                 .dst_descr = "S/PDIF Output %d Playback"
805         },
806         [SCARLETT2_PORT_TYPE_ADAT] = {
807                 .id = 0x200,
808                 .src_descr = "ADAT %d",
809                 .src_num_offset = 1,
810                 .dst_descr = "ADAT Output %d Playback"
811         },
812         [SCARLETT2_PORT_TYPE_MIX] = {
813                 .id = 0x300,
814                 .src_descr = "Mix %c",
815                 .src_num_offset = 'A',
816                 .dst_descr = "Mixer Input %02d Capture",
817                 .dsp_src_descr = "DSP %d",
818                 .dsp_dst_descr = "DSP Input %d Capture"
819         },
820         [SCARLETT2_PORT_TYPE_PCM] = {
821                 .id = 0x600,
822                 .src_descr = "PCM %d",
823                 .src_num_offset = 1,
824                 .dst_descr = "PCM %02d Capture"
825         },
826 };
827
828 /* Number of mux tables: one for each band of sample rates
829  * (44.1/48kHz, 88.2/96kHz, and 176.4/176kHz)
830  */
831 #define SCARLETT2_MUX_TABLES 3
832
833 /* Maximum number of entries in a mux table */
834 #define SCARLETT2_MAX_MUX_ENTRIES 10
835
836 /* One entry within mux_assignment defines the port type and range of
837  * ports to add to the set_mux message. The end of the list is marked
838  * with count == 0.
839  */
840 struct scarlett2_mux_entry {
841         u8 port_type;
842         u8 start;
843         u8 count;
844 };
845
846 /* Maximum number of entries in a mux table */
847 #define SCARLETT2_MAX_METER_ENTRIES 9
848
849 /* One entry within meter_assignment defines the range of mux outputs
850  * that consecutive meter entries are mapped to. The end of the list
851  * is marked with count == 0.
852  */
853 struct scarlett2_meter_entry {
854         u8 start;
855         u8 count;
856 };
857
858 struct scarlett2_device_info {
859         /* which set of configuration parameters the device uses */
860         const struct scarlett2_config_set *config_set;
861
862         /* minimum firmware version required */
863         u16 min_firmware_version;
864
865         /* support for main/alt speaker switching */
866         u8 has_speaker_switching;
867
868         /* support for talkback microphone */
869         u8 has_talkback;
870
871         /* the number of analogue inputs with a software switchable
872          * level control that can be set to line or instrument
873          */
874         u8 level_input_count;
875
876         /* the first input with a level control (0-based) */
877         u8 level_input_first;
878
879         /* the number of analogue inputs with a software switchable
880          * 10dB pad control
881          */
882         u8 pad_input_count;
883
884         /* the number of analogue inputs with a software switchable
885          * "air" control
886          */
887         u8 air_input_count;
888
889         /* the first input with an air control (0-based) */
890         u8 air_input_first;
891
892         /* number of additional air options
893          * 0 for air presence only (Gen 3)
894          * 1 for air presence+drive (Gen 4)
895          */
896         u8 air_option;
897
898         /* the number of phantom (48V) software switchable controls */
899         u8 phantom_count;
900
901         /* the first input with phantom power control (0-based) */
902         u8 phantom_first;
903
904         /* the number of inputs each phantom switch controls */
905         u8 inputs_per_phantom;
906
907         /* the number of inputs with software-controllable gain */
908         u8 gain_input_count;
909
910         /* the number of direct monitor options
911          * (0 = none, 1 = mono only, 2 = mono/stereo)
912          */
913         u8 direct_monitor;
914
915         /* the number of DSP channels */
916         u8 dsp_count;
917
918         /* remap analogue outputs; 18i8 Gen 3 has "line 3/4" connected
919          * internally to the analogue 7/8 outputs
920          */
921         u8 line_out_remap_enable;
922         u8 line_out_remap[SCARLETT2_ANALOGUE_MAX];
923         u8 line_out_unmap[SCARLETT2_ANALOGUE_MAX];
924
925         /* additional description for the line out volume controls */
926         const char * const line_out_descrs[SCARLETT2_ANALOGUE_MAX];
927
928         /* number of sources/destinations of each port type */
929         const int port_count[SCARLETT2_PORT_TYPE_COUNT][SCARLETT2_PORT_DIRNS];
930
931         /* layout/order of the entries in the set_mux message */
932         struct scarlett2_mux_entry mux_assignment[SCARLETT2_MUX_TABLES]
933                                                  [SCARLETT2_MAX_MUX_ENTRIES];
934
935         /* map from meter level order returned by
936          * SCARLETT2_USB_GET_METER to index into mux[] entries (same
937          * as the order returned by scarlett2_meter_ctl_get())
938          */
939         struct scarlett2_meter_entry meter_map[SCARLETT2_MAX_METER_ENTRIES];
940 };
941
942 struct scarlett2_data {
943         struct usb_mixer_interface *mixer;
944         struct mutex usb_mutex; /* prevent sending concurrent USB requests */
945         struct mutex data_mutex; /* lock access to this data */
946         u8 hwdep_in_use;
947         u8 selected_flash_segment_id;
948         u8 flash_write_state;
949         struct delayed_work work;
950         const struct scarlett2_device_info *info;
951         const struct scarlett2_config_set *config_set;
952         const char *series_name;
953         __u8 bInterfaceNumber;
954         __u8 bEndpointAddress;
955         __u16 wMaxPacketSize;
956         __u8 bInterval;
957         u8 num_mux_srcs;
958         u8 num_mux_dsts;
959         u8 num_mix_in;
960         u8 num_mix_out;
961         u8 num_line_out;
962         u8 num_monitor_mix_ctls;
963         u32 firmware_version;
964         u8 flash_segment_nums[SCARLETT2_SEGMENT_ID_COUNT];
965         u8 flash_segment_blocks[SCARLETT2_SEGMENT_ID_COUNT];
966         u16 scarlett2_seq;
967         u8 sync_updated;
968         u8 vol_updated;
969         u8 dim_mute_updated;
970         u8 input_level_updated;
971         u8 input_pad_updated;
972         u8 input_air_updated;
973         u8 input_phantom_updated;
974         u8 input_select_updated;
975         u8 input_gain_updated;
976         u8 autogain_updated;
977         u8 input_safe_updated;
978         u8 pcm_input_switch_updated;
979         u8 monitor_other_updated;
980         u8 direct_monitor_updated;
981         u8 mux_updated;
982         u8 mix_updated;
983         u8 speaker_switching_switched;
984         u8 power_status_updated;
985         u8 sync;
986         u8 master_vol;
987         u8 headphone_vol;
988         u8 vol[SCARLETT2_ANALOGUE_MAX];
989         u8 vol_sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
990         u8 mute_switch[SCARLETT2_ANALOGUE_MAX];
991         u8 level_switch[SCARLETT2_LEVEL_SWITCH_MAX];
992         u8 pad_switch[SCARLETT2_PAD_SWITCH_MAX];
993         u8 dim_mute[SCARLETT2_DIM_MUTE_COUNT];
994         u8 air_switch[SCARLETT2_AIR_SWITCH_MAX];
995         u8 phantom_switch[SCARLETT2_PHANTOM_SWITCH_MAX];
996         u8 phantom_persistence;
997         u8 input_select_switch;
998         u8 input_link_switch[SCARLETT2_INPUT_GAIN_MAX / 2];
999         u8 gain[SCARLETT2_INPUT_GAIN_MAX];
1000         u8 autogain_switch[SCARLETT2_INPUT_GAIN_MAX];
1001         u8 autogain_status[SCARLETT2_INPUT_GAIN_MAX];
1002         u8 safe_switch[SCARLETT2_INPUT_GAIN_MAX];
1003         u8 pcm_input_switch;
1004         u8 direct_monitor_switch;
1005         u8 speaker_switching_switch;
1006         u8 talkback_switch;
1007         u8 talkback_map[SCARLETT2_OUTPUT_MIX_MAX];
1008         u8 msd_switch;
1009         u8 standalone_switch;
1010         u8 power_status;
1011         u8 meter_level_map[SCARLETT2_MAX_METERS];
1012         struct snd_kcontrol *sync_ctl;
1013         struct snd_kcontrol *master_vol_ctl;
1014         struct snd_kcontrol *headphone_vol_ctl;
1015         struct snd_kcontrol *vol_ctls[SCARLETT2_ANALOGUE_MAX];
1016         struct snd_kcontrol *sw_hw_ctls[SCARLETT2_ANALOGUE_MAX];
1017         struct snd_kcontrol *mute_ctls[SCARLETT2_ANALOGUE_MAX];
1018         struct snd_kcontrol *dim_mute_ctls[SCARLETT2_DIM_MUTE_COUNT];
1019         struct snd_kcontrol *level_ctls[SCARLETT2_LEVEL_SWITCH_MAX];
1020         struct snd_kcontrol *pad_ctls[SCARLETT2_PAD_SWITCH_MAX];
1021         struct snd_kcontrol *air_ctls[SCARLETT2_AIR_SWITCH_MAX];
1022         struct snd_kcontrol *phantom_ctls[SCARLETT2_PHANTOM_SWITCH_MAX];
1023         struct snd_kcontrol *input_select_ctl;
1024         struct snd_kcontrol *input_link_ctls[SCARLETT2_INPUT_GAIN_MAX / 2];
1025         struct snd_kcontrol *input_gain_ctls[SCARLETT2_INPUT_GAIN_MAX];
1026         struct snd_kcontrol *autogain_ctls[SCARLETT2_INPUT_GAIN_MAX];
1027         struct snd_kcontrol *autogain_status_ctls[SCARLETT2_INPUT_GAIN_MAX];
1028         struct snd_kcontrol *safe_ctls[SCARLETT2_INPUT_GAIN_MAX];
1029         struct snd_kcontrol *pcm_input_switch_ctl;
1030         struct snd_kcontrol *mux_ctls[SCARLETT2_MUX_MAX];
1031         struct snd_kcontrol *mix_ctls[SCARLETT2_MIX_MAX];
1032         struct snd_kcontrol *direct_monitor_ctl;
1033         struct snd_kcontrol *speaker_switching_ctl;
1034         struct snd_kcontrol *talkback_ctl;
1035         struct snd_kcontrol *power_status_ctl;
1036         u8 mux[SCARLETT2_MUX_MAX];
1037         u8 mix[SCARLETT2_MIX_MAX];
1038         u8 monitor_mix[SCARLETT2_MONITOR_MIX_MAX];
1039 };
1040
1041 /*** Model-specific data ***/
1042
1043 static const struct scarlett2_device_info s6i6_gen2_info = {
1044         .config_set = &scarlett2_config_set_gen2a,
1045         .level_input_count = 2,
1046         .pad_input_count = 2,
1047
1048         .line_out_descrs = {
1049                 "Headphones 1 L",
1050                 "Headphones 1 R",
1051                 "Headphones 2 L",
1052                 "Headphones 2 R",
1053         },
1054
1055         .port_count = {
1056                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1057                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  4,  4 },
1058                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1059                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1060                 [SCARLETT2_PORT_TYPE_PCM]      = {  6,  6 },
1061         },
1062
1063         .mux_assignment = { {
1064                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1065                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1066                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1067                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1068                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1069                 { 0,                            0,  0 },
1070         }, {
1071                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1072                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1073                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1074                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1075                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1076                 { 0,                            0,  0 },
1077         }, {
1078                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1079                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1080                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1081                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1082                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1083                 { 0,                            0,  0 },
1084         } },
1085
1086         .meter_map = {
1087                 { 24,  6 },
1088                 {  0, 24 },
1089                 {  0,  0 },
1090         }
1091 };
1092
1093 static const struct scarlett2_device_info s18i8_gen2_info = {
1094         .config_set = &scarlett2_config_set_gen2a,
1095         .level_input_count = 2,
1096         .pad_input_count = 4,
1097
1098         .line_out_descrs = {
1099                 "Monitor L",
1100                 "Monitor R",
1101                 "Headphones 1 L",
1102                 "Headphones 1 R",
1103                 "Headphones 2 L",
1104                 "Headphones 2 R",
1105         },
1106
1107         .port_count = {
1108                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1109                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  8,  6 },
1110                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1111                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
1112                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1113                 [SCARLETT2_PORT_TYPE_PCM]      = {  8, 18 },
1114         },
1115
1116         .mux_assignment = { {
1117                 { SCARLETT2_PORT_TYPE_PCM,      0, 18 },
1118                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1119                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1120                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1121                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1122                 { 0,                            0,  0 },
1123         }, {
1124                 { SCARLETT2_PORT_TYPE_PCM,      0, 14 },
1125                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1126                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1127                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1128                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1129                 { 0,                            0,  0 },
1130         }, {
1131                 { SCARLETT2_PORT_TYPE_PCM,      0, 10 },
1132                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1133                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1134                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1135                 { SCARLETT2_PORT_TYPE_NONE,     0,  4 },
1136                 { 0,                            0,  0 },
1137         } },
1138
1139         .meter_map = {
1140                 { 26, 18 },
1141                 {  0, 26 },
1142                 {  0,  0 },
1143         }
1144 };
1145
1146 static const struct scarlett2_device_info s18i20_gen2_info = {
1147         .config_set = &scarlett2_config_set_gen2b,
1148
1149         .line_out_descrs = {
1150                 "Monitor L",
1151                 "Monitor R",
1152                 NULL,
1153                 NULL,
1154                 NULL,
1155                 NULL,
1156                 "Headphones 1 L",
1157                 "Headphones 1 R",
1158                 "Headphones 2 L",
1159                 "Headphones 2 R",
1160         },
1161
1162         .port_count = {
1163                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1164                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  8, 10 },
1165                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1166                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  8 },
1167                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1168                 [SCARLETT2_PORT_TYPE_PCM]      = { 20, 18 },
1169         },
1170
1171         .mux_assignment = { {
1172                 { SCARLETT2_PORT_TYPE_PCM,      0, 18 },
1173                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1174                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1175                 { SCARLETT2_PORT_TYPE_ADAT,     0,  8 },
1176                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1177                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1178                 { 0,                            0,  0 },
1179         }, {
1180                 { SCARLETT2_PORT_TYPE_PCM,      0, 14 },
1181                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1182                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1183                 { SCARLETT2_PORT_TYPE_ADAT,     0,  4 },
1184                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1185                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1186                 { 0,                            0,  0 },
1187         }, {
1188                 { SCARLETT2_PORT_TYPE_PCM,      0, 10 },
1189                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1190                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1191                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1192                 { SCARLETT2_PORT_TYPE_NONE,     0,  6 },
1193                 { 0,                            0,  0 },
1194         } },
1195
1196         .meter_map = {
1197                 { 38, 18 },
1198                 {  0, 38 },
1199                 {  0,  0 },
1200         }
1201 };
1202
1203 static const struct scarlett2_device_info solo_gen3_info = {
1204         .config_set = &scarlett2_config_set_gen3a,
1205         .level_input_count = 1,
1206         .level_input_first = 1,
1207         .air_input_count = 1,
1208         .phantom_count = 1,
1209         .inputs_per_phantom = 1,
1210         .direct_monitor = 1,
1211 };
1212
1213 static const struct scarlett2_device_info s2i2_gen3_info = {
1214         .config_set = &scarlett2_config_set_gen3a,
1215         .level_input_count = 2,
1216         .air_input_count = 2,
1217         .phantom_count = 1,
1218         .inputs_per_phantom = 2,
1219         .direct_monitor = 2,
1220 };
1221
1222 static const struct scarlett2_device_info s4i4_gen3_info = {
1223         .config_set = &scarlett2_config_set_gen3b,
1224         .level_input_count = 2,
1225         .pad_input_count = 2,
1226         .air_input_count = 2,
1227         .phantom_count = 1,
1228         .inputs_per_phantom = 2,
1229
1230         .line_out_descrs = {
1231                 "Monitor L",
1232                 "Monitor R",
1233                 "Headphones L",
1234                 "Headphones R",
1235         },
1236
1237         .port_count = {
1238                 [SCARLETT2_PORT_TYPE_NONE]     = { 1, 0 },
1239                 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 4, 4 },
1240                 [SCARLETT2_PORT_TYPE_MIX]      = { 6, 8 },
1241                 [SCARLETT2_PORT_TYPE_PCM]      = { 4, 6 },
1242         },
1243
1244         .mux_assignment = { {
1245                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1246                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1247                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1248                 { SCARLETT2_PORT_TYPE_NONE,     0, 16 },
1249                 { 0,                            0,  0 },
1250         }, {
1251                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1252                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1253                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1254                 { SCARLETT2_PORT_TYPE_NONE,     0, 16 },
1255                 { 0,                            0,  0 },
1256         }, {
1257                 { SCARLETT2_PORT_TYPE_PCM,      0,  6 },
1258                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1259                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1260                 { SCARLETT2_PORT_TYPE_NONE,     0, 16 },
1261                 { 0,                            0,  0 },
1262         } },
1263
1264         .meter_map = {
1265                 { 12,  6 },
1266                 {  0, 12 },
1267                 {  0,  0 },
1268         }
1269 };
1270
1271 static const struct scarlett2_device_info s8i6_gen3_info = {
1272         .config_set = &scarlett2_config_set_gen3b,
1273         .level_input_count = 2,
1274         .pad_input_count = 2,
1275         .air_input_count = 2,
1276         .phantom_count = 1,
1277         .inputs_per_phantom = 2,
1278
1279         .line_out_descrs = {
1280                 "Headphones 1 L",
1281                 "Headphones 1 R",
1282                 "Headphones 2 L",
1283                 "Headphones 2 R",
1284         },
1285
1286         .port_count = {
1287                 [SCARLETT2_PORT_TYPE_NONE]     = { 1,  0 },
1288                 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 6,  4 },
1289                 [SCARLETT2_PORT_TYPE_SPDIF]    = { 2,  2 },
1290                 [SCARLETT2_PORT_TYPE_MIX]      = { 8,  8 },
1291                 [SCARLETT2_PORT_TYPE_PCM]      = { 6, 10 },
1292         },
1293
1294         .mux_assignment = { {
1295                 { SCARLETT2_PORT_TYPE_PCM,      0,  8 },
1296                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1297                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1298                 { SCARLETT2_PORT_TYPE_PCM,      8,  2 },
1299                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1300                 { SCARLETT2_PORT_TYPE_NONE,     0, 18 },
1301                 { 0,                            0,  0 },
1302         }, {
1303                 { SCARLETT2_PORT_TYPE_PCM,      0,  8 },
1304                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1305                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1306                 { SCARLETT2_PORT_TYPE_PCM,      8,  2 },
1307                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1308                 { SCARLETT2_PORT_TYPE_NONE,     0, 18 },
1309                 { 0,                            0,  0 },
1310         }, {
1311                 { SCARLETT2_PORT_TYPE_PCM,      0,  8 },
1312                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1313                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1314                 { SCARLETT2_PORT_TYPE_PCM,      8,  2 },
1315                 { SCARLETT2_PORT_TYPE_MIX,      0,  8 },
1316                 { SCARLETT2_PORT_TYPE_NONE,     0, 18 },
1317                 { 0,                            0,  0 },
1318         } },
1319
1320         .meter_map = {
1321                 { 14, 8 },
1322                 {  0, 6 },
1323                 { 22, 2 },
1324                 {  6, 8 },
1325                 {  0, 0 },
1326         }
1327 };
1328
1329 static const struct scarlett2_device_info s18i8_gen3_info = {
1330         .config_set = &scarlett2_config_set_gen3c,
1331         .has_speaker_switching = 1,
1332         .level_input_count = 2,
1333         .pad_input_count = 4,
1334         .air_input_count = 4,
1335         .phantom_count = 2,
1336         .inputs_per_phantom = 2,
1337
1338         .line_out_remap_enable = 1,
1339         .line_out_remap = { 0, 1, 6, 7, 2, 3, 4, 5 },
1340         .line_out_unmap = { 0, 1, 4, 5, 6, 7, 2, 3 },
1341
1342         .line_out_descrs = {
1343                 "Monitor L",
1344                 "Monitor R",
1345                 "Alt Monitor L",
1346                 "Alt Monitor R",
1347                 "Headphones 1 L",
1348                 "Headphones 1 R",
1349                 "Headphones 2 L",
1350                 "Headphones 2 R",
1351         },
1352
1353         .port_count = {
1354                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1355                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  8,  8 },
1356                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1357                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
1358                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 20 },
1359                 [SCARLETT2_PORT_TYPE_PCM]      = {  8, 20 },
1360         },
1361
1362         .mux_assignment = { {
1363                 { SCARLETT2_PORT_TYPE_PCM,       0, 10 },
1364                 { SCARLETT2_PORT_TYPE_PCM,      12,  8 },
1365                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1366                 { SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
1367                 { SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
1368                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1369                 { SCARLETT2_PORT_TYPE_PCM,      10,  2 },
1370                 { SCARLETT2_PORT_TYPE_MIX,       0, 20 },
1371                 { SCARLETT2_PORT_TYPE_NONE,      0, 10 },
1372                 { 0,                             0,  0 },
1373         }, {
1374                 { SCARLETT2_PORT_TYPE_PCM,       0, 10 },
1375                 { SCARLETT2_PORT_TYPE_PCM,      12,  4 },
1376                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1377                 { SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
1378                 { SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
1379                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1380                 { SCARLETT2_PORT_TYPE_PCM,      10,  2 },
1381                 { SCARLETT2_PORT_TYPE_MIX,       0, 20 },
1382                 { SCARLETT2_PORT_TYPE_NONE,      0, 10 },
1383                 { 0,                             0,  0 },
1384         }, {
1385                 { SCARLETT2_PORT_TYPE_PCM,       0, 10 },
1386                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1387                 { SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
1388                 { SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
1389                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1390                 { SCARLETT2_PORT_TYPE_MIX,       0, 20 },
1391                 { SCARLETT2_PORT_TYPE_NONE,      0, 10 },
1392                 { 0,                             0,  0 },
1393         } },
1394
1395         .meter_map = {
1396                 { 30, 10 },
1397                 { 42,  8 },
1398                 {  0,  2 },
1399                 {  6,  2 },
1400                 {  2,  4 },
1401                 {  8,  2 },
1402                 { 40,  2 },
1403                 { 10, 20 },
1404                 {  0,  0 }
1405         }
1406 };
1407
1408 static const struct scarlett2_device_info s18i20_gen3_info = {
1409         .config_set = &scarlett2_config_set_gen3c,
1410         .has_speaker_switching = 1,
1411         .has_talkback = 1,
1412         .level_input_count = 2,
1413         .pad_input_count = 8,
1414         .air_input_count = 8,
1415         .phantom_count = 2,
1416         .inputs_per_phantom = 4,
1417
1418         .line_out_descrs = {
1419                 "Monitor 1 L",
1420                 "Monitor 1 R",
1421                 "Monitor 2 L",
1422                 "Monitor 2 R",
1423                 NULL,
1424                 NULL,
1425                 "Headphones 1 L",
1426                 "Headphones 1 R",
1427                 "Headphones 2 L",
1428                 "Headphones 2 R",
1429         },
1430
1431         .port_count = {
1432                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1433                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  9, 10 },
1434                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1435                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  8 },
1436                 [SCARLETT2_PORT_TYPE_MIX]      = { 12, 25 },
1437                 [SCARLETT2_PORT_TYPE_PCM]      = { 20, 20 },
1438         },
1439
1440         .mux_assignment = { {
1441                 { SCARLETT2_PORT_TYPE_PCM,       0,  8 },
1442                 { SCARLETT2_PORT_TYPE_PCM,      10, 10 },
1443                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
1444                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1445                 { SCARLETT2_PORT_TYPE_ADAT,      0,  8 },
1446                 { SCARLETT2_PORT_TYPE_PCM,       8,  2 },
1447                 { SCARLETT2_PORT_TYPE_MIX,       0, 25 },
1448                 { SCARLETT2_PORT_TYPE_NONE,      0, 12 },
1449                 { 0,                             0,  0 },
1450         }, {
1451                 { SCARLETT2_PORT_TYPE_PCM,       0,  8 },
1452                 { SCARLETT2_PORT_TYPE_PCM,      10,  8 },
1453                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
1454                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1455                 { SCARLETT2_PORT_TYPE_ADAT,      0,  8 },
1456                 { SCARLETT2_PORT_TYPE_PCM,       8,  2 },
1457                 { SCARLETT2_PORT_TYPE_MIX,       0, 25 },
1458                 { SCARLETT2_PORT_TYPE_NONE,      0, 10 },
1459                 { 0,                             0,  0 },
1460         }, {
1461                 { SCARLETT2_PORT_TYPE_PCM,       0, 10 },
1462                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
1463                 { SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
1464                 { SCARLETT2_PORT_TYPE_NONE,      0, 24 },
1465                 { 0,                             0,  0 },
1466         } },
1467
1468         .meter_map = {
1469                 { 45,  8 },
1470                 { 55, 10 },
1471                 {  0, 20 },
1472                 { 53,  2 },
1473                 { 20, 25 },
1474                 {  0,  0 },
1475         }
1476 };
1477
1478 static const struct scarlett2_device_info solo_gen4_info = {
1479         .config_set = &scarlett2_config_set_gen4_solo,
1480         .min_firmware_version = 2115,
1481
1482         .level_input_count = 1,
1483         .air_input_count = 1,
1484         .air_input_first = 1,
1485         .air_option = 1,
1486         .phantom_count = 1,
1487         .phantom_first = 1,
1488         .inputs_per_phantom = 1,
1489         .direct_monitor = 1,
1490         .dsp_count = 2,
1491
1492         .port_count = {
1493                 [SCARLETT2_PORT_TYPE_NONE]     = { 1,  0 },
1494                 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 2,  2 },
1495                 [SCARLETT2_PORT_TYPE_MIX]      = { 8,  6 },
1496                 [SCARLETT2_PORT_TYPE_PCM]      = { 2,  4 },
1497         },
1498
1499         .mux_assignment = { {
1500                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1501                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1502                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1503                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1504                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1505                 { 0,                             0,  0 },
1506         }, {
1507                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1508                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1509                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1510                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1511                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1512                 { 0,                             0,  0 },
1513         }, {
1514                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1515                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1516                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1517                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1518                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1519                 { 0,                             0,  0 },
1520         } },
1521
1522         .meter_map = {
1523                 {  6,  2 },
1524                 {  4,  2 },
1525                 {  8,  4 },
1526                 {  2,  2 },
1527                 {  0,  2 },
1528                 {  0,  0 }
1529         }
1530 };
1531
1532 static const struct scarlett2_device_info s2i2_gen4_info = {
1533         .config_set = &scarlett2_config_set_gen4_2i2,
1534         .min_firmware_version = 2115,
1535
1536         .level_input_count = 2,
1537         .air_input_count = 2,
1538         .air_option = 1,
1539         .phantom_count = 1,
1540         .inputs_per_phantom = 2,
1541         .gain_input_count = 2,
1542         .direct_monitor = 2,
1543         .dsp_count = 2,
1544
1545         .port_count = {
1546                 [SCARLETT2_PORT_TYPE_NONE]     = { 1,  0 },
1547                 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 2,  2 },
1548                 [SCARLETT2_PORT_TYPE_MIX]      = { 6,  6 },
1549                 [SCARLETT2_PORT_TYPE_PCM]      = { 2,  4 },
1550         },
1551
1552         .mux_assignment = { {
1553                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1554                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1555                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1556                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1557                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1558                 { 0,                             0,  0 },
1559         }, {
1560                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1561                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1562                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1563                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1564                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1565                 { 0,                             0,  0 },
1566         }, {
1567                 { SCARLETT2_PORT_TYPE_MIX,       4,  2 },
1568                 { SCARLETT2_PORT_TYPE_MIX,       2,  2 },
1569                 { SCARLETT2_PORT_TYPE_PCM,       0,  4 },
1570                 { SCARLETT2_PORT_TYPE_MIX,       0,  2 },
1571                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
1572                 { 0,                             0,  0 },
1573         } },
1574
1575         .meter_map = {
1576                 {  6,  2 },
1577                 {  4,  2 },
1578                 {  8,  4 },
1579                 {  2,  2 },
1580                 {  0,  2 },
1581                 {  0,  0 }
1582         }
1583 };
1584
1585 static const struct scarlett2_device_info s4i4_gen4_info = {
1586         .config_set = &scarlett2_config_set_gen4_4i4,
1587         .min_firmware_version = 2089,
1588
1589         .level_input_count = 2,
1590         .air_input_count = 2,
1591         .air_option = 1,
1592         .phantom_count = 2,
1593         .inputs_per_phantom = 1,
1594         .gain_input_count = 2,
1595         .dsp_count = 2,
1596
1597         .port_count = {
1598                 [SCARLETT2_PORT_TYPE_NONE]     = { 1,  0 },
1599                 [SCARLETT2_PORT_TYPE_ANALOGUE] = { 4,  6 },
1600                 [SCARLETT2_PORT_TYPE_MIX]      = { 8, 12 },
1601                 [SCARLETT2_PORT_TYPE_PCM]      = { 6,  6 },
1602         },
1603
1604         .mux_assignment = { {
1605                 { SCARLETT2_PORT_TYPE_MIX,      10,  2 },
1606                 { SCARLETT2_PORT_TYPE_PCM,       0,  6 },
1607                 { SCARLETT2_PORT_TYPE_MIX,       0, 10 },
1608                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  6 },
1609                 { 0,                             0,  0 },
1610         }, {
1611                 { SCARLETT2_PORT_TYPE_MIX,      10,  2 },
1612                 { SCARLETT2_PORT_TYPE_PCM,       0,  6 },
1613                 { SCARLETT2_PORT_TYPE_MIX,       0, 10 },
1614                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  6 },
1615                 { 0,                             0,  0 },
1616         }, {
1617                 { SCARLETT2_PORT_TYPE_MIX,      10,  2 },
1618                 { SCARLETT2_PORT_TYPE_PCM,       0,  6 },
1619                 { SCARLETT2_PORT_TYPE_MIX,       0, 10 },
1620                 { SCARLETT2_PORT_TYPE_ANALOGUE,  0,  6 },
1621                 { 0,                             0,  0 },
1622         } },
1623
1624         .meter_map = {
1625                 { 16,  8 },
1626                 {  6, 10 },
1627                 {  0,  6 },
1628                 {  0,  0 }
1629         }
1630 };
1631
1632 static const struct scarlett2_device_info clarett_2pre_info = {
1633         .config_set = &scarlett2_config_set_clarett,
1634         .level_input_count = 2,
1635         .air_input_count = 2,
1636
1637         .line_out_descrs = {
1638                 "Monitor L",
1639                 "Monitor R",
1640                 "Headphones L",
1641                 "Headphones R",
1642         },
1643
1644         .port_count = {
1645                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1646                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  2,  4 },
1647                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  0 },
1648                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
1649                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1650                 [SCARLETT2_PORT_TYPE_PCM]      = {  4, 12 },
1651         },
1652
1653         .mux_assignment = { {
1654                 { SCARLETT2_PORT_TYPE_PCM,      0, 12 },
1655                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1656                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1657                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1658                 { 0,                            0,  0 },
1659         }, {
1660                 { SCARLETT2_PORT_TYPE_PCM,      0,  8 },
1661                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1662                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1663                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1664                 { 0,                            0,  0 },
1665         }, {
1666                 { SCARLETT2_PORT_TYPE_PCM,      0,  2 },
1667                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
1668                 { SCARLETT2_PORT_TYPE_NONE,     0, 26 },
1669                 { 0,                            0,  0 },
1670         } },
1671
1672         .meter_map = {
1673                 { 22, 12 },
1674                 {  0, 22 },
1675                 {  0,  0 }
1676         }
1677 };
1678
1679 static const struct scarlett2_device_info clarett_4pre_info = {
1680         .config_set = &scarlett2_config_set_clarett,
1681         .level_input_count = 2,
1682         .air_input_count = 4,
1683
1684         .line_out_descrs = {
1685                 "Monitor L",
1686                 "Monitor R",
1687                 "Headphones 1 L",
1688                 "Headphones 1 R",
1689                 "Headphones 2 L",
1690                 "Headphones 2 R",
1691         },
1692
1693         .port_count = {
1694                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1695                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  8,  6 },
1696                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1697                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
1698                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1699                 [SCARLETT2_PORT_TYPE_PCM]      = {  8, 18 },
1700         },
1701
1702         .mux_assignment = { {
1703                 { SCARLETT2_PORT_TYPE_PCM,      0, 18 },
1704                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1705                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1706                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1707                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1708                 { 0,                            0,  0 },
1709         }, {
1710                 { SCARLETT2_PORT_TYPE_PCM,      0, 14 },
1711                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1712                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1713                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1714                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1715                 { 0,                            0,  0 },
1716         }, {
1717                 { SCARLETT2_PORT_TYPE_PCM,      0, 12 },
1718                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
1719                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1720                 { SCARLETT2_PORT_TYPE_NONE,     0, 24 },
1721                 { 0,                            0,  0 },
1722         } },
1723
1724         .meter_map = {
1725                 { 26, 18 },
1726                 {  0, 26 },
1727                 {  0,  0 }
1728         }
1729 };
1730
1731 static const struct scarlett2_device_info clarett_8pre_info = {
1732         .config_set = &scarlett2_config_set_clarett,
1733         .level_input_count = 2,
1734         .air_input_count = 8,
1735
1736         .line_out_descrs = {
1737                 "Monitor L",
1738                 "Monitor R",
1739                 NULL,
1740                 NULL,
1741                 NULL,
1742                 NULL,
1743                 "Headphones 1 L",
1744                 "Headphones 1 R",
1745                 "Headphones 2 L",
1746                 "Headphones 2 R",
1747         },
1748
1749         .port_count = {
1750                 [SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
1751                 [SCARLETT2_PORT_TYPE_ANALOGUE] = {  8, 10 },
1752                 [SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
1753                 [SCARLETT2_PORT_TYPE_ADAT]     = {  8,  8 },
1754                 [SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
1755                 [SCARLETT2_PORT_TYPE_PCM]      = { 20, 18 },
1756         },
1757
1758         .mux_assignment = { {
1759                 { SCARLETT2_PORT_TYPE_PCM,      0, 18 },
1760                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1761                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1762                 { SCARLETT2_PORT_TYPE_ADAT,     0,  8 },
1763                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1764                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1765                 { 0,                            0,  0 },
1766         }, {
1767                 { SCARLETT2_PORT_TYPE_PCM,      0, 14 },
1768                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1769                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1770                 { SCARLETT2_PORT_TYPE_ADAT,     0,  4 },
1771                 { SCARLETT2_PORT_TYPE_MIX,      0, 18 },
1772                 { SCARLETT2_PORT_TYPE_NONE,     0,  8 },
1773                 { 0,                            0,  0 },
1774         }, {
1775                 { SCARLETT2_PORT_TYPE_PCM,      0, 12 },
1776                 { SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
1777                 { SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
1778                 { SCARLETT2_PORT_TYPE_NONE,     0, 22 },
1779                 { 0,                            0,  0 },
1780         } },
1781
1782         .meter_map = {
1783                 { 38, 18 },
1784                 {  0, 38 },
1785                 {  0,  0 }
1786         }
1787 };
1788
1789 struct scarlett2_device_entry {
1790         const u32 usb_id; /* USB device identifier */
1791         const struct scarlett2_device_info *info;
1792         const char *series_name;
1793 };
1794
1795 static const struct scarlett2_device_entry scarlett2_devices[] = {
1796         /* Supported Gen 2 devices */
1797         { USB_ID(0x1235, 0x8203), &s6i6_gen2_info, "Scarlett Gen 2" },
1798         { USB_ID(0x1235, 0x8204), &s18i8_gen2_info, "Scarlett Gen 2" },
1799         { USB_ID(0x1235, 0x8201), &s18i20_gen2_info, "Scarlett Gen 2" },
1800
1801         /* Supported Gen 3 devices */
1802         { USB_ID(0x1235, 0x8211), &solo_gen3_info, "Scarlett Gen 3" },
1803         { USB_ID(0x1235, 0x8210), &s2i2_gen3_info, "Scarlett Gen 3" },
1804         { USB_ID(0x1235, 0x8212), &s4i4_gen3_info, "Scarlett Gen 3" },
1805         { USB_ID(0x1235, 0x8213), &s8i6_gen3_info, "Scarlett Gen 3" },
1806         { USB_ID(0x1235, 0x8214), &s18i8_gen3_info, "Scarlett Gen 3" },
1807         { USB_ID(0x1235, 0x8215), &s18i20_gen3_info, "Scarlett Gen 3" },
1808
1809         /* Supported Gen 4 devices */
1810         { USB_ID(0x1235, 0x8218), &solo_gen4_info, "Scarlett Gen 4" },
1811         { USB_ID(0x1235, 0x8219), &s2i2_gen4_info, "Scarlett Gen 4" },
1812         { USB_ID(0x1235, 0x821a), &s4i4_gen4_info, "Scarlett Gen 4" },
1813
1814         /* Supported Clarett USB/Clarett+ devices */
1815         { USB_ID(0x1235, 0x8206), &clarett_2pre_info, "Clarett USB" },
1816         { USB_ID(0x1235, 0x8207), &clarett_4pre_info, "Clarett USB" },
1817         { USB_ID(0x1235, 0x8208), &clarett_8pre_info, "Clarett USB" },
1818         { USB_ID(0x1235, 0x820a), &clarett_2pre_info, "Clarett+" },
1819         { USB_ID(0x1235, 0x820b), &clarett_4pre_info, "Clarett+" },
1820         { USB_ID(0x1235, 0x820c), &clarett_8pre_info, "Clarett+" },
1821
1822         /* End of list */
1823         { 0, NULL },
1824 };
1825
1826 /* get the starting port index number for a given port type/direction */
1827 static int scarlett2_get_port_start_num(
1828         const int port_count[][SCARLETT2_PORT_DIRNS],
1829         int direction, int port_type)
1830 {
1831         int i, num = 0;
1832
1833         for (i = 0; i < port_type; i++)
1834                 num += port_count[i][direction];
1835
1836         return num;
1837 }
1838
1839 /*** USB Interactions ***/
1840
1841 /* Commands for sending/receiving requests/responses */
1842 #define SCARLETT2_USB_CMD_INIT 0
1843 #define SCARLETT2_USB_CMD_REQ  2
1844 #define SCARLETT2_USB_CMD_RESP 3
1845
1846 #define SCARLETT2_USB_INIT_1        0x00000000
1847 #define SCARLETT2_USB_INIT_2        0x00000002
1848 #define SCARLETT2_USB_REBOOT        0x00000003
1849 #define SCARLETT2_USB_GET_METER     0x00001001
1850 #define SCARLETT2_USB_GET_MIX       0x00002001
1851 #define SCARLETT2_USB_SET_MIX       0x00002002
1852 #define SCARLETT2_USB_GET_MUX       0x00003001
1853 #define SCARLETT2_USB_SET_MUX       0x00003002
1854 #define SCARLETT2_USB_INFO_FLASH    0x00004000
1855 #define SCARLETT2_USB_INFO_SEGMENT  0x00004001
1856 #define SCARLETT2_USB_ERASE_SEGMENT 0x00004002
1857 #define SCARLETT2_USB_GET_ERASE     0x00004003
1858 #define SCARLETT2_USB_WRITE_SEGMENT 0x00004004
1859 #define SCARLETT2_USB_GET_SYNC      0x00006004
1860 #define SCARLETT2_USB_GET_DATA      0x00800000
1861 #define SCARLETT2_USB_SET_DATA      0x00800001
1862 #define SCARLETT2_USB_DATA_CMD      0x00800002
1863
1864 #define SCARLETT2_USB_CONFIG_SAVE 6
1865
1866 #define SCARLETT2_USB_METER_LEVELS_GET_MAGIC 1
1867
1868 #define SCARLETT2_FLASH_BLOCK_SIZE 4096
1869 #define SCARLETT2_FLASH_WRITE_MAX 1024
1870 #define SCARLETT2_SEGMENT_NUM_MIN 1
1871 #define SCARLETT2_SEGMENT_NUM_MAX 4
1872
1873 #define SCARLETT2_SEGMENT_SETTINGS_NAME "App_Settings"
1874 #define SCARLETT2_SEGMENT_FIRMWARE_NAME "App_Upgrade"
1875
1876 /* proprietary request/response format */
1877 struct scarlett2_usb_packet {
1878         __le32 cmd;
1879         __le16 size;
1880         __le16 seq;
1881         __le32 error;
1882         __le32 pad;
1883         u8 data[];
1884 };
1885
1886 static void scarlett2_fill_request_header(struct scarlett2_data *private,
1887                                           struct scarlett2_usb_packet *req,
1888                                           u32 cmd, u16 req_size)
1889 {
1890         /* sequence must go up by 1 for each request */
1891         u16 seq = private->scarlett2_seq++;
1892
1893         req->cmd = cpu_to_le32(cmd);
1894         req->size = cpu_to_le16(req_size);
1895         req->seq = cpu_to_le16(seq);
1896         req->error = 0;
1897         req->pad = 0;
1898 }
1899
1900 static int scarlett2_usb_tx(struct usb_device *dev, int interface,
1901                             void *buf, u16 size)
1902 {
1903         return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1904                         SCARLETT2_USB_CMD_REQ,
1905                         USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1906                         0, interface, buf, size);
1907 }
1908
1909 static int scarlett2_usb_rx(struct usb_device *dev, int interface,
1910                             u32 usb_req, void *buf, u16 size)
1911 {
1912         return snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
1913                         usb_req,
1914                         USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1915                         0, interface, buf, size);
1916 }
1917
1918 /* Send a proprietary format request to the Scarlett interface */
1919 static int scarlett2_usb(
1920         struct usb_mixer_interface *mixer, u32 cmd,
1921         void *req_data, u16 req_size, void *resp_data, u16 resp_size)
1922 {
1923         struct scarlett2_data *private = mixer->private_data;
1924         struct usb_device *dev = mixer->chip->dev;
1925         struct scarlett2_usb_packet *req, *resp = NULL;
1926         size_t req_buf_size = struct_size(req, data, req_size);
1927         size_t resp_buf_size = struct_size(resp, data, resp_size);
1928         int err;
1929
1930         req = kmalloc(req_buf_size, GFP_KERNEL);
1931         if (!req) {
1932                 err = -ENOMEM;
1933                 goto error;
1934         }
1935
1936         resp = kmalloc(resp_buf_size, GFP_KERNEL);
1937         if (!resp) {
1938                 err = -ENOMEM;
1939                 goto error;
1940         }
1941
1942         mutex_lock(&private->usb_mutex);
1943
1944         /* build request message and send it */
1945
1946         scarlett2_fill_request_header(private, req, cmd, req_size);
1947
1948         if (req_size)
1949                 memcpy(req->data, req_data, req_size);
1950
1951         err = scarlett2_usb_tx(dev, private->bInterfaceNumber,
1952                                req, req_buf_size);
1953
1954         if (err != req_buf_size) {
1955                 usb_audio_err(
1956                         mixer->chip,
1957                         "%s USB request result cmd %x was %d\n",
1958                         private->series_name, cmd, err);
1959                 err = -EINVAL;
1960                 goto unlock;
1961         }
1962
1963         /* send a second message to get the response */
1964
1965         err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
1966                                SCARLETT2_USB_CMD_RESP,
1967                                resp, resp_buf_size);
1968
1969         /* validate the response */
1970
1971         if (err != resp_buf_size) {
1972
1973                 /* ESHUTDOWN and EPROTO are valid responses to a
1974                  * reboot request
1975                  */
1976                 if (cmd == SCARLETT2_USB_REBOOT &&
1977                     (err == -ESHUTDOWN || err == -EPROTO)) {
1978                         err = 0;
1979                         goto unlock;
1980                 }
1981
1982                 usb_audio_err(
1983                         mixer->chip,
1984                         "%s USB response result cmd %x was %d expected %zu\n",
1985                         private->series_name, cmd, err, resp_buf_size);
1986                 err = -EINVAL;
1987                 goto unlock;
1988         }
1989
1990         /* cmd/seq/size should match except when initialising
1991          * seq sent = 1, response = 0
1992          */
1993         if (resp->cmd != req->cmd ||
1994             (resp->seq != req->seq &&
1995                 (le16_to_cpu(req->seq) != 1 || resp->seq != 0)) ||
1996             resp_size != le16_to_cpu(resp->size) ||
1997             resp->error ||
1998             resp->pad) {
1999                 usb_audio_err(
2000                         mixer->chip,
2001                         "%s USB invalid response; "
2002                            "cmd tx/rx %d/%d seq %d/%d size %d/%d "
2003                            "error %d pad %d\n",
2004                         private->series_name,
2005                         le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
2006                         le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
2007                         resp_size, le16_to_cpu(resp->size),
2008                         le32_to_cpu(resp->error),
2009                         le32_to_cpu(resp->pad));
2010                 err = -EINVAL;
2011                 goto unlock;
2012         }
2013
2014         if (resp_data && resp_size > 0)
2015                 memcpy(resp_data, resp->data, resp_size);
2016
2017 unlock:
2018         mutex_unlock(&private->usb_mutex);
2019 error:
2020         kfree(req);
2021         kfree(resp);
2022         return err;
2023 }
2024
2025 /* Send a USB message to get data; result placed in *buf */
2026 static int scarlett2_usb_get(
2027         struct usb_mixer_interface *mixer,
2028         int offset, void *buf, int size)
2029 {
2030         struct {
2031                 __le32 offset;
2032                 __le32 size;
2033         } __packed req;
2034
2035         req.offset = cpu_to_le32(offset);
2036         req.size = cpu_to_le32(size);
2037         return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
2038                              &req, sizeof(req), buf, size);
2039 }
2040
2041 /* Return true if the given configuration item is present in the
2042  * configuration set used by this device.
2043  */
2044 static int scarlett2_has_config_item(
2045         struct scarlett2_data *private, int config_item_num)
2046 {
2047         return !!private->config_set->items[config_item_num].offset;
2048 }
2049
2050 /* Send a USB message to get configuration parameters; result placed in *buf */
2051 static int scarlett2_usb_get_config(
2052         struct usb_mixer_interface *mixer,
2053         int config_item_num, int count, void *buf)
2054 {
2055         struct scarlett2_data *private = mixer->private_data;
2056         const struct scarlett2_config *config_item =
2057                 &private->config_set->items[config_item_num];
2058         int size, err, i;
2059         u8 *buf_8;
2060         u8 value;
2061
2062         /* Check that the configuration item is present in the
2063          * configuration set used by this device
2064          */
2065         if (!config_item->offset)
2066                 return -EFAULT;
2067
2068         /* Gen 4 style parameters are always 1 byte */
2069         size = config_item->size ? config_item->size : 8;
2070
2071         /* For byte-sized parameters, retrieve directly into buf */
2072         if (size >= 8) {
2073                 size = size / 8 * count;
2074                 err = scarlett2_usb_get(mixer, config_item->offset, buf, size);
2075                 if (err < 0)
2076                         return err;
2077                 if (size == 2) {
2078                         u16 *buf_16 = buf;
2079
2080                         for (i = 0; i < count; i++, buf_16++)
2081                                 *buf_16 = le16_to_cpu(*(__le16 *)buf_16);
2082                 }
2083                 return 0;
2084         }
2085
2086         /* For bit-sized parameters, retrieve into value */
2087         err = scarlett2_usb_get(mixer, config_item->offset, &value, 1);
2088         if (err < 0)
2089                 return err;
2090
2091         /* then unpack from value into buf[] */
2092         buf_8 = buf;
2093         for (i = 0; i < 8 && i < count; i++, value >>= 1)
2094                 *buf_8++ = value & 1;
2095
2096         return 0;
2097 }
2098
2099 /* Send a SCARLETT2_USB_SET_DATA command.
2100  * offset: location in the device's data space
2101  * size: size in bytes of the value (1, 2, 4)
2102  */
2103 static int scarlett2_usb_set_data(
2104         struct usb_mixer_interface *mixer,
2105         int offset, int size, int value)
2106 {
2107         struct scarlett2_data *private = mixer->private_data;
2108         struct {
2109                 __le32 offset;
2110                 __le32 size;
2111                 __le32 value;
2112         } __packed req;
2113
2114         req.offset = cpu_to_le32(offset);
2115         req.size = cpu_to_le32(size);
2116         req.value = cpu_to_le32(value);
2117         return scarlett2_usb(private->mixer, SCARLETT2_USB_SET_DATA,
2118                              &req, sizeof(u32) * 2 + size, NULL, 0);
2119 }
2120
2121 /* Send a SCARLETT2_USB_DATA_CMD command.
2122  * Configuration changes require activation with this after they have
2123  * been uploaded by a previous SCARLETT2_USB_SET_DATA.
2124  * The value for activate needed is determined by the configuration
2125  * item.
2126  */
2127 static int scarlett2_usb_activate_config(
2128         struct usb_mixer_interface *mixer, int activate)
2129 {
2130         __le32 req;
2131
2132         req = cpu_to_le32(activate);
2133         return scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
2134                              &req, sizeof(req), NULL, 0);
2135 }
2136
2137 /* Send USB messages to set a SCARLETT2_CONFIG_* parameter */
2138 static int scarlett2_usb_set_config(
2139         struct usb_mixer_interface *mixer,
2140         int config_item_num, int index, int value)
2141 {
2142         struct scarlett2_data *private = mixer->private_data;
2143         const struct scarlett2_config_set *config_set = private->config_set;
2144         const struct scarlett2_config *config_item =
2145                 &config_set->items[config_item_num];
2146         int offset, size;
2147         int err;
2148
2149         /* Check that the configuration item is present in the
2150          * configuration set used by this device
2151          */
2152         if (!config_item->offset)
2153                 return -EFAULT;
2154
2155         /* Gen 4 style writes are selected with size = 0;
2156          * these are only byte-sized values written through a shared
2157          * location, different to the read address
2158          */
2159         if (!config_item->size) {
2160                 if (!config_set->gen4_write_addr)
2161                         return -EFAULT;
2162
2163                 /* Place index in gen4_write_addr + 1 */
2164                 err = scarlett2_usb_set_data(
2165                         mixer, config_set->gen4_write_addr + 1, 1, index);
2166                 if (err < 0)
2167                         return err;
2168
2169                 /* Place value in gen4_write_addr */
2170                 err = scarlett2_usb_set_data(
2171                         mixer, config_set->gen4_write_addr, 1, value);
2172                 if (err < 0)
2173                         return err;
2174
2175                 /* Request the interface do the write */
2176                 return scarlett2_usb_activate_config(
2177                         mixer, config_item->activate);
2178         }
2179
2180         /* Not-Gen 4 style needs NVRAM save, supports
2181          * bit-modification, and writing is done to the same place
2182          * that the value can be read from
2183          */
2184
2185         /* Cancel any pending NVRAM save */
2186         cancel_delayed_work_sync(&private->work);
2187
2188         /* Convert config_item->size in bits to size in bytes and
2189          * calculate offset
2190          */
2191         if (config_item->size >= 8) {
2192                 size = config_item->size / 8;
2193                 offset = config_item->offset + index * size;
2194
2195         /* If updating a bit, retrieve the old value, set/clear the
2196          * bit as needed, and update value
2197          */
2198         } else {
2199                 u8 tmp;
2200
2201                 size = 1;
2202                 offset = config_item->offset;
2203
2204                 err = scarlett2_usb_get(mixer, offset, &tmp, 1);
2205                 if (err < 0)
2206                         return err;
2207
2208                 if (value)
2209                         tmp |= (1 << index);
2210                 else
2211                         tmp &= ~(1 << index);
2212
2213                 value = tmp;
2214         }
2215
2216         /* Send the configuration parameter data */
2217         err = scarlett2_usb_set_data(mixer, offset, size, value);
2218         if (err < 0)
2219                 return err;
2220
2221         /* Activate the change */
2222         err = scarlett2_usb_activate_config(mixer, config_item->activate);
2223         if (err < 0)
2224                 return err;
2225
2226         /* Gen 2 style writes to Gen 4 devices don't need saving */
2227         if (config_set->gen4_write_addr)
2228                 return 0;
2229
2230         /* Schedule the change to be written to NVRAM */
2231         if (config_item->activate != SCARLETT2_USB_CONFIG_SAVE)
2232                 schedule_delayed_work(&private->work, msecs_to_jiffies(2000));
2233
2234         return 0;
2235 }
2236
2237 /* Send SCARLETT2_USB_DATA_CMD SCARLETT2_USB_CONFIG_SAVE */
2238 static void scarlett2_config_save(struct usb_mixer_interface *mixer)
2239 {
2240         int err;
2241
2242         err = scarlett2_usb_activate_config(mixer, SCARLETT2_USB_CONFIG_SAVE);
2243         if (err < 0)
2244                 usb_audio_err(mixer->chip, "config save failed: %d\n", err);
2245 }
2246
2247 /* Delayed work to save config */
2248 static void scarlett2_config_save_work(struct work_struct *work)
2249 {
2250         struct scarlett2_data *private =
2251                 container_of(work, struct scarlett2_data, work.work);
2252
2253         scarlett2_config_save(private->mixer);
2254 }
2255
2256 /* Send a USB message to get sync status; result placed in *sync */
2257 static int scarlett2_usb_get_sync_status(
2258         struct usb_mixer_interface *mixer,
2259         u8 *sync)
2260 {
2261         __le32 data;
2262         int err;
2263
2264         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC,
2265                             NULL, 0, &data, sizeof(data));
2266         if (err < 0)
2267                 return err;
2268
2269         *sync = !!data;
2270         return 0;
2271 }
2272
2273 /* Return true if the device has a mixer that we can control */
2274 static int scarlett2_has_mixer(struct scarlett2_data *private)
2275 {
2276         return !!private->info->mux_assignment[0][0].count;
2277 }
2278
2279 /* Map from mixer value to (db + 80) * 2
2280  * (reverse of scarlett2_mixer_values[])
2281  */
2282 static int scarlett2_mixer_value_to_db(int value)
2283 {
2284         int i;
2285
2286         for (i = 0; i < SCARLETT2_MIXER_VALUE_COUNT; i++)
2287                 if (scarlett2_mixer_values[i] >= value)
2288                         return i;
2289         return SCARLETT2_MIXER_MAX_VALUE;
2290 }
2291
2292 /* Send a USB message to get the volumes for all inputs of one mix
2293  * and put the values into private->mix[]
2294  */
2295 static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer,
2296                                  int mix_num)
2297 {
2298         struct scarlett2_data *private = mixer->private_data;
2299
2300         int num_mixer_in = private->num_mix_in;
2301         int err, i, j;
2302
2303         struct {
2304                 __le16 mix_num;
2305                 __le16 count;
2306         } __packed req;
2307
2308         __le16 data[SCARLETT2_INPUT_MIX_MAX];
2309
2310         req.mix_num = cpu_to_le16(mix_num);
2311         req.count = cpu_to_le16(num_mixer_in);
2312
2313         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX,
2314                             &req, sizeof(req),
2315                             data, num_mixer_in * sizeof(u16));
2316         if (err < 0)
2317                 return err;
2318
2319         for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
2320                 private->mix[j] = scarlett2_mixer_value_to_db(
2321                         le16_to_cpu(data[i]));
2322
2323         return 0;
2324 }
2325
2326 /* Send a USB message to set the volumes for all inputs of one mix
2327  * (values obtained from private->mix[])
2328  */
2329 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
2330                                  int mix_num)
2331 {
2332         struct scarlett2_data *private = mixer->private_data;
2333
2334         struct {
2335                 __le16 mix_num;
2336                 __le16 data[SCARLETT2_INPUT_MIX_MAX];
2337         } __packed req;
2338
2339         int i, j;
2340         int num_mixer_in = private->num_mix_in;
2341
2342         req.mix_num = cpu_to_le16(mix_num);
2343
2344         for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
2345                 req.data[i] = cpu_to_le16(
2346                         scarlett2_mixer_values[private->mix[j]]
2347                 );
2348
2349         return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
2350                              &req, (num_mixer_in + 1) * sizeof(u16),
2351                              NULL, 0);
2352 }
2353
2354 /* Convert a port number index (per info->port_count) to a hardware ID */
2355 static u32 scarlett2_mux_src_num_to_id(
2356         const int port_count[][SCARLETT2_PORT_DIRNS], int num)
2357 {
2358         int port_type;
2359
2360         for (port_type = 0;
2361              port_type < SCARLETT2_PORT_TYPE_COUNT;
2362              port_type++) {
2363                 if (num < port_count[port_type][SCARLETT2_PORT_IN])
2364                         return scarlett2_ports[port_type].id | num;
2365                 num -= port_count[port_type][SCARLETT2_PORT_IN];
2366         }
2367
2368         /* Oops */
2369         return 0;
2370 }
2371
2372 /* Convert a hardware ID to a port number index */
2373 static u32 scarlett2_mux_id_to_num(
2374         const int port_count[][SCARLETT2_PORT_DIRNS], int direction, u32 id)
2375 {
2376         int port_type;
2377         int port_num = 0;
2378
2379         for (port_type = 0;
2380              port_type < SCARLETT2_PORT_TYPE_COUNT;
2381              port_type++) {
2382                 int base = scarlett2_ports[port_type].id;
2383                 int count = port_count[port_type][direction];
2384
2385                 if (id >= base && id < base + count)
2386                         return port_num + id - base;
2387                 port_num += count;
2388         }
2389
2390         /* Oops */
2391         return -1;
2392 }
2393
2394 /* Convert one mux entry from the interface and load into private->mux[] */
2395 static void scarlett2_usb_populate_mux(struct scarlett2_data *private,
2396                                        u32 mux_entry)
2397 {
2398         const struct scarlett2_device_info *info = private->info;
2399         const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2400
2401         int dst_idx, src_idx;
2402
2403         dst_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_OUT,
2404                                           mux_entry & 0xFFF);
2405         if (dst_idx < 0)
2406                 return;
2407
2408         if (dst_idx >= private->num_mux_dsts) {
2409                 usb_audio_err(private->mixer->chip,
2410                         "BUG: scarlett2_mux_id_to_num(%06x, OUT): %d >= %d",
2411                         mux_entry, dst_idx, private->num_mux_dsts);
2412                 return;
2413         }
2414
2415         src_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_IN,
2416                                           mux_entry >> 12);
2417         if (src_idx < 0)
2418                 return;
2419
2420         if (src_idx >= private->num_mux_srcs) {
2421                 usb_audio_err(private->mixer->chip,
2422                         "BUG: scarlett2_mux_id_to_num(%06x, IN): %d >= %d",
2423                         mux_entry, src_idx, private->num_mux_srcs);
2424                 return;
2425         }
2426
2427         private->mux[dst_idx] = src_idx;
2428 }
2429
2430 /* Update the meter level map
2431  *
2432  * The meter level data from the interface (SCARLETT2_USB_GET_METER
2433  * request) is returned in mux_assignment order, but to avoid exposing
2434  * that to userspace, scarlett2_meter_ctl_get() rearranges the data
2435  * into scarlett2_ports order using the meter_level_map[] array which
2436  * is set up by this function.
2437  *
2438  * In addition, the meter level data values returned from the
2439  * interface are invalid for destinations where:
2440  *
2441  * - the source is "Off"; therefore we set those values to zero (map
2442  *   value of 255)
2443  *
2444  * - the source is assigned to a previous (with respect to the
2445  *   mux_assignment order) destination; therefore we set those values
2446  *   to the value previously reported for that source
2447  */
2448 static void scarlett2_update_meter_level_map(struct scarlett2_data *private)
2449 {
2450         const struct scarlett2_device_info *info = private->info;
2451         const struct scarlett2_meter_entry *entry;
2452
2453         /* sources already assigned to a destination
2454          * value is 255 for None, otherwise the value of i
2455          * (index into array returned by
2456          * scarlett2_usb_get_meter_levels())
2457          */
2458         u8 seen_src[SCARLETT2_MAX_SRCS] = { 1 };
2459         u8 seen_src_value[SCARLETT2_MAX_SRCS] = { 255 };
2460
2461         /* index in meter_map[] order */
2462         int i = 0;
2463
2464         /* go through the meter_map[] entries */
2465         for (entry = info->meter_map;
2466              entry->count;
2467              entry++) {
2468
2469                 /* fill in each meter_level_map[] entry */
2470                 int j, mux_idx;
2471
2472                 for (j = 0, mux_idx = entry->start;
2473                      j < entry->count;
2474                      i++, j++, mux_idx++) {
2475
2476                         /* convert mux_idx using line_out_unmap[] */
2477                         int map_mux_idx = (
2478                             info->line_out_remap_enable &&
2479                             mux_idx < private->num_line_out
2480                         ) ? info->line_out_unmap[mux_idx]
2481                           : mux_idx;
2482
2483                         /* check which source is connected, and if
2484                          * that source is already connected elsewhere,
2485                          * use that existing connection's destination
2486                          * for this meter entry instead
2487                          */
2488                         int mux_src = private->mux[mux_idx];
2489
2490                         if (!seen_src[mux_src]) {
2491                                 seen_src[mux_src] = 1;
2492                                 seen_src_value[mux_src] = i;
2493                         }
2494                         private->meter_level_map[map_mux_idx] =
2495                                 seen_src_value[mux_src];
2496                 }
2497         }
2498 }
2499
2500 /* Send USB message to get mux inputs and then populate private->mux[] */
2501 static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
2502 {
2503         struct scarlett2_data *private = mixer->private_data;
2504         int count = private->num_mux_dsts;
2505         int err, i;
2506
2507         struct {
2508                 __le16 num;
2509                 __le16 count;
2510         } __packed req;
2511
2512         __le32 data[SCARLETT2_MUX_MAX];
2513
2514         private->mux_updated = 0;
2515
2516         req.num = 0;
2517         req.count = cpu_to_le16(count);
2518
2519         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
2520                             &req, sizeof(req),
2521                             data, count * sizeof(u32));
2522         if (err < 0)
2523                 return err;
2524
2525         for (i = 0; i < count; i++)
2526                 scarlett2_usb_populate_mux(private, le32_to_cpu(data[i]));
2527
2528         scarlett2_update_meter_level_map(private);
2529
2530         return 0;
2531 }
2532
2533 /* Send USB messages to set mux inputs */
2534 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
2535 {
2536         struct scarlett2_data *private = mixer->private_data;
2537         const struct scarlett2_device_info *info = private->info;
2538         const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2539         int table;
2540
2541         struct {
2542                 __le16 pad;
2543                 __le16 num;
2544                 __le32 data[SCARLETT2_MUX_MAX];
2545         } __packed req;
2546
2547         req.pad = 0;
2548
2549         /* set mux settings for each rate */
2550         for (table = 0; table < SCARLETT2_MUX_TABLES; table++) {
2551                 const struct scarlett2_mux_entry *entry;
2552
2553                 /* i counts over the output array */
2554                 int i = 0, err;
2555
2556                 req.num = cpu_to_le16(table);
2557
2558                 /* loop through each entry */
2559                 for (entry = info->mux_assignment[table];
2560                      entry->count;
2561                      entry++) {
2562                         int j;
2563                         int port_type = entry->port_type;
2564                         int port_idx = entry->start;
2565                         int mux_idx = scarlett2_get_port_start_num(port_count,
2566                                 SCARLETT2_PORT_OUT, port_type) + port_idx;
2567                         int dst_id = scarlett2_ports[port_type].id + port_idx;
2568
2569                         /* Empty slots */
2570                         if (!dst_id) {
2571                                 for (j = 0; j < entry->count; j++)
2572                                         req.data[i++] = 0;
2573                                 continue;
2574                         }
2575
2576                         /* Non-empty mux slots use the lower 12 bits
2577                          * for the destination and next 12 bits for
2578                          * the source
2579                          */
2580                         for (j = 0; j < entry->count; j++) {
2581                                 int src_id = scarlett2_mux_src_num_to_id(
2582                                         port_count, private->mux[mux_idx++]);
2583                                 req.data[i++] = cpu_to_le32(dst_id |
2584                                                             src_id << 12);
2585                                 dst_id++;
2586                         }
2587                 }
2588
2589                 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
2590                                     &req, (i + 1) * sizeof(u32),
2591                                     NULL, 0);
2592                 if (err < 0)
2593                         return err;
2594         }
2595
2596         scarlett2_update_meter_level_map(private);
2597
2598         return 0;
2599 }
2600
2601 /* Send USB message to get meter levels */
2602 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
2603                                           u16 num_meters, u16 *levels)
2604 {
2605         struct {
2606                 __le16 pad;
2607                 __le16 num_meters;
2608                 __le32 magic;
2609         } __packed req;
2610         __le32 resp[SCARLETT2_MAX_METERS];
2611         int i, err;
2612
2613         req.pad = 0;
2614         req.num_meters = cpu_to_le16(num_meters);
2615         req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
2616         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER,
2617                             &req, sizeof(req), resp, num_meters * sizeof(u32));
2618         if (err < 0)
2619                 return err;
2620
2621         /* copy, convert to u16 */
2622         for (i = 0; i < num_meters; i++)
2623                 levels[i] = le32_to_cpu(resp[i]);
2624
2625         return 0;
2626 }
2627
2628 /* For config items with mute=1, xor bits 0 & 1 together to get the
2629  * current/next state. This won't have any effect on values which are
2630  * only ever 0/1.
2631  */
2632 static uint8_t scarlett2_decode_muteable(uint8_t v)
2633 {
2634         return (v ^ (v >> 1)) & 1;
2635 }
2636
2637 /*** Control Functions ***/
2638
2639 /* helper function to create a new control */
2640 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
2641                                  const struct snd_kcontrol_new *ncontrol,
2642                                  int index, int channels, const char *name,
2643                                  struct snd_kcontrol **kctl_return)
2644 {
2645         struct snd_kcontrol *kctl;
2646         struct usb_mixer_elem_info *elem;
2647         int err;
2648
2649         elem = kzalloc(sizeof(*elem), GFP_KERNEL);
2650         if (!elem)
2651                 return -ENOMEM;
2652
2653         /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code
2654          * ignores them for resume and other operations.
2655          * Also, the head.id field is set to 0, as we don't use this field.
2656          */
2657         elem->head.mixer = mixer;
2658         elem->control = index;
2659         elem->head.id = 0;
2660         elem->channels = channels;
2661         elem->val_type = USB_MIXER_BESPOKEN;
2662
2663         kctl = snd_ctl_new1(ncontrol, elem);
2664         if (!kctl) {
2665                 kfree(elem);
2666                 return -ENOMEM;
2667         }
2668         kctl->private_free = snd_usb_mixer_elem_free;
2669
2670         strscpy(kctl->id.name, name, sizeof(kctl->id.name));
2671
2672         err = snd_usb_mixer_add_control(&elem->head, kctl);
2673         if (err < 0)
2674                 return err;
2675
2676         if (kctl_return)
2677                 *kctl_return = kctl;
2678
2679         return 0;
2680 }
2681
2682 /*** Firmware Version Control ***/
2683
2684 static int scarlett2_firmware_version_ctl_get(
2685         struct snd_kcontrol *kctl,
2686         struct snd_ctl_elem_value *ucontrol)
2687 {
2688         struct usb_mixer_elem_info *elem = kctl->private_data;
2689         struct scarlett2_data *private = elem->head.mixer->private_data;
2690
2691         ucontrol->value.integer.value[0] = private->firmware_version;
2692
2693         return 0;
2694 }
2695
2696 static int scarlett2_firmware_version_ctl_info(
2697         struct snd_kcontrol *kctl,
2698         struct snd_ctl_elem_info *uinfo)
2699 {
2700         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2701         uinfo->count = 1;
2702
2703         return 0;
2704 }
2705
2706 static const struct snd_kcontrol_new scarlett2_firmware_version_ctl = {
2707         .iface = SNDRV_CTL_ELEM_IFACE_CARD,
2708         .access = SNDRV_CTL_ELEM_ACCESS_READ,
2709         .name = "",
2710         .info = scarlett2_firmware_version_ctl_info,
2711         .get  = scarlett2_firmware_version_ctl_get
2712 };
2713
2714 static int scarlett2_add_firmware_version_ctl(
2715         struct usb_mixer_interface *mixer)
2716 {
2717         return scarlett2_add_new_ctl(mixer, &scarlett2_firmware_version_ctl,
2718                                      0, 0, "Firmware Version", NULL);
2719 }
2720
2721 /*** Minimum Firmware Version Control ***/
2722
2723 static int scarlett2_min_firmware_version_ctl_get(
2724         struct snd_kcontrol *kctl,
2725         struct snd_ctl_elem_value *ucontrol)
2726 {
2727         struct usb_mixer_elem_info *elem = kctl->private_data;
2728         struct scarlett2_data *private = elem->head.mixer->private_data;
2729
2730         ucontrol->value.integer.value[0] = private->info->min_firmware_version;
2731
2732         return 0;
2733 }
2734
2735 static int scarlett2_min_firmware_version_ctl_info(
2736         struct snd_kcontrol *kctl,
2737         struct snd_ctl_elem_info *uinfo)
2738 {
2739         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2740         uinfo->count = 1;
2741
2742         return 0;
2743 }
2744
2745 static const struct snd_kcontrol_new scarlett2_min_firmware_version_ctl = {
2746         .iface = SNDRV_CTL_ELEM_IFACE_CARD,
2747         .access = SNDRV_CTL_ELEM_ACCESS_READ,
2748         .name = "",
2749         .info = scarlett2_min_firmware_version_ctl_info,
2750         .get  = scarlett2_min_firmware_version_ctl_get
2751 };
2752
2753 static int scarlett2_add_min_firmware_version_ctl(
2754         struct usb_mixer_interface *mixer)
2755 {
2756         return scarlett2_add_new_ctl(mixer, &scarlett2_min_firmware_version_ctl,
2757                                      0, 0, "Minimum Firmware Version", NULL);
2758 }
2759
2760 /*** Sync Control ***/
2761
2762 /* Update sync control after receiving notification that the status
2763  * has changed
2764  */
2765 static int scarlett2_update_sync(struct usb_mixer_interface *mixer)
2766 {
2767         struct scarlett2_data *private = mixer->private_data;
2768
2769         private->sync_updated = 0;
2770         return scarlett2_usb_get_sync_status(mixer, &private->sync);
2771 }
2772
2773 static int scarlett2_sync_ctl_info(struct snd_kcontrol *kctl,
2774                                    struct snd_ctl_elem_info *uinfo)
2775 {
2776         static const char *texts[2] = {
2777                 "Unlocked", "Locked"
2778         };
2779         return snd_ctl_enum_info(uinfo, 1, 2, texts);
2780 }
2781
2782 static int scarlett2_sync_ctl_get(struct snd_kcontrol *kctl,
2783                                   struct snd_ctl_elem_value *ucontrol)
2784 {
2785         struct usb_mixer_elem_info *elem = kctl->private_data;
2786         struct usb_mixer_interface *mixer = elem->head.mixer;
2787         struct scarlett2_data *private = mixer->private_data;
2788         int err = 0;
2789
2790         mutex_lock(&private->data_mutex);
2791
2792         if (private->hwdep_in_use) {
2793                 err = -EBUSY;
2794                 goto unlock;
2795         }
2796
2797         if (private->sync_updated) {
2798                 err = scarlett2_update_sync(mixer);
2799                 if (err < 0)
2800                         goto unlock;
2801         }
2802         ucontrol->value.enumerated.item[0] = private->sync;
2803
2804 unlock:
2805         mutex_unlock(&private->data_mutex);
2806         return err;
2807 }
2808
2809 static const struct snd_kcontrol_new scarlett2_sync_ctl = {
2810         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2811         .access = SNDRV_CTL_ELEM_ACCESS_READ,
2812         .name = "",
2813         .info = scarlett2_sync_ctl_info,
2814         .get  = scarlett2_sync_ctl_get
2815 };
2816
2817 static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer)
2818 {
2819         struct scarlett2_data *private = mixer->private_data;
2820
2821         /* devices without a mixer also don't support reporting sync status */
2822         if (!scarlett2_has_mixer(private))
2823                 return 0;
2824
2825         return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl,
2826                                      0, 1, "Sync Status", &private->sync_ctl);
2827 }
2828
2829 /*** Autogain Switch and Status Controls ***/
2830
2831 /* Forward declarations as phantom power and autogain can disable each other */
2832 static int scarlett2_check_input_phantom_updated(struct usb_mixer_interface *);
2833 static int scarlett2_phantom_is_switching(struct scarlett2_data *, int);
2834
2835 /* Set the access mode of a control to read-only (val = 0) or
2836  * read-write (val = 1).
2837  */
2838 static void scarlett2_set_ctl_access(struct snd_kcontrol *kctl, int val)
2839 {
2840         if (val)
2841                 kctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_WRITE;
2842         else
2843                 kctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_WRITE;
2844 }
2845
2846 /* Check if autogain is running on any input */
2847 static int scarlett2_autogain_is_running(struct scarlett2_data *private)
2848 {
2849         int i;
2850
2851         /* autogain_status[] is 0 if autogain is running */
2852         for (i = 0; i < private->info->gain_input_count; i++)
2853                 if (!private->autogain_status[i])
2854                         return 1;
2855
2856         return 0;
2857 }
2858
2859 static int scarlett2_update_autogain(struct usb_mixer_interface *mixer)
2860 {
2861         struct scarlett2_data *private = mixer->private_data;
2862         const struct scarlett2_device_info *info = private->info;
2863         int err, i;
2864         u8 raw_autogain_status[SCARLETT2_INPUT_GAIN_MAX];
2865
2866         private->autogain_updated = 0;
2867
2868         if (!info->gain_input_count)
2869                 return 0;
2870
2871         err = scarlett2_usb_get_config(
2872                 mixer, SCARLETT2_CONFIG_AUTOGAIN_SWITCH,
2873                 info->gain_input_count, private->autogain_switch);
2874         if (err < 0)
2875                 return err;
2876         err = scarlett2_usb_get_config(
2877                 mixer, SCARLETT2_CONFIG_AUTOGAIN_STATUS,
2878                 info->gain_input_count, raw_autogain_status);
2879         if (err < 0)
2880                 return err;
2881
2882         /* Translate autogain_switch and raw_autogain_status into
2883          * autogain_status.
2884          *
2885          * When autogain_switch[] is set, the status is the first
2886          * element in scarlett2_autogain_status_texts[] (Running). The
2887          * subsequent elements correspond to the status value from the
2888          * device (raw_autogain_status[]) + 1. The last element is
2889          * "Invalid", in case the device reports a status outside the
2890          * range of scarlett2_autogain_status_texts[].
2891          */
2892         for (i = 0; i < info->gain_input_count; i++)
2893                 if (private->autogain_switch[i])
2894                         private->autogain_status[i] = 0;
2895                 else if (raw_autogain_status[i] <
2896                                 ARRAY_SIZE(scarlett2_autogain_status_texts) - 1)
2897                         private->autogain_status[i] =
2898                                 raw_autogain_status[i] + 1;
2899                 else
2900                         private->autogain_status[i] =
2901                                 ARRAY_SIZE(scarlett2_autogain_status_texts) - 1;
2902
2903         return 0;
2904 }
2905
2906 /* Update access mode for controls affected by autogain */
2907 static void scarlett2_autogain_update_access(struct usb_mixer_interface *mixer)
2908 {
2909         struct scarlett2_data *private = mixer->private_data;
2910         const struct scarlett2_device_info *info = private->info;
2911         int val = !scarlett2_autogain_is_running(private);
2912         int i;
2913
2914         scarlett2_set_ctl_access(private->input_select_ctl, val);
2915         for (i = 0; i < info->gain_input_count / 2; i++)
2916                 scarlett2_set_ctl_access(private->input_link_ctls[i], val);
2917         for (i = 0; i < info->gain_input_count; i++) {
2918                 scarlett2_set_ctl_access(private->input_gain_ctls[i], val);
2919                 scarlett2_set_ctl_access(private->safe_ctls[i], val);
2920         }
2921         for (i = 0; i < info->level_input_count; i++)
2922                 scarlett2_set_ctl_access(private->level_ctls[i], val);
2923         for (i = 0; i < info->air_input_count; i++)
2924                 scarlett2_set_ctl_access(private->air_ctls[i], val);
2925         for (i = 0; i < info->phantom_count; i++)
2926                 scarlett2_set_ctl_access(private->phantom_ctls[i], val);
2927 }
2928
2929 /* Notify of access mode change for all controls read-only while
2930  * autogain runs.
2931  */
2932 static void scarlett2_autogain_notify_access(struct usb_mixer_interface *mixer)
2933 {
2934         struct snd_card *card = mixer->chip->card;
2935         struct scarlett2_data *private = mixer->private_data;
2936         const struct scarlett2_device_info *info = private->info;
2937         int i;
2938
2939         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2940                        &private->input_select_ctl->id);
2941         for (i = 0; i < info->gain_input_count / 2; i++)
2942                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2943                                &private->input_link_ctls[i]->id);
2944         for (i = 0; i < info->gain_input_count; i++) {
2945                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2946                                &private->input_gain_ctls[i]->id);
2947                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2948                                &private->safe_ctls[i]->id);
2949         }
2950         for (i = 0; i < info->level_input_count; i++)
2951                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2952                                &private->level_ctls[i]->id);
2953         for (i = 0; i < info->air_input_count; i++)
2954                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2955                                &private->air_ctls[i]->id);
2956         for (i = 0; i < info->phantom_count; i++)
2957                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2958                                &private->phantom_ctls[i]->id);
2959 }
2960
2961 /* Call scarlett2_update_autogain() and
2962  * scarlett2_autogain_update_access() if autogain_updated is set.
2963  */
2964 static int scarlett2_check_autogain_updated(
2965         struct usb_mixer_interface *mixer)
2966 {
2967         struct scarlett2_data *private = mixer->private_data;
2968         int err;
2969
2970         if (!private->autogain_updated)
2971                 return 0;
2972
2973         err = scarlett2_update_autogain(mixer);
2974         if (err < 0)
2975                 return err;
2976
2977         scarlett2_autogain_update_access(mixer);
2978
2979         return 0;
2980 }
2981
2982 /* If autogain_updated is set when a *_ctl_put() function for a
2983  * control that is meant to be read-only while autogain is running,
2984  * update the autogain status and access mode of affected controls.
2985  * Return -EPERM if autogain is running.
2986  */
2987 static int scarlett2_check_put_during_autogain(
2988         struct usb_mixer_interface *mixer)
2989 {
2990         int err = scarlett2_check_autogain_updated(mixer);
2991
2992         if (err < 0)
2993                 return err;
2994
2995         if (scarlett2_autogain_is_running(mixer->private_data))
2996                 return -EPERM;
2997
2998         return 0;
2999 }
3000
3001 static int scarlett2_autogain_switch_ctl_info(
3002         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
3003 {
3004         struct usb_mixer_elem_info *elem = kctl->private_data;
3005         struct usb_mixer_interface *mixer = elem->head.mixer;
3006         struct scarlett2_data *private = mixer->private_data;
3007         int err;
3008
3009         mutex_lock(&private->data_mutex);
3010
3011         err = scarlett2_check_input_phantom_updated(mixer);
3012         if (err < 0)
3013                 goto unlock;
3014
3015         err = snd_ctl_boolean_mono_info(kctl, uinfo);
3016
3017 unlock:
3018         mutex_unlock(&private->data_mutex);
3019         return err;
3020 }
3021
3022 static int scarlett2_autogain_switch_ctl_get(
3023         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3024 {
3025         struct usb_mixer_elem_info *elem = kctl->private_data;
3026         struct usb_mixer_interface *mixer = elem->head.mixer;
3027         struct scarlett2_data *private = mixer->private_data;
3028         int err;
3029
3030         mutex_lock(&private->data_mutex);
3031
3032         if (private->hwdep_in_use) {
3033                 err = -EBUSY;
3034                 goto unlock;
3035         }
3036
3037         err = scarlett2_check_autogain_updated(mixer);
3038         if (err < 0)
3039                 goto unlock;
3040
3041         ucontrol->value.enumerated.item[0] =
3042                 private->autogain_switch[elem->control];
3043
3044 unlock:
3045         mutex_unlock(&private->data_mutex);
3046         return err;
3047 }
3048
3049 static int scarlett2_autogain_status_ctl_get(
3050         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3051 {
3052         struct usb_mixer_elem_info *elem = kctl->private_data;
3053         struct usb_mixer_interface *mixer = elem->head.mixer;
3054         struct scarlett2_data *private = mixer->private_data;
3055         int err;
3056
3057         mutex_lock(&private->data_mutex);
3058
3059         if (private->hwdep_in_use) {
3060                 err = -EBUSY;
3061                 goto unlock;
3062         }
3063
3064         err = scarlett2_check_autogain_updated(mixer);
3065         if (err < 0)
3066                 goto unlock;
3067
3068         ucontrol->value.enumerated.item[0] =
3069                 private->autogain_status[elem->control];
3070
3071 unlock:
3072         mutex_unlock(&private->data_mutex);
3073         return err;
3074 }
3075
3076 static int scarlett2_autogain_switch_ctl_put(
3077         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3078 {
3079         struct usb_mixer_elem_info *elem = kctl->private_data;
3080         struct usb_mixer_interface *mixer = elem->head.mixer;
3081         struct scarlett2_data *private = mixer->private_data;
3082
3083         int index = elem->control;
3084         int oval, val, err;
3085
3086         mutex_lock(&private->data_mutex);
3087
3088         if (private->hwdep_in_use) {
3089                 err = -EBUSY;
3090                 goto unlock;
3091         }
3092
3093         err = scarlett2_check_input_phantom_updated(mixer);
3094         if (err < 0)
3095                 goto unlock;
3096
3097         if (scarlett2_phantom_is_switching(private, index)) {
3098                 err = -EPERM;
3099                 goto unlock;
3100         }
3101
3102         oval = private->autogain_switch[index];
3103         val = !!ucontrol->value.integer.value[0];
3104
3105         if (oval == val)
3106                 goto unlock;
3107
3108         private->autogain_switch[index] = val;
3109
3110         /* Send switch change to the device */
3111         err = scarlett2_usb_set_config(
3112                 mixer, SCARLETT2_CONFIG_AUTOGAIN_SWITCH, index, val);
3113         if (err == 0)
3114                 err = 1;
3115
3116         scarlett2_autogain_update_access(mixer);
3117         scarlett2_autogain_notify_access(mixer);
3118
3119 unlock:
3120         mutex_unlock(&private->data_mutex);
3121         return err;
3122 }
3123
3124 static int scarlett2_autogain_status_ctl_info(
3125         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
3126 {
3127         return snd_ctl_enum_info(
3128                 uinfo, 1,
3129                 ARRAY_SIZE(scarlett2_autogain_status_texts),
3130                 scarlett2_autogain_status_texts);
3131 }
3132
3133 static const struct snd_kcontrol_new scarlett2_autogain_switch_ctl = {
3134         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3135         .name = "",
3136         .info = scarlett2_autogain_switch_ctl_info,
3137         .get  = scarlett2_autogain_switch_ctl_get,
3138         .put  = scarlett2_autogain_switch_ctl_put
3139 };
3140
3141 static const struct snd_kcontrol_new scarlett2_autogain_status_ctl = {
3142         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3143         .access = SNDRV_CTL_ELEM_ACCESS_READ,
3144         .name = "",
3145         .info = scarlett2_autogain_status_ctl_info,
3146         .get  = scarlett2_autogain_status_ctl_get,
3147 };
3148
3149 /*** Input Select Control ***/
3150
3151 static int scarlett2_update_input_select(struct usb_mixer_interface *mixer)
3152 {
3153         struct scarlett2_data *private = mixer->private_data;
3154         const struct scarlett2_device_info *info = private->info;
3155         int link_count = info->gain_input_count / 2;
3156         int err;
3157
3158         private->input_select_updated = 0;
3159
3160         if (!link_count)
3161                 return 0;
3162
3163         err = scarlett2_usb_get_config(
3164                 mixer, SCARLETT2_CONFIG_INPUT_SELECT_SWITCH,
3165                 1, &private->input_select_switch);
3166         if (err < 0)
3167                 return err;
3168
3169         err = scarlett2_usb_get_config(
3170                 mixer, SCARLETT2_CONFIG_INPUT_LINK_SWITCH,
3171                 link_count, private->input_link_switch);
3172         if (err < 0)
3173                 return err;
3174
3175         /* simplified because no model yet has link_count > 1 */
3176         if (private->input_link_switch[0])
3177                 private->input_select_switch = 0;
3178
3179         return 0;
3180 }
3181
3182 static int scarlett2_input_select_ctl_get(
3183         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3184 {
3185         struct usb_mixer_elem_info *elem = kctl->private_data;
3186         struct usb_mixer_interface *mixer = elem->head.mixer;
3187         struct scarlett2_data *private = mixer->private_data;
3188         int err = 0;
3189
3190         mutex_lock(&private->data_mutex);
3191
3192         if (private->hwdep_in_use) {
3193                 err = -EBUSY;
3194                 goto unlock;
3195         }
3196
3197         if (private->input_select_updated) {
3198                 err = scarlett2_update_input_select(mixer);
3199                 if (err < 0)
3200                         goto unlock;
3201         }
3202         ucontrol->value.enumerated.item[0] = private->input_select_switch;
3203
3204 unlock:
3205         mutex_unlock(&private->data_mutex);
3206         return err;
3207 }
3208
3209 static int scarlett2_input_select_ctl_put(
3210         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3211 {
3212         struct usb_mixer_elem_info *elem = kctl->private_data;
3213         struct usb_mixer_interface *mixer = elem->head.mixer;
3214         struct scarlett2_data *private = mixer->private_data;
3215
3216         int oval, val, err;
3217         int max_val = private->input_link_switch[0] ? 0 : 1;
3218
3219         mutex_lock(&private->data_mutex);
3220
3221         if (private->hwdep_in_use) {
3222                 err = -EBUSY;
3223                 goto unlock;
3224         }
3225
3226         err = scarlett2_check_put_during_autogain(mixer);
3227         if (err < 0)
3228                 goto unlock;
3229
3230         oval = private->input_select_switch;
3231         val = ucontrol->value.integer.value[0];
3232
3233         if (val < 0)
3234                 val = 0;
3235         else if (val > max_val)
3236                 val = max_val;
3237
3238         if (oval == val)
3239                 goto unlock;
3240
3241         private->input_select_switch = val;
3242
3243         /* Send switch change to the device if inputs not linked */
3244         if (!private->input_link_switch[0])
3245                 err = scarlett2_usb_set_config(
3246                         mixer, SCARLETT2_CONFIG_INPUT_SELECT_SWITCH,
3247                         1, val);
3248         if (err == 0)
3249                 err = 1;
3250
3251 unlock:
3252         mutex_unlock(&private->data_mutex);
3253         return err;
3254 }
3255
3256 static int scarlett2_input_select_ctl_info(
3257         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
3258 {
3259         struct usb_mixer_elem_info *elem = kctl->private_data;
3260         struct usb_mixer_interface *mixer = elem->head.mixer;
3261         struct scarlett2_data *private = mixer->private_data;
3262
3263         int inputs = private->info->gain_input_count;
3264         int i, j;
3265         int err;
3266         char **values = kcalloc(inputs, sizeof(char *), GFP_KERNEL);
3267
3268         if (!values)
3269                 return -ENOMEM;
3270
3271         mutex_lock(&private->data_mutex);
3272
3273         if (private->hwdep_in_use) {
3274                 err = -EBUSY;
3275                 goto unlock;
3276         }
3277
3278         err = scarlett2_check_autogain_updated(mixer);
3279         if (err < 0)
3280                 goto unlock;
3281
3282         /* Loop through each input
3283          * Linked inputs have one value for the pair
3284          */
3285         for (i = 0, j = 0; i < inputs; i++) {
3286                 if (private->input_link_switch[i / 2]) {
3287                         values[j++] = kasprintf(
3288                                 GFP_KERNEL, "Input %d-%d", i + 1, i + 2);
3289                         i++;
3290                 } else {
3291                         values[j++] = kasprintf(
3292                                 GFP_KERNEL, "Input %d", i + 1);
3293                 }
3294         }
3295
3296         err = snd_ctl_enum_info(uinfo, 1, j,
3297                                 (const char * const *)values);
3298
3299 unlock:
3300         mutex_unlock(&private->data_mutex);
3301
3302         for (i = 0; i < inputs; i++)
3303                 kfree(values[i]);
3304         kfree(values);
3305
3306         return err;
3307 }
3308
3309 static const struct snd_kcontrol_new scarlett2_input_select_ctl = {
3310         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3311         .name = "",
3312         .info = scarlett2_input_select_ctl_info,
3313         .get  = scarlett2_input_select_ctl_get,
3314         .put  = scarlett2_input_select_ctl_put,
3315 };
3316
3317 /*** Input Link Switch Controls ***/
3318
3319 /* snd_ctl_boolean_mono_info() with autogain-updated check
3320  * (for controls that are read-only while autogain is running)
3321  */
3322 static int scarlett2_autogain_disables_ctl_info(struct snd_kcontrol *kctl,
3323                                                 struct snd_ctl_elem_info *uinfo)
3324 {
3325         struct usb_mixer_elem_info *elem = kctl->private_data;
3326         struct usb_mixer_interface *mixer = elem->head.mixer;
3327         struct scarlett2_data *private = mixer->private_data;
3328         int err;
3329
3330         mutex_lock(&private->data_mutex);
3331
3332         if (private->hwdep_in_use) {
3333                 err = -EBUSY;
3334                 goto unlock;
3335         }
3336
3337         err = scarlett2_check_autogain_updated(mixer);
3338         if (err < 0)
3339                 goto unlock;
3340
3341         err = snd_ctl_boolean_mono_info(kctl, uinfo);
3342
3343 unlock:
3344         mutex_unlock(&private->data_mutex);
3345         return err;
3346 }
3347
3348 static int scarlett2_input_link_ctl_get(
3349         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3350 {
3351         struct usb_mixer_elem_info *elem = kctl->private_data;
3352         struct usb_mixer_interface *mixer = elem->head.mixer;
3353         struct scarlett2_data *private = mixer->private_data;
3354         int err = 0;
3355
3356         mutex_lock(&private->data_mutex);
3357
3358         if (private->hwdep_in_use) {
3359                 err = -EBUSY;
3360                 goto unlock;
3361         }
3362
3363         if (private->input_select_updated) {
3364                 err = scarlett2_update_input_select(mixer);
3365                 if (err < 0)
3366                         goto unlock;
3367         }
3368         ucontrol->value.enumerated.item[0] =
3369                 private->input_link_switch[elem->control];
3370
3371 unlock:
3372         mutex_unlock(&private->data_mutex);
3373         return err;
3374 }
3375
3376 static int scarlett2_input_link_ctl_put(
3377         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3378 {
3379         struct usb_mixer_elem_info *elem = kctl->private_data;
3380         struct usb_mixer_interface *mixer = elem->head.mixer;
3381         struct scarlett2_data *private = mixer->private_data;
3382
3383         int index = elem->control;
3384         int oval, val, err;
3385
3386         mutex_lock(&private->data_mutex);
3387
3388         if (private->hwdep_in_use) {
3389                 err = -EBUSY;
3390                 goto unlock;
3391         }
3392
3393         err = scarlett2_check_put_during_autogain(mixer);
3394         if (err < 0)
3395                 goto unlock;
3396
3397         oval = private->input_link_switch[index];
3398         val = !!ucontrol->value.integer.value[0];
3399
3400         if (oval == val)
3401                 goto unlock;
3402
3403         private->input_link_switch[index] = val;
3404
3405         /* Notify of change in input select options available */
3406         snd_ctl_notify(mixer->chip->card,
3407                        SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
3408                        &private->input_select_ctl->id);
3409         private->input_select_updated = 1;
3410
3411         /* Send switch change to the device
3412          * Link for channels 1-2 is at index 1
3413          * No device yet has more than 2 channels linked
3414          */
3415         err = scarlett2_usb_set_config(
3416                 mixer, SCARLETT2_CONFIG_INPUT_LINK_SWITCH, index + 1, val);
3417         if (err == 0)
3418                 err = 1;
3419
3420 unlock:
3421         mutex_unlock(&private->data_mutex);
3422         return err;
3423 }
3424
3425 static const struct snd_kcontrol_new scarlett2_input_link_ctl = {
3426         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3427         .name = "",
3428         .info = scarlett2_autogain_disables_ctl_info,
3429         .get  = scarlett2_input_link_ctl_get,
3430         .put  = scarlett2_input_link_ctl_put
3431 };
3432
3433 /*** Input Gain Controls ***/
3434
3435 static int scarlett2_update_input_gain(struct usb_mixer_interface *mixer)
3436 {
3437         struct scarlett2_data *private = mixer->private_data;
3438         const struct scarlett2_device_info *info = private->info;
3439
3440         private->input_gain_updated = 0;
3441
3442         if (!info->gain_input_count)
3443                 return 0;
3444
3445         return scarlett2_usb_get_config(
3446                 mixer, SCARLETT2_CONFIG_INPUT_GAIN,
3447                 info->gain_input_count, private->gain);
3448 }
3449
3450 static int scarlett2_input_gain_ctl_info(struct snd_kcontrol *kctl,
3451                                          struct snd_ctl_elem_info *uinfo)
3452 {
3453         struct usb_mixer_elem_info *elem = kctl->private_data;
3454         struct usb_mixer_interface *mixer = elem->head.mixer;
3455         struct scarlett2_data *private = mixer->private_data;
3456         int err;
3457
3458         mutex_lock(&private->data_mutex);
3459
3460         if (private->hwdep_in_use) {
3461                 err = -EBUSY;
3462                 goto unlock;
3463         }
3464
3465         err = scarlett2_check_autogain_updated(mixer);
3466         if (err < 0)
3467                 goto unlock;
3468
3469         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3470         uinfo->count = elem->channels;
3471         uinfo->value.integer.min = 0;
3472         uinfo->value.integer.max = SCARLETT2_MAX_GAIN_VALUE;
3473         uinfo->value.integer.step = 1;
3474
3475 unlock:
3476         mutex_unlock(&private->data_mutex);
3477         return err;
3478 }
3479
3480 static int scarlett2_input_gain_ctl_get(struct snd_kcontrol *kctl,
3481                                         struct snd_ctl_elem_value *ucontrol)
3482 {
3483         struct usb_mixer_elem_info *elem = kctl->private_data;
3484         struct usb_mixer_interface *mixer = elem->head.mixer;
3485         struct scarlett2_data *private = mixer->private_data;
3486         int err = 0;
3487
3488         mutex_lock(&private->data_mutex);
3489
3490         if (private->hwdep_in_use) {
3491                 err = -EBUSY;
3492                 goto unlock;
3493         }
3494
3495         if (private->input_gain_updated) {
3496                 err = scarlett2_update_input_gain(mixer);
3497                 if (err < 0)
3498                         goto unlock;
3499         }
3500         ucontrol->value.integer.value[0] =
3501                 private->gain[elem->control];
3502
3503 unlock:
3504         mutex_unlock(&private->data_mutex);
3505         return err;
3506 }
3507
3508 static int scarlett2_input_gain_ctl_put(struct snd_kcontrol *kctl,
3509                                         struct snd_ctl_elem_value *ucontrol)
3510 {
3511         struct usb_mixer_elem_info *elem = kctl->private_data;
3512         struct usb_mixer_interface *mixer = elem->head.mixer;
3513         struct scarlett2_data *private = mixer->private_data;
3514
3515         int index = elem->control;
3516         int oval, val, err;
3517
3518         mutex_lock(&private->data_mutex);
3519
3520         if (private->hwdep_in_use) {
3521                 err = -EBUSY;
3522                 goto unlock;
3523         }
3524
3525         err = scarlett2_check_put_during_autogain(mixer);
3526         if (err < 0)
3527                 goto unlock;
3528
3529         oval = private->gain[index];
3530         val = ucontrol->value.integer.value[0];
3531
3532         if (oval == val)
3533                 goto unlock;
3534
3535         private->gain[index] = val;
3536
3537         /* Send gain change to the device */
3538         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_INPUT_GAIN,
3539                                        index, val);
3540         if (err == 0)
3541                 err = 1;
3542
3543 unlock:
3544         mutex_unlock(&private->data_mutex);
3545         return err;
3546 }
3547
3548 static const DECLARE_TLV_DB_MINMAX(
3549         db_scale_scarlett2_gain, 0, SCARLETT2_MAX_GAIN_DB * 100
3550 );
3551
3552 static const struct snd_kcontrol_new scarlett2_input_gain_ctl = {
3553         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3554         .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3555                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3556         .name = "",
3557         .info = scarlett2_input_gain_ctl_info,
3558         .get  = scarlett2_input_gain_ctl_get,
3559         .put  = scarlett2_input_gain_ctl_put,
3560         .private_value = 0, /* max value */
3561         .tlv = { .p = db_scale_scarlett2_gain }
3562 };
3563
3564 /*** Safe Controls ***/
3565
3566 static int scarlett2_update_input_safe(struct usb_mixer_interface *mixer)
3567 {
3568         struct scarlett2_data *private = mixer->private_data;
3569         const struct scarlett2_device_info *info = private->info;
3570
3571         private->input_safe_updated = 0;
3572
3573         if (!info->gain_input_count)
3574                 return 0;
3575
3576         return scarlett2_usb_get_config(
3577                 mixer, SCARLETT2_CONFIG_SAFE_SWITCH,
3578                 info->gain_input_count, private->safe_switch);
3579 }
3580
3581 static int scarlett2_safe_ctl_get(struct snd_kcontrol *kctl,
3582                                   struct snd_ctl_elem_value *ucontrol)
3583 {
3584         struct usb_mixer_elem_info *elem = kctl->private_data;
3585         struct usb_mixer_interface *mixer = elem->head.mixer;
3586         struct scarlett2_data *private = mixer->private_data;
3587         int err = 0;
3588
3589         mutex_lock(&private->data_mutex);
3590
3591         if (private->hwdep_in_use) {
3592                 err = -EBUSY;
3593                 goto unlock;
3594         }
3595
3596         if (private->input_safe_updated) {
3597                 err = scarlett2_update_input_safe(mixer);
3598                 if (err < 0)
3599                         goto unlock;
3600         }
3601         ucontrol->value.integer.value[0] =
3602                 private->safe_switch[elem->control];
3603
3604 unlock:
3605         mutex_unlock(&private->data_mutex);
3606         return err;
3607 }
3608
3609 static int scarlett2_safe_ctl_put(struct snd_kcontrol *kctl,
3610                                   struct snd_ctl_elem_value *ucontrol)
3611 {
3612         struct usb_mixer_elem_info *elem = kctl->private_data;
3613         struct usb_mixer_interface *mixer = elem->head.mixer;
3614         struct scarlett2_data *private = mixer->private_data;
3615
3616         int index = elem->control;
3617         int oval, val, err;
3618
3619         mutex_lock(&private->data_mutex);
3620
3621         if (private->hwdep_in_use) {
3622                 err = -EBUSY;
3623                 goto unlock;
3624         }
3625
3626         err = scarlett2_check_put_during_autogain(mixer);
3627         if (err < 0)
3628                 goto unlock;
3629
3630         oval = private->safe_switch[index];
3631         val = !!ucontrol->value.integer.value[0];
3632
3633         if (oval == val)
3634                 goto unlock;
3635
3636         private->safe_switch[index] = val;
3637
3638         /* Send switch change to the device */
3639         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SAFE_SWITCH,
3640                                        index, val);
3641         if (err == 0)
3642                 err = 1;
3643
3644 unlock:
3645         mutex_unlock(&private->data_mutex);
3646         return err;
3647 }
3648
3649 static const struct snd_kcontrol_new scarlett2_safe_ctl = {
3650         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3651         .name = "",
3652         .info = scarlett2_autogain_disables_ctl_info,
3653         .get  = scarlett2_safe_ctl_get,
3654         .put  = scarlett2_safe_ctl_put,
3655 };
3656
3657 /*** PCM Input Control ***/
3658
3659 static int scarlett2_update_pcm_input_switch(struct usb_mixer_interface *mixer)
3660 {
3661         struct scarlett2_data *private = mixer->private_data;
3662         int err;
3663
3664         private->pcm_input_switch_updated = 0;
3665
3666         err = scarlett2_usb_get_config(
3667                 mixer, SCARLETT2_CONFIG_PCM_INPUT_SWITCH,
3668                 1, &private->pcm_input_switch);
3669         if (err < 0)
3670                 return err;
3671
3672         return 0;
3673 }
3674
3675 static int scarlett2_pcm_input_switch_ctl_get(
3676         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3677 {
3678         struct usb_mixer_elem_info *elem = kctl->private_data;
3679         struct usb_mixer_interface *mixer = elem->head.mixer;
3680         struct scarlett2_data *private = elem->head.mixer->private_data;
3681         int err = 0;
3682
3683         mutex_lock(&private->data_mutex);
3684
3685         if (private->pcm_input_switch_updated) {
3686                 err = scarlett2_update_pcm_input_switch(mixer);
3687                 if (err < 0)
3688                         goto unlock;
3689         }
3690         ucontrol->value.enumerated.item[0] = private->pcm_input_switch;
3691
3692 unlock:
3693         mutex_unlock(&private->data_mutex);
3694         return err;
3695 }
3696
3697 static int scarlett2_pcm_input_switch_ctl_put(
3698         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
3699 {
3700         struct usb_mixer_elem_info *elem = kctl->private_data;
3701         struct usb_mixer_interface *mixer = elem->head.mixer;
3702         struct scarlett2_data *private = mixer->private_data;
3703
3704         int oval, val, err = 0;
3705
3706         mutex_lock(&private->data_mutex);
3707
3708         if (private->hwdep_in_use) {
3709                 err = -EBUSY;
3710                 goto unlock;
3711         }
3712
3713         oval = private->pcm_input_switch;
3714         val = !!ucontrol->value.integer.value[0];
3715
3716         if (oval == val)
3717                 goto unlock;
3718
3719         private->pcm_input_switch = val;
3720
3721         /* Send switch change to the device */
3722         err = scarlett2_usb_set_config(
3723                 mixer, SCARLETT2_CONFIG_PCM_INPUT_SWITCH,
3724                 0, val);
3725         if (err == 0)
3726                 err = 1;
3727
3728 unlock:
3729         mutex_unlock(&private->data_mutex);
3730         return err;
3731 }
3732
3733 static int scarlett2_pcm_input_switch_ctl_info(
3734         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
3735 {
3736         static const char *const values[2] = {
3737                 "Direct", "Mixer"
3738         };
3739
3740         return snd_ctl_enum_info(
3741                 uinfo, 1, 2, values);
3742 }
3743
3744 static const struct snd_kcontrol_new scarlett2_pcm_input_switch_ctl = {
3745         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3746         .name = "",
3747         .info = scarlett2_pcm_input_switch_ctl_info,
3748         .get  = scarlett2_pcm_input_switch_ctl_get,
3749         .put  = scarlett2_pcm_input_switch_ctl_put
3750 };
3751
3752 /*** Analogue Line Out Volume Controls ***/
3753
3754 /* Update hardware volume controls after receiving notification that
3755  * they have changed
3756  */
3757 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
3758 {
3759         struct scarlett2_data *private = mixer->private_data;
3760         s16 vol;
3761         int err, i;
3762
3763         private->vol_updated = 0;
3764
3765         if (scarlett2_has_config_item(private,
3766                                       SCARLETT2_CONFIG_MASTER_VOLUME)) {
3767                 err = scarlett2_usb_get_config(
3768                         mixer, SCARLETT2_CONFIG_MASTER_VOLUME,
3769                         1, &vol);
3770                 if (err < 0)
3771                         return err;
3772
3773                 private->master_vol = clamp(vol + SCARLETT2_VOLUME_BIAS,
3774                                             0, SCARLETT2_VOLUME_BIAS);
3775
3776                 if (scarlett2_has_config_item(private,
3777                                               SCARLETT2_CONFIG_SW_HW_SWITCH))
3778                         for (i = 0; i < private->num_line_out; i++)
3779                                 if (private->vol_sw_hw_switch[i])
3780                                         private->vol[i] = private->master_vol;
3781         }
3782
3783         if (scarlett2_has_config_item(private,
3784                                       SCARLETT2_CONFIG_HEADPHONE_VOLUME)) {
3785                 err = scarlett2_usb_get_config(
3786                         mixer, SCARLETT2_CONFIG_HEADPHONE_VOLUME,
3787                         1, &vol);
3788                 if (err < 0)
3789                         return err;
3790
3791                 private->headphone_vol = clamp(vol + SCARLETT2_VOLUME_BIAS,
3792                                                0, SCARLETT2_VOLUME_BIAS);
3793         }
3794
3795         return 0;
3796 }
3797
3798 static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
3799                                      struct snd_ctl_elem_info *uinfo)
3800 {
3801         struct usb_mixer_elem_info *elem = kctl->private_data;
3802
3803         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3804         uinfo->count = elem->channels;
3805         uinfo->value.integer.min = 0;
3806         uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
3807         uinfo->value.integer.step = 1;
3808         return 0;
3809 }
3810
3811 static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
3812                                            struct snd_ctl_elem_value *ucontrol)
3813 {
3814         struct usb_mixer_elem_info *elem = kctl->private_data;
3815         struct usb_mixer_interface *mixer = elem->head.mixer;
3816         struct scarlett2_data *private = mixer->private_data;
3817         int err = 0;
3818
3819         mutex_lock(&private->data_mutex);
3820
3821         if (private->hwdep_in_use) {
3822                 err = -EBUSY;
3823                 goto unlock;
3824         }
3825
3826         if (private->vol_updated) {
3827                 err = scarlett2_update_volumes(mixer);
3828                 if (err < 0)
3829                         goto unlock;
3830         }
3831         ucontrol->value.integer.value[0] = private->master_vol;
3832
3833 unlock:
3834         mutex_unlock(&private->data_mutex);
3835         return err;
3836 }
3837
3838 static int scarlett2_headphone_volume_ctl_get(
3839         struct snd_kcontrol *kctl,
3840         struct snd_ctl_elem_value *ucontrol)
3841 {
3842         struct usb_mixer_elem_info *elem = kctl->private_data;
3843         struct usb_mixer_interface *mixer = elem->head.mixer;
3844         struct scarlett2_data *private = mixer->private_data;
3845         int err = 0;
3846
3847         mutex_lock(&private->data_mutex);
3848
3849         if (private->hwdep_in_use) {
3850                 err = -EBUSY;
3851                 goto unlock;
3852         }
3853
3854         if (private->vol_updated) {
3855                 err = scarlett2_update_volumes(mixer);
3856                 if (err < 0)
3857                         goto unlock;
3858         }
3859         ucontrol->value.integer.value[0] = private->headphone_vol;
3860
3861 unlock:
3862         mutex_unlock(&private->data_mutex);
3863         return err;
3864 }
3865
3866 static int line_out_remap(struct scarlett2_data *private, int index)
3867 {
3868         const struct scarlett2_device_info *info = private->info;
3869
3870         if (!info->line_out_remap_enable)
3871                 return index;
3872
3873         if (index >= private->num_line_out)
3874                 return index;
3875
3876         return info->line_out_remap[index];
3877 }
3878
3879 static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
3880                                     struct snd_ctl_elem_value *ucontrol)
3881 {
3882         struct usb_mixer_elem_info *elem = kctl->private_data;
3883         struct usb_mixer_interface *mixer = elem->head.mixer;
3884         struct scarlett2_data *private = mixer->private_data;
3885         int index = line_out_remap(private, elem->control);
3886         int err = 0;
3887
3888         mutex_lock(&private->data_mutex);
3889
3890         if (private->hwdep_in_use) {
3891                 err = -EBUSY;
3892                 goto unlock;
3893         }
3894
3895         if (private->vol_updated) {
3896                 err = scarlett2_update_volumes(mixer);
3897                 if (err < 0)
3898                         goto unlock;
3899         }
3900         ucontrol->value.integer.value[0] = private->vol[index];
3901
3902 unlock:
3903         mutex_unlock(&private->data_mutex);
3904         return err;
3905 }
3906
3907 static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
3908                                     struct snd_ctl_elem_value *ucontrol)
3909 {
3910         struct usb_mixer_elem_info *elem = kctl->private_data;
3911         struct usb_mixer_interface *mixer = elem->head.mixer;
3912         struct scarlett2_data *private = mixer->private_data;
3913         int index = line_out_remap(private, elem->control);
3914         int oval, val, err = 0;
3915
3916         mutex_lock(&private->data_mutex);
3917
3918         if (private->hwdep_in_use) {
3919                 err = -EBUSY;
3920                 goto unlock;
3921         }
3922
3923         oval = private->vol[index];
3924         val = ucontrol->value.integer.value[0];
3925
3926         if (oval == val)
3927                 goto unlock;
3928
3929         private->vol[index] = val;
3930         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
3931                                        index, val - SCARLETT2_VOLUME_BIAS);
3932         if (err == 0)
3933                 err = 1;
3934
3935 unlock:
3936         mutex_unlock(&private->data_mutex);
3937         return err;
3938 }
3939
3940 static const DECLARE_TLV_DB_MINMAX(
3941         db_scale_scarlett2_volume, -SCARLETT2_VOLUME_BIAS * 100, 0
3942 );
3943
3944 static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
3945         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3946         .access = SNDRV_CTL_ELEM_ACCESS_READ |
3947                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3948         .name = "",
3949         .info = scarlett2_volume_ctl_info,
3950         .get  = scarlett2_master_volume_ctl_get,
3951         .private_value = 0, /* max value */
3952         .tlv = { .p = db_scale_scarlett2_volume }
3953 };
3954
3955 static const struct snd_kcontrol_new scarlett2_headphone_volume_ctl = {
3956         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3957         .access = SNDRV_CTL_ELEM_ACCESS_READ |
3958                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3959         .name = "",
3960         .info = scarlett2_volume_ctl_info,
3961         .get  = scarlett2_headphone_volume_ctl_get,
3962         .private_value = 0, /* max value */
3963         .tlv = { .p = db_scale_scarlett2_volume }
3964 };
3965
3966 static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
3967         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3968         .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3969                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3970         .name = "",
3971         .info = scarlett2_volume_ctl_info,
3972         .get  = scarlett2_volume_ctl_get,
3973         .put  = scarlett2_volume_ctl_put,
3974         .private_value = 0, /* max value */
3975         .tlv = { .p = db_scale_scarlett2_volume }
3976 };
3977
3978 /*** Mute Switch Controls ***/
3979
3980 static int scarlett2_update_dim_mute(struct usb_mixer_interface *mixer)
3981 {
3982         struct scarlett2_data *private = mixer->private_data;
3983         int err, i;
3984         u8 mute;
3985
3986         private->dim_mute_updated = 0;
3987
3988         if (!scarlett2_has_config_item(private, SCARLETT2_CONFIG_SW_HW_SWITCH))
3989                 return 0;
3990
3991         err = scarlett2_usb_get_config(
3992                 mixer, SCARLETT2_CONFIG_DIM_MUTE,
3993                 SCARLETT2_DIM_MUTE_COUNT, private->dim_mute);
3994         if (err < 0)
3995                 return err;
3996
3997         for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3998                 private->dim_mute[i] = !!private->dim_mute[i];
3999
4000         mute = private->dim_mute[SCARLETT2_BUTTON_MUTE];
4001
4002         for (i = 0; i < private->num_line_out; i++)
4003                 if (private->vol_sw_hw_switch[i])
4004                         private->mute_switch[i] = mute;
4005
4006         return 0;
4007 }
4008
4009 static int scarlett2_mute_ctl_get(struct snd_kcontrol *kctl,
4010                                         struct snd_ctl_elem_value *ucontrol)
4011 {
4012         struct usb_mixer_elem_info *elem = kctl->private_data;
4013         struct usb_mixer_interface *mixer = elem->head.mixer;
4014         struct scarlett2_data *private = mixer->private_data;
4015         int index = line_out_remap(private, elem->control);
4016         int err = 0;
4017
4018         mutex_lock(&private->data_mutex);
4019
4020         if (private->hwdep_in_use) {
4021                 err = -EBUSY;
4022                 goto unlock;
4023         }
4024
4025         if (private->dim_mute_updated) {
4026                 err = scarlett2_update_dim_mute(mixer);
4027                 if (err < 0)
4028                         goto unlock;
4029         }
4030         ucontrol->value.integer.value[0] = private->mute_switch[index];
4031
4032 unlock:
4033         mutex_unlock(&private->data_mutex);
4034         return err;
4035 }
4036
4037 static int scarlett2_mute_ctl_put(struct snd_kcontrol *kctl,
4038                                         struct snd_ctl_elem_value *ucontrol)
4039 {
4040         struct usb_mixer_elem_info *elem = kctl->private_data;
4041         struct usb_mixer_interface *mixer = elem->head.mixer;
4042         struct scarlett2_data *private = mixer->private_data;
4043         int index = line_out_remap(private, elem->control);
4044         int oval, val, err = 0;
4045
4046         mutex_lock(&private->data_mutex);
4047
4048         if (private->hwdep_in_use) {
4049                 err = -EBUSY;
4050                 goto unlock;
4051         }
4052
4053         oval = private->mute_switch[index];
4054         val = !!ucontrol->value.integer.value[0];
4055
4056         if (oval == val)
4057                 goto unlock;
4058
4059         private->mute_switch[index] = val;
4060
4061         /* Send mute change to the device */
4062         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
4063                                        index, val);
4064         if (err == 0)
4065                 err = 1;
4066
4067 unlock:
4068         mutex_unlock(&private->data_mutex);
4069         return err;
4070 }
4071
4072 static const struct snd_kcontrol_new scarlett2_mute_ctl = {
4073         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4074         .name = "",
4075         .info = snd_ctl_boolean_mono_info,
4076         .get  = scarlett2_mute_ctl_get,
4077         .put  = scarlett2_mute_ctl_put,
4078 };
4079
4080 /*** HW/SW Volume Switch Controls ***/
4081
4082 static void scarlett2_sw_hw_ctl_ro(struct scarlett2_data *private, int index)
4083 {
4084         private->sw_hw_ctls[index]->vd[0].access &=
4085                 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
4086 }
4087
4088 static void scarlett2_sw_hw_ctl_rw(struct scarlett2_data *private, int index)
4089 {
4090         private->sw_hw_ctls[index]->vd[0].access |=
4091                 SNDRV_CTL_ELEM_ACCESS_WRITE;
4092 }
4093
4094 static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
4095                                          struct snd_ctl_elem_info *uinfo)
4096 {
4097         static const char *const values[2] = {
4098                 "SW", "HW"
4099         };
4100
4101         return snd_ctl_enum_info(uinfo, 1, 2, values);
4102 }
4103
4104 static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
4105                                         struct snd_ctl_elem_value *ucontrol)
4106 {
4107         struct usb_mixer_elem_info *elem = kctl->private_data;
4108         struct scarlett2_data *private = elem->head.mixer->private_data;
4109         int index = line_out_remap(private, elem->control);
4110
4111         ucontrol->value.enumerated.item[0] = private->vol_sw_hw_switch[index];
4112         return 0;
4113 }
4114
4115 static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer,
4116                                            int index, int value)
4117 {
4118         struct scarlett2_data *private = mixer->private_data;
4119         struct snd_card *card = mixer->chip->card;
4120
4121         /* Set/Clear write bits */
4122         if (value) {
4123                 private->vol_ctls[index]->vd[0].access |=
4124                         SNDRV_CTL_ELEM_ACCESS_WRITE;
4125                 private->mute_ctls[index]->vd[0].access |=
4126                         SNDRV_CTL_ELEM_ACCESS_WRITE;
4127         } else {
4128                 private->vol_ctls[index]->vd[0].access &=
4129                         ~SNDRV_CTL_ELEM_ACCESS_WRITE;
4130                 private->mute_ctls[index]->vd[0].access &=
4131                         ~SNDRV_CTL_ELEM_ACCESS_WRITE;
4132         }
4133
4134         /* Notify of write bit and possible value change */
4135         snd_ctl_notify(card,
4136                        SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
4137                        &private->vol_ctls[index]->id);
4138         snd_ctl_notify(card,
4139                        SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
4140                        &private->mute_ctls[index]->id);
4141 }
4142
4143 static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer,
4144                                   int ctl_index, int val)
4145 {
4146         struct scarlett2_data *private = mixer->private_data;
4147         int index = line_out_remap(private, ctl_index);
4148         int err;
4149
4150         private->vol_sw_hw_switch[index] = val;
4151
4152         /* Change access mode to RO (hardware controlled volume)
4153          * or RW (software controlled volume)
4154          */
4155         scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val);
4156
4157         /* Reset volume/mute to master volume/mute */
4158         private->vol[index] = private->master_vol;
4159         private->mute_switch[index] = private->dim_mute[SCARLETT2_BUTTON_MUTE];
4160
4161         /* Set SW volume to current HW volume */
4162         err = scarlett2_usb_set_config(
4163                 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
4164                 index, private->master_vol - SCARLETT2_VOLUME_BIAS);
4165         if (err < 0)
4166                 return err;
4167
4168         /* Set SW mute to current HW mute */
4169         err = scarlett2_usb_set_config(
4170                 mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
4171                 index, private->dim_mute[SCARLETT2_BUTTON_MUTE]);
4172         if (err < 0)
4173                 return err;
4174
4175         /* Send SW/HW switch change to the device */
4176         return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
4177                                         index, val);
4178 }
4179
4180 static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
4181                                         struct snd_ctl_elem_value *ucontrol)
4182 {
4183         struct usb_mixer_elem_info *elem = kctl->private_data;
4184         struct usb_mixer_interface *mixer = elem->head.mixer;
4185         struct scarlett2_data *private = mixer->private_data;
4186         int ctl_index = elem->control;
4187         int index = line_out_remap(private, ctl_index);
4188         int oval, val, err = 0;
4189
4190         mutex_lock(&private->data_mutex);
4191
4192         if (private->hwdep_in_use) {
4193                 err = -EBUSY;
4194                 goto unlock;
4195         }
4196
4197         oval = private->vol_sw_hw_switch[index];
4198         val = !!ucontrol->value.enumerated.item[0];
4199
4200         if (oval == val)
4201                 goto unlock;
4202
4203         err = scarlett2_sw_hw_change(mixer, ctl_index, val);
4204         if (err == 0)
4205                 err = 1;
4206
4207 unlock:
4208         mutex_unlock(&private->data_mutex);
4209         return err;
4210 }
4211
4212 static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
4213         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4214         .name = "",
4215         .info = scarlett2_sw_hw_enum_ctl_info,
4216         .get  = scarlett2_sw_hw_enum_ctl_get,
4217         .put  = scarlett2_sw_hw_enum_ctl_put,
4218 };
4219
4220 /*** Line Level/Instrument Level Switch Controls ***/
4221
4222 static int scarlett2_update_input_level(struct usb_mixer_interface *mixer)
4223 {
4224         struct scarlett2_data *private = mixer->private_data;
4225         const struct scarlett2_device_info *info = private->info;
4226
4227         private->input_level_updated = 0;
4228
4229         if (!info->level_input_count)
4230                 return 0;
4231
4232         return scarlett2_usb_get_config(
4233                 mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
4234                 info->level_input_count + info->level_input_first,
4235                 private->level_switch);
4236 }
4237
4238 static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
4239                                          struct snd_ctl_elem_info *uinfo)
4240 {
4241         static const char *const values[2] = {
4242                 "Line", "Inst"
4243         };
4244         struct usb_mixer_elem_info *elem = kctl->private_data;
4245         struct usb_mixer_interface *mixer = elem->head.mixer;
4246         struct scarlett2_data *private = mixer->private_data;
4247         int err;
4248
4249         mutex_lock(&private->data_mutex);
4250
4251         if (private->hwdep_in_use) {
4252                 err = -EBUSY;
4253                 goto unlock;
4254         }
4255
4256         err = scarlett2_check_autogain_updated(mixer);
4257         if (err < 0)
4258                 goto unlock;
4259
4260         err = snd_ctl_enum_info(uinfo, 1, 2, values);
4261
4262 unlock:
4263         mutex_unlock(&private->data_mutex);
4264         return err;
4265 }
4266
4267 static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
4268                                         struct snd_ctl_elem_value *ucontrol)
4269 {
4270         struct usb_mixer_elem_info *elem = kctl->private_data;
4271         struct usb_mixer_interface *mixer = elem->head.mixer;
4272         struct scarlett2_data *private = mixer->private_data;
4273         const struct scarlett2_device_info *info = private->info;
4274
4275         int index = elem->control + info->level_input_first;
4276         int err = 0;
4277
4278         mutex_lock(&private->data_mutex);
4279
4280         if (private->hwdep_in_use) {
4281                 err = -EBUSY;
4282                 goto unlock;
4283         }
4284
4285         if (private->input_level_updated) {
4286                 err = scarlett2_update_input_level(mixer);
4287                 if (err < 0)
4288                         goto unlock;
4289         }
4290         ucontrol->value.enumerated.item[0] = scarlett2_decode_muteable(
4291                 private->level_switch[index]);
4292
4293 unlock:
4294         mutex_unlock(&private->data_mutex);
4295         return err;
4296 }
4297
4298 static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
4299                                         struct snd_ctl_elem_value *ucontrol)
4300 {
4301         struct usb_mixer_elem_info *elem = kctl->private_data;
4302         struct usb_mixer_interface *mixer = elem->head.mixer;
4303         struct scarlett2_data *private = mixer->private_data;
4304         const struct scarlett2_device_info *info = private->info;
4305
4306         int index = elem->control + info->level_input_first;
4307         int oval, val, err;
4308
4309         mutex_lock(&private->data_mutex);
4310
4311         if (private->hwdep_in_use) {
4312                 err = -EBUSY;
4313                 goto unlock;
4314         }
4315
4316         err = scarlett2_check_put_during_autogain(mixer);
4317         if (err < 0)
4318                 goto unlock;
4319
4320         oval = private->level_switch[index];
4321         val = !!ucontrol->value.enumerated.item[0];
4322
4323         if (oval == val)
4324                 goto unlock;
4325
4326         private->level_switch[index] = val;
4327
4328         /* To set the Gen 4 muteable controls, bit 1 gets set instead */
4329         if (private->config_set->items[SCARLETT2_CONFIG_LEVEL_SWITCH].mute)
4330                 val = (!val) | 0x02;
4331
4332         /* Send switch change to the device */
4333         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
4334                                        index, val);
4335         if (err == 0)
4336                 err = 1;
4337
4338 unlock:
4339         mutex_unlock(&private->data_mutex);
4340         return err;
4341 }
4342
4343 static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
4344         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4345         .name = "",
4346         .info = scarlett2_level_enum_ctl_info,
4347         .get  = scarlett2_level_enum_ctl_get,
4348         .put  = scarlett2_level_enum_ctl_put,
4349 };
4350
4351 /*** Pad Switch Controls ***/
4352
4353 static int scarlett2_update_input_pad(struct usb_mixer_interface *mixer)
4354 {
4355         struct scarlett2_data *private = mixer->private_data;
4356         const struct scarlett2_device_info *info = private->info;
4357
4358         private->input_pad_updated = 0;
4359
4360         if (!info->pad_input_count)
4361                 return 0;
4362
4363         return scarlett2_usb_get_config(
4364                 mixer, SCARLETT2_CONFIG_PAD_SWITCH,
4365                 info->pad_input_count, private->pad_switch);
4366 }
4367
4368 static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
4369                                  struct snd_ctl_elem_value *ucontrol)
4370 {
4371         struct usb_mixer_elem_info *elem = kctl->private_data;
4372         struct usb_mixer_interface *mixer = elem->head.mixer;
4373         struct scarlett2_data *private = mixer->private_data;
4374         int err = 0;
4375
4376         mutex_lock(&private->data_mutex);
4377
4378         if (private->hwdep_in_use) {
4379                 err = -EBUSY;
4380                 goto unlock;
4381         }
4382
4383         if (private->input_pad_updated) {
4384                 err = scarlett2_update_input_pad(mixer);
4385                 if (err < 0)
4386                         goto unlock;
4387         }
4388         ucontrol->value.integer.value[0] =
4389                 private->pad_switch[elem->control];
4390
4391 unlock:
4392         mutex_unlock(&private->data_mutex);
4393         return err;
4394 }
4395
4396 static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
4397                                  struct snd_ctl_elem_value *ucontrol)
4398 {
4399         struct usb_mixer_elem_info *elem = kctl->private_data;
4400         struct usb_mixer_interface *mixer = elem->head.mixer;
4401         struct scarlett2_data *private = mixer->private_data;
4402
4403         int index = elem->control;
4404         int oval, val, err = 0;
4405
4406         mutex_lock(&private->data_mutex);
4407
4408         if (private->hwdep_in_use) {
4409                 err = -EBUSY;
4410                 goto unlock;
4411         }
4412
4413         oval = private->pad_switch[index];
4414         val = !!ucontrol->value.integer.value[0];
4415
4416         if (oval == val)
4417                 goto unlock;
4418
4419         private->pad_switch[index] = val;
4420
4421         /* Send switch change to the device */
4422         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
4423                                        index, val);
4424         if (err == 0)
4425                 err = 1;
4426
4427 unlock:
4428         mutex_unlock(&private->data_mutex);
4429         return err;
4430 }
4431
4432 static const struct snd_kcontrol_new scarlett2_pad_ctl = {
4433         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4434         .name = "",
4435         .info = snd_ctl_boolean_mono_info,
4436         .get  = scarlett2_pad_ctl_get,
4437         .put  = scarlett2_pad_ctl_put,
4438 };
4439
4440 /*** Air Switch Controls ***/
4441
4442 static int scarlett2_update_input_air(struct usb_mixer_interface *mixer)
4443 {
4444         struct scarlett2_data *private = mixer->private_data;
4445         const struct scarlett2_device_info *info = private->info;
4446
4447         private->input_air_updated = 0;
4448
4449         if (!info->air_input_count)
4450                 return 0;
4451
4452         return scarlett2_usb_get_config(
4453                 mixer, SCARLETT2_CONFIG_AIR_SWITCH,
4454                 info->air_input_count, private->air_switch);
4455 }
4456
4457 static int scarlett2_air_ctl_get(struct snd_kcontrol *kctl,
4458                                  struct snd_ctl_elem_value *ucontrol)
4459 {
4460         struct usb_mixer_elem_info *elem = kctl->private_data;
4461         struct usb_mixer_interface *mixer = elem->head.mixer;
4462         struct scarlett2_data *private = mixer->private_data;
4463         int err = 0;
4464
4465         mutex_lock(&private->data_mutex);
4466
4467         if (private->hwdep_in_use) {
4468                 err = -EBUSY;
4469                 goto unlock;
4470         }
4471
4472         if (private->input_air_updated) {
4473                 err = scarlett2_update_input_air(mixer);
4474                 if (err < 0)
4475                         goto unlock;
4476         }
4477         ucontrol->value.integer.value[0] = private->air_switch[elem->control];
4478
4479 unlock:
4480         mutex_unlock(&private->data_mutex);
4481         return err;
4482 }
4483
4484 static int scarlett2_air_ctl_put(struct snd_kcontrol *kctl,
4485                                  struct snd_ctl_elem_value *ucontrol)
4486 {
4487         struct usb_mixer_elem_info *elem = kctl->private_data;
4488         struct usb_mixer_interface *mixer = elem->head.mixer;
4489         struct scarlett2_data *private = mixer->private_data;
4490
4491         int index = elem->control;
4492         int oval, val, err;
4493
4494         mutex_lock(&private->data_mutex);
4495
4496         if (private->hwdep_in_use) {
4497                 err = -EBUSY;
4498                 goto unlock;
4499         }
4500
4501         err = scarlett2_check_put_during_autogain(mixer);
4502         if (err < 0)
4503                 goto unlock;
4504
4505         oval = private->air_switch[index];
4506         val = ucontrol->value.integer.value[0];
4507
4508         if (oval == val)
4509                 goto unlock;
4510
4511         private->air_switch[index] = val;
4512
4513         /* Send switch change to the device */
4514         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH,
4515                                        index, val);
4516         if (err == 0)
4517                 err = 1;
4518
4519 unlock:
4520         mutex_unlock(&private->data_mutex);
4521         return err;
4522 }
4523
4524 static int scarlett2_air_with_drive_ctl_info(
4525         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
4526 {
4527         static const char *const values[3] = {
4528                 "Off", "Presence", "Presence + Drive"
4529         };
4530         struct usb_mixer_elem_info *elem = kctl->private_data;
4531         struct usb_mixer_interface *mixer = elem->head.mixer;
4532         struct scarlett2_data *private = mixer->private_data;
4533         int err;
4534
4535         mutex_lock(&private->data_mutex);
4536
4537         if (private->hwdep_in_use) {
4538                 err = -EBUSY;
4539                 goto unlock;
4540         }
4541
4542         err = scarlett2_check_autogain_updated(mixer);
4543         if (err < 0)
4544                 goto unlock;
4545
4546         err = snd_ctl_enum_info(uinfo, 1, 3, values);
4547
4548 unlock:
4549         mutex_unlock(&private->data_mutex);
4550         return err;
4551 }
4552
4553 static const struct snd_kcontrol_new scarlett2_air_ctl[2] = {
4554         {
4555                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4556                 .name = "",
4557                 .info = snd_ctl_boolean_mono_info,
4558                 .get  = scarlett2_air_ctl_get,
4559                 .put  = scarlett2_air_ctl_put,
4560         },
4561         {
4562                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4563                 .name = "",
4564                 .info = scarlett2_air_with_drive_ctl_info,
4565                 .get  = scarlett2_air_ctl_get,
4566                 .put  = scarlett2_air_ctl_put,
4567         }
4568 };
4569
4570 /*** Phantom Switch Controls ***/
4571
4572 static int scarlett2_update_input_phantom(struct usb_mixer_interface *mixer)
4573 {
4574         struct scarlett2_data *private = mixer->private_data;
4575         const struct scarlett2_device_info *info = private->info;
4576         int err;
4577
4578         private->input_phantom_updated = 0;
4579
4580         if (!info->phantom_count)
4581                 return 0;
4582
4583         err = scarlett2_usb_get_config(
4584                 mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
4585                 info->phantom_count, private->phantom_switch);
4586         if (err < 0)
4587                 return err;
4588
4589         if (scarlett2_has_config_item(private,
4590                                       SCARLETT2_CONFIG_PHANTOM_PERSISTENCE)) {
4591                 err = scarlett2_usb_get_config(
4592                         mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
4593                         1, &private->phantom_persistence);
4594                 if (err < 0)
4595                         return err;
4596         }
4597
4598         return 0;
4599 }
4600
4601 /* Check if phantom power on the given input is currently changing state */
4602 static int scarlett2_phantom_is_switching(
4603         struct scarlett2_data *private, int line_num)
4604 {
4605         const struct scarlett2_device_info *info = private->info;
4606         int index = line_num / info->inputs_per_phantom;
4607
4608         return !!(private->phantom_switch[index] & 0x02);
4609 }
4610
4611 /* Update autogain controls' access mode when phantom power changes state */
4612 static void scarlett2_phantom_update_access(struct usb_mixer_interface *mixer)
4613 {
4614         struct scarlett2_data *private = mixer->private_data;
4615         const struct scarlett2_device_info *info = private->info;
4616         int i;
4617
4618         /* Disable autogain controls if phantom power is changing state */
4619         for (i = 0; i < info->gain_input_count; i++) {
4620                 int val = !scarlett2_phantom_is_switching(private, i);
4621
4622                 scarlett2_set_ctl_access(private->autogain_ctls[i], val);
4623         }
4624 }
4625
4626 /* Notify of access mode change for autogain which can't be enabled
4627  * while phantom power is changing.
4628  */
4629 static void scarlett2_phantom_notify_access(struct usb_mixer_interface *mixer)
4630 {
4631         struct snd_card *card = mixer->chip->card;
4632         struct scarlett2_data *private = mixer->private_data;
4633         const struct scarlett2_device_info *info = private->info;
4634         int i;
4635
4636         for (i = 0; i < info->gain_input_count; i++)
4637                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
4638                                &private->autogain_ctls[i]->id);
4639 }
4640
4641 /* Call scarlett2_update_input_phantom() and
4642  * scarlett2_phantom_update_access() if input_phantom_updated is set.
4643  */
4644 static int scarlett2_check_input_phantom_updated(
4645         struct usb_mixer_interface *mixer)
4646 {
4647         struct scarlett2_data *private = mixer->private_data;
4648         int err;
4649
4650         if (!private->input_phantom_updated)
4651                 return 0;
4652
4653         err = scarlett2_update_input_phantom(mixer);
4654         if (err < 0)
4655                 return err;
4656
4657         scarlett2_phantom_update_access(mixer);
4658
4659         return 0;
4660 }
4661
4662 static int scarlett2_phantom_ctl_get(struct snd_kcontrol *kctl,
4663                                      struct snd_ctl_elem_value *ucontrol)
4664 {
4665         struct usb_mixer_elem_info *elem = kctl->private_data;
4666         struct usb_mixer_interface *mixer = elem->head.mixer;
4667         struct scarlett2_data *private = mixer->private_data;
4668         int err;
4669
4670         mutex_lock(&private->data_mutex);
4671
4672         if (private->hwdep_in_use) {
4673                 err = -EBUSY;
4674                 goto unlock;
4675         }
4676
4677         err = scarlett2_check_input_phantom_updated(mixer);
4678         if (err < 0)
4679                 goto unlock;
4680
4681         ucontrol->value.integer.value[0] = scarlett2_decode_muteable(
4682                 private->phantom_switch[elem->control]);
4683
4684 unlock:
4685         mutex_unlock(&private->data_mutex);
4686         return err;
4687 }
4688
4689 static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
4690                                      struct snd_ctl_elem_value *ucontrol)
4691 {
4692         struct usb_mixer_elem_info *elem = kctl->private_data;
4693         struct usb_mixer_interface *mixer = elem->head.mixer;
4694         struct scarlett2_data *private = mixer->private_data;
4695         const struct scarlett2_device_info *info = private->info;
4696
4697         int index = elem->control;
4698         int oval, val, err;
4699
4700         mutex_lock(&private->data_mutex);
4701
4702         if (private->hwdep_in_use) {
4703                 err = -EBUSY;
4704                 goto unlock;
4705         }
4706
4707         err = scarlett2_check_put_during_autogain(mixer);
4708         if (err < 0)
4709                 goto unlock;
4710
4711         oval = private->phantom_switch[index];
4712         val = !!ucontrol->value.integer.value[0];
4713
4714         if (oval == val)
4715                 goto unlock;
4716
4717         private->phantom_switch[index] = val;
4718
4719         /* To set the Gen 4 muteable controls, bit 1 gets set */
4720         if (private->config_set->items[SCARLETT2_CONFIG_PHANTOM_SWITCH].mute)
4721                 val = (!val) | 0x02;
4722
4723         /* Send switch change to the device */
4724         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
4725                                        index + info->phantom_first, val);
4726         if (err == 0)
4727                 err = 1;
4728
4729         scarlett2_phantom_update_access(mixer);
4730         scarlett2_phantom_notify_access(mixer);
4731
4732 unlock:
4733         mutex_unlock(&private->data_mutex);
4734         return err;
4735 }
4736
4737 static const struct snd_kcontrol_new scarlett2_phantom_ctl = {
4738         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4739         .name = "",
4740         .info = scarlett2_autogain_disables_ctl_info,
4741         .get  = scarlett2_phantom_ctl_get,
4742         .put  = scarlett2_phantom_ctl_put,
4743 };
4744
4745 /*** Phantom Persistence Control ***/
4746
4747 static int scarlett2_phantom_persistence_ctl_get(
4748         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
4749 {
4750         struct usb_mixer_elem_info *elem = kctl->private_data;
4751         struct scarlett2_data *private = elem->head.mixer->private_data;
4752
4753         ucontrol->value.integer.value[0] = private->phantom_persistence;
4754         return 0;
4755 }
4756
4757 static int scarlett2_phantom_persistence_ctl_put(
4758         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
4759 {
4760         struct usb_mixer_elem_info *elem = kctl->private_data;
4761         struct usb_mixer_interface *mixer = elem->head.mixer;
4762         struct scarlett2_data *private = mixer->private_data;
4763
4764         int index = elem->control;
4765         int oval, val, err = 0;
4766
4767         mutex_lock(&private->data_mutex);
4768
4769         if (private->hwdep_in_use) {
4770                 err = -EBUSY;
4771                 goto unlock;
4772         }
4773
4774         oval = private->phantom_persistence;
4775         val = !!ucontrol->value.integer.value[0];
4776
4777         if (oval == val)
4778                 goto unlock;
4779
4780         private->phantom_persistence = val;
4781
4782         /* Send switch change to the device */
4783         err = scarlett2_usb_set_config(
4784                 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val);
4785         if (err == 0)
4786                 err = 1;
4787
4788 unlock:
4789         mutex_unlock(&private->data_mutex);
4790         return err;
4791 }
4792
4793 static const struct snd_kcontrol_new scarlett2_phantom_persistence_ctl = {
4794         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
4795         .name = "",
4796         .info = snd_ctl_boolean_mono_info,
4797         .get  = scarlett2_phantom_persistence_ctl_get,
4798         .put  = scarlett2_phantom_persistence_ctl_put,
4799 };
4800
4801 /*** Speaker Switching Control ***/
4802
4803 static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
4804 {
4805         struct scarlett2_data *private = mixer->private_data;
4806         const struct scarlett2_device_info *info = private->info;
4807         int err;
4808
4809         /* monitor_other_enable[0] enables speaker switching
4810          * monitor_other_enable[1] enables talkback
4811          */
4812         u8 monitor_other_enable[2];
4813
4814         /* monitor_other_switch[0] activates the alternate speakers
4815          * monitor_other_switch[1] activates talkback
4816          */
4817         u8 monitor_other_switch[2];
4818
4819         private->monitor_other_updated = 0;
4820
4821         /* if it doesn't do speaker switching then it also doesn't do
4822          * talkback
4823          */
4824         if (!info->has_speaker_switching)
4825                 return 0;
4826
4827         err = scarlett2_usb_get_config(
4828                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
4829                 2, monitor_other_enable);
4830         if (err < 0)
4831                 return err;
4832
4833         err = scarlett2_usb_get_config(
4834                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
4835                 2, monitor_other_switch);
4836         if (err < 0)
4837                 return err;
4838
4839         if (!monitor_other_enable[0])
4840                 private->speaker_switching_switch = 0;
4841         else
4842                 private->speaker_switching_switch = monitor_other_switch[0] + 1;
4843
4844         if (info->has_talkback) {
4845                 u16 bitmap;
4846                 int i;
4847
4848                 if (!monitor_other_enable[1])
4849                         private->talkback_switch = 0;
4850                 else
4851                         private->talkback_switch = monitor_other_switch[1] + 1;
4852
4853                 err = scarlett2_usb_get_config(mixer,
4854                                                SCARLETT2_CONFIG_TALKBACK_MAP,
4855                                                1, &bitmap);
4856                 if (err < 0)
4857                         return err;
4858                 for (i = 0; i < private->num_mix_out; i++, bitmap >>= 1)
4859                         private->talkback_map[i] = bitmap & 1;
4860         }
4861
4862         return 0;
4863 }
4864
4865 static int scarlett2_speaker_switch_enum_ctl_info(
4866         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
4867 {
4868         static const char *const values[3] = {
4869                 "Off", "Main", "Alt"
4870         };
4871
4872         return snd_ctl_enum_info(uinfo, 1, 3, values);
4873 }
4874
4875 static int scarlett2_speaker_switch_enum_ctl_get(
4876         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
4877 {
4878         struct usb_mixer_elem_info *elem = kctl->private_data;
4879         struct usb_mixer_interface *mixer = elem->head.mixer;
4880         struct scarlett2_data *private = mixer->private_data;
4881         int err = 0;
4882
4883         mutex_lock(&private->data_mutex);
4884
4885         if (private->hwdep_in_use) {
4886                 err = -EBUSY;
4887                 goto unlock;
4888         }
4889
4890         if (private->monitor_other_updated) {
4891                 err = scarlett2_update_monitor_other(mixer);
4892                 if (err < 0)
4893                         goto unlock;
4894         }
4895         ucontrol->value.enumerated.item[0] = private->speaker_switching_switch;
4896
4897 unlock:
4898         mutex_unlock(&private->data_mutex);
4899         return err;
4900 }
4901
4902 /* when speaker switching gets enabled, switch the main/alt speakers
4903  * to HW volume and disable those controls
4904  */
4905 static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer)
4906 {
4907         struct snd_card *card = mixer->chip->card;
4908         struct scarlett2_data *private = mixer->private_data;
4909         int i, err;
4910
4911         for (i = 0; i < 4; i++) {
4912                 int index = line_out_remap(private, i);
4913
4914                 /* switch the main/alt speakers to HW volume */
4915                 if (!private->vol_sw_hw_switch[index]) {
4916                         err = scarlett2_sw_hw_change(private->mixer, i, 1);
4917                         if (err < 0)
4918                                 return err;
4919                 }
4920
4921                 /* disable the line out SW/HW switch */
4922                 scarlett2_sw_hw_ctl_ro(private, i);
4923                 snd_ctl_notify(card,
4924                                SNDRV_CTL_EVENT_MASK_VALUE |
4925                                  SNDRV_CTL_EVENT_MASK_INFO,
4926                                &private->sw_hw_ctls[i]->id);
4927         }
4928
4929         /* when the next monitor-other notify comes in, update the mux
4930          * configuration
4931          */
4932         private->speaker_switching_switched = 1;
4933
4934         return 0;
4935 }
4936
4937 /* when speaker switching gets disabled, reenable the hw/sw controls
4938  * and invalidate the routing
4939  */
4940 static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer)
4941 {
4942         struct snd_card *card = mixer->chip->card;
4943         struct scarlett2_data *private = mixer->private_data;
4944         int i;
4945
4946         /* enable the line out SW/HW switch */
4947         for (i = 0; i < 4; i++) {
4948                 scarlett2_sw_hw_ctl_rw(private, i);
4949                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
4950                                &private->sw_hw_ctls[i]->id);
4951         }
4952
4953         /* when the next monitor-other notify comes in, update the mux
4954          * configuration
4955          */
4956         private->speaker_switching_switched = 1;
4957 }
4958
4959 static int scarlett2_speaker_switch_enum_ctl_put(
4960         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
4961 {
4962         struct usb_mixer_elem_info *elem = kctl->private_data;
4963         struct usb_mixer_interface *mixer = elem->head.mixer;
4964         struct scarlett2_data *private = mixer->private_data;
4965
4966         int oval, val, err = 0;
4967
4968         mutex_lock(&private->data_mutex);
4969
4970         if (private->hwdep_in_use) {
4971                 err = -EBUSY;
4972                 goto unlock;
4973         }
4974
4975         oval = private->speaker_switching_switch;
4976         val = min(ucontrol->value.enumerated.item[0], 2U);
4977
4978         if (oval == val)
4979                 goto unlock;
4980
4981         private->speaker_switching_switch = val;
4982
4983         /* enable/disable speaker switching */
4984         err = scarlett2_usb_set_config(
4985                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
4986                 0, !!val);
4987         if (err < 0)
4988                 goto unlock;
4989
4990         /* if speaker switching is enabled, select main or alt */
4991         err = scarlett2_usb_set_config(
4992                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
4993                 0, val == 2);
4994         if (err < 0)
4995                 goto unlock;
4996
4997         /* update controls if speaker switching gets enabled or disabled */
4998         if (!oval && val)
4999                 err = scarlett2_speaker_switch_enable(mixer);
5000         else if (oval && !val)
5001                 scarlett2_speaker_switch_disable(mixer);
5002
5003         if (err == 0)
5004                 err = 1;
5005
5006 unlock:
5007         mutex_unlock(&private->data_mutex);
5008         return err;
5009 }
5010
5011 static const struct snd_kcontrol_new scarlett2_speaker_switch_enum_ctl = {
5012         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5013         .name = "",
5014         .info = scarlett2_speaker_switch_enum_ctl_info,
5015         .get  = scarlett2_speaker_switch_enum_ctl_get,
5016         .put  = scarlett2_speaker_switch_enum_ctl_put,
5017 };
5018
5019 static int scarlett2_add_speaker_switch_ctl(struct usb_mixer_interface *mixer)
5020 {
5021         struct scarlett2_data *private = mixer->private_data;
5022         const struct scarlett2_device_info *info = private->info;
5023
5024         if (!info->has_speaker_switching)
5025                 return 0;
5026
5027         return scarlett2_add_new_ctl(
5028                 mixer, &scarlett2_speaker_switch_enum_ctl,
5029                 0, 1, "Speaker Switching Playback Enum",
5030                 &private->speaker_switching_ctl);
5031 }
5032
5033 /*** Talkback and Talkback Map Controls ***/
5034
5035 static int scarlett2_talkback_enum_ctl_info(
5036         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
5037 {
5038         static const char *const values[3] = {
5039                 "Disabled", "Off", "On"
5040         };
5041
5042         return snd_ctl_enum_info(uinfo, 1, 3, values);
5043 }
5044
5045 static int scarlett2_talkback_enum_ctl_get(
5046         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5047 {
5048         struct usb_mixer_elem_info *elem = kctl->private_data;
5049         struct usb_mixer_interface *mixer = elem->head.mixer;
5050         struct scarlett2_data *private = mixer->private_data;
5051         int err = 0;
5052
5053         mutex_lock(&private->data_mutex);
5054
5055         if (private->hwdep_in_use) {
5056                 err = -EBUSY;
5057                 goto unlock;
5058         }
5059
5060         if (private->monitor_other_updated) {
5061                 err = scarlett2_update_monitor_other(mixer);
5062                 if (err < 0)
5063                         goto unlock;
5064         }
5065         ucontrol->value.enumerated.item[0] = private->talkback_switch;
5066
5067 unlock:
5068         mutex_unlock(&private->data_mutex);
5069         return err;
5070 }
5071
5072 static int scarlett2_talkback_enum_ctl_put(
5073         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5074 {
5075         struct usb_mixer_elem_info *elem = kctl->private_data;
5076         struct usb_mixer_interface *mixer = elem->head.mixer;
5077         struct scarlett2_data *private = mixer->private_data;
5078
5079         int oval, val, err = 0;
5080
5081         mutex_lock(&private->data_mutex);
5082
5083         if (private->hwdep_in_use) {
5084                 err = -EBUSY;
5085                 goto unlock;
5086         }
5087
5088         oval = private->talkback_switch;
5089         val = min(ucontrol->value.enumerated.item[0], 2U);
5090
5091         if (oval == val)
5092                 goto unlock;
5093
5094         private->talkback_switch = val;
5095
5096         /* enable/disable talkback */
5097         err = scarlett2_usb_set_config(
5098                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
5099                 1, !!val);
5100         if (err < 0)
5101                 goto unlock;
5102
5103         /* if talkback is enabled, select main or alt */
5104         err = scarlett2_usb_set_config(
5105                 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
5106                 1, val == 2);
5107         if (err == 0)
5108                 err = 1;
5109
5110 unlock:
5111         mutex_unlock(&private->data_mutex);
5112         return err;
5113 }
5114
5115 static const struct snd_kcontrol_new scarlett2_talkback_enum_ctl = {
5116         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5117         .name = "",
5118         .info = scarlett2_talkback_enum_ctl_info,
5119         .get  = scarlett2_talkback_enum_ctl_get,
5120         .put  = scarlett2_talkback_enum_ctl_put,
5121 };
5122
5123 static int scarlett2_talkback_map_ctl_get(
5124         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5125 {
5126         struct usb_mixer_elem_info *elem = kctl->private_data;
5127         struct usb_mixer_interface *mixer = elem->head.mixer;
5128         struct scarlett2_data *private = mixer->private_data;
5129         int index = elem->control;
5130
5131         ucontrol->value.integer.value[0] = private->talkback_map[index];
5132
5133         return 0;
5134 }
5135
5136 static int scarlett2_talkback_map_ctl_put(
5137         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5138 {
5139         struct usb_mixer_elem_info *elem = kctl->private_data;
5140         struct usb_mixer_interface *mixer = elem->head.mixer;
5141         struct scarlett2_data *private = mixer->private_data;
5142         int index = elem->control;
5143         int oval, val, err = 0, i;
5144         u16 bitmap = 0;
5145
5146         mutex_lock(&private->data_mutex);
5147
5148         if (private->hwdep_in_use) {
5149                 err = -EBUSY;
5150                 goto unlock;
5151         }
5152
5153         oval = private->talkback_map[index];
5154         val = !!ucontrol->value.integer.value[0];
5155
5156         if (oval == val)
5157                 goto unlock;
5158
5159         private->talkback_map[index] = val;
5160
5161         for (i = 0; i < private->num_mix_out; i++)
5162                 bitmap |= private->talkback_map[i] << i;
5163
5164         /* Send updated bitmap to the device */
5165         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP,
5166                                        0, bitmap);
5167         if (err == 0)
5168                 err = 1;
5169
5170 unlock:
5171         mutex_unlock(&private->data_mutex);
5172         return err;
5173 }
5174
5175 static const struct snd_kcontrol_new scarlett2_talkback_map_ctl = {
5176         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5177         .name = "",
5178         .info = snd_ctl_boolean_mono_info,
5179         .get  = scarlett2_talkback_map_ctl_get,
5180         .put  = scarlett2_talkback_map_ctl_put,
5181 };
5182
5183 static int scarlett2_add_talkback_ctls(struct usb_mixer_interface *mixer)
5184 {
5185         struct scarlett2_data *private = mixer->private_data;
5186         const struct scarlett2_device_info *info = private->info;
5187         int err, i;
5188         char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
5189
5190         if (!info->has_talkback)
5191                 return 0;
5192
5193         err = scarlett2_add_new_ctl(
5194                 mixer, &scarlett2_talkback_enum_ctl,
5195                 0, 1, "Talkback Playback Enum",
5196                 &private->talkback_ctl);
5197         if (err < 0)
5198                 return err;
5199
5200         for (i = 0; i < private->num_mix_out; i++) {
5201                 snprintf(s, sizeof(s),
5202                          "Talkback Mix %c Playback Switch", i + 'A');
5203                 err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl,
5204                                             i, 1, s, NULL);
5205                 if (err < 0)
5206                         return err;
5207         }
5208
5209         return 0;
5210 }
5211
5212 /*** Dim/Mute Controls ***/
5213
5214 static int scarlett2_dim_mute_ctl_get(struct snd_kcontrol *kctl,
5215                                       struct snd_ctl_elem_value *ucontrol)
5216 {
5217         struct usb_mixer_elem_info *elem = kctl->private_data;
5218         struct usb_mixer_interface *mixer = elem->head.mixer;
5219         struct scarlett2_data *private = mixer->private_data;
5220         int err = 0;
5221
5222         mutex_lock(&private->data_mutex);
5223
5224         if (private->hwdep_in_use) {
5225                 err = -EBUSY;
5226                 goto unlock;
5227         }
5228
5229         if (private->dim_mute_updated) {
5230                 err = scarlett2_update_dim_mute(mixer);
5231                 if (err < 0)
5232                         goto unlock;
5233         }
5234         ucontrol->value.integer.value[0] = private->dim_mute[elem->control];
5235
5236 unlock:
5237         mutex_unlock(&private->data_mutex);
5238         return err;
5239 }
5240
5241 static int scarlett2_dim_mute_ctl_put(struct snd_kcontrol *kctl,
5242                                       struct snd_ctl_elem_value *ucontrol)
5243 {
5244         struct usb_mixer_elem_info *elem = kctl->private_data;
5245         struct usb_mixer_interface *mixer = elem->head.mixer;
5246         struct scarlett2_data *private = mixer->private_data;
5247         int index = elem->control;
5248         int oval, val, err = 0, i;
5249
5250         mutex_lock(&private->data_mutex);
5251
5252         if (private->hwdep_in_use) {
5253                 err = -EBUSY;
5254                 goto unlock;
5255         }
5256
5257         oval = private->dim_mute[index];
5258         val = !!ucontrol->value.integer.value[0];
5259
5260         if (oval == val)
5261                 goto unlock;
5262
5263         private->dim_mute[index] = val;
5264
5265         /* Send switch change to the device */
5266         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE,
5267                                        index, val);
5268         if (err == 0)
5269                 err = 1;
5270
5271         if (index == SCARLETT2_BUTTON_MUTE)
5272                 for (i = 0; i < private->num_line_out; i++) {
5273                         int line_index = line_out_remap(private, i);
5274
5275                         if (private->vol_sw_hw_switch[line_index]) {
5276                                 private->mute_switch[line_index] = val;
5277                                 snd_ctl_notify(mixer->chip->card,
5278                                                SNDRV_CTL_EVENT_MASK_VALUE,
5279                                                &private->mute_ctls[i]->id);
5280                         }
5281                 }
5282
5283 unlock:
5284         mutex_unlock(&private->data_mutex);
5285         return err;
5286 }
5287
5288 static const struct snd_kcontrol_new scarlett2_dim_mute_ctl = {
5289         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5290         .name = "",
5291         .info = snd_ctl_boolean_mono_info,
5292         .get  = scarlett2_dim_mute_ctl_get,
5293         .put  = scarlett2_dim_mute_ctl_put
5294 };
5295
5296 /*** Create the analogue output controls ***/
5297
5298 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
5299 {
5300         struct scarlett2_data *private = mixer->private_data;
5301         const struct scarlett2_device_info *info = private->info;
5302         int err, i;
5303         char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
5304
5305         /* Add R/O HW volume control */
5306         if (scarlett2_has_config_item(private,
5307                                       SCARLETT2_CONFIG_MASTER_VOLUME)) {
5308                 snprintf(s, sizeof(s), "Master HW Playback Volume");
5309                 err = scarlett2_add_new_ctl(mixer,
5310                                             &scarlett2_master_volume_ctl,
5311                                             0, 1, s, &private->master_vol_ctl);
5312                 if (err < 0)
5313                         return err;
5314         }
5315
5316         /* Add R/O headphone volume control */
5317         if (scarlett2_has_config_item(private,
5318                                       SCARLETT2_CONFIG_HEADPHONE_VOLUME)) {
5319                 snprintf(s, sizeof(s), "Headphone Playback Volume");
5320                 err = scarlett2_add_new_ctl(mixer,
5321                                             &scarlett2_headphone_volume_ctl,
5322                                             0, 1, s,
5323                                             &private->headphone_vol_ctl);
5324                 if (err < 0)
5325                         return err;
5326         }
5327
5328         /* Remaining controls are only applicable if the device
5329          * has per-channel line-out volume controls.
5330          */
5331         if (!scarlett2_has_config_item(private,
5332                                        SCARLETT2_CONFIG_LINE_OUT_VOLUME))
5333                 return 0;
5334
5335         /* Add volume controls */
5336         for (i = 0; i < private->num_line_out; i++) {
5337                 int index = line_out_remap(private, i);
5338
5339                 /* Fader */
5340                 if (info->line_out_descrs[i])
5341                         snprintf(s, sizeof(s),
5342                                  "Line %02d (%s) Playback Volume",
5343                                  i + 1, info->line_out_descrs[i]);
5344                 else
5345                         snprintf(s, sizeof(s),
5346                                  "Line %02d Playback Volume",
5347                                  i + 1);
5348                 err = scarlett2_add_new_ctl(mixer,
5349                                             &scarlett2_line_out_volume_ctl,
5350                                             i, 1, s, &private->vol_ctls[i]);
5351                 if (err < 0)
5352                         return err;
5353
5354                 /* Mute Switch */
5355                 snprintf(s, sizeof(s),
5356                          "Line %02d Mute Playback Switch",
5357                          i + 1);
5358                 err = scarlett2_add_new_ctl(mixer,
5359                                             &scarlett2_mute_ctl,
5360                                             i, 1, s,
5361                                             &private->mute_ctls[i]);
5362                 if (err < 0)
5363                         return err;
5364
5365                 /* SW/HW Switch */
5366                 if (scarlett2_has_config_item(private,
5367                                               SCARLETT2_CONFIG_SW_HW_SWITCH)) {
5368
5369                         /* Make the fader and mute controls read-only if the
5370                          * SW/HW switch is set to HW
5371                          */
5372                         if (private->vol_sw_hw_switch[index])
5373                                 scarlett2_vol_ctl_set_writable(mixer, i, 0);
5374
5375                         scnprintf(s, sizeof(s),
5376                                   "Line Out %02d Volume Control Playback Enum",
5377                                   i + 1);
5378                         err = scarlett2_add_new_ctl(mixer,
5379                                                     &scarlett2_sw_hw_enum_ctl,
5380                                                     i, 1, s,
5381                                                     &private->sw_hw_ctls[i]);
5382                         if (err < 0)
5383                                 return err;
5384
5385                         /* Make the switch read-only if the line is
5386                          * involved in speaker switching
5387                          */
5388                         if (private->speaker_switching_switch && i < 4)
5389                                 scarlett2_sw_hw_ctl_ro(private, i);
5390                 }
5391         }
5392
5393         /* Add dim/mute controls */
5394         if (scarlett2_has_config_item(private, SCARLETT2_CONFIG_DIM_MUTE))
5395                 for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++) {
5396                         err = scarlett2_add_new_ctl(
5397                                 mixer, &scarlett2_dim_mute_ctl,
5398                                 i, 1, scarlett2_dim_mute_names[i],
5399                                 &private->dim_mute_ctls[i]);
5400                         if (err < 0)
5401                                 return err;
5402                 }
5403
5404         return 0;
5405 }
5406
5407 /*** Create the analogue input controls ***/
5408
5409 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
5410 {
5411         struct scarlett2_data *private = mixer->private_data;
5412         const struct scarlett2_device_info *info = private->info;
5413         int err, i;
5414         char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
5415         const char *fmt = "Line In %d %s Capture %s";
5416         const char *fmt2 = "Line In %d-%d %s Capture %s";
5417
5418         /* Add input level (line/inst) controls */
5419         for (i = 0; i < info->level_input_count; i++) {
5420                 scnprintf(s, sizeof(s), fmt, i + 1 + info->level_input_first,
5421                           "Level", "Enum");
5422                 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
5423                                             i, 1, s, &private->level_ctls[i]);
5424                 if (err < 0)
5425                         return err;
5426         }
5427
5428         /* Add input pad controls */
5429         for (i = 0; i < info->pad_input_count; i++) {
5430                 scnprintf(s, sizeof(s), fmt, i + 1, "Pad", "Switch");
5431                 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
5432                                             i, 1, s, &private->pad_ctls[i]);
5433                 if (err < 0)
5434                         return err;
5435         }
5436
5437         /* Add input air controls */
5438         for (i = 0; i < info->air_input_count; i++) {
5439                 scnprintf(s, sizeof(s), fmt, i + 1 + info->air_input_first,
5440                           "Air", info->air_option ? "Enum" : "Switch");
5441                 err = scarlett2_add_new_ctl(
5442                         mixer, &scarlett2_air_ctl[info->air_option],
5443                         i, 1, s, &private->air_ctls[i]);
5444                 if (err < 0)
5445                         return err;
5446         }
5447
5448         /* Add input phantom controls */
5449         if (info->inputs_per_phantom == 1) {
5450                 for (i = 0; i < info->phantom_count; i++) {
5451                         scnprintf(s, sizeof(s), fmt,
5452                                   i + 1 + info->phantom_first,
5453                                   "Phantom Power", "Switch");
5454                         err = scarlett2_add_new_ctl(
5455                                 mixer, &scarlett2_phantom_ctl,
5456                                 i, 1, s, &private->phantom_ctls[i]);
5457                         if (err < 0)
5458                                 return err;
5459                 }
5460         } else if (info->inputs_per_phantom > 1) {
5461                 for (i = 0; i < info->phantom_count; i++) {
5462                         int from = i * info->inputs_per_phantom + 1;
5463                         int to = (i + 1) * info->inputs_per_phantom;
5464
5465                         scnprintf(s, sizeof(s), fmt2, from, to,
5466                                   "Phantom Power", "Switch");
5467                         err = scarlett2_add_new_ctl(
5468                                 mixer, &scarlett2_phantom_ctl,
5469                                 i, 1, s, &private->phantom_ctls[i]);
5470                         if (err < 0)
5471                                 return err;
5472                 }
5473         }
5474         if (info->phantom_count &&
5475             scarlett2_has_config_item(private,
5476                                       SCARLETT2_CONFIG_PHANTOM_PERSISTENCE)) {
5477                 err = scarlett2_add_new_ctl(
5478                         mixer, &scarlett2_phantom_persistence_ctl, 0, 1,
5479                         "Phantom Power Persistence Capture Switch", NULL);
5480                 if (err < 0)
5481                         return err;
5482         }
5483
5484         /* Add software-controllable input gain controls */
5485         if (info->gain_input_count) {
5486                 err = scarlett2_add_new_ctl(
5487                         mixer, &scarlett2_input_select_ctl, 0, 1,
5488                         "Input Select Capture Enum",
5489                         &private->input_select_ctl);
5490                 if (err < 0)
5491                         return err;
5492
5493                 for (i = 0; i < info->gain_input_count; i++) {
5494                         if (i % 2) {
5495                                 scnprintf(s, sizeof(s),
5496                                           "Line In %d-%d Link Capture Switch",
5497                                           i, i + 1);
5498                                 err = scarlett2_add_new_ctl(
5499                                         mixer, &scarlett2_input_link_ctl,
5500                                         i / 2, 1, s,
5501                                         &private->input_link_ctls[i / 2]);
5502                                 if (err < 0)
5503                                         return err;
5504                         }
5505
5506                         scnprintf(s, sizeof(s), fmt, i + 1,
5507                                   "Gain", "Volume");
5508                         err = scarlett2_add_new_ctl(
5509                                 mixer, &scarlett2_input_gain_ctl,
5510                                 i, 1, s, &private->input_gain_ctls[i]);
5511                         if (err < 0)
5512                                 return err;
5513
5514                         scnprintf(s, sizeof(s), fmt, i + 1,
5515                                   "Autogain", "Switch");
5516                         err = scarlett2_add_new_ctl(
5517                                 mixer, &scarlett2_autogain_switch_ctl,
5518                                 i, 1, s, &private->autogain_ctls[i]);
5519                         if (err < 0)
5520                                 return err;
5521
5522                         scnprintf(s, sizeof(s), fmt, i + 1,
5523                                   "Autogain Status", "Enum");
5524                         err = scarlett2_add_new_ctl(
5525                                 mixer, &scarlett2_autogain_status_ctl,
5526                                 i, 1, s, &private->autogain_status_ctls[i]);
5527
5528                         scnprintf(s, sizeof(s), fmt, i + 1,
5529                                   "Safe", "Switch");
5530                         err = scarlett2_add_new_ctl(
5531                                 mixer, &scarlett2_safe_ctl,
5532                                 i, 1, s, &private->safe_ctls[i]);
5533                         if (err < 0)
5534                                 return err;
5535                 }
5536         }
5537
5538         /* Add PCM Input Switch control */
5539         if (scarlett2_has_config_item(private,
5540                                       SCARLETT2_CONFIG_PCM_INPUT_SWITCH)) {
5541                 err = scarlett2_add_new_ctl(
5542                         mixer, &scarlett2_pcm_input_switch_ctl, 0, 1,
5543                         "PCM Input Capture Switch",
5544                         &private->pcm_input_switch_ctl);
5545                 if (err < 0)
5546                         return err;
5547         }
5548
5549         return 0;
5550 }
5551
5552 /*** Mixer Volume Controls ***/
5553
5554 static int scarlett2_update_mix(struct usb_mixer_interface *mixer)
5555 {
5556         struct scarlett2_data *private = mixer->private_data;
5557         int i, err;
5558
5559         private->mix_updated = 0;
5560
5561         for (i = 0; i < private->num_mix_out; i++) {
5562                 err = scarlett2_usb_get_mix(mixer, i);
5563                 if (err < 0)
5564                         return err;
5565         }
5566
5567         return 1;
5568 }
5569
5570 static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
5571                                     struct snd_ctl_elem_info *uinfo)
5572 {
5573         struct usb_mixer_elem_info *elem = kctl->private_data;
5574
5575         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
5576         uinfo->count = elem->channels;
5577         uinfo->value.integer.min = 0;
5578         uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
5579         uinfo->value.integer.step = 1;
5580         return 0;
5581 }
5582
5583 static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
5584                                    struct snd_ctl_elem_value *ucontrol)
5585 {
5586         struct usb_mixer_elem_info *elem = kctl->private_data;
5587         struct usb_mixer_interface *mixer = elem->head.mixer;
5588         struct scarlett2_data *private = mixer->private_data;
5589         int err = 0;
5590
5591         mutex_lock(&private->data_mutex);
5592
5593         if (private->hwdep_in_use) {
5594                 err = -EBUSY;
5595                 goto unlock;
5596         }
5597
5598         if (private->mix_updated) {
5599                 err = scarlett2_update_mix(mixer);
5600                 if (err < 0)
5601                         goto unlock;
5602         }
5603         ucontrol->value.integer.value[0] = private->mix[elem->control];
5604
5605 unlock:
5606         mutex_unlock(&private->data_mutex);
5607         return err;
5608 }
5609
5610 static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
5611                                    struct snd_ctl_elem_value *ucontrol)
5612 {
5613         struct usb_mixer_elem_info *elem = kctl->private_data;
5614         struct usb_mixer_interface *mixer = elem->head.mixer;
5615         struct scarlett2_data *private = mixer->private_data;
5616         int oval, val, mix_num, err = 0;
5617         int index = elem->control;
5618
5619         mutex_lock(&private->data_mutex);
5620
5621         if (private->hwdep_in_use) {
5622                 err = -EBUSY;
5623                 goto unlock;
5624         }
5625
5626         oval = private->mix[index];
5627         val = clamp(ucontrol->value.integer.value[0],
5628                     0L, (long)SCARLETT2_MIXER_MAX_VALUE);
5629         mix_num = index / private->num_mix_in;
5630
5631         if (oval == val)
5632                 goto unlock;
5633
5634         private->mix[index] = val;
5635         err = scarlett2_usb_set_mix(mixer, mix_num);
5636         if (err == 0)
5637                 err = 1;
5638
5639 unlock:
5640         mutex_unlock(&private->data_mutex);
5641         return err;
5642 }
5643
5644 static const DECLARE_TLV_DB_MINMAX(
5645         db_scale_scarlett2_mixer,
5646         SCARLETT2_MIXER_MIN_DB * 100,
5647         SCARLETT2_MIXER_MAX_DB * 100
5648 );
5649
5650 static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
5651         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5652         .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
5653                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
5654         .name = "",
5655         .info = scarlett2_mixer_ctl_info,
5656         .get  = scarlett2_mixer_ctl_get,
5657         .put  = scarlett2_mixer_ctl_put,
5658         .private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
5659         .tlv = { .p = db_scale_scarlett2_mixer }
5660 };
5661
5662 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
5663 {
5664         struct scarlett2_data *private = mixer->private_data;
5665         int err, i, j;
5666         int index;
5667         char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
5668
5669         for (i = 0, index = 0; i < private->num_mix_out; i++)
5670                 for (j = 0; j < private->num_mix_in; j++, index++) {
5671                         snprintf(s, sizeof(s),
5672                                  "Mix %c Input %02d Playback Volume",
5673                                  'A' + i, j + 1);
5674                         err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
5675                                                     index, 1, s,
5676                                                     &private->mix_ctls[index]);
5677                         if (err < 0)
5678                                 return err;
5679                 }
5680
5681         return 0;
5682 }
5683
5684 /*** Direct Monitor Control ***/
5685
5686 static int scarlett2_update_direct_monitor(struct usb_mixer_interface *mixer)
5687 {
5688         struct scarlett2_data *private = mixer->private_data;
5689
5690         private->direct_monitor_updated = 0;
5691
5692         if (!private->info->direct_monitor)
5693                 return 0;
5694
5695         return scarlett2_usb_get_config(
5696                 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR,
5697                 1, &private->direct_monitor_switch);
5698 }
5699
5700 static int scarlett2_update_monitor_mix(struct usb_mixer_interface *mixer)
5701 {
5702         struct scarlett2_data *private = mixer->private_data;
5703         int err, i;
5704         u16 mix_values[SCARLETT2_MONITOR_MIX_MAX];
5705
5706         if (!private->num_monitor_mix_ctls)
5707                 return 0;
5708
5709         err = scarlett2_usb_get_config(
5710                 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR_GAIN,
5711                 private->num_monitor_mix_ctls, mix_values);
5712         if (err < 0)
5713                 return err;
5714
5715         for (i = 0; i < private->num_monitor_mix_ctls; i++)
5716                 private->monitor_mix[i] = scarlett2_mixer_value_to_db(
5717                         mix_values[i]);
5718
5719         return 0;
5720 }
5721
5722 static int scarlett2_direct_monitor_ctl_get(
5723         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5724 {
5725         struct usb_mixer_elem_info *elem = kctl->private_data;
5726         struct usb_mixer_interface *mixer = elem->head.mixer;
5727         struct scarlett2_data *private = mixer->private_data;
5728         int err = 0;
5729
5730         mutex_lock(&private->data_mutex);
5731
5732         if (private->hwdep_in_use) {
5733                 err = -EBUSY;
5734                 goto unlock;
5735         }
5736
5737         if (private->direct_monitor_updated) {
5738                 err = scarlett2_update_direct_monitor(mixer);
5739                 if (err < 0)
5740                         goto unlock;
5741         }
5742         ucontrol->value.enumerated.item[0] = private->direct_monitor_switch;
5743
5744 unlock:
5745         mutex_unlock(&private->data_mutex);
5746         return err;
5747 }
5748
5749 static int scarlett2_direct_monitor_ctl_put(
5750         struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
5751 {
5752         struct usb_mixer_elem_info *elem = kctl->private_data;
5753         struct usb_mixer_interface *mixer = elem->head.mixer;
5754         struct scarlett2_data *private = mixer->private_data;
5755
5756         int index = elem->control;
5757         int oval, val, err = 0;
5758
5759         mutex_lock(&private->data_mutex);
5760
5761         if (private->hwdep_in_use) {
5762                 err = -EBUSY;
5763                 goto unlock;
5764         }
5765
5766         oval = private->direct_monitor_switch;
5767         val = min(ucontrol->value.enumerated.item[0], 2U);
5768
5769         if (oval == val)
5770                 goto unlock;
5771
5772         private->direct_monitor_switch = val;
5773
5774         /* Send switch change to the device */
5775         err = scarlett2_usb_set_config(
5776                 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val);
5777         if (err == 0)
5778                 err = 1;
5779
5780 unlock:
5781         mutex_unlock(&private->data_mutex);
5782         return err;
5783 }
5784
5785 static int scarlett2_direct_monitor_stereo_enum_ctl_info(
5786         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
5787 {
5788         static const char *const values[3] = {
5789                 "Off", "Mono", "Stereo"
5790         };
5791
5792         return snd_ctl_enum_info(uinfo, 1, 3, values);
5793 }
5794
5795 /* Direct Monitor for Solo is mono-only and only needs a boolean control
5796  * Direct Monitor for 2i2 is selectable between Off/Mono/Stereo
5797  */
5798 static const struct snd_kcontrol_new scarlett2_direct_monitor_ctl[2] = {
5799         {
5800                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5801                 .name = "",
5802                 .info = snd_ctl_boolean_mono_info,
5803                 .get  = scarlett2_direct_monitor_ctl_get,
5804                 .put  = scarlett2_direct_monitor_ctl_put,
5805         },
5806         {
5807                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5808                 .name = "",
5809                 .info = scarlett2_direct_monitor_stereo_enum_ctl_info,
5810                 .get  = scarlett2_direct_monitor_ctl_get,
5811                 .put  = scarlett2_direct_monitor_ctl_put,
5812         }
5813 };
5814
5815 static int scarlett2_monitor_mix_ctl_get(struct snd_kcontrol *kctl,
5816                                          struct snd_ctl_elem_value *ucontrol)
5817 {
5818         struct usb_mixer_elem_info *elem = kctl->private_data;
5819         struct scarlett2_data *private = elem->head.mixer->private_data;
5820
5821         ucontrol->value.integer.value[0] = private->monitor_mix[elem->control];
5822
5823         return 0;
5824 }
5825
5826 static int scarlett2_monitor_mix_ctl_put(struct snd_kcontrol *kctl,
5827                                          struct snd_ctl_elem_value *ucontrol)
5828 {
5829         struct usb_mixer_elem_info *elem = kctl->private_data;
5830         struct usb_mixer_interface *mixer = elem->head.mixer;
5831         struct scarlett2_data *private = mixer->private_data;
5832         int oval, val, err = 0;
5833         int index = elem->control;
5834
5835         mutex_lock(&private->data_mutex);
5836
5837         if (private->hwdep_in_use) {
5838                 err = -EBUSY;
5839                 goto unlock;
5840         }
5841
5842         oval = private->monitor_mix[index];
5843         val = clamp(ucontrol->value.integer.value[0],
5844                     0L, (long)SCARLETT2_MIXER_MAX_VALUE);
5845
5846         if (oval == val)
5847                 goto unlock;
5848
5849         private->monitor_mix[index] = val;
5850         err = scarlett2_usb_set_config(
5851                 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR_GAIN,
5852                 index, scarlett2_mixer_values[val]);
5853         if (err == 0)
5854                 err = 1;
5855
5856 unlock:
5857         mutex_unlock(&private->data_mutex);
5858         return err;
5859 }
5860
5861 static const struct snd_kcontrol_new scarlett2_monitor_mix_ctl = {
5862         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
5863         .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
5864                   SNDRV_CTL_ELEM_ACCESS_TLV_READ,
5865         .name = "",
5866         .info = scarlett2_mixer_ctl_info,
5867         .get  = scarlett2_monitor_mix_ctl_get,
5868         .put  = scarlett2_monitor_mix_ctl_put,
5869         .private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
5870         .tlv = { .p = db_scale_scarlett2_mixer }
5871 };
5872
5873 static int scarlett2_add_direct_monitor_ctls(struct usb_mixer_interface *mixer)
5874 {
5875         struct scarlett2_data *private = mixer->private_data;
5876         const struct scarlett2_device_info *info = private->info;
5877         const char *s;
5878         int err, i, j, k, index;
5879
5880         if (!info->direct_monitor)
5881                 return 0;
5882
5883         s = info->direct_monitor == 1
5884               ? "Direct Monitor Playback Switch"
5885               : "Direct Monitor Playback Enum";
5886
5887         err = scarlett2_add_new_ctl(
5888                 mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1],
5889                 0, 1, s, &private->direct_monitor_ctl);
5890         if (err < 0)
5891                 return err;
5892
5893         if (!private->num_monitor_mix_ctls)
5894                 return 0;
5895
5896         /* 1 or 2 direct monitor selections (Mono & Stereo) */
5897         for (i = 0, index = 0; i < info->direct_monitor; i++) {
5898                 const char * const format =
5899                         "Monitor %sMix %c Input %02d Playback Volume";
5900                 const char *mix_type;
5901
5902                 if (info->direct_monitor == 1)
5903                         mix_type = "";
5904                 else if (i == 0)
5905                         mix_type = "1 ";
5906                 else
5907                         mix_type = "2 ";
5908
5909                 /* 2 Mix outputs, A/Left & B/Right */
5910                 for (j = 0; j < 2; j++)
5911
5912                         /* Mix inputs */
5913                         for (k = 0; k < private->num_mix_in; k++, index++) {
5914                                 char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
5915
5916                                 scnprintf(name, sizeof(name), format,
5917                                           mix_type, 'A' + j, k + 1);
5918
5919                                 err = scarlett2_add_new_ctl(
5920                                         mixer, &scarlett2_monitor_mix_ctl,
5921                                         index, 1, name, NULL);
5922                                 if (err < 0)
5923                                         return err;
5924                         }
5925         }
5926
5927         return 0;
5928 }
5929
5930 /*** Mux Source Selection Controls ***/
5931
5932 static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
5933                                            struct snd_ctl_elem_info *uinfo)
5934 {
5935         struct usb_mixer_elem_info *elem = kctl->private_data;
5936         struct scarlett2_data *private = elem->head.mixer->private_data;
5937         const struct scarlett2_device_info *info = private->info;
5938         const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
5939         unsigned int item = uinfo->value.enumerated.item;
5940         int items = private->num_mux_srcs;
5941         int port_type;
5942
5943         uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
5944         uinfo->count = elem->channels;
5945         uinfo->value.enumerated.items = items;
5946
5947         if (item >= items)
5948                 item = uinfo->value.enumerated.item = items - 1;
5949
5950         for (port_type = 0;
5951              port_type < SCARLETT2_PORT_TYPE_COUNT;
5952              port_type++) {
5953                 if (item < port_count[port_type][SCARLETT2_PORT_IN]) {
5954                         const struct scarlett2_port *port =
5955                                 &scarlett2_ports[port_type];
5956
5957                         if (port_type == SCARLETT2_PORT_TYPE_MIX &&
5958                             item >= private->num_mix_out)
5959                                 sprintf(uinfo->value.enumerated.name,
5960                                         port->dsp_src_descr,
5961                                         item - private->num_mix_out + 1);
5962                         else
5963                                 sprintf(uinfo->value.enumerated.name,
5964                                         port->src_descr,
5965                                         item + port->src_num_offset);
5966
5967                         return 0;
5968                 }
5969                 item -= port_count[port_type][SCARLETT2_PORT_IN];
5970         }
5971
5972         return -EINVAL;
5973 }
5974
5975 static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
5976                                           struct snd_ctl_elem_value *ucontrol)
5977 {
5978         struct usb_mixer_elem_info *elem = kctl->private_data;
5979         struct usb_mixer_interface *mixer = elem->head.mixer;
5980         struct scarlett2_data *private = mixer->private_data;
5981         int index = line_out_remap(private, elem->control);
5982         int err = 0;
5983
5984         mutex_lock(&private->data_mutex);
5985
5986         if (private->hwdep_in_use) {
5987                 err = -EBUSY;
5988                 goto unlock;
5989         }
5990
5991         if (private->mux_updated) {
5992                 err = scarlett2_usb_get_mux(mixer);
5993                 if (err < 0)
5994                         goto unlock;
5995         }
5996         ucontrol->value.enumerated.item[0] = private->mux[index];
5997
5998 unlock:
5999         mutex_unlock(&private->data_mutex);
6000         return err;
6001 }
6002
6003 static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
6004                                           struct snd_ctl_elem_value *ucontrol)
6005 {
6006         struct usb_mixer_elem_info *elem = kctl->private_data;
6007         struct usb_mixer_interface *mixer = elem->head.mixer;
6008         struct scarlett2_data *private = mixer->private_data;
6009         int index = line_out_remap(private, elem->control);
6010         int oval, val, err = 0;
6011
6012         mutex_lock(&private->data_mutex);
6013
6014         if (private->hwdep_in_use) {
6015                 err = -EBUSY;
6016                 goto unlock;
6017         }
6018
6019         oval = private->mux[index];
6020         val = min(ucontrol->value.enumerated.item[0],
6021                   private->num_mux_srcs - 1U);
6022
6023         if (oval == val)
6024                 goto unlock;
6025
6026         private->mux[index] = val;
6027         err = scarlett2_usb_set_mux(mixer);
6028         if (err == 0)
6029                 err = 1;
6030
6031 unlock:
6032         mutex_unlock(&private->data_mutex);
6033         return err;
6034 }
6035
6036 static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
6037         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
6038         .name = "",
6039         .info = scarlett2_mux_src_enum_ctl_info,
6040         .get  = scarlett2_mux_src_enum_ctl_get,
6041         .put  = scarlett2_mux_src_enum_ctl_put,
6042 };
6043
6044 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
6045 {
6046         struct scarlett2_data *private = mixer->private_data;
6047         const struct scarlett2_device_info *info = private->info;
6048         const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
6049         int port_type, channel, i;
6050
6051         for (i = 0, port_type = 0;
6052              port_type < SCARLETT2_PORT_TYPE_COUNT;
6053              port_type++) {
6054                 for (channel = 0;
6055                      channel < port_count[port_type][SCARLETT2_PORT_OUT];
6056                      channel++, i++) {
6057                         int err;
6058                         char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
6059                         int channel_num = channel + 1;
6060                         const struct scarlett2_port *port =
6061                                 &scarlett2_ports[port_type];
6062                         const char *descr = port->dst_descr;
6063
6064                         if (port_type == SCARLETT2_PORT_TYPE_MIX &&
6065                             channel >= private->num_mix_in) {
6066                                 channel_num -= private->num_mix_in;
6067                                 descr = port->dsp_dst_descr;
6068                         }
6069
6070                         snprintf(s, sizeof(s) - 5, descr, channel_num);
6071                         strcat(s, " Enum");
6072
6073                         err = scarlett2_add_new_ctl(mixer,
6074                                                     &scarlett2_mux_src_enum_ctl,
6075                                                     i, 1, s,
6076                                                     &private->mux_ctls[i]);
6077                         if (err < 0)
6078                                 return err;
6079                 }
6080         }
6081
6082         return 0;
6083 }
6084
6085 /*** Meter Controls ***/
6086
6087 static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
6088                                     struct snd_ctl_elem_info *uinfo)
6089 {
6090         struct usb_mixer_elem_info *elem = kctl->private_data;
6091
6092         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
6093         uinfo->count = elem->channels;
6094         uinfo->value.integer.min = 0;
6095         uinfo->value.integer.max = 4095;
6096         uinfo->value.integer.step = 1;
6097         return 0;
6098 }
6099
6100 static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
6101                                    struct snd_ctl_elem_value *ucontrol)
6102 {
6103         struct usb_mixer_elem_info *elem = kctl->private_data;
6104         struct usb_mixer_interface *mixer = elem->head.mixer;
6105         struct scarlett2_data *private = mixer->private_data;
6106         u8 *meter_level_map = private->meter_level_map;
6107         u16 meter_levels[SCARLETT2_MAX_METERS];
6108         int i, err;
6109
6110         mutex_lock(&private->data_mutex);
6111
6112         if (private->hwdep_in_use) {
6113                 err = -EBUSY;
6114                 goto unlock;
6115         }
6116
6117         err = scarlett2_usb_get_meter_levels(mixer, elem->channels,
6118                                              meter_levels);
6119         if (err < 0)
6120                 goto unlock;
6121
6122         /* copy & translate from meter_levels[] using meter_level_map[] */
6123         for (i = 0; i < elem->channels; i++) {
6124                 int idx = meter_level_map[i];
6125                 int value;
6126
6127                 if (idx == 255)
6128                         value = 0;
6129                 else
6130                         value = meter_levels[idx];
6131
6132                 ucontrol->value.integer.value[i] = value;
6133         }
6134
6135 unlock:
6136         mutex_unlock(&private->data_mutex);
6137
6138         return err;
6139 }
6140
6141 static const struct snd_kcontrol_new scarlett2_meter_ctl = {
6142         .iface = SNDRV_CTL_ELEM_IFACE_PCM,
6143         .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
6144         .name = "",
6145         .info = scarlett2_meter_ctl_info,
6146         .get  = scarlett2_meter_ctl_get
6147 };
6148
6149 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
6150 {
6151         struct scarlett2_data *private = mixer->private_data;
6152
6153         /* devices without a mixer also don't support reporting levels */
6154         if (!scarlett2_has_mixer(private))
6155                 return 0;
6156
6157         return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
6158                                      0, private->num_mux_dsts,
6159                                      "Level Meter", NULL);
6160 }
6161
6162 /*** MSD Controls ***/
6163
6164 static int scarlett2_msd_ctl_get(struct snd_kcontrol *kctl,
6165                                  struct snd_ctl_elem_value *ucontrol)
6166 {
6167         struct usb_mixer_elem_info *elem = kctl->private_data;
6168         struct scarlett2_data *private = elem->head.mixer->private_data;
6169
6170         ucontrol->value.integer.value[0] = private->msd_switch;
6171         return 0;
6172 }
6173
6174 static int scarlett2_msd_ctl_put(struct snd_kcontrol *kctl,
6175                                  struct snd_ctl_elem_value *ucontrol)
6176 {
6177         struct usb_mixer_elem_info *elem = kctl->private_data;
6178         struct usb_mixer_interface *mixer = elem->head.mixer;
6179         struct scarlett2_data *private = mixer->private_data;
6180
6181         int oval, val, err = 0;
6182
6183         mutex_lock(&private->data_mutex);
6184
6185         if (private->hwdep_in_use) {
6186                 err = -EBUSY;
6187                 goto unlock;
6188         }
6189
6190         oval = private->msd_switch;
6191         val = !!ucontrol->value.integer.value[0];
6192
6193         if (oval == val)
6194                 goto unlock;
6195
6196         private->msd_switch = val;
6197
6198         /* Send switch change to the device */
6199         err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH,
6200                                        0, val);
6201         if (err == 0)
6202                 err = 1;
6203
6204 unlock:
6205         mutex_unlock(&private->data_mutex);
6206         return err;
6207 }
6208
6209 static const struct snd_kcontrol_new scarlett2_msd_ctl = {
6210         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
6211         .name = "",
6212         .info = snd_ctl_boolean_mono_info,
6213         .get  = scarlett2_msd_ctl_get,
6214         .put  = scarlett2_msd_ctl_put,
6215 };
6216
6217 static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer)
6218 {
6219         struct scarlett2_data *private = mixer->private_data;
6220
6221         if (!scarlett2_has_config_item(private, SCARLETT2_CONFIG_MSD_SWITCH))
6222                 return 0;
6223
6224         /* If MSD mode is off, hide the switch by default */
6225         if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE))
6226                 return 0;
6227
6228         /* Add MSD control */
6229         return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl,
6230                                      0, 1, "MSD Mode Switch", NULL);
6231 }
6232
6233 /*** Standalone Control ***/
6234
6235 static int scarlett2_standalone_ctl_get(struct snd_kcontrol *kctl,
6236                                         struct snd_ctl_elem_value *ucontrol)
6237 {
6238         struct usb_mixer_elem_info *elem = kctl->private_data;
6239         struct scarlett2_data *private = elem->head.mixer->private_data;
6240
6241         ucontrol->value.integer.value[0] = private->standalone_switch;
6242         return 0;
6243 }
6244
6245 static int scarlett2_standalone_ctl_put(struct snd_kcontrol *kctl,
6246                                         struct snd_ctl_elem_value *ucontrol)
6247 {
6248         struct usb_mixer_elem_info *elem = kctl->private_data;
6249         struct usb_mixer_interface *mixer = elem->head.mixer;
6250         struct scarlett2_data *private = mixer->private_data;
6251
6252         int oval, val, err = 0;
6253
6254         mutex_lock(&private->data_mutex);
6255
6256         if (private->hwdep_in_use) {
6257                 err = -EBUSY;
6258                 goto unlock;
6259         }
6260
6261         oval = private->standalone_switch;
6262         val = !!ucontrol->value.integer.value[0];
6263
6264         if (oval == val)
6265                 goto unlock;
6266
6267         private->standalone_switch = val;
6268
6269         /* Send switch change to the device */
6270         err = scarlett2_usb_set_config(mixer,
6271                                        SCARLETT2_CONFIG_STANDALONE_SWITCH,
6272                                        0, val);
6273         if (err == 0)
6274                 err = 1;
6275
6276 unlock:
6277         mutex_unlock(&private->data_mutex);
6278         return err;
6279 }
6280
6281 static const struct snd_kcontrol_new scarlett2_standalone_ctl = {
6282         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
6283         .name = "",
6284         .info = snd_ctl_boolean_mono_info,
6285         .get  = scarlett2_standalone_ctl_get,
6286         .put  = scarlett2_standalone_ctl_put,
6287 };
6288
6289 static int scarlett2_add_standalone_ctl(struct usb_mixer_interface *mixer)
6290 {
6291         struct scarlett2_data *private = mixer->private_data;
6292
6293         if (!scarlett2_has_config_item(private,
6294                                        SCARLETT2_CONFIG_STANDALONE_SWITCH))
6295                 return 0;
6296
6297         /* Add standalone control */
6298         return scarlett2_add_new_ctl(mixer, &scarlett2_standalone_ctl,
6299                                      0, 1, "Standalone Switch", NULL);
6300 }
6301
6302 /*** Power Status ***/
6303
6304 static int scarlett2_update_power_status(struct usb_mixer_interface *mixer)
6305 {
6306         struct scarlett2_data *private = mixer->private_data;
6307         int err;
6308         u8 power_ext, power_low;
6309
6310         private->power_status_updated = 0;
6311
6312         err = scarlett2_usb_get_config(mixer, SCARLETT2_CONFIG_POWER_EXT,
6313                                        1, &power_ext);
6314         if (err < 0)
6315                 return err;
6316
6317         err = scarlett2_usb_get_config(mixer, SCARLETT2_CONFIG_POWER_LOW,
6318                                        1, &power_low);
6319         if (err < 0)
6320                 return err;
6321
6322         if (power_low)
6323                 private->power_status = SCARLETT2_POWER_STATUS_FAIL;
6324         else if (power_ext)
6325                 private->power_status = SCARLETT2_POWER_STATUS_EXT;
6326         else
6327                 private->power_status = SCARLETT2_POWER_STATUS_BUS;
6328
6329         return 0;
6330 }
6331
6332 static int scarlett2_power_status_ctl_get(struct snd_kcontrol *kctl,
6333                                           struct snd_ctl_elem_value *ucontrol)
6334 {
6335         struct usb_mixer_elem_info *elem = kctl->private_data;
6336         struct usb_mixer_interface *mixer = elem->head.mixer;
6337         struct scarlett2_data *private = mixer->private_data;
6338         int err = 0;
6339
6340         mutex_lock(&private->data_mutex);
6341
6342         if (private->power_status_updated) {
6343                 err = scarlett2_update_power_status(mixer);
6344                 if (err < 0)
6345                         goto unlock;
6346         }
6347         ucontrol->value.integer.value[0] = private->power_status;
6348
6349 unlock:
6350         mutex_unlock(&private->data_mutex);
6351         return err;
6352 }
6353
6354 static int scarlett2_power_status_ctl_info(
6355         struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
6356 {
6357         static const char *const values[3] = {
6358                 "External", "Bus", "Fail"
6359         };
6360
6361         return snd_ctl_enum_info(uinfo, 1, 3, values);
6362 }
6363
6364 static const struct snd_kcontrol_new scarlett2_power_status_ctl = {
6365         .iface = SNDRV_CTL_ELEM_IFACE_CARD,
6366         .access = SNDRV_CTL_ELEM_ACCESS_READ,
6367         .name = "",
6368         .info = scarlett2_power_status_ctl_info,
6369         .get  = scarlett2_power_status_ctl_get,
6370 };
6371
6372 static int scarlett2_add_power_status_ctl(struct usb_mixer_interface *mixer)
6373 {
6374         struct scarlett2_data *private = mixer->private_data;
6375
6376         if (!scarlett2_has_config_item(private,
6377                                        SCARLETT2_CONFIG_POWER_EXT))
6378                 return 0;
6379
6380         /* Add power status control */
6381         return scarlett2_add_new_ctl(mixer, &scarlett2_power_status_ctl,
6382                                      0, 1, "Power Status Card Enum",
6383                                      &private->power_status_ctl);
6384 }
6385
6386 /*** Cleanup/Suspend Callbacks ***/
6387
6388 static void scarlett2_private_free(struct usb_mixer_interface *mixer)
6389 {
6390         struct scarlett2_data *private = mixer->private_data;
6391
6392         cancel_delayed_work_sync(&private->work);
6393         kfree(private);
6394         mixer->private_data = NULL;
6395 }
6396
6397 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
6398 {
6399         struct scarlett2_data *private = mixer->private_data;
6400
6401         if (cancel_delayed_work_sync(&private->work))
6402                 scarlett2_config_save(private->mixer);
6403 }
6404
6405 /*** Initialisation ***/
6406
6407 static void scarlett2_count_io(struct scarlett2_data *private)
6408 {
6409         const struct scarlett2_device_info *info = private->info;
6410         const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
6411         int port_type, srcs = 0, dsts = 0;
6412
6413         /* Count the number of mux sources and destinations */
6414         for (port_type = 0;
6415              port_type < SCARLETT2_PORT_TYPE_COUNT;
6416              port_type++) {
6417                 srcs += port_count[port_type][SCARLETT2_PORT_IN];
6418                 dsts += port_count[port_type][SCARLETT2_PORT_OUT];
6419         }
6420
6421         private->num_mux_srcs = srcs;
6422         private->num_mux_dsts = dsts;
6423
6424         /* Mixer inputs are mux outputs and vice versa.
6425          * Scarlett Gen 4 DSP I/O uses SCARLETT2_PORT_TYPE_MIX but
6426          * doesn't have mixer controls.
6427          */
6428         private->num_mix_in =
6429                 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT] -
6430                         info->dsp_count;
6431
6432         private->num_mix_out =
6433                 port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN] -
6434                         info->dsp_count;
6435
6436         /* Number of analogue line outputs */
6437         private->num_line_out =
6438                 port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
6439
6440         /* Number of monitor mix controls */
6441         private->num_monitor_mix_ctls =
6442                 info->direct_monitor * 2 * private->num_mix_in;
6443 }
6444
6445 /* Look through the interface descriptors for the Focusrite Control
6446  * interface (bInterfaceClass = 255 Vendor Specific Class) and set
6447  * bInterfaceNumber, bEndpointAddress, wMaxPacketSize, and bInterval
6448  * in private
6449  */
6450 static int scarlett2_find_fc_interface(struct usb_device *dev,
6451                                        struct scarlett2_data *private)
6452 {
6453         struct usb_host_config *config = dev->actconfig;
6454         int i;
6455
6456         for (i = 0; i < config->desc.bNumInterfaces; i++) {
6457                 struct usb_interface *intf = config->interface[i];
6458                 struct usb_interface_descriptor *desc =
6459                         &intf->altsetting[0].desc;
6460                 struct usb_endpoint_descriptor *epd;
6461
6462                 if (desc->bInterfaceClass != 255)
6463                         continue;
6464
6465                 epd = get_endpoint(intf->altsetting, 0);
6466                 private->bInterfaceNumber = desc->bInterfaceNumber;
6467                 private->bEndpointAddress = epd->bEndpointAddress &
6468                         USB_ENDPOINT_NUMBER_MASK;
6469                 private->wMaxPacketSize = le16_to_cpu(epd->wMaxPacketSize);
6470                 private->bInterval = epd->bInterval;
6471                 return 0;
6472         }
6473
6474         return -EINVAL;
6475 }
6476
6477 /* Initialise private data */
6478 static int scarlett2_init_private(struct usb_mixer_interface *mixer,
6479                                   const struct scarlett2_device_entry *entry)
6480 {
6481         struct scarlett2_data *private =
6482                 kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
6483
6484         if (!private)
6485                 return -ENOMEM;
6486
6487         mutex_init(&private->usb_mutex);
6488         mutex_init(&private->data_mutex);
6489         INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
6490
6491         mixer->private_data = private;
6492         mixer->private_free = scarlett2_private_free;
6493         mixer->private_suspend = scarlett2_private_suspend;
6494
6495         private->info = entry->info;
6496         private->config_set = entry->info->config_set;
6497         private->series_name = entry->series_name;
6498         scarlett2_count_io(private);
6499         private->scarlett2_seq = 0;
6500         private->mixer = mixer;
6501
6502         return scarlett2_find_fc_interface(mixer->chip->dev, private);
6503 }
6504
6505 /* Cargo cult proprietary initialisation sequence */
6506 static int scarlett2_usb_init(struct usb_mixer_interface *mixer)
6507 {
6508         struct usb_device *dev = mixer->chip->dev;
6509         struct scarlett2_data *private = mixer->private_data;
6510         u8 step0_buf[24];
6511         u8 step2_buf[84];
6512         int err;
6513
6514         if (usb_pipe_type_check(dev, usb_sndctrlpipe(dev, 0)))
6515                 return -EINVAL;
6516
6517         /* step 0 */
6518         err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
6519                                SCARLETT2_USB_CMD_INIT,
6520                                step0_buf, sizeof(step0_buf));
6521         if (err < 0)
6522                 return err;
6523
6524         /* step 1 */
6525         private->scarlett2_seq = 1;
6526         err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0);
6527         if (err < 0)
6528                 return err;
6529
6530         /* step 2 */
6531         private->scarlett2_seq = 1;
6532         err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_2,
6533                             NULL, 0,
6534                             step2_buf, sizeof(step2_buf));
6535         if (err < 0)
6536                 return err;
6537
6538         /* extract 4-byte firmware version from step2_buf[8] */
6539         private->firmware_version = le32_to_cpu(*(__le32 *)(step2_buf + 8));
6540         usb_audio_info(mixer->chip,
6541                        "Firmware version %d\n",
6542                        private->firmware_version);
6543
6544         return 0;
6545 }
6546
6547 /* Get the flash segment numbers for the App_Settings and App_Upgrade
6548  * segments and put them in the private data
6549  */
6550 static int scarlett2_get_flash_segment_nums(struct usb_mixer_interface *mixer)
6551 {
6552         struct scarlett2_data *private = mixer->private_data;
6553         int err, count, i;
6554
6555         struct {
6556                 __le32 size;
6557                 __le32 count;
6558                 u8 unknown[8];
6559         } __packed flash_info;
6560
6561         struct {
6562                 __le32 size;
6563                 __le32 flags;
6564                 char name[16];
6565         } __packed segment_info;
6566
6567         err = scarlett2_usb(mixer, SCARLETT2_USB_INFO_FLASH,
6568                             NULL, 0,
6569                             &flash_info, sizeof(flash_info));
6570         if (err < 0)
6571                 return err;
6572
6573         count = le32_to_cpu(flash_info.count);
6574
6575         /* sanity check count */
6576         if (count < SCARLETT2_SEGMENT_NUM_MIN ||
6577             count > SCARLETT2_SEGMENT_NUM_MAX + 1) {
6578                 usb_audio_err(mixer->chip,
6579                               "invalid flash segment count: %d\n", count);
6580                 return -EINVAL;
6581         }
6582
6583         for (i = 0; i < count; i++) {
6584                 __le32 segment_num_req = cpu_to_le32(i);
6585                 int flash_segment_id;
6586
6587                 err = scarlett2_usb(mixer, SCARLETT2_USB_INFO_SEGMENT,
6588                                     &segment_num_req, sizeof(segment_num_req),
6589                                     &segment_info, sizeof(segment_info));
6590                 if (err < 0) {
6591                         usb_audio_err(mixer->chip,
6592                                 "failed to get flash segment info %d: %d\n",
6593                                 i, err);
6594                         return err;
6595                 }
6596
6597                 if (!strncmp(segment_info.name,
6598                              SCARLETT2_SEGMENT_SETTINGS_NAME, 16))
6599                         flash_segment_id = SCARLETT2_SEGMENT_ID_SETTINGS;
6600                 else if (!strncmp(segment_info.name,
6601                                   SCARLETT2_SEGMENT_FIRMWARE_NAME, 16))
6602                         flash_segment_id = SCARLETT2_SEGMENT_ID_FIRMWARE;
6603                 else
6604                         continue;
6605
6606                 private->flash_segment_nums[flash_segment_id] = i;
6607                 private->flash_segment_blocks[flash_segment_id] =
6608                         le32_to_cpu(segment_info.size) /
6609                                 SCARLETT2_FLASH_BLOCK_SIZE;
6610         }
6611
6612         /* segment 0 is App_Gold and we never want to touch that, so
6613          * use 0 as the "not-found" value
6614          */
6615         if (!private->flash_segment_nums[SCARLETT2_SEGMENT_ID_SETTINGS]) {
6616                 usb_audio_err(mixer->chip,
6617                               "failed to find flash segment %s\n",
6618                               SCARLETT2_SEGMENT_SETTINGS_NAME);
6619                 return -EINVAL;
6620         }
6621         if (!private->flash_segment_nums[SCARLETT2_SEGMENT_ID_FIRMWARE]) {
6622                 usb_audio_err(mixer->chip,
6623                               "failed to find flash segment %s\n",
6624                               SCARLETT2_SEGMENT_FIRMWARE_NAME);
6625                 return -EINVAL;
6626         }
6627
6628         return 0;
6629 }
6630
6631 /* Read configuration from the interface on start */
6632 static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
6633 {
6634         struct scarlett2_data *private = mixer->private_data;
6635         const struct scarlett2_device_info *info = private->info;
6636         int err, i;
6637
6638         if (scarlett2_has_config_item(private, SCARLETT2_CONFIG_MSD_SWITCH)) {
6639                 err = scarlett2_usb_get_config(
6640                         mixer, SCARLETT2_CONFIG_MSD_SWITCH,
6641                         1, &private->msd_switch);
6642                 if (err < 0)
6643                         return err;
6644         }
6645
6646         if (private->firmware_version < info->min_firmware_version) {
6647                 usb_audio_err(mixer->chip,
6648                               "Focusrite %s firmware version %d is too old; "
6649                               "need %d",
6650                               private->series_name,
6651                               private->firmware_version,
6652                               info->min_firmware_version);
6653                 return 0;
6654         }
6655
6656         /* no other controls are created if MSD mode is on */
6657         if (private->msd_switch)
6658                 return 0;
6659
6660         err = scarlett2_update_input_level(mixer);
6661         if (err < 0)
6662                 return err;
6663
6664         err = scarlett2_update_input_pad(mixer);
6665         if (err < 0)
6666                 return err;
6667
6668         err = scarlett2_update_input_air(mixer);
6669         if (err < 0)
6670                 return err;
6671
6672         err = scarlett2_update_input_phantom(mixer);
6673         if (err < 0)
6674                 return err;
6675
6676         err = scarlett2_update_direct_monitor(mixer);
6677         if (err < 0)
6678                 return err;
6679
6680         /* the rest of the configuration is for devices with a mixer */
6681         if (!scarlett2_has_mixer(private))
6682                 return 0;
6683
6684         err = scarlett2_update_monitor_mix(mixer);
6685         if (err < 0)
6686                 return err;
6687
6688         err = scarlett2_update_monitor_other(mixer);
6689         if (err < 0)
6690                 return err;
6691
6692         if (scarlett2_has_config_item(private,
6693                                       SCARLETT2_CONFIG_STANDALONE_SWITCH)) {
6694                 err = scarlett2_usb_get_config(
6695                         mixer, SCARLETT2_CONFIG_STANDALONE_SWITCH,
6696                         1, &private->standalone_switch);
6697                 if (err < 0)
6698                         return err;
6699         }
6700
6701         if (scarlett2_has_config_item(private,
6702                                       SCARLETT2_CONFIG_POWER_EXT)) {
6703                 err = scarlett2_update_power_status(mixer);
6704                 if (err < 0)
6705                         return err;
6706         }
6707
6708         err = scarlett2_update_sync(mixer);
6709         if (err < 0)
6710                 return err;
6711
6712         if (scarlett2_has_config_item(private,
6713                                       SCARLETT2_CONFIG_LINE_OUT_VOLUME)) {
6714                 s16 sw_vol[SCARLETT2_ANALOGUE_MAX];
6715
6716                 /* read SW line out volume */
6717                 err = scarlett2_usb_get_config(
6718                         mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
6719                         private->num_line_out, &sw_vol);
6720                 if (err < 0)
6721                         return err;
6722
6723                 for (i = 0; i < private->num_line_out; i++)
6724                         private->vol[i] = clamp(
6725                                 sw_vol[i] + SCARLETT2_VOLUME_BIAS,
6726                                 0, SCARLETT2_VOLUME_BIAS);
6727
6728                 /* read SW mute */
6729                 err = scarlett2_usb_get_config(
6730                         mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
6731                         private->num_line_out, &private->mute_switch);
6732                 if (err < 0)
6733                         return err;
6734
6735                 for (i = 0; i < private->num_line_out; i++)
6736                         private->mute_switch[i] =
6737                                 !!private->mute_switch[i];
6738
6739                 /* read SW/HW switches */
6740                 if (scarlett2_has_config_item(private,
6741                                               SCARLETT2_CONFIG_SW_HW_SWITCH)) {
6742                         err = scarlett2_usb_get_config(
6743                                 mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
6744                                 private->num_line_out,
6745                                 &private->vol_sw_hw_switch);
6746                         if (err < 0)
6747                                 return err;
6748
6749                         for (i = 0; i < private->num_line_out; i++)
6750                                 private->vol_sw_hw_switch[i] =
6751                                         !!private->vol_sw_hw_switch[i];
6752                 }
6753         }
6754
6755         err = scarlett2_update_volumes(mixer);
6756         if (err < 0)
6757                 return err;
6758
6759         err = scarlett2_update_dim_mute(mixer);
6760         if (err < 0)
6761                 return err;
6762
6763         err = scarlett2_update_input_select(mixer);
6764         if (err < 0)
6765                 return err;
6766
6767         err = scarlett2_update_input_gain(mixer);
6768         if (err < 0)
6769                 return err;
6770
6771         err = scarlett2_update_autogain(mixer);
6772         if (err < 0)
6773                 return err;
6774
6775         err = scarlett2_update_input_safe(mixer);
6776         if (err < 0)
6777                 return err;
6778
6779         if (scarlett2_has_config_item(private,
6780                                       SCARLETT2_CONFIG_PCM_INPUT_SWITCH)) {
6781                 err = scarlett2_update_pcm_input_switch(mixer);
6782                 if (err < 0)
6783                         return err;
6784         }
6785
6786         err = scarlett2_update_mix(mixer);
6787         if (err < 0)
6788                 return err;
6789
6790         return scarlett2_usb_get_mux(mixer);
6791 }
6792
6793 /* Notify on sync change */
6794 static void scarlett2_notify_sync(struct usb_mixer_interface *mixer)
6795 {
6796         struct scarlett2_data *private = mixer->private_data;
6797
6798         private->sync_updated = 1;
6799
6800         snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
6801                        &private->sync_ctl->id);
6802 }
6803
6804 /* Notify on monitor change (Gen 2/3) */
6805 static void scarlett2_notify_monitor(struct usb_mixer_interface *mixer)
6806 {
6807         struct snd_card *card = mixer->chip->card;
6808         struct scarlett2_data *private = mixer->private_data;
6809         int i;
6810
6811         if (!scarlett2_has_config_item(private, SCARLETT2_CONFIG_SW_HW_SWITCH))
6812                 return;
6813
6814         private->vol_updated = 1;
6815
6816         snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
6817                        &private->master_vol_ctl->id);
6818
6819         for (i = 0; i < private->num_line_out; i++)
6820                 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
6821                         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6822                                        &private->vol_ctls[i]->id);
6823 }
6824
6825 /* Notify on volume change (Gen 4) */
6826 static void scarlett2_notify_volume(struct usb_mixer_interface *mixer)
6827 {
6828         struct scarlett2_data *private = mixer->private_data;
6829
6830         private->vol_updated = 1;
6831
6832         snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
6833                        &private->master_vol_ctl->id);
6834         snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
6835                        &private->headphone_vol_ctl->id);
6836 }
6837
6838 /* Notify on dim/mute change */
6839 static void scarlett2_notify_dim_mute(struct usb_mixer_interface *mixer)
6840 {
6841         struct snd_card *card = mixer->chip->card;
6842         struct scarlett2_data *private = mixer->private_data;
6843         int i;
6844
6845         if (!scarlett2_has_config_item(private, SCARLETT2_CONFIG_SW_HW_SWITCH))
6846                 return;
6847
6848         private->dim_mute_updated = 1;
6849
6850         for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
6851                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6852                                &private->dim_mute_ctls[i]->id);
6853
6854         for (i = 0; i < private->num_line_out; i++)
6855                 if (private->vol_sw_hw_switch[line_out_remap(private, i)])
6856                         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6857                                        &private->mute_ctls[i]->id);
6858 }
6859
6860 /* Notify on input level switch change */
6861 static void scarlett2_notify_input_level(struct usb_mixer_interface *mixer)
6862 {
6863         struct snd_card *card = mixer->chip->card;
6864         struct scarlett2_data *private = mixer->private_data;
6865         const struct scarlett2_device_info *info = private->info;
6866         int i;
6867
6868         private->input_level_updated = 1;
6869
6870         for (i = 0; i < info->level_input_count; i++)
6871                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6872                                &private->level_ctls[i]->id);
6873 }
6874
6875 /* Notify on input pad switch change */
6876 static void scarlett2_notify_input_pad(struct usb_mixer_interface *mixer)
6877 {
6878         struct snd_card *card = mixer->chip->card;
6879         struct scarlett2_data *private = mixer->private_data;
6880         const struct scarlett2_device_info *info = private->info;
6881         int i;
6882
6883         private->input_pad_updated = 1;
6884
6885         for (i = 0; i < info->pad_input_count; i++)
6886                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6887                                &private->pad_ctls[i]->id);
6888 }
6889
6890 /* Notify on input air switch change */
6891 static void scarlett2_notify_input_air(struct usb_mixer_interface *mixer)
6892 {
6893         struct snd_card *card = mixer->chip->card;
6894         struct scarlett2_data *private = mixer->private_data;
6895         const struct scarlett2_device_info *info = private->info;
6896         int i;
6897
6898         private->input_air_updated = 1;
6899
6900         for (i = 0; i < info->air_input_count; i++)
6901                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6902                                &private->air_ctls[i]->id);
6903 }
6904
6905 /* Notify on input phantom switch change */
6906 static void scarlett2_notify_input_phantom(struct usb_mixer_interface *mixer)
6907 {
6908         struct snd_card *card = mixer->chip->card;
6909         struct scarlett2_data *private = mixer->private_data;
6910         const struct scarlett2_device_info *info = private->info;
6911         int i;
6912
6913         private->input_phantom_updated = 1;
6914
6915         for (i = 0; i < info->phantom_count; i++)
6916                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6917                                &private->phantom_ctls[i]->id);
6918
6919         scarlett2_phantom_notify_access(mixer);
6920 }
6921
6922 /* Notify on "input other" change (level/pad/air/phantom) */
6923 static void scarlett2_notify_input_other(struct usb_mixer_interface *mixer)
6924 {
6925         scarlett2_notify_input_level(mixer);
6926         scarlett2_notify_input_pad(mixer);
6927         scarlett2_notify_input_air(mixer);
6928         scarlett2_notify_input_phantom(mixer);
6929 }
6930
6931 /* Notify on input select change */
6932 static void scarlett2_notify_input_select(struct usb_mixer_interface *mixer)
6933 {
6934         struct snd_card *card = mixer->chip->card;
6935         struct scarlett2_data *private = mixer->private_data;
6936         const struct scarlett2_device_info *info = private->info;
6937         int i;
6938
6939         if (!info->gain_input_count)
6940                 return;
6941
6942         private->input_select_updated = 1;
6943
6944         snd_ctl_notify(card,
6945                        SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
6946                        &private->input_select_ctl->id);
6947
6948         for (i = 0; i < info->gain_input_count / 2; i++)
6949                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6950                                &private->input_link_ctls[i]->id);
6951 }
6952
6953 /* Notify on input gain change */
6954 static void scarlett2_notify_input_gain(struct usb_mixer_interface *mixer)
6955 {
6956         struct snd_card *card = mixer->chip->card;
6957         struct scarlett2_data *private = mixer->private_data;
6958         const struct scarlett2_device_info *info = private->info;
6959         int i;
6960
6961         if (!info->gain_input_count)
6962                 return;
6963
6964         private->input_gain_updated = 1;
6965
6966         for (i = 0; i < info->gain_input_count; i++)
6967                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6968                                &private->input_gain_ctls[i]->id);
6969 }
6970
6971 /* Notify on autogain change */
6972 static void scarlett2_notify_autogain(struct usb_mixer_interface *mixer)
6973 {
6974         struct snd_card *card = mixer->chip->card;
6975         struct scarlett2_data *private = mixer->private_data;
6976         const struct scarlett2_device_info *info = private->info;
6977         int i;
6978
6979         if (!info->gain_input_count)
6980                 return;
6981
6982         private->autogain_updated = 1;
6983
6984         for (i = 0; i < info->gain_input_count; i++) {
6985                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6986                                &private->autogain_ctls[i]->id);
6987                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
6988                                &private->autogain_status_ctls[i]->id);
6989         }
6990
6991         scarlett2_autogain_notify_access(mixer);
6992 }
6993
6994 /* Notify on input safe switch change */
6995 static void scarlett2_notify_input_safe(struct usb_mixer_interface *mixer)
6996 {
6997         struct snd_card *card = mixer->chip->card;
6998         struct scarlett2_data *private = mixer->private_data;
6999         const struct scarlett2_device_info *info = private->info;
7000         int i;
7001
7002         if (!info->gain_input_count)
7003                 return;
7004
7005         private->input_safe_updated = 1;
7006
7007         for (i = 0; i < info->gain_input_count; i++)
7008                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7009                                &private->safe_ctls[i]->id);
7010 }
7011
7012 /* Notify on "monitor other" change (speaker switching, talkback) */
7013 static void scarlett2_notify_monitor_other(struct usb_mixer_interface *mixer)
7014 {
7015         struct snd_card *card = mixer->chip->card;
7016         struct scarlett2_data *private = mixer->private_data;
7017         const struct scarlett2_device_info *info = private->info;
7018
7019         private->monitor_other_updated = 1;
7020
7021         if (info->has_speaker_switching)
7022                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7023                                &private->speaker_switching_ctl->id);
7024
7025         if (info->has_talkback)
7026                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7027                                &private->talkback_ctl->id);
7028
7029         /* if speaker switching was recently enabled or disabled,
7030          * invalidate the dim/mute and mux enum controls
7031          */
7032         if (private->speaker_switching_switched) {
7033                 int i;
7034
7035                 scarlett2_notify_dim_mute(mixer);
7036
7037                 private->speaker_switching_switched = 0;
7038                 private->mux_updated = 1;
7039
7040                 for (i = 0; i < private->num_mux_dsts; i++)
7041                         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7042                                        &private->mux_ctls[i]->id);
7043         }
7044 }
7045
7046 /* Notify on direct monitor switch change */
7047 static void scarlett2_notify_direct_monitor(struct usb_mixer_interface *mixer)
7048 {
7049         struct snd_card *card = mixer->chip->card;
7050         struct scarlett2_data *private = mixer->private_data;
7051         int count = private->num_mix_in * private->num_mix_out;
7052         int i;
7053
7054         private->direct_monitor_updated = 1;
7055
7056         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7057                        &private->direct_monitor_ctl->id);
7058
7059         if (!scarlett2_has_mixer(private))
7060                 return;
7061
7062         private->mix_updated = 1;
7063
7064         /* Notify of change to the mix controls */
7065         for (i = 0; i < count; i++)
7066                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7067                                &private->mix_ctls[i]->id);
7068 }
7069
7070 /* Notify on power change */
7071 static void scarlett2_notify_power_status(struct usb_mixer_interface *mixer)
7072 {
7073         struct snd_card *card = mixer->chip->card;
7074         struct scarlett2_data *private = mixer->private_data;
7075
7076         private->power_status_updated = 1;
7077
7078         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7079                        &private->power_status_ctl->id);
7080 }
7081
7082 /* Notify on mux change */
7083 static void scarlett2_notify_mux(struct usb_mixer_interface *mixer)
7084 {
7085         struct snd_card *card = mixer->chip->card;
7086         struct scarlett2_data *private = mixer->private_data;
7087         int i;
7088
7089         private->mux_updated = 1;
7090
7091         for (i = 0; i < private->num_mux_dsts; i++)
7092                 snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7093                                &private->mux_ctls[i]->id);
7094 }
7095
7096 /* Notify on PCM input switch change */
7097 static void scarlett2_notify_pcm_input_switch(struct usb_mixer_interface *mixer)
7098 {
7099         struct snd_card *card = mixer->chip->card;
7100         struct scarlett2_data *private = mixer->private_data;
7101
7102         private->pcm_input_switch_updated = 1;
7103
7104         snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
7105                        &private->pcm_input_switch_ctl->id);
7106
7107         scarlett2_notify_mux(mixer);
7108 }
7109
7110 /* Interrupt callback */
7111 static void scarlett2_notify(struct urb *urb)
7112 {
7113         struct usb_mixer_interface *mixer = urb->context;
7114         int len = urb->actual_length;
7115         int ustatus = urb->status;
7116         u32 data;
7117         struct scarlett2_data *private = mixer->private_data;
7118         const struct scarlett2_notification *notifications =
7119                 private->config_set->notifications;
7120
7121         if (ustatus != 0 || len != 8)
7122                 goto requeue;
7123
7124         data = le32_to_cpu(*(__le32 *)urb->transfer_buffer);
7125
7126         while (data && notifications->mask) {
7127                 if (data & notifications->mask) {
7128                         data &= ~notifications->mask;
7129                         if (notifications->func)
7130                                 notifications->func(mixer);
7131                 }
7132                 notifications++;
7133         }
7134
7135         if (data)
7136                 usb_audio_warn(mixer->chip,
7137                                "%s: Unhandled notification: 0x%08x\n",
7138                                __func__, data);
7139
7140 requeue:
7141         if (ustatus != -ENOENT &&
7142             ustatus != -ECONNRESET &&
7143             ustatus != -ESHUTDOWN) {
7144                 urb->dev = mixer->chip->dev;
7145                 usb_submit_urb(urb, GFP_ATOMIC);
7146         }
7147 }
7148
7149 static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
7150 {
7151         struct usb_device *dev = mixer->chip->dev;
7152         struct scarlett2_data *private = mixer->private_data;
7153         unsigned int pipe = usb_rcvintpipe(dev, private->bEndpointAddress);
7154         void *transfer_buffer;
7155
7156         if (mixer->urb) {
7157                 usb_audio_err(mixer->chip,
7158                               "%s: mixer urb already in use!\n", __func__);
7159                 return 0;
7160         }
7161
7162         if (usb_pipe_type_check(dev, pipe))
7163                 return -EINVAL;
7164
7165         mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
7166         if (!mixer->urb)
7167                 return -ENOMEM;
7168
7169         transfer_buffer = kmalloc(private->wMaxPacketSize, GFP_KERNEL);
7170         if (!transfer_buffer)
7171                 return -ENOMEM;
7172
7173         usb_fill_int_urb(mixer->urb, dev, pipe,
7174                          transfer_buffer, private->wMaxPacketSize,
7175                          scarlett2_notify, mixer, private->bInterval);
7176
7177         return usb_submit_urb(mixer->urb, GFP_KERNEL);
7178 }
7179
7180 static const struct scarlett2_device_entry *get_scarlett2_device_entry(
7181         struct usb_mixer_interface *mixer)
7182 {
7183         const struct scarlett2_device_entry *entry = scarlett2_devices;
7184
7185         /* Find entry in scarlett2_devices */
7186         while (entry->usb_id && entry->usb_id != mixer->chip->usb_id)
7187                 entry++;
7188         if (!entry->usb_id)
7189                 return NULL;
7190
7191         return entry;
7192 }
7193
7194 static int snd_scarlett2_controls_create(
7195         struct usb_mixer_interface *mixer,
7196         const struct scarlett2_device_entry *entry)
7197 {
7198         struct scarlett2_data *private;
7199         int err;
7200
7201         /* Initialise private data */
7202         err = scarlett2_init_private(mixer, entry);
7203         if (err < 0)
7204                 return err;
7205
7206         private = mixer->private_data;
7207
7208         /* Send proprietary USB initialisation sequence */
7209         err = scarlett2_usb_init(mixer);
7210         if (err < 0)
7211                 return err;
7212
7213         /* Get the upgrade & settings flash segment numbers */
7214         err = scarlett2_get_flash_segment_nums(mixer);
7215         if (err < 0)
7216                 return err;
7217
7218         /* Add firmware version control */
7219         err = scarlett2_add_firmware_version_ctl(mixer);
7220         if (err < 0)
7221                 return err;
7222
7223         /* Add minimum firmware version control */
7224         err = scarlett2_add_min_firmware_version_ctl(mixer);
7225         if (err < 0)
7226                 return err;
7227
7228         /* Read volume levels and controls from the interface */
7229         err = scarlett2_read_configs(mixer);
7230         if (err < 0)
7231                 return err;
7232
7233         /* Create the MSD control */
7234         err = scarlett2_add_msd_ctl(mixer);
7235         if (err < 0)
7236                 return err;
7237
7238         /* If MSD mode is enabled, or if the firmware version is too
7239          * old, don't create any other controls
7240          */
7241         if (private->msd_switch ||
7242             private->firmware_version < private->info->min_firmware_version)
7243                 return 0;
7244
7245         /* Create the analogue output controls */
7246         err = scarlett2_add_line_out_ctls(mixer);
7247         if (err < 0)
7248                 return err;
7249
7250         /* Create the analogue input controls */
7251         err = scarlett2_add_line_in_ctls(mixer);
7252         if (err < 0)
7253                 return err;
7254
7255         /* Create the input, output, and mixer mux input selections */
7256         err = scarlett2_add_mux_enums(mixer);
7257         if (err < 0)
7258                 return err;
7259
7260         /* Create the matrix mixer controls */
7261         err = scarlett2_add_mixer_ctls(mixer);
7262         if (err < 0)
7263                 return err;
7264
7265         /* Create the level meter controls */
7266         err = scarlett2_add_meter_ctl(mixer);
7267         if (err < 0)
7268                 return err;
7269
7270         /* Create the sync control */
7271         err = scarlett2_add_sync_ctl(mixer);
7272         if (err < 0)
7273                 return err;
7274
7275         /* Create the direct monitor control(s) */
7276         err = scarlett2_add_direct_monitor_ctls(mixer);
7277         if (err < 0)
7278                 return err;
7279
7280         /* Create the speaker switching control */
7281         err = scarlett2_add_speaker_switch_ctl(mixer);
7282         if (err < 0)
7283                 return err;
7284
7285         /* Create the talkback controls */
7286         err = scarlett2_add_talkback_ctls(mixer);
7287         if (err < 0)
7288                 return err;
7289
7290         /* Create the standalone control */
7291         err = scarlett2_add_standalone_ctl(mixer);
7292         if (err < 0)
7293                 return err;
7294
7295         /* Create the power status control */
7296         err = scarlett2_add_power_status_ctl(mixer);
7297         if (err < 0)
7298                 return err;
7299
7300         /* Set the access mode of controls disabled during
7301          * autogain/phantom power switching.
7302          */
7303         if (private->info->gain_input_count) {
7304                 scarlett2_autogain_update_access(mixer);
7305                 scarlett2_phantom_update_access(mixer);
7306         }
7307
7308         /* Set up the interrupt polling */
7309         err = scarlett2_init_notify(mixer);
7310         if (err < 0)
7311                 return err;
7312
7313         return 0;
7314 }
7315
7316 /*** hwdep interface ***/
7317
7318 /* Set private->hwdep_in_use; prevents access to the ALSA controls
7319  * while doing a config erase/firmware upgrade.
7320  */
7321 static void scarlett2_lock(struct scarlett2_data *private)
7322 {
7323         mutex_lock(&private->data_mutex);
7324         private->hwdep_in_use = 1;
7325         mutex_unlock(&private->data_mutex);
7326 }
7327
7328 /* Call SCARLETT2_USB_GET_ERASE to get the erase progress */
7329 static int scarlett2_get_erase_progress(struct usb_mixer_interface *mixer)
7330 {
7331         struct scarlett2_data *private = mixer->private_data;
7332         int segment_id, segment_num, err;
7333         u8 erase_resp;
7334
7335         struct {
7336                 __le32 segment_num;
7337                 __le32 pad;
7338         } __packed erase_req;
7339
7340         segment_id = private->selected_flash_segment_id;
7341         segment_num = private->flash_segment_nums[segment_id];
7342
7343         if (segment_num < SCARLETT2_SEGMENT_NUM_MIN ||
7344             segment_num > SCARLETT2_SEGMENT_NUM_MAX)
7345                 return -EFAULT;
7346
7347         /* Send the erase progress request */
7348         erase_req.segment_num = cpu_to_le32(segment_num);
7349         erase_req.pad = 0;
7350
7351         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_ERASE,
7352                             &erase_req, sizeof(erase_req),
7353                             &erase_resp, sizeof(erase_resp));
7354         if (err < 0)
7355                 return err;
7356
7357         return erase_resp;
7358 }
7359
7360 /* Repeatedly call scarlett2_get_erase_progress() until it returns
7361  * 0xff (erase complete) or we've waited 10 seconds (it usually takes
7362  * <3 seconds).
7363  */
7364 static int scarlett2_wait_for_erase(struct usb_mixer_interface *mixer)
7365 {
7366         int i, err;
7367
7368         for (i = 0; i < 100; i++) {
7369                 err = scarlett2_get_erase_progress(mixer);
7370                 if (err < 0)
7371                         return err;
7372
7373                 if (err == 0xff)
7374                         return 0;
7375
7376                 msleep(100);
7377         }
7378
7379         return -ETIMEDOUT;
7380 }
7381
7382 /* Reboot the device; wait for the erase to complete if one is in
7383  * progress.
7384  */
7385 static int scarlett2_reboot(struct usb_mixer_interface *mixer)
7386 {
7387         struct scarlett2_data *private = mixer->private_data;
7388
7389         if (private->flash_write_state ==
7390               SCARLETT2_FLASH_WRITE_STATE_ERASING) {
7391                 int err = scarlett2_wait_for_erase(mixer);
7392
7393                 if (err < 0)
7394                         return err;
7395         }
7396
7397         return scarlett2_usb(mixer, SCARLETT2_USB_REBOOT, NULL, 0, NULL, 0);
7398 }
7399
7400 /* Select a flash segment for erasing (and possibly writing to) */
7401 static int scarlett2_ioctl_select_flash_segment(
7402         struct usb_mixer_interface *mixer,
7403         unsigned long arg)
7404 {
7405         struct scarlett2_data *private = mixer->private_data;
7406         int segment_id, segment_num;
7407
7408         if (get_user(segment_id, (int __user *)arg))
7409                 return -EFAULT;
7410
7411         /* Check the segment ID and segment number */
7412         if (segment_id < 0 || segment_id >= SCARLETT2_SEGMENT_ID_COUNT)
7413                 return -EINVAL;
7414
7415         segment_num = private->flash_segment_nums[segment_id];
7416         if (segment_num < SCARLETT2_SEGMENT_NUM_MIN ||
7417             segment_num > SCARLETT2_SEGMENT_NUM_MAX) {
7418                 usb_audio_err(mixer->chip,
7419                               "%s: invalid segment number %d\n",
7420                               __func__, segment_id);
7421                 return -EFAULT;
7422         }
7423
7424         /* If erasing, wait for it to complete */
7425         if (private->flash_write_state == SCARLETT2_FLASH_WRITE_STATE_ERASING) {
7426                 int err = scarlett2_wait_for_erase(mixer);
7427
7428                 if (err < 0)
7429                         return err;
7430         }
7431
7432         /* Save the selected segment ID and set the state to SELECTED */
7433         private->selected_flash_segment_id = segment_id;
7434         private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_SELECTED;
7435
7436         return 0;
7437 }
7438
7439 /* Erase the previously-selected flash segment */
7440 static int scarlett2_ioctl_erase_flash_segment(
7441         struct usb_mixer_interface *mixer)
7442 {
7443         struct scarlett2_data *private = mixer->private_data;
7444         int segment_id, segment_num, err;
7445
7446         struct {
7447                 __le32 segment_num;
7448                 __le32 pad;
7449         } __packed erase_req;
7450
7451         if (private->flash_write_state != SCARLETT2_FLASH_WRITE_STATE_SELECTED)
7452                 return -EINVAL;
7453
7454         segment_id = private->selected_flash_segment_id;
7455         segment_num = private->flash_segment_nums[segment_id];
7456
7457         if (segment_num < SCARLETT2_SEGMENT_NUM_MIN ||
7458             segment_num > SCARLETT2_SEGMENT_NUM_MAX)
7459                 return -EFAULT;
7460
7461         /* Prevent access to ALSA controls that access the device from
7462          * here on
7463          */
7464         scarlett2_lock(private);
7465
7466         /* Send the erase request */
7467         erase_req.segment_num = cpu_to_le32(segment_num);
7468         erase_req.pad = 0;
7469
7470         err = scarlett2_usb(mixer, SCARLETT2_USB_ERASE_SEGMENT,
7471                             &erase_req, sizeof(erase_req),
7472                             NULL, 0);
7473         if (err < 0)
7474                 return err;
7475
7476         /* On success, change the state from SELECTED to ERASING */
7477         private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_ERASING;
7478
7479         return 0;
7480 }
7481
7482 /* Get the erase progress from the device */
7483 static int scarlett2_ioctl_get_erase_progress(
7484         struct usb_mixer_interface *mixer,
7485         unsigned long arg)
7486 {
7487         struct scarlett2_data *private = mixer->private_data;
7488         struct scarlett2_flash_segment_erase_progress progress;
7489         int segment_id, segment_num, err;
7490         u8 erase_resp;
7491
7492         struct {
7493                 __le32 segment_num;
7494                 __le32 pad;
7495         } __packed erase_req;
7496
7497         /* Check that we're erasing */
7498         if (private->flash_write_state != SCARLETT2_FLASH_WRITE_STATE_ERASING)
7499                 return -EINVAL;
7500
7501         segment_id = private->selected_flash_segment_id;
7502         segment_num = private->flash_segment_nums[segment_id];
7503
7504         if (segment_num < SCARLETT2_SEGMENT_NUM_MIN ||
7505             segment_num > SCARLETT2_SEGMENT_NUM_MAX)
7506                 return -EFAULT;
7507
7508         /* Send the erase progress request */
7509         erase_req.segment_num = cpu_to_le32(segment_num);
7510         erase_req.pad = 0;
7511
7512         err = scarlett2_usb(mixer, SCARLETT2_USB_GET_ERASE,
7513                             &erase_req, sizeof(erase_req),
7514                             &erase_resp, sizeof(erase_resp));
7515         if (err < 0)
7516                 return err;
7517
7518         progress.progress = erase_resp;
7519         progress.num_blocks = private->flash_segment_blocks[segment_id];
7520
7521         if (copy_to_user((void __user *)arg, &progress, sizeof(progress)))
7522                 return -EFAULT;
7523
7524         /* If the erase is complete, change the state from ERASING to
7525          * WRITE.
7526          */
7527         if (progress.progress == 0xff)
7528                 private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_WRITE;
7529
7530         return 0;
7531 }
7532
7533 static int scarlett2_hwdep_open(struct snd_hwdep *hw, struct file *file)
7534 {
7535         struct usb_mixer_interface *mixer = hw->private_data;
7536         struct scarlett2_data *private = mixer->private_data;
7537
7538         /* If erasing, wait for it to complete */
7539         if (private->flash_write_state ==
7540               SCARLETT2_FLASH_WRITE_STATE_ERASING) {
7541                 int err = scarlett2_wait_for_erase(mixer);
7542
7543                 if (err < 0)
7544                         return err;
7545         }
7546
7547         /* Set the state to IDLE */
7548         private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_IDLE;
7549
7550         return 0;
7551 }
7552
7553 static int scarlett2_hwdep_ioctl(struct snd_hwdep *hw, struct file *file,
7554                                  unsigned int cmd, unsigned long arg)
7555 {
7556         struct usb_mixer_interface *mixer = hw->private_data;
7557
7558         switch (cmd) {
7559
7560         case SCARLETT2_IOCTL_PVERSION:
7561                 return put_user(SCARLETT2_HWDEP_VERSION,
7562                                 (int __user *)arg) ? -EFAULT : 0;
7563
7564         case SCARLETT2_IOCTL_REBOOT:
7565                 return scarlett2_reboot(mixer);
7566
7567         case SCARLETT2_IOCTL_SELECT_FLASH_SEGMENT:
7568                 return scarlett2_ioctl_select_flash_segment(mixer, arg);
7569
7570         case SCARLETT2_IOCTL_ERASE_FLASH_SEGMENT:
7571                 return scarlett2_ioctl_erase_flash_segment(mixer);
7572
7573         case SCARLETT2_IOCTL_GET_ERASE_PROGRESS:
7574                 return scarlett2_ioctl_get_erase_progress(mixer, arg);
7575
7576         default:
7577                 return -ENOIOCTLCMD;
7578         }
7579 }
7580
7581 static long scarlett2_hwdep_write(struct snd_hwdep *hw,
7582                                   const char __user *buf,
7583                                   long count, loff_t *offset)
7584 {
7585         struct usb_mixer_interface *mixer = hw->private_data;
7586         struct scarlett2_data *private = mixer->private_data;
7587         int segment_id, segment_num, err, len;
7588         int flash_size;
7589
7590         /* SCARLETT2_USB_WRITE_SEGMENT request data */
7591         struct {
7592                 __le32 segment_num;
7593                 __le32 offset;
7594                 __le32 pad;
7595                 u8 data[];
7596         } __packed *req;
7597
7598         /* Calculate the maximum permitted in data[] */
7599         const size_t max_data_size = SCARLETT2_FLASH_WRITE_MAX -
7600                                      offsetof(typeof(*req), data);
7601
7602         /* If erasing, wait for it to complete */
7603         if (private->flash_write_state ==
7604               SCARLETT2_FLASH_WRITE_STATE_ERASING) {
7605                 err = scarlett2_wait_for_erase(mixer);
7606                 if (err < 0)
7607                         return err;
7608                 private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_WRITE;
7609
7610         /* Check that an erase has been done & completed */
7611         } else if (private->flash_write_state !=
7612                      SCARLETT2_FLASH_WRITE_STATE_WRITE) {
7613                 return -EINVAL;
7614         }
7615
7616         /* Check that we're writing to the upgrade firmware */
7617         segment_id = private->selected_flash_segment_id;
7618         if (segment_id != SCARLETT2_SEGMENT_ID_FIRMWARE)
7619                 return -EINVAL;
7620
7621         segment_num = private->flash_segment_nums[segment_id];
7622         if (segment_num < SCARLETT2_SEGMENT_NUM_MIN ||
7623             segment_num > SCARLETT2_SEGMENT_NUM_MAX)
7624                 return -EFAULT;
7625
7626         /* Validate the offset and count */
7627         flash_size = private->flash_segment_blocks[segment_id] *
7628                      SCARLETT2_FLASH_BLOCK_SIZE;
7629
7630         if (count < 0 || *offset < 0 || *offset + count >= flash_size)
7631                 return -EINVAL;
7632
7633         if (!count)
7634                 return 0;
7635
7636         /* Limit the *req size to SCARLETT2_FLASH_WRITE_MAX */
7637         if (count > max_data_size)
7638                 count = max_data_size;
7639
7640         /* Create and send the request */
7641         len = struct_size(req, data, count);
7642         req = kzalloc(len, GFP_KERNEL);
7643         if (!req)
7644                 return -ENOMEM;
7645
7646         req->segment_num = cpu_to_le32(segment_num);
7647         req->offset = cpu_to_le32(*offset);
7648         req->pad = 0;
7649
7650         if (copy_from_user(req->data, buf, count)) {
7651                 err = -EFAULT;
7652                 goto error;
7653         }
7654
7655         err = scarlett2_usb(mixer, SCARLETT2_USB_WRITE_SEGMENT,
7656                             req, len, NULL, 0);
7657         if (err < 0)
7658                 goto error;
7659
7660         *offset += count;
7661         err = count;
7662
7663 error:
7664         kfree(req);
7665         return err;
7666 }
7667
7668 static int scarlett2_hwdep_release(struct snd_hwdep *hw, struct file *file)
7669 {
7670         struct usb_mixer_interface *mixer = hw->private_data;
7671         struct scarlett2_data *private = mixer->private_data;
7672
7673         /* Return from the SELECTED or WRITE state to IDLE.
7674          * The ERASING state is left as-is, and checked on next open.
7675          */
7676         if (private &&
7677             private->hwdep_in_use &&
7678             private->flash_write_state != SCARLETT2_FLASH_WRITE_STATE_ERASING)
7679                 private->flash_write_state = SCARLETT2_FLASH_WRITE_STATE_IDLE;
7680
7681         return 0;
7682 }
7683
7684 static int scarlett2_hwdep_init(struct usb_mixer_interface *mixer)
7685 {
7686         struct snd_hwdep *hw;
7687         int err;
7688
7689         err = snd_hwdep_new(mixer->chip->card, "Focusrite Control", 0, &hw);
7690         if (err < 0)
7691                 return err;
7692
7693         hw->private_data = mixer;
7694         hw->exclusive = 1;
7695         hw->ops.open = scarlett2_hwdep_open;
7696         hw->ops.ioctl = scarlett2_hwdep_ioctl;
7697         hw->ops.write = scarlett2_hwdep_write;
7698         hw->ops.release = scarlett2_hwdep_release;
7699
7700         return 0;
7701 }
7702
7703 int snd_scarlett2_init(struct usb_mixer_interface *mixer)
7704 {
7705         struct snd_usb_audio *chip = mixer->chip;
7706         const struct scarlett2_device_entry *entry;
7707         int err;
7708
7709         /* only use UAC_VERSION_2 */
7710         if (!mixer->protocol)
7711                 return 0;
7712
7713         /* find entry in scarlett2_devices */
7714         entry = get_scarlett2_device_entry(mixer);
7715         if (!entry) {
7716                 usb_audio_err(mixer->chip,
7717                               "%s: missing device entry for %04x:%04x\n",
7718                               __func__,
7719                               USB_ID_VENDOR(chip->usb_id),
7720                               USB_ID_PRODUCT(chip->usb_id));
7721                 return 0;
7722         }
7723
7724         if (chip->setup & SCARLETT2_DISABLE) {
7725                 usb_audio_info(chip,
7726                         "Focusrite %s Mixer Driver disabled "
7727                         "by modprobe options (snd_usb_audio "
7728                         "vid=0x%04x pid=0x%04x device_setup=%d)\n",
7729                         entry->series_name,
7730                         USB_ID_VENDOR(chip->usb_id),
7731                         USB_ID_PRODUCT(chip->usb_id),
7732                         SCARLETT2_DISABLE);
7733                 return 0;
7734         }
7735
7736         usb_audio_info(chip,
7737                 "Focusrite %s Mixer Driver enabled (pid=0x%04x); "
7738                 "report any issues to "
7739                 "https://github.com/geoffreybennett/scarlett-gen2/issues",
7740                 entry->series_name,
7741                 USB_ID_PRODUCT(chip->usb_id));
7742
7743         err = snd_scarlett2_controls_create(mixer, entry);
7744         if (err < 0) {
7745                 usb_audio_err(mixer->chip,
7746                               "Error initialising %s Mixer Driver: %d",
7747                               entry->series_name,
7748                               err);
7749                 return err;
7750         }
7751
7752         err = scarlett2_hwdep_init(mixer);
7753         if (err < 0)
7754                 usb_audio_err(mixer->chip,
7755                               "Error creating %s hwdep device: %d",
7756                               entry->series_name,
7757                               err);
7758
7759         return err;
7760 }