Linux Audio

Check our new training course

Buildroot integration, development and maintenance

Need a Buildroot system for your embedded project?
Loading...
Note: File does not exist in v3.15.
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *   Focusrite Scarlett Gen 2/3 Driver for ALSA
   4 *
   5 *   Supported models:
   6 *   - 6i6/18i8/18i20 Gen 2
   7 *   - Solo/2i2/4i4/8i6/18i8/18i20 Gen 3
   8 *
   9 *   Copyright (c) 2018-2021 by Geoffrey D. Bennett <g at b4.vu>
  10 *   Copyright (c) 2020-2021 by Vladimir Sadovnikov <sadko4u@gmail.com>
  11 *
  12 *   Based on the Scarlett (Gen 1) Driver for ALSA:
  13 *
  14 *   Copyright (c) 2013 by Tobias Hoffmann
  15 *   Copyright (c) 2013 by Robin Gareus <robin at gareus.org>
  16 *   Copyright (c) 2002 by Takashi Iwai <tiwai at suse.de>
  17 *   Copyright (c) 2014 by Chris J Arges <chris.j.arges at canonical.com>
  18 *
  19 *   Many codes borrowed from audio.c by
  20 *     Alan Cox (alan at lxorguk.ukuu.org.uk)
  21 *     Thomas Sailer (sailer at ife.ee.ethz.ch)
  22 *
  23 *   Code cleanup:
  24 *   David Henningsson <david.henningsson at canonical.com>
  25 */
  26
  27/* The protocol was reverse engineered by looking at the communication
  28 * between Focusrite Control 2.3.4 and the Focusrite(R) Scarlett 18i20
  29 * (firmware 1083) using usbmon in July-August 2018.
  30 *
  31 * Scarlett 18i8 support added in April 2019.
  32 *
  33 * Scarlett 6i6 support added in June 2019 (thanks to Martin Wittmann
  34 * for providing usbmon output and testing).
  35 *
  36 * Scarlett 4i4/8i6 Gen 3 support added in May 2020 (thanks to Laurent
  37 * Debricon for donating a 4i4 and to Fredrik Unger for providing 8i6
  38 * usbmon output and testing).
  39 *
  40 * Scarlett 18i8/18i20 Gen 3 support added in June 2020 (thanks to
  41 * Darren Jaeckel, Alex Sedlack, and Clovis Lunel for providing usbmon
  42 * output, protocol traces and testing).
  43 *
  44 * Support for loading mixer volume and mux configuration from the
  45 * interface during driver initialisation added in May 2021 (thanks to
  46 * Vladimir Sadovnikov for figuring out how).
  47 *
  48 * Support for Solo/2i2 Gen 3 added in May 2021 (thanks to Alexander
  49 * Vorona for 2i2 protocol traces).
  50 *
  51 * Support for phantom power, direct monitoring, speaker switching,
  52 * and talkback added in May-June 2021.
  53 *
  54 * This ALSA mixer gives access to (model-dependent):
  55 *  - input, output, mixer-matrix muxes
  56 *  - mixer-matrix gain stages
  57 *  - gain/volume/mute controls
  58 *  - level meters
  59 *  - line/inst level, pad, and air controls
  60 *  - phantom power, direct monitor, speaker switching, and talkback
  61 *    controls
  62 *  - disable/enable MSD mode
  63 *
  64 * <ditaa>
  65 *    /--------------\    18chn            20chn     /--------------\
  66 *    | Hardware  in +--+------\    /-------------+--+ ALSA PCM out |
  67 *    \--------------/  |      |    |             |  \--------------/
  68 *                      |      |    |    /-----\  |
  69 *                      |      |    |    |     |  |
  70 *                      |      v    v    v     |  |
  71 *                      |   +---------------+  |  |
  72 *                      |    \ Matrix  Mux /   |  |
  73 *                      |     +-----+-----+    |  |
  74 *                      |           |          |  |
  75 *                      |           |18chn     |  |
  76 *                      |           |          |  |
  77 *                      |           |     10chn|  |
  78 *                      |           v          |  |
  79 *                      |     +------------+   |  |
  80 *                      |     | Mixer      |   |  |
  81 *                      |     |     Matrix |   |  |
  82 *                      |     |            |   |  |
  83 *                      |     | 18x10 Gain |   |  |
  84 *                      |     |   stages   |   |  |
  85 *                      |     +-----+------+   |  |
  86 *                      |           |          |  |
  87 *                      |18chn      |10chn     |  |20chn
  88 *                      |           |          |  |
  89 *                      |           +----------/  |
  90 *                      |           |             |
  91 *                      v           v             v
  92 *                      ===========================
  93 *               +---------------+       +--—------------+
  94 *                \ Output  Mux /         \ Capture Mux /
  95 *                 +---+---+---+           +-----+-----+
  96 *                     |   |                     |
  97 *                10chn|   |                     |18chn
  98 *                     |   |                     |
  99 *  /--------------\   |   |                     |   /--------------\
 100 *  | S/PDIF, ADAT |<--/   |10chn                \-->| ALSA PCM in  |
 101 *  | Hardware out |       |                         \--------------/
 102 *  \--------------/       |
 103 *                         v
 104 *                  +-------------+    Software gain per channel.
 105 *                  | Master Gain |<-- 18i20 only: Switch per channel
 106 *                  +------+------+    to select HW or SW gain control.
 107 *                         |
 108 *                         |10chn
 109 *  /--------------\       |
 110 *  | Analogue     |<------/
 111 *  | Hardware out |
 112 *  \--------------/
 113 * </ditaa>
 114 *
 115 * Gen 3 devices have a Mass Storage Device (MSD) mode where a small
 116 * disk with registration and driver download information is presented
 117 * to the host. To access the full functionality of the device without
 118 * proprietary software, MSD mode can be disabled by:
 119 * - holding down the 48V button for five seconds while powering on
 120 *   the device, or
 121 * - using this driver and alsamixer to change the "MSD Mode" setting
 122 *   to Off and power-cycling the device
 123 */
 124
 125#include <linux/slab.h>
 126#include <linux/usb.h>
 127#include <linux/moduleparam.h>
 128
 129#include <sound/control.h>
 130#include <sound/tlv.h>
 131
 132#include "usbaudio.h"
 133#include "mixer.h"
 134#include "helper.h"
 135
 136#include "mixer_scarlett_gen2.h"
 137
 138/* device_setup value to enable */
 139#define SCARLETT2_ENABLE 0x01
 140
 141/* device_setup value to allow turning MSD mode back on */
 142#define SCARLETT2_MSD_ENABLE 0x02
 143
 144/* some gui mixers can't handle negative ctl values */
 145#define SCARLETT2_VOLUME_BIAS 127
 146
 147/* mixer range from -80dB to +6dB in 0.5dB steps */
 148#define SCARLETT2_MIXER_MIN_DB -80
 149#define SCARLETT2_MIXER_BIAS (-SCARLETT2_MIXER_MIN_DB * 2)
 150#define SCARLETT2_MIXER_MAX_DB 6
 151#define SCARLETT2_MIXER_MAX_VALUE \
 152	((SCARLETT2_MIXER_MAX_DB - SCARLETT2_MIXER_MIN_DB) * 2)
 153#define SCARLETT2_MIXER_VALUE_COUNT (SCARLETT2_MIXER_MAX_VALUE + 1)
 154
 155/* map from (dB + 80) * 2 to mixer value
 156 * for dB in 0 .. 172: int(8192 * pow(10, ((dB - 160) / 2 / 20)))
 157 */
 158static const u16 scarlett2_mixer_values[SCARLETT2_MIXER_VALUE_COUNT] = {
 159	0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
 160	2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8,
 161	9, 9, 10, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
 162	23, 24, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 46, 48, 51,
 163	54, 57, 61, 65, 68, 73, 77, 81, 86, 91, 97, 103, 109, 115,
 164	122, 129, 137, 145, 154, 163, 173, 183, 194, 205, 217, 230,
 165	244, 259, 274, 290, 307, 326, 345, 365, 387, 410, 434, 460,
 166	487, 516, 547, 579, 614, 650, 689, 730, 773, 819, 867, 919,
 167	973, 1031, 1092, 1157, 1225, 1298, 1375, 1456, 1543, 1634,
 168	1731, 1833, 1942, 2057, 2179, 2308, 2445, 2590, 2744, 2906,
 169	3078, 3261, 3454, 3659, 3876, 4105, 4349, 4606, 4879, 5168,
 170	5475, 5799, 6143, 6507, 6892, 7301, 7733, 8192, 8677, 9191,
 171	9736, 10313, 10924, 11571, 12257, 12983, 13752, 14567, 15430,
 172	16345
 173};
 174
 175/* Maximum number of analogue outputs */
 176#define SCARLETT2_ANALOGUE_MAX 10
 177
 178/* Maximum number of level and pad switches */
 179#define SCARLETT2_LEVEL_SWITCH_MAX 2
 180#define SCARLETT2_PAD_SWITCH_MAX 8
 181#define SCARLETT2_AIR_SWITCH_MAX 8
 182#define SCARLETT2_PHANTOM_SWITCH_MAX 2
 183
 184/* Maximum number of inputs to the mixer */
 185#define SCARLETT2_INPUT_MIX_MAX 25
 186
 187/* Maximum number of outputs from the mixer */
 188#define SCARLETT2_OUTPUT_MIX_MAX 12
 189
 190/* Maximum size of the data in the USB mux assignment message:
 191 * 20 inputs, 20 outputs, 25 matrix inputs, 12 spare
 192 */
 193#define SCARLETT2_MUX_MAX 77
 194
 195/* Maximum number of meters (sum of output port counts) */
 196#define SCARLETT2_MAX_METERS 65
 197
 198/* Hardware port types:
 199 * - None (no input to mux)
 200 * - Analogue I/O
 201 * - S/PDIF I/O
 202 * - ADAT I/O
 203 * - Mixer I/O
 204 * - PCM I/O
 205 */
 206enum {
 207	SCARLETT2_PORT_TYPE_NONE     = 0,
 208	SCARLETT2_PORT_TYPE_ANALOGUE = 1,
 209	SCARLETT2_PORT_TYPE_SPDIF    = 2,
 210	SCARLETT2_PORT_TYPE_ADAT     = 3,
 211	SCARLETT2_PORT_TYPE_MIX      = 4,
 212	SCARLETT2_PORT_TYPE_PCM      = 5,
 213	SCARLETT2_PORT_TYPE_COUNT    = 6,
 214};
 215
 216/* I/O count of each port type kept in struct scarlett2_ports */
 217enum {
 218	SCARLETT2_PORT_IN    = 0,
 219	SCARLETT2_PORT_OUT   = 1,
 220	SCARLETT2_PORT_DIRNS = 2,
 221};
 222
 223/* Dim/Mute buttons on the 18i20 */
 224enum {
 225	SCARLETT2_BUTTON_MUTE    = 0,
 226	SCARLETT2_BUTTON_DIM     = 1,
 227	SCARLETT2_DIM_MUTE_COUNT = 2,
 228};
 229
 230static const char *const scarlett2_dim_mute_names[SCARLETT2_DIM_MUTE_COUNT] = {
 231	"Mute Playback Switch", "Dim Playback Switch"
 232};
 233
 234/* Description of each hardware port type:
 235 * - id: hardware ID of this port type
 236 * - src_descr: printf format string for mux input selections
 237 * - src_num_offset: added to channel number for the fprintf
 238 * - dst_descr: printf format string for mixer controls
 239 */
 240struct scarlett2_port {
 241	u16 id;
 242	const char * const src_descr;
 243	int src_num_offset;
 244	const char * const dst_descr;
 245};
 246
 247static const struct scarlett2_port scarlett2_ports[SCARLETT2_PORT_TYPE_COUNT] = {
 248	[SCARLETT2_PORT_TYPE_NONE] = {
 249		.id = 0x000,
 250		.src_descr = "Off"
 251	},
 252	[SCARLETT2_PORT_TYPE_ANALOGUE] = {
 253		.id = 0x080,
 254		.src_descr = "Analogue %d",
 255		.src_num_offset = 1,
 256		.dst_descr = "Analogue Output %02d Playback"
 257	},
 258	[SCARLETT2_PORT_TYPE_SPDIF] = {
 259		.id = 0x180,
 260		.src_descr = "S/PDIF %d",
 261		.src_num_offset = 1,
 262		.dst_descr = "S/PDIF Output %d Playback"
 263	},
 264	[SCARLETT2_PORT_TYPE_ADAT] = {
 265		.id = 0x200,
 266		.src_descr = "ADAT %d",
 267		.src_num_offset = 1,
 268		.dst_descr = "ADAT Output %d Playback"
 269	},
 270	[SCARLETT2_PORT_TYPE_MIX] = {
 271		.id = 0x300,
 272		.src_descr = "Mix %c",
 273		.src_num_offset = 'A',
 274		.dst_descr = "Mixer Input %02d Capture"
 275	},
 276	[SCARLETT2_PORT_TYPE_PCM] = {
 277		.id = 0x600,
 278		.src_descr = "PCM %d",
 279		.src_num_offset = 1,
 280		.dst_descr = "PCM %02d Capture"
 281	},
 282};
 283
 284/* Number of mux tables: one for each band of sample rates
 285 * (44.1/48kHz, 88.2/96kHz, and 176.4/176kHz)
 286 */
 287#define SCARLETT2_MUX_TABLES 3
 288
 289/* Maximum number of entries in a mux table */
 290#define SCARLETT2_MAX_MUX_ENTRIES 10
 291
 292/* One entry within mux_assignment defines the port type and range of
 293 * ports to add to the set_mux message. The end of the list is marked
 294 * with count == 0.
 295 */
 296struct scarlett2_mux_entry {
 297	u8 port_type;
 298	u8 start;
 299	u8 count;
 300};
 301
 302struct scarlett2_device_info {
 303	u32 usb_id; /* USB device identifier */
 304
 305	/* Gen 3 devices have an internal MSD mode switch that needs
 306	 * to be disabled in order to access the full functionality of
 307	 * the device.
 308	 */
 309	u8 has_msd_mode;
 310
 311	/* Gen 3 devices without a mixer have a different
 312	 * configuration set
 313	 */
 314	u8 has_mixer;
 315
 316	/* line out hw volume is sw controlled */
 317	u8 line_out_hw_vol;
 318
 319	/* support for main/alt speaker switching */
 320	u8 has_speaker_switching;
 321
 322	/* support for talkback microphone */
 323	u8 has_talkback;
 324
 325	/* the number of analogue inputs with a software switchable
 326	 * level control that can be set to line or instrument
 327	 */
 328	u8 level_input_count;
 329
 330	/* the first input with a level control (0-based) */
 331	u8 level_input_first;
 332
 333	/* the number of analogue inputs with a software switchable
 334	 * 10dB pad control
 335	 */
 336	u8 pad_input_count;
 337
 338	/* the number of analogue inputs with a software switchable
 339	 * "air" control
 340	 */
 341	u8 air_input_count;
 342
 343	/* the number of phantom (48V) software switchable controls */
 344	u8 phantom_count;
 345
 346	/* the number of inputs each phantom switch controls */
 347	u8 inputs_per_phantom;
 348
 349	/* the number of direct monitor options
 350	 * (0 = none, 1 = mono only, 2 = mono/stereo)
 351	 */
 352	u8 direct_monitor;
 353
 354	/* remap analogue outputs; 18i8 Gen 3 has "line 3/4" connected
 355	 * internally to the analogue 7/8 outputs
 356	 */
 357	u8 line_out_remap_enable;
 358	u8 line_out_remap[SCARLETT2_ANALOGUE_MAX];
 359
 360	/* additional description for the line out volume controls */
 361	const char * const line_out_descrs[SCARLETT2_ANALOGUE_MAX];
 362
 363	/* number of sources/destinations of each port type */
 364	const int port_count[SCARLETT2_PORT_TYPE_COUNT][SCARLETT2_PORT_DIRNS];
 365
 366	/* layout/order of the entries in the set_mux message */
 367	struct scarlett2_mux_entry mux_assignment[SCARLETT2_MUX_TABLES]
 368						 [SCARLETT2_MAX_MUX_ENTRIES];
 369};
 370
 371struct scarlett2_data {
 372	struct usb_mixer_interface *mixer;
 373	struct mutex usb_mutex; /* prevent sending concurrent USB requests */
 374	struct mutex data_mutex; /* lock access to this data */
 375	struct delayed_work work;
 376	const struct scarlett2_device_info *info;
 377	__u8 bInterfaceNumber;
 378	__u8 bEndpointAddress;
 379	__u16 wMaxPacketSize;
 380	__u8 bInterval;
 381	int num_mux_srcs;
 382	int num_mux_dsts;
 383	u16 scarlett2_seq;
 384	u8 sync_updated;
 385	u8 vol_updated;
 386	u8 input_other_updated;
 387	u8 monitor_other_updated;
 388	u8 mux_updated;
 389	u8 speaker_switching_switched;
 390	u8 sync;
 391	u8 master_vol;
 392	u8 vol[SCARLETT2_ANALOGUE_MAX];
 393	u8 vol_sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
 394	u8 mute_switch[SCARLETT2_ANALOGUE_MAX];
 395	u8 level_switch[SCARLETT2_LEVEL_SWITCH_MAX];
 396	u8 pad_switch[SCARLETT2_PAD_SWITCH_MAX];
 397	u8 dim_mute[SCARLETT2_DIM_MUTE_COUNT];
 398	u8 air_switch[SCARLETT2_AIR_SWITCH_MAX];
 399	u8 phantom_switch[SCARLETT2_PHANTOM_SWITCH_MAX];
 400	u8 phantom_persistence;
 401	u8 direct_monitor_switch;
 402	u8 speaker_switching_switch;
 403	u8 talkback_switch;
 404	u8 talkback_map[SCARLETT2_OUTPUT_MIX_MAX];
 405	u8 msd_switch;
 406	struct snd_kcontrol *sync_ctl;
 407	struct snd_kcontrol *master_vol_ctl;
 408	struct snd_kcontrol *vol_ctls[SCARLETT2_ANALOGUE_MAX];
 409	struct snd_kcontrol *sw_hw_ctls[SCARLETT2_ANALOGUE_MAX];
 410	struct snd_kcontrol *mute_ctls[SCARLETT2_ANALOGUE_MAX];
 411	struct snd_kcontrol *dim_mute_ctls[SCARLETT2_DIM_MUTE_COUNT];
 412	struct snd_kcontrol *level_ctls[SCARLETT2_LEVEL_SWITCH_MAX];
 413	struct snd_kcontrol *pad_ctls[SCARLETT2_PAD_SWITCH_MAX];
 414	struct snd_kcontrol *air_ctls[SCARLETT2_AIR_SWITCH_MAX];
 415	struct snd_kcontrol *phantom_ctls[SCARLETT2_PHANTOM_SWITCH_MAX];
 416	struct snd_kcontrol *mux_ctls[SCARLETT2_MUX_MAX];
 417	struct snd_kcontrol *direct_monitor_ctl;
 418	struct snd_kcontrol *speaker_switching_ctl;
 419	struct snd_kcontrol *talkback_ctl;
 420	u8 mux[SCARLETT2_MUX_MAX];
 421	u8 mix[SCARLETT2_INPUT_MIX_MAX * SCARLETT2_OUTPUT_MIX_MAX];
 422};
 423
 424/*** Model-specific data ***/
 425
 426static const struct scarlett2_device_info s6i6_gen2_info = {
 427	.usb_id = USB_ID(0x1235, 0x8203),
 428
 429	.has_mixer = 1,
 430	.level_input_count = 2,
 431	.pad_input_count = 2,
 432
 433	.line_out_descrs = {
 434		"Headphones 1 L",
 435		"Headphones 1 R",
 436		"Headphones 2 L",
 437		"Headphones 2 R",
 438	},
 439
 440	.port_count = {
 441		[SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
 442		[SCARLETT2_PORT_TYPE_ANALOGUE] = {  4,  4 },
 443		[SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
 444		[SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
 445		[SCARLETT2_PORT_TYPE_PCM]      = {  6,  6 },
 446	},
 447
 448	.mux_assignment = { {
 449		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 450		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 451		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 452		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 453		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 454		{ 0,                            0,  0 },
 455	}, {
 456		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 457		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 458		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 459		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 460		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 461		{ 0,                            0,  0 },
 462	}, {
 463		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 464		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 465		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 466		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 467		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 468		{ 0,                            0,  0 },
 469	} },
 470};
 471
 472static const struct scarlett2_device_info s18i8_gen2_info = {
 473	.usb_id = USB_ID(0x1235, 0x8204),
 474
 475	.has_mixer = 1,
 476	.level_input_count = 2,
 477	.pad_input_count = 4,
 478
 479	.line_out_descrs = {
 480		"Monitor L",
 481		"Monitor R",
 482		"Headphones 1 L",
 483		"Headphones 1 R",
 484		"Headphones 2 L",
 485		"Headphones 2 R",
 486	},
 487
 488	.port_count = {
 489		[SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
 490		[SCARLETT2_PORT_TYPE_ANALOGUE] = {  8,  6 },
 491		[SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
 492		[SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
 493		[SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
 494		[SCARLETT2_PORT_TYPE_PCM]      = {  8, 18 },
 495	},
 496
 497	.mux_assignment = { {
 498		{ SCARLETT2_PORT_TYPE_PCM,      0, 18 },
 499		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
 500		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 501		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 502		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 503		{ 0,                            0,  0 },
 504	}, {
 505		{ SCARLETT2_PORT_TYPE_PCM,      0, 14 },
 506		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
 507		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 508		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 509		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 510		{ 0,                            0,  0 },
 511	}, {
 512		{ SCARLETT2_PORT_TYPE_PCM,      0, 10 },
 513		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  6 },
 514		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 515		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 516		{ SCARLETT2_PORT_TYPE_NONE,     0,  4 },
 517		{ 0,                            0,  0 },
 518	} },
 519};
 520
 521static const struct scarlett2_device_info s18i20_gen2_info = {
 522	.usb_id = USB_ID(0x1235, 0x8201),
 523
 524	.has_mixer = 1,
 525	.line_out_hw_vol = 1,
 526
 527	.line_out_descrs = {
 528		"Monitor L",
 529		"Monitor R",
 530		NULL,
 531		NULL,
 532		NULL,
 533		NULL,
 534		"Headphones 1 L",
 535		"Headphones 1 R",
 536		"Headphones 2 L",
 537		"Headphones 2 R",
 538	},
 539
 540	.port_count = {
 541		[SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
 542		[SCARLETT2_PORT_TYPE_ANALOGUE] = {  8, 10 },
 543		[SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
 544		[SCARLETT2_PORT_TYPE_ADAT]     = {  8,  8 },
 545		[SCARLETT2_PORT_TYPE_MIX]      = { 10, 18 },
 546		[SCARLETT2_PORT_TYPE_PCM]      = { 20, 18 },
 547	},
 548
 549	.mux_assignment = { {
 550		{ SCARLETT2_PORT_TYPE_PCM,      0, 18 },
 551		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
 552		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 553		{ SCARLETT2_PORT_TYPE_ADAT,     0,  8 },
 554		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 555		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 556		{ 0,                            0,  0 },
 557	}, {
 558		{ SCARLETT2_PORT_TYPE_PCM,      0, 14 },
 559		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
 560		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 561		{ SCARLETT2_PORT_TYPE_ADAT,     0,  4 },
 562		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 563		{ SCARLETT2_PORT_TYPE_NONE,     0,  8 },
 564		{ 0,                            0,  0 },
 565	}, {
 566		{ SCARLETT2_PORT_TYPE_PCM,      0, 10 },
 567		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0, 10 },
 568		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 569		{ SCARLETT2_PORT_TYPE_MIX,      0, 18 },
 570		{ SCARLETT2_PORT_TYPE_NONE,     0,  6 },
 571		{ 0,                            0,  0 },
 572	} },
 573};
 574
 575static const struct scarlett2_device_info solo_gen3_info = {
 576	.usb_id = USB_ID(0x1235, 0x8211),
 577
 578	.has_msd_mode = 1,
 579	.level_input_count = 1,
 580	.level_input_first = 1,
 581	.air_input_count = 1,
 582	.phantom_count = 1,
 583	.inputs_per_phantom = 1,
 584	.direct_monitor = 1,
 585};
 586
 587static const struct scarlett2_device_info s2i2_gen3_info = {
 588	.usb_id = USB_ID(0x1235, 0x8210),
 589
 590	.has_msd_mode = 1,
 591	.level_input_count = 2,
 592	.air_input_count = 2,
 593	.phantom_count = 1,
 594	.inputs_per_phantom = 2,
 595	.direct_monitor = 2,
 596};
 597
 598static const struct scarlett2_device_info s4i4_gen3_info = {
 599	.usb_id = USB_ID(0x1235, 0x8212),
 600
 601	.has_msd_mode = 1,
 602	.has_mixer = 1,
 603	.level_input_count = 2,
 604	.pad_input_count = 2,
 605	.air_input_count = 2,
 606	.phantom_count = 1,
 607	.inputs_per_phantom = 2,
 608
 609	.line_out_descrs = {
 610		"Monitor L",
 611		"Monitor R",
 612		"Headphones L",
 613		"Headphones R",
 614	},
 615
 616	.port_count = {
 617		[SCARLETT2_PORT_TYPE_NONE]     = { 1, 0 },
 618		[SCARLETT2_PORT_TYPE_ANALOGUE] = { 4, 4 },
 619		[SCARLETT2_PORT_TYPE_MIX]      = { 6, 8 },
 620		[SCARLETT2_PORT_TYPE_PCM]      = { 4, 6 },
 621	},
 622
 623	.mux_assignment = { {
 624		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 625		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 626		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 627		{ SCARLETT2_PORT_TYPE_NONE,     0, 16 },
 628		{ 0,                            0,  0 },
 629	}, {
 630		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 631		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 632		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 633		{ SCARLETT2_PORT_TYPE_NONE,     0, 16 },
 634		{ 0,                            0,  0 },
 635	}, {
 636		{ SCARLETT2_PORT_TYPE_PCM,      0,  6 },
 637		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 638		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 639		{ SCARLETT2_PORT_TYPE_NONE,     0, 16 },
 640		{ 0,                            0,  0 },
 641	} },
 642};
 643
 644static const struct scarlett2_device_info s8i6_gen3_info = {
 645	.usb_id = USB_ID(0x1235, 0x8213),
 646
 647	.has_msd_mode = 1,
 648	.has_mixer = 1,
 649	.level_input_count = 2,
 650	.pad_input_count = 2,
 651	.air_input_count = 2,
 652	.phantom_count = 1,
 653	.inputs_per_phantom = 2,
 654
 655	.line_out_descrs = {
 656		"Headphones 1 L",
 657		"Headphones 1 R",
 658		"Headphones 2 L",
 659		"Headphones 2 R",
 660	},
 661
 662	.port_count = {
 663		[SCARLETT2_PORT_TYPE_NONE]     = { 1,  0 },
 664		[SCARLETT2_PORT_TYPE_ANALOGUE] = { 6,  4 },
 665		[SCARLETT2_PORT_TYPE_SPDIF]    = { 2,  2 },
 666		[SCARLETT2_PORT_TYPE_MIX]      = { 8,  8 },
 667		[SCARLETT2_PORT_TYPE_PCM]      = { 6, 10 },
 668	},
 669
 670	.mux_assignment = { {
 671		{ SCARLETT2_PORT_TYPE_PCM,      0,  8 },
 672		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 673		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 674		{ SCARLETT2_PORT_TYPE_PCM,      8,  2 },
 675		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 676		{ SCARLETT2_PORT_TYPE_NONE,     0, 18 },
 677		{ 0,                            0,  0 },
 678	}, {
 679		{ SCARLETT2_PORT_TYPE_PCM,      0,  8 },
 680		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 681		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 682		{ SCARLETT2_PORT_TYPE_PCM,      8,  2 },
 683		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 684		{ SCARLETT2_PORT_TYPE_NONE,     0, 18 },
 685		{ 0,                            0,  0 },
 686	}, {
 687		{ SCARLETT2_PORT_TYPE_PCM,      0,  8 },
 688		{ SCARLETT2_PORT_TYPE_ANALOGUE, 0,  4 },
 689		{ SCARLETT2_PORT_TYPE_SPDIF,    0,  2 },
 690		{ SCARLETT2_PORT_TYPE_PCM,      8,  2 },
 691		{ SCARLETT2_PORT_TYPE_MIX,      0,  8 },
 692		{ SCARLETT2_PORT_TYPE_NONE,     0, 18 },
 693		{ 0,                            0,  0 },
 694	} },
 695};
 696
 697static const struct scarlett2_device_info s18i8_gen3_info = {
 698	.usb_id = USB_ID(0x1235, 0x8214),
 699
 700	.has_msd_mode = 1,
 701	.has_mixer = 1,
 702	.line_out_hw_vol = 1,
 703	.has_speaker_switching = 1,
 704	.level_input_count = 2,
 705	.pad_input_count = 4,
 706	.air_input_count = 4,
 707	.phantom_count = 2,
 708	.inputs_per_phantom = 2,
 709
 710	.line_out_remap_enable = 1,
 711	.line_out_remap = { 0, 1, 6, 7, 2, 3, 4, 5 },
 712
 713	.line_out_descrs = {
 714		"Monitor L",
 715		"Monitor R",
 716		"Alt Monitor L",
 717		"Alt Monitor R",
 718		"Headphones 1 L",
 719		"Headphones 1 R",
 720		"Headphones 2 L",
 721		"Headphones 2 R",
 722	},
 723
 724	.port_count = {
 725		[SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
 726		[SCARLETT2_PORT_TYPE_ANALOGUE] = {  8,  8 },
 727		[SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
 728		[SCARLETT2_PORT_TYPE_ADAT]     = {  8,  0 },
 729		[SCARLETT2_PORT_TYPE_MIX]      = { 10, 20 },
 730		[SCARLETT2_PORT_TYPE_PCM]      = {  8, 20 },
 731	},
 732
 733	.mux_assignment = { {
 734		{ SCARLETT2_PORT_TYPE_PCM,       0, 10 },
 735		{ SCARLETT2_PORT_TYPE_PCM,      12,  8 },
 736		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
 737		{ SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
 738		{ SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
 739		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 740		{ SCARLETT2_PORT_TYPE_PCM,      10,  2 },
 741		{ SCARLETT2_PORT_TYPE_MIX,       0, 20 },
 742		{ SCARLETT2_PORT_TYPE_NONE,      0, 10 },
 743		{ 0,                             0,  0 },
 744	}, {
 745		{ SCARLETT2_PORT_TYPE_PCM,       0, 10 },
 746		{ SCARLETT2_PORT_TYPE_PCM,      12,  4 },
 747		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
 748		{ SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
 749		{ SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
 750		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 751		{ SCARLETT2_PORT_TYPE_PCM,      10,  2 },
 752		{ SCARLETT2_PORT_TYPE_MIX,       0, 20 },
 753		{ SCARLETT2_PORT_TYPE_NONE,      0, 10 },
 754		{ 0,                             0,  0 },
 755	}, {
 756		{ SCARLETT2_PORT_TYPE_PCM,       0, 10 },
 757		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0,  2 },
 758		{ SCARLETT2_PORT_TYPE_ANALOGUE,  6,  2 },
 759		{ SCARLETT2_PORT_TYPE_ANALOGUE,  2,  4 },
 760		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 761		{ SCARLETT2_PORT_TYPE_MIX,       0, 20 },
 762		{ SCARLETT2_PORT_TYPE_NONE,      0, 10 },
 763		{ 0,                             0,  0 },
 764	} },
 765};
 766
 767static const struct scarlett2_device_info s18i20_gen3_info = {
 768	.usb_id = USB_ID(0x1235, 0x8215),
 769
 770	.has_msd_mode = 1,
 771	.has_mixer = 1,
 772	.line_out_hw_vol = 1,
 773	.has_speaker_switching = 1,
 774	.has_talkback = 1,
 775	.level_input_count = 2,
 776	.pad_input_count = 8,
 777	.air_input_count = 8,
 778	.phantom_count = 2,
 779	.inputs_per_phantom = 4,
 780
 781	.line_out_descrs = {
 782		"Monitor 1 L",
 783		"Monitor 1 R",
 784		"Monitor 2 L",
 785		"Monitor 2 R",
 786		NULL,
 787		NULL,
 788		"Headphones 1 L",
 789		"Headphones 1 R",
 790		"Headphones 2 L",
 791		"Headphones 2 R",
 792	},
 793
 794	.port_count = {
 795		[SCARLETT2_PORT_TYPE_NONE]     = {  1,  0 },
 796		[SCARLETT2_PORT_TYPE_ANALOGUE] = {  9, 10 },
 797		[SCARLETT2_PORT_TYPE_SPDIF]    = {  2,  2 },
 798		[SCARLETT2_PORT_TYPE_ADAT]     = {  8,  8 },
 799		[SCARLETT2_PORT_TYPE_MIX]      = { 12, 25 },
 800		[SCARLETT2_PORT_TYPE_PCM]      = { 20, 20 },
 801	},
 802
 803	.mux_assignment = { {
 804		{ SCARLETT2_PORT_TYPE_PCM,       0,  8 },
 805		{ SCARLETT2_PORT_TYPE_PCM,      10, 10 },
 806		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
 807		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 808		{ SCARLETT2_PORT_TYPE_ADAT,      0,  8 },
 809		{ SCARLETT2_PORT_TYPE_PCM,       8,  2 },
 810		{ SCARLETT2_PORT_TYPE_MIX,       0, 25 },
 811		{ SCARLETT2_PORT_TYPE_NONE,      0, 12 },
 812		{ 0,                             0,  0 },
 813	}, {
 814		{ SCARLETT2_PORT_TYPE_PCM,       0,  8 },
 815		{ SCARLETT2_PORT_TYPE_PCM,      10,  8 },
 816		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
 817		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 818		{ SCARLETT2_PORT_TYPE_ADAT,      0,  8 },
 819		{ SCARLETT2_PORT_TYPE_PCM,       8,  2 },
 820		{ SCARLETT2_PORT_TYPE_MIX,       0, 25 },
 821		{ SCARLETT2_PORT_TYPE_NONE,      0, 10 },
 822		{ 0,                             0,  0 },
 823	}, {
 824		{ SCARLETT2_PORT_TYPE_PCM,       0, 10 },
 825		{ SCARLETT2_PORT_TYPE_ANALOGUE,  0, 10 },
 826		{ SCARLETT2_PORT_TYPE_SPDIF,     0,  2 },
 827		{ SCARLETT2_PORT_TYPE_NONE,      0, 24 },
 828		{ 0,                             0,  0 },
 829	} },
 830};
 831
 832static const struct scarlett2_device_info *scarlett2_devices[] = {
 833	/* Supported Gen 2 devices */
 834	&s6i6_gen2_info,
 835	&s18i8_gen2_info,
 836	&s18i20_gen2_info,
 837
 838	/* Supported Gen 3 devices */
 839	&solo_gen3_info,
 840	&s2i2_gen3_info,
 841	&s4i4_gen3_info,
 842	&s8i6_gen3_info,
 843	&s18i8_gen3_info,
 844	&s18i20_gen3_info,
 845
 846	/* End of list */
 847	NULL
 848};
 849
 850/* get the starting port index number for a given port type/direction */
 851static int scarlett2_get_port_start_num(
 852	const int port_count[][SCARLETT2_PORT_DIRNS],
 853	int direction, int port_type)
 854{
 855	int i, num = 0;
 856
 857	for (i = 0; i < port_type; i++)
 858		num += port_count[i][direction];
 859
 860	return num;
 861}
 862
 863/*** USB Interactions ***/
 864
 865/* Notifications from the interface */
 866#define SCARLETT2_USB_NOTIFY_SYNC          0x00000008
 867#define SCARLETT2_USB_NOTIFY_DIM_MUTE      0x00200000
 868#define SCARLETT2_USB_NOTIFY_MONITOR       0x00400000
 869#define SCARLETT2_USB_NOTIFY_INPUT_OTHER   0x00800000
 870#define SCARLETT2_USB_NOTIFY_MONITOR_OTHER 0x01000000
 871
 872/* Commands for sending/receiving requests/responses */
 873#define SCARLETT2_USB_CMD_INIT 0
 874#define SCARLETT2_USB_CMD_REQ  2
 875#define SCARLETT2_USB_CMD_RESP 3
 876
 877#define SCARLETT2_USB_INIT_1    0x00000000
 878#define SCARLETT2_USB_INIT_2    0x00000002
 879#define SCARLETT2_USB_GET_METER 0x00001001
 880#define SCARLETT2_USB_GET_MIX   0x00002001
 881#define SCARLETT2_USB_SET_MIX   0x00002002
 882#define SCARLETT2_USB_GET_MUX   0x00003001
 883#define SCARLETT2_USB_SET_MUX   0x00003002
 884#define SCARLETT2_USB_GET_SYNC  0x00006004
 885#define SCARLETT2_USB_GET_DATA  0x00800000
 886#define SCARLETT2_USB_SET_DATA  0x00800001
 887#define SCARLETT2_USB_DATA_CMD  0x00800002
 888
 889#define SCARLETT2_USB_CONFIG_SAVE 6
 890
 891#define SCARLETT2_USB_VOLUME_STATUS_OFFSET 0x31
 892#define SCARLETT2_USB_METER_LEVELS_GET_MAGIC 1
 893
 894/* volume status is read together (matches scarlett2_config_items[1]) */
 895struct scarlett2_usb_volume_status {
 896	/* dim/mute buttons */
 897	u8 dim_mute[SCARLETT2_DIM_MUTE_COUNT];
 898
 899	u8 pad1;
 900
 901	/* software volume setting */
 902	s16 sw_vol[SCARLETT2_ANALOGUE_MAX];
 903
 904	/* actual volume of output inc. dim (-18dB) */
 905	s16 hw_vol[SCARLETT2_ANALOGUE_MAX];
 906
 907	/* internal mute buttons */
 908	u8 mute_switch[SCARLETT2_ANALOGUE_MAX];
 909
 910	/* sw (0) or hw (1) controlled */
 911	u8 sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
 912
 913	u8 pad3[6];
 914
 915	/* front panel volume knob */
 916	s16 master_vol;
 917} __packed;
 918
 919/* Configuration parameters that can be read and written */
 920enum {
 921	SCARLETT2_CONFIG_DIM_MUTE = 0,
 922	SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
 923	SCARLETT2_CONFIG_MUTE_SWITCH = 2,
 924	SCARLETT2_CONFIG_SW_HW_SWITCH = 3,
 925	SCARLETT2_CONFIG_LEVEL_SWITCH = 4,
 926	SCARLETT2_CONFIG_PAD_SWITCH = 5,
 927	SCARLETT2_CONFIG_MSD_SWITCH = 6,
 928	SCARLETT2_CONFIG_AIR_SWITCH = 7,
 929	SCARLETT2_CONFIG_PHANTOM_SWITCH = 8,
 930	SCARLETT2_CONFIG_PHANTOM_PERSISTENCE = 9,
 931	SCARLETT2_CONFIG_DIRECT_MONITOR = 10,
 932	SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH = 11,
 933	SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE = 12,
 934	SCARLETT2_CONFIG_TALKBACK_MAP = 13,
 935	SCARLETT2_CONFIG_COUNT = 14
 936};
 937
 938/* Location, size, and activation command number for the configuration
 939 * parameters. Size is in bits and may be 1, 8, or 16.
 940 */
 941struct scarlett2_config {
 942	u8 offset;
 943	u8 size;
 944	u8 activate;
 945};
 946
 947/* scarlett2_config_items[0] is for devices without a mixer
 948 * scarlett2_config_items[1] is for devices with a mixer
 949 */
 950static const struct scarlett2_config
 951	scarlett2_config_items[2][SCARLETT2_CONFIG_COUNT] =
 952
 953/* Devices without a mixer (Solo and 2i2 Gen 3) */
 954{ {
 955	[SCARLETT2_CONFIG_MSD_SWITCH] = {
 956		.offset = 0x04, .size = 8, .activate = 6 },
 957
 958	[SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
 959		.offset = 0x05, .size = 8, .activate = 6 },
 960
 961	[SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
 962		.offset = 0x06, .size = 8, .activate = 3 },
 963
 964	[SCARLETT2_CONFIG_DIRECT_MONITOR] = {
 965		.offset = 0x07, .size = 8, .activate = 4 },
 966
 967	[SCARLETT2_CONFIG_LEVEL_SWITCH] = {
 968		.offset = 0x08, .size = 1, .activate = 7 },
 969
 970	[SCARLETT2_CONFIG_AIR_SWITCH] = {
 971		.offset = 0x09, .size = 1, .activate = 8 },
 972
 973/* Devices with a mixer (Gen 2 and all other Gen 3) */
 974}, {
 975	[SCARLETT2_CONFIG_DIM_MUTE] = {
 976		.offset = 0x31, .size = 8, .activate = 2 },
 977
 978	[SCARLETT2_CONFIG_LINE_OUT_VOLUME] = {
 979		.offset = 0x34, .size = 16, .activate = 1 },
 980
 981	[SCARLETT2_CONFIG_MUTE_SWITCH] = {
 982		.offset = 0x5c, .size = 8, .activate = 1 },
 983
 984	[SCARLETT2_CONFIG_SW_HW_SWITCH] = {
 985		.offset = 0x66, .size = 8, .activate = 3 },
 986
 987	[SCARLETT2_CONFIG_LEVEL_SWITCH] = {
 988		.offset = 0x7c, .size = 8, .activate = 7 },
 989
 990	[SCARLETT2_CONFIG_PAD_SWITCH] = {
 991		.offset = 0x84, .size = 8, .activate = 8 },
 992
 993	[SCARLETT2_CONFIG_AIR_SWITCH] = {
 994		.offset = 0x8c, .size = 8, .activate = 8 },
 995
 996	[SCARLETT2_CONFIG_PHANTOM_SWITCH] = {
 997		.offset = 0x9c, .size = 1, .activate = 8 },
 998
 999	[SCARLETT2_CONFIG_MSD_SWITCH] = {
1000		.offset = 0x9d, .size = 8, .activate = 6 },
1001
1002	[SCARLETT2_CONFIG_PHANTOM_PERSISTENCE] = {
1003		.offset = 0x9e, .size = 8, .activate = 6 },
1004
1005	[SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH] = {
1006		.offset = 0x9f, .size = 1, .activate = 10 },
1007
1008	[SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE] = {
1009		.offset = 0xa0, .size = 1, .activate = 10 },
1010
1011	[SCARLETT2_CONFIG_TALKBACK_MAP] = {
1012		.offset = 0xb0, .size = 16, .activate = 10 },
1013} };
1014
1015/* proprietary request/response format */
1016struct scarlett2_usb_packet {
1017	__le32 cmd;
1018	__le16 size;
1019	__le16 seq;
1020	__le32 error;
1021	__le32 pad;
1022	u8 data[];
1023};
1024
1025static void scarlett2_fill_request_header(struct scarlett2_data *private,
1026					  struct scarlett2_usb_packet *req,
1027					  u32 cmd, u16 req_size)
1028{
1029	/* sequence must go up by 1 for each request */
1030	u16 seq = private->scarlett2_seq++;
1031
1032	req->cmd = cpu_to_le32(cmd);
1033	req->size = cpu_to_le16(req_size);
1034	req->seq = cpu_to_le16(seq);
1035	req->error = 0;
1036	req->pad = 0;
1037}
1038
1039static int scarlett2_usb_tx(struct usb_device *dev, int interface,
1040			    void *buf, u16 size)
1041{
1042	return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1043			SCARLETT2_USB_CMD_REQ,
1044			USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
1045			0, interface, buf, size);
1046}
1047
1048static int scarlett2_usb_rx(struct usb_device *dev, int interface,
1049			    u32 usb_req, void *buf, u16 size)
1050{
1051	return snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
1052			usb_req,
1053			USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1054			0, interface, buf, size);
1055}
1056
1057/* Send a proprietary format request to the Scarlett interface */
1058static int scarlett2_usb(
1059	struct usb_mixer_interface *mixer, u32 cmd,
1060	void *req_data, u16 req_size, void *resp_data, u16 resp_size)
1061{
1062	struct scarlett2_data *private = mixer->private_data;
1063	struct usb_device *dev = mixer->chip->dev;
1064	u16 req_buf_size = sizeof(struct scarlett2_usb_packet) + req_size;
1065	u16 resp_buf_size = sizeof(struct scarlett2_usb_packet) + resp_size;
1066	struct scarlett2_usb_packet *req, *resp = NULL;
1067	int err;
1068
1069	req = kmalloc(req_buf_size, GFP_KERNEL);
1070	if (!req) {
1071		err = -ENOMEM;
1072		goto error;
1073	}
1074
1075	resp = kmalloc(resp_buf_size, GFP_KERNEL);
1076	if (!resp) {
1077		err = -ENOMEM;
1078		goto error;
1079	}
1080
1081	mutex_lock(&private->usb_mutex);
1082
1083	/* build request message and send it */
1084
1085	scarlett2_fill_request_header(private, req, cmd, req_size);
1086
1087	if (req_size)
1088		memcpy(req->data, req_data, req_size);
1089
1090	err = scarlett2_usb_tx(dev, private->bInterfaceNumber,
1091			       req, req_buf_size);
1092
1093	if (err != req_buf_size) {
1094		usb_audio_err(
1095			mixer->chip,
1096			"Scarlett Gen 2/3 USB request result cmd %x was %d\n",
1097			cmd, err);
1098		err = -EINVAL;
1099		goto unlock;
1100	}
1101
1102	/* send a second message to get the response */
1103
1104	err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
1105			       SCARLETT2_USB_CMD_RESP,
1106			       resp, resp_buf_size);
1107
1108	/* validate the response */
1109
1110	if (err != resp_buf_size) {
1111		usb_audio_err(
1112			mixer->chip,
1113			"Scarlett Gen 2/3 USB response result cmd %x was %d "
1114			"expected %d\n",
1115			cmd, err, resp_buf_size);
1116		err = -EINVAL;
1117		goto unlock;
1118	}
1119
1120	/* cmd/seq/size should match except when initialising
1121	 * seq sent = 1, response = 0
1122	 */
1123	if (resp->cmd != req->cmd ||
1124	    (resp->seq != req->seq &&
1125		(le16_to_cpu(req->seq) != 1 || resp->seq != 0)) ||
1126	    resp_size != le16_to_cpu(resp->size) ||
1127	    resp->error ||
1128	    resp->pad) {
1129		usb_audio_err(
1130			mixer->chip,
1131			"Scarlett Gen 2/3 USB invalid response; "
1132			   "cmd tx/rx %d/%d seq %d/%d size %d/%d "
1133			   "error %d pad %d\n",
1134			le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
1135			le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
1136			resp_size, le16_to_cpu(resp->size),
1137			le32_to_cpu(resp->error),
1138			le32_to_cpu(resp->pad));
1139		err = -EINVAL;
1140		goto unlock;
1141	}
1142
1143	if (resp_data && resp_size > 0)
1144		memcpy(resp_data, resp->data, resp_size);
1145
1146unlock:
1147	mutex_unlock(&private->usb_mutex);
1148error:
1149	kfree(req);
1150	kfree(resp);
1151	return err;
1152}
1153
1154/* Send a USB message to get data; result placed in *buf */
1155static int scarlett2_usb_get(
1156	struct usb_mixer_interface *mixer,
1157	int offset, void *buf, int size)
1158{
1159	struct {
1160		__le32 offset;
1161		__le32 size;
1162	} __packed req;
1163
1164	req.offset = cpu_to_le32(offset);
1165	req.size = cpu_to_le32(size);
1166	return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
1167			     &req, sizeof(req), buf, size);
1168}
1169
1170/* Send a USB message to get configuration parameters; result placed in *buf */
1171static int scarlett2_usb_get_config(
1172	struct usb_mixer_interface *mixer,
1173	int config_item_num, int count, void *buf)
1174{
1175	struct scarlett2_data *private = mixer->private_data;
1176	const struct scarlett2_device_info *info = private->info;
1177	const struct scarlett2_config *config_item =
1178		&scarlett2_config_items[info->has_mixer][config_item_num];
1179	int size, err, i;
1180	u8 *buf_8;
1181	u8 value;
1182
1183	/* For byte-sized parameters, retrieve directly into buf */
1184	if (config_item->size >= 8) {
1185		size = config_item->size / 8 * count;
1186		err = scarlett2_usb_get(mixer, config_item->offset, buf, size);
1187		if (err < 0)
1188			return err;
1189		if (size == 2) {
1190			u16 *buf_16 = buf;
1191
1192			for (i = 0; i < count; i++, buf_16++)
1193				*buf_16 = le16_to_cpu(*(__le16 *)buf_16);
1194		}
1195		return 0;
1196	}
1197
1198	/* For bit-sized parameters, retrieve into value */
1199	err = scarlett2_usb_get(mixer, config_item->offset, &value, 1);
1200	if (err < 0)
1201		return err;
1202
1203	/* then unpack from value into buf[] */
1204	buf_8 = buf;
1205	for (i = 0; i < 8 && i < count; i++, value >>= 1)
1206		*buf_8++ = value & 1;
1207
1208	return 0;
1209}
1210
1211/* Send SCARLETT2_USB_DATA_CMD SCARLETT2_USB_CONFIG_SAVE */
1212static void scarlett2_config_save(struct usb_mixer_interface *mixer)
1213{
1214	__le32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
1215
1216	scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1217		      &req, sizeof(u32),
1218		      NULL, 0);
1219}
1220
1221/* Delayed work to save config */
1222static void scarlett2_config_save_work(struct work_struct *work)
1223{
1224	struct scarlett2_data *private =
1225		container_of(work, struct scarlett2_data, work.work);
1226
1227	scarlett2_config_save(private->mixer);
1228}
1229
1230/* Send a USB message to set a SCARLETT2_CONFIG_* parameter */
1231static int scarlett2_usb_set_config(
1232	struct usb_mixer_interface *mixer,
1233	int config_item_num, int index, int value)
1234{
1235	struct scarlett2_data *private = mixer->private_data;
1236	const struct scarlett2_device_info *info = private->info;
1237	const struct scarlett2_config *config_item =
1238	       &scarlett2_config_items[info->has_mixer][config_item_num];
1239	struct {
1240		__le32 offset;
1241		__le32 bytes;
1242		__le32 value;
1243	} __packed req;
1244	__le32 req2;
1245	int offset, size;
1246	int err;
1247
1248	/* Cancel any pending NVRAM save */
1249	cancel_delayed_work_sync(&private->work);
1250
1251	/* Convert config_item->size in bits to size in bytes and
1252	 * calculate offset
1253	 */
1254	if (config_item->size >= 8) {
1255		size = config_item->size / 8;
1256		offset = config_item->offset + index * size;
1257
1258	/* If updating a bit, retrieve the old value, set/clear the
1259	 * bit as needed, and update value
1260	 */
1261	} else {
1262		u8 tmp;
1263
1264		size = 1;
1265		offset = config_item->offset;
1266
1267		scarlett2_usb_get(mixer, offset, &tmp, 1);
1268		if (value)
1269			tmp |= (1 << index);
1270		else
1271			tmp &= ~(1 << index);
1272
1273		value = tmp;
1274	}
1275
1276	/* Send the configuration parameter data */
1277	req.offset = cpu_to_le32(offset);
1278	req.bytes = cpu_to_le32(size);
1279	req.value = cpu_to_le32(value);
1280	err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
1281			    &req, sizeof(u32) * 2 + size,
1282			    NULL, 0);
1283	if (err < 0)
1284		return err;
1285
1286	/* Activate the change */
1287	req2 = cpu_to_le32(config_item->activate);
1288	err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1289			    &req2, sizeof(req2), NULL, 0);
1290	if (err < 0)
1291		return err;
1292
1293	/* Schedule the change to be written to NVRAM */
1294	if (config_item->activate != SCARLETT2_USB_CONFIG_SAVE)
1295		schedule_delayed_work(&private->work, msecs_to_jiffies(2000));
1296
1297	return 0;
1298}
1299
1300/* Send a USB message to get sync status; result placed in *sync */
1301static int scarlett2_usb_get_sync_status(
1302	struct usb_mixer_interface *mixer,
1303	u8 *sync)
1304{
1305	__le32 data;
1306	int err;
1307
1308	err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC,
1309			    NULL, 0, &data, sizeof(data));
1310	if (err < 0)
1311		return err;
1312
1313	*sync = !!data;
1314	return 0;
1315}
1316
1317/* Send a USB message to get volume status; result placed in *buf */
1318static int scarlett2_usb_get_volume_status(
1319	struct usb_mixer_interface *mixer,
1320	struct scarlett2_usb_volume_status *buf)
1321{
1322	return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
1323				 buf, sizeof(*buf));
1324}
1325
1326/* Send a USB message to get the volumes for all inputs of one mix
1327 * and put the values into private->mix[]
1328 */
1329static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer,
1330				 int mix_num)
1331{
1332	struct scarlett2_data *private = mixer->private_data;
1333	const struct scarlett2_device_info *info = private->info;
1334
1335	int num_mixer_in =
1336		info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1337	int err, i, j, k;
1338
1339	struct {
1340		__le16 mix_num;
1341		__le16 count;
1342	} __packed req;
1343
1344	__le16 data[SCARLETT2_INPUT_MIX_MAX];
1345
1346	req.mix_num = cpu_to_le16(mix_num);
1347	req.count = cpu_to_le16(num_mixer_in);
1348
1349	err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX,
1350			    &req, sizeof(req),
1351			    data, num_mixer_in * sizeof(u16));
1352	if (err < 0)
1353		return err;
1354
1355	for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++) {
1356		u16 mixer_value = le16_to_cpu(data[i]);
1357
1358		for (k = 0; k < SCARLETT2_MIXER_VALUE_COUNT; k++)
1359			if (scarlett2_mixer_values[k] >= mixer_value)
1360				break;
1361		if (k == SCARLETT2_MIXER_VALUE_COUNT)
1362			k = SCARLETT2_MIXER_MAX_VALUE;
1363		private->mix[j] = k;
1364	}
1365
1366	return 0;
1367}
1368
1369/* Send a USB message to set the volumes for all inputs of one mix
1370 * (values obtained from private->mix[])
1371 */
1372static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
1373				 int mix_num)
1374{
1375	struct scarlett2_data *private = mixer->private_data;
1376	const struct scarlett2_device_info *info = private->info;
1377
1378	struct {
1379		__le16 mix_num;
1380		__le16 data[SCARLETT2_INPUT_MIX_MAX];
1381	} __packed req;
1382
1383	int i, j;
1384	int num_mixer_in =
1385		info->port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
1386
1387	req.mix_num = cpu_to_le16(mix_num);
1388
1389	for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
1390		req.data[i] = cpu_to_le16(
1391			scarlett2_mixer_values[private->mix[j]]
1392		);
1393
1394	return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
1395			     &req, (num_mixer_in + 1) * sizeof(u16),
1396			     NULL, 0);
1397}
1398
1399/* Convert a port number index (per info->port_count) to a hardware ID */
1400static u32 scarlett2_mux_src_num_to_id(
1401	const int port_count[][SCARLETT2_PORT_DIRNS], int num)
1402{
1403	int port_type;
1404
1405	for (port_type = 0;
1406	     port_type < SCARLETT2_PORT_TYPE_COUNT;
1407	     port_type++) {
1408		if (num < port_count[port_type][SCARLETT2_PORT_IN])
1409			return scarlett2_ports[port_type].id | num;
1410		num -= port_count[port_type][SCARLETT2_PORT_IN];
1411	}
1412
1413	/* Oops */
1414	return 0;
1415}
1416
1417/* Convert a hardware ID to a port number index */
1418static u32 scarlett2_mux_id_to_num(
1419	const int port_count[][SCARLETT2_PORT_DIRNS], int direction, u32 id)
1420{
1421	int port_type;
1422	int port_num = 0;
1423
1424	for (port_type = 0;
1425	     port_type < SCARLETT2_PORT_TYPE_COUNT;
1426	     port_type++) {
1427		int base = scarlett2_ports[port_type].id;
1428		int count = port_count[port_type][direction];
1429
1430		if (id >= base && id < base + count)
1431			return port_num + id - base;
1432		port_num += count;
1433	}
1434
1435	/* Oops */
1436	return -1;
1437}
1438
1439/* Convert one mux entry from the interface and load into private->mux[] */
1440static void scarlett2_usb_populate_mux(struct scarlett2_data *private,
1441				       u32 mux_entry)
1442{
1443	const struct scarlett2_device_info *info = private->info;
1444	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1445
1446	int dst_idx, src_idx;
1447
1448	dst_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_OUT,
1449					  mux_entry & 0xFFF);
1450	if (dst_idx < 0)
1451		return;
1452
1453	if (dst_idx >= private->num_mux_dsts) {
1454		usb_audio_err(private->mixer->chip,
1455			"BUG: scarlett2_mux_id_to_num(%06x, OUT): %d >= %d",
1456			mux_entry, dst_idx, private->num_mux_dsts);
1457		return;
1458	}
1459
1460	src_idx = scarlett2_mux_id_to_num(port_count, SCARLETT2_PORT_IN,
1461					  mux_entry >> 12);
1462	if (src_idx < 0)
1463		return;
1464
1465	if (src_idx >= private->num_mux_srcs) {
1466		usb_audio_err(private->mixer->chip,
1467			"BUG: scarlett2_mux_id_to_num(%06x, IN): %d >= %d",
1468			mux_entry, src_idx, private->num_mux_srcs);
1469		return;
1470	}
1471
1472	private->mux[dst_idx] = src_idx;
1473}
1474
1475/* Send USB message to get mux inputs and then populate private->mux[] */
1476static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
1477{
1478	struct scarlett2_data *private = mixer->private_data;
1479	int count = private->num_mux_dsts;
1480	int err, i;
1481
1482	struct {
1483		__le16 num;
1484		__le16 count;
1485	} __packed req;
1486
1487	__le32 data[SCARLETT2_MUX_MAX];
1488
1489	private->mux_updated = 0;
1490
1491	req.num = 0;
1492	req.count = cpu_to_le16(count);
1493
1494	err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
1495			    &req, sizeof(req),
1496			    data, count * sizeof(u32));
1497	if (err < 0)
1498		return err;
1499
1500	for (i = 0; i < count; i++)
1501		scarlett2_usb_populate_mux(private, le32_to_cpu(data[i]));
1502
1503	return 0;
1504}
1505
1506/* Send USB messages to set mux inputs */
1507static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
1508{
1509	struct scarlett2_data *private = mixer->private_data;
1510	const struct scarlett2_device_info *info = private->info;
1511	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1512	int table;
1513
1514	struct {
1515		__le16 pad;
1516		__le16 num;
1517		__le32 data[SCARLETT2_MUX_MAX];
1518	} __packed req;
1519
1520	req.pad = 0;
1521
1522	/* set mux settings for each rate */
1523	for (table = 0; table < SCARLETT2_MUX_TABLES; table++) {
1524		const struct scarlett2_mux_entry *entry;
1525
1526		/* i counts over the output array */
1527		int i = 0, err;
1528
1529		req.num = cpu_to_le16(table);
1530
1531		/* loop through each entry */
1532		for (entry = info->mux_assignment[table];
1533		     entry->count;
1534		     entry++) {
1535			int j;
1536			int port_type = entry->port_type;
1537			int port_idx = entry->start;
1538			int mux_idx = scarlett2_get_port_start_num(port_count,
1539				SCARLETT2_PORT_OUT, port_type) + port_idx;
1540			int dst_id = scarlett2_ports[port_type].id + port_idx;
1541
1542			/* Empty slots */
1543			if (!dst_id) {
1544				for (j = 0; j < entry->count; j++)
1545					req.data[i++] = 0;
1546				continue;
1547			}
1548
1549			/* Non-empty mux slots use the lower 12 bits
1550			 * for the destination and next 12 bits for
1551			 * the source
1552			 */
1553			for (j = 0; j < entry->count; j++) {
1554				int src_id = scarlett2_mux_src_num_to_id(
1555					port_count, private->mux[mux_idx++]);
1556				req.data[i++] = cpu_to_le32(dst_id |
1557							    src_id << 12);
1558				dst_id++;
1559			}
1560		}
1561
1562		err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
1563				    &req, (i + 1) * sizeof(u32),
1564				    NULL, 0);
1565		if (err < 0)
1566			return err;
1567	}
1568
1569	return 0;
1570}
1571
1572/* Send USB message to get meter levels */
1573static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
1574					  u16 num_meters, u16 *levels)
1575{
1576	struct {
1577		__le16 pad;
1578		__le16 num_meters;
1579		__le32 magic;
1580	} __packed req;
1581	u32 resp[SCARLETT2_MAX_METERS];
1582	int i, err;
1583
1584	req.pad = 0;
1585	req.num_meters = cpu_to_le16(num_meters);
1586	req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
1587	err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER,
1588			    &req, sizeof(req), resp, num_meters * sizeof(u32));
1589	if (err < 0)
1590		return err;
1591
1592	/* copy, convert to u16 */
1593	for (i = 0; i < num_meters; i++)
1594		levels[i] = resp[i];
1595
1596	return 0;
1597}
1598
1599/*** Control Functions ***/
1600
1601/* helper function to create a new control */
1602static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
1603				 const struct snd_kcontrol_new *ncontrol,
1604				 int index, int channels, const char *name,
1605				 struct snd_kcontrol **kctl_return)
1606{
1607	struct snd_kcontrol *kctl;
1608	struct usb_mixer_elem_info *elem;
1609	int err;
1610
1611	elem = kzalloc(sizeof(*elem), GFP_KERNEL);
1612	if (!elem)
1613		return -ENOMEM;
1614
1615	/* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code
1616	 * ignores them for resume and other operations.
1617	 * Also, the head.id field is set to 0, as we don't use this field.
1618	 */
1619	elem->head.mixer = mixer;
1620	elem->control = index;
1621	elem->head.id = 0;
1622	elem->channels = channels;
1623	elem->val_type = USB_MIXER_BESPOKEN;
1624
1625	kctl = snd_ctl_new1(ncontrol, elem);
1626	if (!kctl) {
1627		kfree(elem);
1628		return -ENOMEM;
1629	}
1630	kctl->private_free = snd_usb_mixer_elem_free;
1631
1632	strscpy(kctl->id.name, name, sizeof(kctl->id.name));
1633
1634	err = snd_usb_mixer_add_control(&elem->head, kctl);
1635	if (err < 0)
1636		return err;
1637
1638	if (kctl_return)
1639		*kctl_return = kctl;
1640
1641	return 0;
1642}
1643
1644/*** Sync Control ***/
1645
1646/* Update sync control after receiving notification that the status
1647 * has changed
1648 */
1649static int scarlett2_update_sync(struct usb_mixer_interface *mixer)
1650{
1651	struct scarlett2_data *private = mixer->private_data;
1652
1653	private->sync_updated = 0;
1654	return scarlett2_usb_get_sync_status(mixer, &private->sync);
1655}
1656
1657static int scarlett2_sync_ctl_info(struct snd_kcontrol *kctl,
1658				   struct snd_ctl_elem_info *uinfo)
1659{
1660	static const char *texts[2] = {
1661		"Unlocked", "Locked"
1662	};
1663	return snd_ctl_enum_info(uinfo, 1, 2, texts);
1664}
1665
1666static int scarlett2_sync_ctl_get(struct snd_kcontrol *kctl,
1667				  struct snd_ctl_elem_value *ucontrol)
1668{
1669	struct usb_mixer_elem_info *elem = kctl->private_data;
1670	struct usb_mixer_interface *mixer = elem->head.mixer;
1671	struct scarlett2_data *private = mixer->private_data;
1672
1673	mutex_lock(&private->data_mutex);
1674	if (private->sync_updated)
1675		scarlett2_update_sync(mixer);
1676	ucontrol->value.enumerated.item[0] = private->sync;
1677	mutex_unlock(&private->data_mutex);
1678
1679	return 0;
1680}
1681
1682static const struct snd_kcontrol_new scarlett2_sync_ctl = {
1683	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1684	.access = SNDRV_CTL_ELEM_ACCESS_READ,
1685	.name = "",
1686	.info = scarlett2_sync_ctl_info,
1687	.get  = scarlett2_sync_ctl_get
1688};
1689
1690static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer)
1691{
1692	struct scarlett2_data *private = mixer->private_data;
1693
1694	/* devices without a mixer also don't support reporting sync status */
1695	if (!private->info->has_mixer)
1696		return 0;
1697
1698	return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl,
1699				     0, 1, "Sync Status", &private->sync_ctl);
1700}
1701
1702/*** Analogue Line Out Volume Controls ***/
1703
1704/* Update hardware volume controls after receiving notification that
1705 * they have changed
1706 */
1707static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
1708{
1709	struct scarlett2_data *private = mixer->private_data;
1710	const struct scarlett2_device_info *info = private->info;
1711	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
1712	struct scarlett2_usb_volume_status volume_status;
1713	int num_line_out =
1714		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
1715	int err, i;
1716	int mute;
1717
1718	private->vol_updated = 0;
1719
1720	err = scarlett2_usb_get_volume_status(mixer, &volume_status);
1721	if (err < 0)
1722		return err;
1723
1724	private->master_vol = clamp(
1725		volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
1726		0, SCARLETT2_VOLUME_BIAS);
1727
1728	if (info->line_out_hw_vol)
1729		for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
1730			private->dim_mute[i] = !!volume_status.dim_mute[i];
1731
1732	mute = private->dim_mute[SCARLETT2_BUTTON_MUTE];
1733
1734	for (i = 0; i < num_line_out; i++)
1735		if (private->vol_sw_hw_switch[i]) {
1736			private->vol[i] = private->master_vol;
1737			private->mute_switch[i] = mute;
1738		}
1739
1740	return 0;
1741}
1742
1743static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
1744				     struct snd_ctl_elem_info *uinfo)
1745{
1746	struct usb_mixer_elem_info *elem = kctl->private_data;
1747
1748	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1749	uinfo->count = elem->channels;
1750	uinfo->value.integer.min = 0;
1751	uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
1752	uinfo->value.integer.step = 1;
1753	return 0;
1754}
1755
1756static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
1757					   struct snd_ctl_elem_value *ucontrol)
1758{
1759	struct usb_mixer_elem_info *elem = kctl->private_data;
1760	struct usb_mixer_interface *mixer = elem->head.mixer;
1761	struct scarlett2_data *private = mixer->private_data;
1762
1763	mutex_lock(&private->data_mutex);
1764	if (private->vol_updated)
1765		scarlett2_update_volumes(mixer);
1766	mutex_unlock(&private->data_mutex);
1767
1768	ucontrol->value.integer.value[0] = private->master_vol;
1769	return 0;
1770}
1771
1772static int line_out_remap(struct scarlett2_data *private, int index)
1773{
1774	const struct scarlett2_device_info *info = private->info;
1775
1776	if (!info->line_out_remap_enable)
1777		return index;
1778	return info->line_out_remap[index];
1779}
1780
1781static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
1782				    struct snd_ctl_elem_value *ucontrol)
1783{
1784	struct usb_mixer_elem_info *elem = kctl->private_data;
1785	struct usb_mixer_interface *mixer = elem->head.mixer;
1786	struct scarlett2_data *private = mixer->private_data;
1787	int index = line_out_remap(private, elem->control);
1788
1789	mutex_lock(&private->data_mutex);
1790	if (private->vol_updated)
1791		scarlett2_update_volumes(mixer);
1792	mutex_unlock(&private->data_mutex);
1793
1794	ucontrol->value.integer.value[0] = private->vol[index];
1795	return 0;
1796}
1797
1798static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
1799				    struct snd_ctl_elem_value *ucontrol)
1800{
1801	struct usb_mixer_elem_info *elem = kctl->private_data;
1802	struct usb_mixer_interface *mixer = elem->head.mixer;
1803	struct scarlett2_data *private = mixer->private_data;
1804	int index = line_out_remap(private, elem->control);
1805	int oval, val, err = 0;
1806
1807	mutex_lock(&private->data_mutex);
1808
1809	oval = private->vol[index];
1810	val = ucontrol->value.integer.value[0];
1811
1812	if (oval == val)
1813		goto unlock;
1814
1815	private->vol[index] = val;
1816	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1817				       index, val - SCARLETT2_VOLUME_BIAS);
1818	if (err == 0)
1819		err = 1;
1820
1821unlock:
1822	mutex_unlock(&private->data_mutex);
1823	return err;
1824}
1825
1826static const DECLARE_TLV_DB_MINMAX(
1827	db_scale_scarlett2_gain, -SCARLETT2_VOLUME_BIAS * 100, 0
1828);
1829
1830static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
1831	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1832	.access = SNDRV_CTL_ELEM_ACCESS_READ |
1833		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1834	.name = "",
1835	.info = scarlett2_volume_ctl_info,
1836	.get  = scarlett2_master_volume_ctl_get,
1837	.private_value = 0, /* max value */
1838	.tlv = { .p = db_scale_scarlett2_gain }
1839};
1840
1841static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
1842	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1843	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1844		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1845	.name = "",
1846	.info = scarlett2_volume_ctl_info,
1847	.get  = scarlett2_volume_ctl_get,
1848	.put  = scarlett2_volume_ctl_put,
1849	.private_value = 0, /* max value */
1850	.tlv = { .p = db_scale_scarlett2_gain }
1851};
1852
1853/*** Mute Switch Controls ***/
1854
1855static int scarlett2_mute_ctl_get(struct snd_kcontrol *kctl,
1856					struct snd_ctl_elem_value *ucontrol)
1857{
1858	struct usb_mixer_elem_info *elem = kctl->private_data;
1859	struct usb_mixer_interface *mixer = elem->head.mixer;
1860	struct scarlett2_data *private = mixer->private_data;
1861	int index = line_out_remap(private, elem->control);
1862
1863	mutex_lock(&private->data_mutex);
1864	if (private->vol_updated)
1865		scarlett2_update_volumes(mixer);
1866	mutex_unlock(&private->data_mutex);
1867
1868	ucontrol->value.integer.value[0] = private->mute_switch[index];
1869	return 0;
1870}
1871
1872static int scarlett2_mute_ctl_put(struct snd_kcontrol *kctl,
1873					struct snd_ctl_elem_value *ucontrol)
1874{
1875	struct usb_mixer_elem_info *elem = kctl->private_data;
1876	struct usb_mixer_interface *mixer = elem->head.mixer;
1877	struct scarlett2_data *private = mixer->private_data;
1878	int index = line_out_remap(private, elem->control);
1879	int oval, val, err = 0;
1880
1881	mutex_lock(&private->data_mutex);
1882
1883	oval = private->mute_switch[index];
1884	val = !!ucontrol->value.integer.value[0];
1885
1886	if (oval == val)
1887		goto unlock;
1888
1889	private->mute_switch[index] = val;
1890
1891	/* Send mute change to the device */
1892	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
1893				       index, val);
1894	if (err == 0)
1895		err = 1;
1896
1897unlock:
1898	mutex_unlock(&private->data_mutex);
1899	return err;
1900}
1901
1902static const struct snd_kcontrol_new scarlett2_mute_ctl = {
1903	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1904	.name = "",
1905	.info = snd_ctl_boolean_mono_info,
1906	.get  = scarlett2_mute_ctl_get,
1907	.put  = scarlett2_mute_ctl_put,
1908};
1909
1910/*** HW/SW Volume Switch Controls ***/
1911
1912static void scarlett2_sw_hw_ctl_ro(struct scarlett2_data *private, int index)
1913{
1914	private->sw_hw_ctls[index]->vd[0].access &=
1915		~SNDRV_CTL_ELEM_ACCESS_WRITE;
1916}
1917
1918static void scarlett2_sw_hw_ctl_rw(struct scarlett2_data *private, int index)
1919{
1920	private->sw_hw_ctls[index]->vd[0].access |=
1921		SNDRV_CTL_ELEM_ACCESS_WRITE;
1922}
1923
1924static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
1925					 struct snd_ctl_elem_info *uinfo)
1926{
1927	static const char *const values[2] = {
1928		"SW", "HW"
1929	};
1930
1931	return snd_ctl_enum_info(uinfo, 1, 2, values);
1932}
1933
1934static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
1935					struct snd_ctl_elem_value *ucontrol)
1936{
1937	struct usb_mixer_elem_info *elem = kctl->private_data;
1938	struct scarlett2_data *private = elem->head.mixer->private_data;
1939	int index = line_out_remap(private, elem->control);
1940
1941	ucontrol->value.enumerated.item[0] = private->vol_sw_hw_switch[index];
1942	return 0;
1943}
1944
1945static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer,
1946					   int index, int value)
1947{
1948	struct scarlett2_data *private = mixer->private_data;
1949	struct snd_card *card = mixer->chip->card;
1950
1951	/* Set/Clear write bits */
1952	if (value) {
1953		private->vol_ctls[index]->vd[0].access |=
1954			SNDRV_CTL_ELEM_ACCESS_WRITE;
1955		private->mute_ctls[index]->vd[0].access |=
1956			SNDRV_CTL_ELEM_ACCESS_WRITE;
1957	} else {
1958		private->vol_ctls[index]->vd[0].access &=
1959			~SNDRV_CTL_ELEM_ACCESS_WRITE;
1960		private->mute_ctls[index]->vd[0].access &=
1961			~SNDRV_CTL_ELEM_ACCESS_WRITE;
1962	}
1963
1964	/* Notify of write bit and possible value change */
1965	snd_ctl_notify(card,
1966		       SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
1967		       &private->vol_ctls[index]->id);
1968	snd_ctl_notify(card,
1969		       SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO,
1970		       &private->mute_ctls[index]->id);
1971}
1972
1973static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer,
1974				  int ctl_index, int val)
1975{
1976	struct scarlett2_data *private = mixer->private_data;
1977	int index = line_out_remap(private, ctl_index);
1978	int err;
1979
1980	private->vol_sw_hw_switch[index] = val;
1981
1982	/* Change access mode to RO (hardware controlled volume)
1983	 * or RW (software controlled volume)
1984	 */
1985	scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val);
1986
1987	/* Reset volume/mute to master volume/mute */
1988	private->vol[index] = private->master_vol;
1989	private->mute_switch[index] = private->dim_mute[SCARLETT2_BUTTON_MUTE];
1990
1991	/* Set SW volume to current HW volume */
1992	err = scarlett2_usb_set_config(
1993		mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1994		index, private->master_vol - SCARLETT2_VOLUME_BIAS);
1995	if (err < 0)
1996		return err;
1997
1998	/* Set SW mute to current HW mute */
1999	err = scarlett2_usb_set_config(
2000		mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2001		index, private->dim_mute[SCARLETT2_BUTTON_MUTE]);
2002	if (err < 0)
2003		return err;
2004
2005	/* Send SW/HW switch change to the device */
2006	return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
2007					index, val);
2008}
2009
2010static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
2011					struct snd_ctl_elem_value *ucontrol)
2012{
2013	struct usb_mixer_elem_info *elem = kctl->private_data;
2014	struct usb_mixer_interface *mixer = elem->head.mixer;
2015	struct scarlett2_data *private = mixer->private_data;
2016	int ctl_index = elem->control;
2017	int index = line_out_remap(private, ctl_index);
2018	int oval, val, err = 0;
2019
2020	mutex_lock(&private->data_mutex);
2021
2022	oval = private->vol_sw_hw_switch[index];
2023	val = !!ucontrol->value.enumerated.item[0];
2024
2025	if (oval == val)
2026		goto unlock;
2027
2028	err = scarlett2_sw_hw_change(mixer, ctl_index, val);
2029	if (err == 0)
2030		err = 1;
2031
2032unlock:
2033	mutex_unlock(&private->data_mutex);
2034	return err;
2035}
2036
2037static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
2038	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2039	.name = "",
2040	.info = scarlett2_sw_hw_enum_ctl_info,
2041	.get  = scarlett2_sw_hw_enum_ctl_get,
2042	.put  = scarlett2_sw_hw_enum_ctl_put,
2043};
2044
2045/*** Line Level/Instrument Level Switch Controls ***/
2046
2047static int scarlett2_update_input_other(struct usb_mixer_interface *mixer)
2048{
2049	struct scarlett2_data *private = mixer->private_data;
2050	const struct scarlett2_device_info *info = private->info;
2051
2052	private->input_other_updated = 0;
2053
2054	if (info->level_input_count) {
2055		int err = scarlett2_usb_get_config(
2056			mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2057			info->level_input_count + info->level_input_first,
2058			private->level_switch);
2059		if (err < 0)
2060			return err;
2061	}
2062
2063	if (info->pad_input_count) {
2064		int err = scarlett2_usb_get_config(
2065			mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2066			info->pad_input_count, private->pad_switch);
2067		if (err < 0)
2068			return err;
2069	}
2070
2071	if (info->air_input_count) {
2072		int err = scarlett2_usb_get_config(
2073			mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2074			info->air_input_count, private->air_switch);
2075		if (err < 0)
2076			return err;
2077	}
2078
2079	if (info->phantom_count) {
2080		int err = scarlett2_usb_get_config(
2081			mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2082			info->phantom_count, private->phantom_switch);
2083		if (err < 0)
2084			return err;
2085
2086		err = scarlett2_usb_get_config(
2087			mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
2088			1, &private->phantom_persistence);
2089		if (err < 0)
2090			return err;
2091	}
2092
2093	return 0;
2094}
2095
2096static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
2097					 struct snd_ctl_elem_info *uinfo)
2098{
2099	static const char *const values[2] = {
2100		"Line", "Inst"
2101	};
2102
2103	return snd_ctl_enum_info(uinfo, 1, 2, values);
2104}
2105
2106static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
2107					struct snd_ctl_elem_value *ucontrol)
2108{
2109	struct usb_mixer_elem_info *elem = kctl->private_data;
2110	struct usb_mixer_interface *mixer = elem->head.mixer;
2111	struct scarlett2_data *private = mixer->private_data;
2112	const struct scarlett2_device_info *info = private->info;
2113
2114	int index = elem->control + info->level_input_first;
2115
2116	mutex_lock(&private->data_mutex);
2117	if (private->input_other_updated)
2118		scarlett2_update_input_other(mixer);
2119	ucontrol->value.enumerated.item[0] = private->level_switch[index];
2120	mutex_unlock(&private->data_mutex);
2121
2122	return 0;
2123}
2124
2125static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
2126					struct snd_ctl_elem_value *ucontrol)
2127{
2128	struct usb_mixer_elem_info *elem = kctl->private_data;
2129	struct usb_mixer_interface *mixer = elem->head.mixer;
2130	struct scarlett2_data *private = mixer->private_data;
2131	const struct scarlett2_device_info *info = private->info;
2132
2133	int index = elem->control + info->level_input_first;
2134	int oval, val, err = 0;
2135
2136	mutex_lock(&private->data_mutex);
2137
2138	oval = private->level_switch[index];
2139	val = !!ucontrol->value.enumerated.item[0];
2140
2141	if (oval == val)
2142		goto unlock;
2143
2144	private->level_switch[index] = val;
2145
2146	/* Send switch change to the device */
2147	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2148				       index, val);
2149	if (err == 0)
2150		err = 1;
2151
2152unlock:
2153	mutex_unlock(&private->data_mutex);
2154	return err;
2155}
2156
2157static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
2158	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2159	.name = "",
2160	.info = scarlett2_level_enum_ctl_info,
2161	.get  = scarlett2_level_enum_ctl_get,
2162	.put  = scarlett2_level_enum_ctl_put,
2163};
2164
2165/*** Pad Switch Controls ***/
2166
2167static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
2168				 struct snd_ctl_elem_value *ucontrol)
2169{
2170	struct usb_mixer_elem_info *elem = kctl->private_data;
2171	struct usb_mixer_interface *mixer = elem->head.mixer;
2172	struct scarlett2_data *private = mixer->private_data;
2173
2174	mutex_lock(&private->data_mutex);
2175	if (private->input_other_updated)
2176		scarlett2_update_input_other(mixer);
2177	ucontrol->value.integer.value[0] =
2178		private->pad_switch[elem->control];
2179	mutex_unlock(&private->data_mutex);
2180
2181	return 0;
2182}
2183
2184static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
2185				 struct snd_ctl_elem_value *ucontrol)
2186{
2187	struct usb_mixer_elem_info *elem = kctl->private_data;
2188	struct usb_mixer_interface *mixer = elem->head.mixer;
2189	struct scarlett2_data *private = mixer->private_data;
2190
2191	int index = elem->control;
2192	int oval, val, err = 0;
2193
2194	mutex_lock(&private->data_mutex);
2195
2196	oval = private->pad_switch[index];
2197	val = !!ucontrol->value.integer.value[0];
2198
2199	if (oval == val)
2200		goto unlock;
2201
2202	private->pad_switch[index] = val;
2203
2204	/* Send switch change to the device */
2205	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2206				       index, val);
2207	if (err == 0)
2208		err = 1;
2209
2210unlock:
2211	mutex_unlock(&private->data_mutex);
2212	return err;
2213}
2214
2215static const struct snd_kcontrol_new scarlett2_pad_ctl = {
2216	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2217	.name = "",
2218	.info = snd_ctl_boolean_mono_info,
2219	.get  = scarlett2_pad_ctl_get,
2220	.put  = scarlett2_pad_ctl_put,
2221};
2222
2223/*** Air Switch Controls ***/
2224
2225static int scarlett2_air_ctl_get(struct snd_kcontrol *kctl,
2226				 struct snd_ctl_elem_value *ucontrol)
2227{
2228	struct usb_mixer_elem_info *elem = kctl->private_data;
2229	struct usb_mixer_interface *mixer = elem->head.mixer;
2230	struct scarlett2_data *private = mixer->private_data;
2231
2232	mutex_lock(&private->data_mutex);
2233	if (private->input_other_updated)
2234		scarlett2_update_input_other(mixer);
2235	ucontrol->value.integer.value[0] = private->air_switch[elem->control];
2236	mutex_unlock(&private->data_mutex);
2237
2238	return 0;
2239}
2240
2241static int scarlett2_air_ctl_put(struct snd_kcontrol *kctl,
2242				 struct snd_ctl_elem_value *ucontrol)
2243{
2244	struct usb_mixer_elem_info *elem = kctl->private_data;
2245	struct usb_mixer_interface *mixer = elem->head.mixer;
2246	struct scarlett2_data *private = mixer->private_data;
2247
2248	int index = elem->control;
2249	int oval, val, err = 0;
2250
2251	mutex_lock(&private->data_mutex);
2252
2253	oval = private->air_switch[index];
2254	val = !!ucontrol->value.integer.value[0];
2255
2256	if (oval == val)
2257		goto unlock;
2258
2259	private->air_switch[index] = val;
2260
2261	/* Send switch change to the device */
2262	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2263				       index, val);
2264	if (err == 0)
2265		err = 1;
2266
2267unlock:
2268	mutex_unlock(&private->data_mutex);
2269	return err;
2270}
2271
2272static const struct snd_kcontrol_new scarlett2_air_ctl = {
2273	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2274	.name = "",
2275	.info = snd_ctl_boolean_mono_info,
2276	.get  = scarlett2_air_ctl_get,
2277	.put  = scarlett2_air_ctl_put,
2278};
2279
2280/*** Phantom Switch Controls ***/
2281
2282static int scarlett2_phantom_ctl_get(struct snd_kcontrol *kctl,
2283				     struct snd_ctl_elem_value *ucontrol)
2284{
2285	struct usb_mixer_elem_info *elem = kctl->private_data;
2286	struct usb_mixer_interface *mixer = elem->head.mixer;
2287	struct scarlett2_data *private = mixer->private_data;
2288
2289	mutex_lock(&private->data_mutex);
2290	if (private->input_other_updated)
2291		scarlett2_update_input_other(mixer);
2292	ucontrol->value.integer.value[0] =
2293		private->phantom_switch[elem->control];
2294	mutex_unlock(&private->data_mutex);
2295
2296	return 0;
2297}
2298
2299static int scarlett2_phantom_ctl_put(struct snd_kcontrol *kctl,
2300				     struct snd_ctl_elem_value *ucontrol)
2301{
2302	struct usb_mixer_elem_info *elem = kctl->private_data;
2303	struct usb_mixer_interface *mixer = elem->head.mixer;
2304	struct scarlett2_data *private = mixer->private_data;
2305
2306	int index = elem->control;
2307	int oval, val, err = 0;
2308
2309	mutex_lock(&private->data_mutex);
2310
2311	oval = private->phantom_switch[index];
2312	val = !!ucontrol->value.integer.value[0];
2313
2314	if (oval == val)
2315		goto unlock;
2316
2317	private->phantom_switch[index] = val;
2318
2319	/* Send switch change to the device */
2320	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2321				       index, val);
2322	if (err == 0)
2323		err = 1;
2324
2325unlock:
2326	mutex_unlock(&private->data_mutex);
2327	return err;
2328}
2329
2330static const struct snd_kcontrol_new scarlett2_phantom_ctl = {
2331	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2332	.name = "",
2333	.info = snd_ctl_boolean_mono_info,
2334	.get  = scarlett2_phantom_ctl_get,
2335	.put  = scarlett2_phantom_ctl_put,
2336};
2337
2338/*** Phantom Persistence Control ***/
2339
2340static int scarlett2_phantom_persistence_ctl_get(
2341	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2342{
2343	struct usb_mixer_elem_info *elem = kctl->private_data;
2344	struct scarlett2_data *private = elem->head.mixer->private_data;
2345
2346	ucontrol->value.integer.value[0] = private->phantom_persistence;
2347	return 0;
2348}
2349
2350static int scarlett2_phantom_persistence_ctl_put(
2351	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2352{
2353	struct usb_mixer_elem_info *elem = kctl->private_data;
2354	struct usb_mixer_interface *mixer = elem->head.mixer;
2355	struct scarlett2_data *private = mixer->private_data;
2356
2357	int index = elem->control;
2358	int oval, val, err = 0;
2359
2360	mutex_lock(&private->data_mutex);
2361
2362	oval = private->phantom_persistence;
2363	val = !!ucontrol->value.integer.value[0];
2364
2365	if (oval == val)
2366		goto unlock;
2367
2368	private->phantom_persistence = val;
2369
2370	/* Send switch change to the device */
2371	err = scarlett2_usb_set_config(
2372		mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val);
2373	if (err == 0)
2374		err = 1;
2375
2376unlock:
2377	mutex_unlock(&private->data_mutex);
2378	return err;
2379}
2380
2381static const struct snd_kcontrol_new scarlett2_phantom_persistence_ctl = {
2382	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2383	.name = "",
2384	.info = snd_ctl_boolean_mono_info,
2385	.get  = scarlett2_phantom_persistence_ctl_get,
2386	.put  = scarlett2_phantom_persistence_ctl_put,
2387};
2388
2389/*** Direct Monitor Control ***/
2390
2391static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
2392{
2393	struct scarlett2_data *private = mixer->private_data;
2394	const struct scarlett2_device_info *info = private->info;
2395	int err;
2396
2397	/* monitor_other_enable[0] enables speaker switching
2398	 * monitor_other_enable[1] enables talkback
2399	 */
2400	u8 monitor_other_enable[2];
2401
2402	/* monitor_other_switch[0] activates the alternate speakers
2403	 * monitor_other_switch[1] activates talkback
2404	 */
2405	u8 monitor_other_switch[2];
2406
2407	private->monitor_other_updated = 0;
2408
2409	if (info->direct_monitor)
2410		return scarlett2_usb_get_config(
2411			mixer, SCARLETT2_CONFIG_DIRECT_MONITOR,
2412			1, &private->direct_monitor_switch);
2413
2414	/* if it doesn't do speaker switching then it also doesn't do
2415	 * talkback
2416	 */
2417	if (!info->has_speaker_switching)
2418		return 0;
2419
2420	err = scarlett2_usb_get_config(
2421		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2422		2, monitor_other_enable);
2423	if (err < 0)
2424		return err;
2425
2426	err = scarlett2_usb_get_config(
2427		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2428		2, monitor_other_switch);
2429	if (err < 0)
2430		return err;
2431
2432	if (!monitor_other_enable[0])
2433		private->speaker_switching_switch = 0;
2434	else
2435		private->speaker_switching_switch = monitor_other_switch[0] + 1;
2436
2437	if (info->has_talkback) {
2438		const int (*port_count)[SCARLETT2_PORT_DIRNS] =
2439			info->port_count;
2440		int num_mixes =
2441			port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2442		u16 bitmap;
2443		int i;
2444
2445		if (!monitor_other_enable[1])
2446			private->talkback_switch = 0;
2447		else
2448			private->talkback_switch = monitor_other_switch[1] + 1;
2449
2450		err = scarlett2_usb_get_config(mixer,
2451					       SCARLETT2_CONFIG_TALKBACK_MAP,
2452					       1, &bitmap);
2453		if (err < 0)
2454			return err;
2455		for (i = 0; i < num_mixes; i++, bitmap >>= 1)
2456			private->talkback_map[i] = bitmap & 1;
2457	}
2458
2459	return 0;
2460}
2461
2462static int scarlett2_direct_monitor_ctl_get(
2463	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2464{
2465	struct usb_mixer_elem_info *elem = kctl->private_data;
2466	struct usb_mixer_interface *mixer = elem->head.mixer;
2467	struct scarlett2_data *private = elem->head.mixer->private_data;
2468
2469	mutex_lock(&private->data_mutex);
2470	if (private->monitor_other_updated)
2471		scarlett2_update_monitor_other(mixer);
2472	ucontrol->value.enumerated.item[0] = private->direct_monitor_switch;
2473	mutex_unlock(&private->data_mutex);
2474
2475	return 0;
2476}
2477
2478static int scarlett2_direct_monitor_ctl_put(
2479	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2480{
2481	struct usb_mixer_elem_info *elem = kctl->private_data;
2482	struct usb_mixer_interface *mixer = elem->head.mixer;
2483	struct scarlett2_data *private = mixer->private_data;
2484
2485	int index = elem->control;
2486	int oval, val, err = 0;
2487
2488	mutex_lock(&private->data_mutex);
2489
2490	oval = private->direct_monitor_switch;
2491	val = min(ucontrol->value.enumerated.item[0], 2U);
2492
2493	if (oval == val)
2494		goto unlock;
2495
2496	private->direct_monitor_switch = val;
2497
2498	/* Send switch change to the device */
2499	err = scarlett2_usb_set_config(
2500		mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val);
2501	if (err == 0)
2502		err = 1;
2503
2504unlock:
2505	mutex_unlock(&private->data_mutex);
2506	return err;
2507}
2508
2509static int scarlett2_direct_monitor_stereo_enum_ctl_info(
2510	struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2511{
2512	static const char *const values[3] = {
2513		"Off", "Mono", "Stereo"
2514	};
2515
2516	return snd_ctl_enum_info(uinfo, 1, 3, values);
2517}
2518
2519/* Direct Monitor for Solo is mono-only and only needs a boolean control
2520 * Direct Monitor for 2i2 is selectable between Off/Mono/Stereo
2521 */
2522static const struct snd_kcontrol_new scarlett2_direct_monitor_ctl[2] = {
2523	{
2524		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2525		.name = "",
2526		.info = snd_ctl_boolean_mono_info,
2527		.get  = scarlett2_direct_monitor_ctl_get,
2528		.put  = scarlett2_direct_monitor_ctl_put,
2529	},
2530	{
2531		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2532		.name = "",
2533		.info = scarlett2_direct_monitor_stereo_enum_ctl_info,
2534		.get  = scarlett2_direct_monitor_ctl_get,
2535		.put  = scarlett2_direct_monitor_ctl_put,
2536	}
2537};
2538
2539static int scarlett2_add_direct_monitor_ctl(struct usb_mixer_interface *mixer)
2540{
2541	struct scarlett2_data *private = mixer->private_data;
2542	const struct scarlett2_device_info *info = private->info;
2543	const char *s;
2544
2545	if (!info->direct_monitor)
2546		return 0;
2547
2548	s = info->direct_monitor == 1
2549	      ? "Direct Monitor Playback Switch"
2550	      : "Direct Monitor Playback Enum";
2551
2552	return scarlett2_add_new_ctl(
2553		mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1],
2554		0, 1, s, &private->direct_monitor_ctl);
2555}
2556
2557/*** Speaker Switching Control ***/
2558
2559static int scarlett2_speaker_switch_enum_ctl_info(
2560	struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2561{
2562	static const char *const values[3] = {
2563		"Off", "Main", "Alt"
2564	};
2565
2566	return snd_ctl_enum_info(uinfo, 1, 3, values);
2567}
2568
2569static int scarlett2_speaker_switch_enum_ctl_get(
2570	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2571{
2572	struct usb_mixer_elem_info *elem = kctl->private_data;
2573	struct usb_mixer_interface *mixer = elem->head.mixer;
2574	struct scarlett2_data *private = mixer->private_data;
2575
2576	mutex_lock(&private->data_mutex);
2577	if (private->monitor_other_updated)
2578		scarlett2_update_monitor_other(mixer);
2579	ucontrol->value.enumerated.item[0] = private->speaker_switching_switch;
2580	mutex_unlock(&private->data_mutex);
2581
2582	return 0;
2583}
2584
2585/* when speaker switching gets enabled, switch the main/alt speakers
2586 * to HW volume and disable those controls
2587 */
2588static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer)
2589{
2590	struct snd_card *card = mixer->chip->card;
2591	struct scarlett2_data *private = mixer->private_data;
2592	int i, err;
2593
2594	for (i = 0; i < 4; i++) {
2595		int index = line_out_remap(private, i);
2596
2597		/* switch the main/alt speakers to HW volume */
2598		if (!private->vol_sw_hw_switch[index]) {
2599			err = scarlett2_sw_hw_change(private->mixer, i, 1);
2600			if (err < 0)
2601				return err;
2602		}
2603
2604		/* disable the line out SW/HW switch */
2605		scarlett2_sw_hw_ctl_ro(private, i);
2606		snd_ctl_notify(card,
2607			       SNDRV_CTL_EVENT_MASK_VALUE |
2608				 SNDRV_CTL_EVENT_MASK_INFO,
2609			       &private->sw_hw_ctls[i]->id);
2610	}
2611
2612	/* when the next monitor-other notify comes in, update the mux
2613	 * configuration
2614	 */
2615	private->speaker_switching_switched = 1;
2616
2617	return 0;
2618}
2619
2620/* when speaker switching gets disabled, reenable the hw/sw controls
2621 * and invalidate the routing
2622 */
2623static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer)
2624{
2625	struct snd_card *card = mixer->chip->card;
2626	struct scarlett2_data *private = mixer->private_data;
2627	int i;
2628
2629	/* enable the line out SW/HW switch */
2630	for (i = 0; i < 4; i++) {
2631		scarlett2_sw_hw_ctl_rw(private, i);
2632		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO,
2633			       &private->sw_hw_ctls[i]->id);
2634	}
2635
2636	/* when the next monitor-other notify comes in, update the mux
2637	 * configuration
2638	 */
2639	private->speaker_switching_switched = 1;
2640}
2641
2642static int scarlett2_speaker_switch_enum_ctl_put(
2643	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2644{
2645	struct usb_mixer_elem_info *elem = kctl->private_data;
2646	struct usb_mixer_interface *mixer = elem->head.mixer;
2647	struct scarlett2_data *private = mixer->private_data;
2648
2649	int oval, val, err = 0;
2650
2651	mutex_lock(&private->data_mutex);
2652
2653	oval = private->speaker_switching_switch;
2654	val = min(ucontrol->value.enumerated.item[0], 2U);
2655
2656	if (oval == val)
2657		goto unlock;
2658
2659	private->speaker_switching_switch = val;
2660
2661	/* enable/disable speaker switching */
2662	err = scarlett2_usb_set_config(
2663		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2664		0, !!val);
2665	if (err < 0)
2666		goto unlock;
2667
2668	/* if speaker switching is enabled, select main or alt */
2669	err = scarlett2_usb_set_config(
2670		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2671		0, val == 2);
2672	if (err < 0)
2673		goto unlock;
2674
2675	/* update controls if speaker switching gets enabled or disabled */
2676	if (!oval && val)
2677		err = scarlett2_speaker_switch_enable(mixer);
2678	else if (oval && !val)
2679		scarlett2_speaker_switch_disable(mixer);
2680
2681	if (err == 0)
2682		err = 1;
2683
2684unlock:
2685	mutex_unlock(&private->data_mutex);
2686	return err;
2687}
2688
2689static const struct snd_kcontrol_new scarlett2_speaker_switch_enum_ctl = {
2690	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2691	.name = "",
2692	.info = scarlett2_speaker_switch_enum_ctl_info,
2693	.get  = scarlett2_speaker_switch_enum_ctl_get,
2694	.put  = scarlett2_speaker_switch_enum_ctl_put,
2695};
2696
2697static int scarlett2_add_speaker_switch_ctl(
2698	struct usb_mixer_interface *mixer)
2699{
2700	struct scarlett2_data *private = mixer->private_data;
2701	const struct scarlett2_device_info *info = private->info;
2702
2703	if (!info->has_speaker_switching)
2704		return 0;
2705
2706	return scarlett2_add_new_ctl(
2707		mixer, &scarlett2_speaker_switch_enum_ctl,
2708		0, 1, "Speaker Switching Playback Enum",
2709		&private->speaker_switching_ctl);
2710}
2711
2712/*** Talkback and Talkback Map Controls ***/
2713
2714static int scarlett2_talkback_enum_ctl_info(
2715	struct snd_kcontrol *kctl, struct snd_ctl_elem_info *uinfo)
2716{
2717	static const char *const values[3] = {
2718		"Disabled", "Off", "On"
2719	};
2720
2721	return snd_ctl_enum_info(uinfo, 1, 3, values);
2722}
2723
2724static int scarlett2_talkback_enum_ctl_get(
2725	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2726{
2727	struct usb_mixer_elem_info *elem = kctl->private_data;
2728	struct usb_mixer_interface *mixer = elem->head.mixer;
2729	struct scarlett2_data *private = mixer->private_data;
2730
2731	mutex_lock(&private->data_mutex);
2732	if (private->monitor_other_updated)
2733		scarlett2_update_monitor_other(mixer);
2734	ucontrol->value.enumerated.item[0] = private->talkback_switch;
2735	mutex_unlock(&private->data_mutex);
2736
2737	return 0;
2738}
2739
2740static int scarlett2_talkback_enum_ctl_put(
2741	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2742{
2743	struct usb_mixer_elem_info *elem = kctl->private_data;
2744	struct usb_mixer_interface *mixer = elem->head.mixer;
2745	struct scarlett2_data *private = mixer->private_data;
2746
2747	int oval, val, err = 0;
2748
2749	mutex_lock(&private->data_mutex);
2750
2751	oval = private->talkback_switch;
2752	val = min(ucontrol->value.enumerated.item[0], 2U);
2753
2754	if (oval == val)
2755		goto unlock;
2756
2757	private->talkback_switch = val;
2758
2759	/* enable/disable talkback */
2760	err = scarlett2_usb_set_config(
2761		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2762		1, !!val);
2763	if (err < 0)
2764		goto unlock;
2765
2766	/* if talkback is enabled, select main or alt */
2767	err = scarlett2_usb_set_config(
2768		mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2769		1, val == 2);
2770	if (err == 0)
2771		err = 1;
2772
2773unlock:
2774	mutex_unlock(&private->data_mutex);
2775	return err;
2776}
2777
2778static const struct snd_kcontrol_new scarlett2_talkback_enum_ctl = {
2779	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2780	.name = "",
2781	.info = scarlett2_talkback_enum_ctl_info,
2782	.get  = scarlett2_talkback_enum_ctl_get,
2783	.put  = scarlett2_talkback_enum_ctl_put,
2784};
2785
2786static int scarlett2_talkback_map_ctl_get(
2787	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2788{
2789	struct usb_mixer_elem_info *elem = kctl->private_data;
2790	struct usb_mixer_interface *mixer = elem->head.mixer;
2791	struct scarlett2_data *private = mixer->private_data;
2792	int index = elem->control;
2793
2794	ucontrol->value.integer.value[0] = private->talkback_map[index];
2795
2796	return 0;
2797}
2798
2799static int scarlett2_talkback_map_ctl_put(
2800	struct snd_kcontrol *kctl, struct snd_ctl_elem_value *ucontrol)
2801{
2802	struct usb_mixer_elem_info *elem = kctl->private_data;
2803	struct usb_mixer_interface *mixer = elem->head.mixer;
2804	struct scarlett2_data *private = mixer->private_data;
2805	const int (*port_count)[SCARLETT2_PORT_DIRNS] =
2806		private->info->port_count;
2807	int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2808
2809	int index = elem->control;
2810	int oval, val, err = 0, i;
2811	u16 bitmap = 0;
2812
2813	mutex_lock(&private->data_mutex);
2814
2815	oval = private->talkback_map[index];
2816	val = !!ucontrol->value.integer.value[0];
2817
2818	if (oval == val)
2819		goto unlock;
2820
2821	private->talkback_map[index] = val;
2822
2823	for (i = 0; i < num_mixes; i++)
2824		bitmap |= private->talkback_map[i] << i;
2825
2826	/* Send updated bitmap to the device */
2827	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP,
2828				       0, bitmap);
2829	if (err == 0)
2830		err = 1;
2831
2832unlock:
2833	mutex_unlock(&private->data_mutex);
2834	return err;
2835}
2836
2837static const struct snd_kcontrol_new scarlett2_talkback_map_ctl = {
2838	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2839	.name = "",
2840	.info = snd_ctl_boolean_mono_info,
2841	.get  = scarlett2_talkback_map_ctl_get,
2842	.put  = scarlett2_talkback_map_ctl_put,
2843};
2844
2845static int scarlett2_add_talkback_ctls(
2846	struct usb_mixer_interface *mixer)
2847{
2848	struct scarlett2_data *private = mixer->private_data;
2849	const struct scarlett2_device_info *info = private->info;
2850	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2851	int num_mixes = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
2852	int err, i;
2853	char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2854
2855	if (!info->has_talkback)
2856		return 0;
2857
2858	err = scarlett2_add_new_ctl(
2859		mixer, &scarlett2_talkback_enum_ctl,
2860		0, 1, "Talkback Playback Enum",
2861		&private->talkback_ctl);
2862	if (err < 0)
2863		return err;
2864
2865	for (i = 0; i < num_mixes; i++) {
2866		snprintf(s, sizeof(s),
2867			 "Talkback Mix %c Playback Switch", i + 'A');
2868		err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl,
2869					    i, 1, s, NULL);
2870		if (err < 0)
2871			return err;
2872	}
2873
2874	return 0;
2875}
2876
2877/*** Dim/Mute Controls ***/
2878
2879static int scarlett2_dim_mute_ctl_get(struct snd_kcontrol *kctl,
2880				      struct snd_ctl_elem_value *ucontrol)
2881{
2882	struct usb_mixer_elem_info *elem = kctl->private_data;
2883	struct usb_mixer_interface *mixer = elem->head.mixer;
2884	struct scarlett2_data *private = mixer->private_data;
2885
2886	mutex_lock(&private->data_mutex);
2887	if (private->vol_updated)
2888		scarlett2_update_volumes(mixer);
2889	mutex_unlock(&private->data_mutex);
2890
2891	ucontrol->value.integer.value[0] = private->dim_mute[elem->control];
2892	return 0;
2893}
2894
2895static int scarlett2_dim_mute_ctl_put(struct snd_kcontrol *kctl,
2896				      struct snd_ctl_elem_value *ucontrol)
2897{
2898	struct usb_mixer_elem_info *elem = kctl->private_data;
2899	struct usb_mixer_interface *mixer = elem->head.mixer;
2900	struct scarlett2_data *private = mixer->private_data;
2901	const struct scarlett2_device_info *info = private->info;
2902	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2903	int num_line_out =
2904		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
2905
2906	int index = elem->control;
2907	int oval, val, err = 0, i;
2908
2909	mutex_lock(&private->data_mutex);
2910
2911	oval = private->dim_mute[index];
2912	val = !!ucontrol->value.integer.value[0];
2913
2914	if (oval == val)
2915		goto unlock;
2916
2917	private->dim_mute[index] = val;
2918
2919	/* Send switch change to the device */
2920	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE,
2921				       index, val);
2922	if (err == 0)
2923		err = 1;
2924
2925	if (index == SCARLETT2_BUTTON_MUTE)
2926		for (i = 0; i < num_line_out; i++) {
2927			int line_index = line_out_remap(private, i);
2928
2929			if (private->vol_sw_hw_switch[line_index]) {
2930				private->mute_switch[line_index] = val;
2931				snd_ctl_notify(mixer->chip->card,
2932					       SNDRV_CTL_EVENT_MASK_VALUE,
2933					       &private->mute_ctls[i]->id);
2934			}
2935		}
2936
2937unlock:
2938	mutex_unlock(&private->data_mutex);
2939	return err;
2940}
2941
2942static const struct snd_kcontrol_new scarlett2_dim_mute_ctl = {
2943	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2944	.name = "",
2945	.info = snd_ctl_boolean_mono_info,
2946	.get  = scarlett2_dim_mute_ctl_get,
2947	.put  = scarlett2_dim_mute_ctl_put
2948};
2949
2950/*** Create the analogue output controls ***/
2951
2952static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
2953{
2954	struct scarlett2_data *private = mixer->private_data;
2955	const struct scarlett2_device_info *info = private->info;
2956	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
2957	int num_line_out =
2958		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
2959	int err, i;
2960	char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
2961
2962	/* Add R/O HW volume control */
2963	if (info->line_out_hw_vol) {
2964		snprintf(s, sizeof(s), "Master HW Playback Volume");
2965		err = scarlett2_add_new_ctl(mixer,
2966					    &scarlett2_master_volume_ctl,
2967					    0, 1, s, &private->master_vol_ctl);
2968		if (err < 0)
2969			return err;
2970	}
2971
2972	/* Add volume controls */
2973	for (i = 0; i < num_line_out; i++) {
2974		int index = line_out_remap(private, i);
2975
2976		/* Fader */
2977		if (info->line_out_descrs[i])
2978			snprintf(s, sizeof(s),
2979				 "Line %02d (%s) Playback Volume",
2980				 i + 1, info->line_out_descrs[i]);
2981		else
2982			snprintf(s, sizeof(s),
2983				 "Line %02d Playback Volume",
2984				 i + 1);
2985		err = scarlett2_add_new_ctl(mixer,
2986					    &scarlett2_line_out_volume_ctl,
2987					    i, 1, s, &private->vol_ctls[i]);
2988		if (err < 0)
2989			return err;
2990
2991		/* Mute Switch */
2992		snprintf(s, sizeof(s),
2993			 "Line %02d Mute Playback Switch",
2994			 i + 1);
2995		err = scarlett2_add_new_ctl(mixer,
2996					    &scarlett2_mute_ctl,
2997					    i, 1, s,
2998					    &private->mute_ctls[i]);
2999		if (err < 0)
3000			return err;
3001
3002		/* Make the fader and mute controls read-only if the
3003		 * SW/HW switch is set to HW
3004		 */
3005		if (private->vol_sw_hw_switch[index])
3006			scarlett2_vol_ctl_set_writable(mixer, i, 0);
3007
3008		/* SW/HW Switch */
3009		if (info->line_out_hw_vol) {
3010			snprintf(s, sizeof(s),
3011				 "Line Out %02d Volume Control Playback Enum",
3012				 i + 1);
3013			err = scarlett2_add_new_ctl(mixer,
3014						    &scarlett2_sw_hw_enum_ctl,
3015						    i, 1, s,
3016						    &private->sw_hw_ctls[i]);
3017			if (err < 0)
3018				return err;
3019
3020			/* Make the switch read-only if the line is
3021			 * involved in speaker switching
3022			 */
3023			if (private->speaker_switching_switch && i < 4)
3024				scarlett2_sw_hw_ctl_ro(private, i);
3025		}
3026	}
3027
3028	/* Add dim/mute controls */
3029	if (info->line_out_hw_vol)
3030		for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++) {
3031			err = scarlett2_add_new_ctl(
3032				mixer, &scarlett2_dim_mute_ctl,
3033				i, 1, scarlett2_dim_mute_names[i],
3034				&private->dim_mute_ctls[i]);
3035			if (err < 0)
3036				return err;
3037		}
3038
3039	return 0;
3040}
3041
3042/*** Create the analogue input controls ***/
3043
3044static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
3045{
3046	struct scarlett2_data *private = mixer->private_data;
3047	const struct scarlett2_device_info *info = private->info;
3048	int err, i;
3049	char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3050	const char *fmt = "Line In %d %s Capture %s";
3051	const char *fmt2 = "Line In %d-%d %s Capture %s";
3052
3053	/* Add input level (line/inst) controls */
3054	for (i = 0; i < info->level_input_count; i++) {
3055		snprintf(s, sizeof(s), fmt, i + 1 + info->level_input_first,
3056			 "Level", "Enum");
3057		err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
3058					    i, 1, s, &private->level_ctls[i]);
3059		if (err < 0)
3060			return err;
3061	}
3062
3063	/* Add input pad controls */
3064	for (i = 0; i < info->pad_input_count; i++) {
3065		snprintf(s, sizeof(s), fmt, i + 1, "Pad", "Switch");
3066		err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
3067					    i, 1, s, &private->pad_ctls[i]);
3068		if (err < 0)
3069			return err;
3070	}
3071
3072	/* Add input air controls */
3073	for (i = 0; i < info->air_input_count; i++) {
3074		snprintf(s, sizeof(s), fmt, i + 1, "Air", "Switch");
3075		err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl,
3076					    i, 1, s, &private->air_ctls[i]);
3077		if (err < 0)
3078			return err;
3079	}
3080
3081	/* Add input phantom controls */
3082	if (info->inputs_per_phantom == 1) {
3083		for (i = 0; i < info->phantom_count; i++) {
3084			snprintf(s, sizeof(s), fmt, i + 1,
3085				 "Phantom Power", "Switch");
3086			err = scarlett2_add_new_ctl(
3087				mixer, &scarlett2_phantom_ctl,
3088				i, 1, s, &private->phantom_ctls[i]);
3089			if (err < 0)
3090				return err;
3091		}
3092	} else if (info->inputs_per_phantom > 1) {
3093		for (i = 0; i < info->phantom_count; i++) {
3094			int from = i * info->inputs_per_phantom + 1;
3095			int to = (i + 1) * info->inputs_per_phantom;
3096
3097			snprintf(s, sizeof(s), fmt2, from, to,
3098				 "Phantom Power", "Switch");
3099			err = scarlett2_add_new_ctl(
3100				mixer, &scarlett2_phantom_ctl,
3101				i, 1, s, &private->phantom_ctls[i]);
3102			if (err < 0)
3103				return err;
3104		}
3105	}
3106	if (info->phantom_count) {
3107		err = scarlett2_add_new_ctl(
3108			mixer, &scarlett2_phantom_persistence_ctl, 0, 1,
3109			"Phantom Power Persistence Capture Switch", NULL);
3110		if (err < 0)
3111			return err;
3112	}
3113
3114	return 0;
3115}
3116
3117/*** Mixer Volume Controls ***/
3118
3119static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
3120				    struct snd_ctl_elem_info *uinfo)
3121{
3122	struct usb_mixer_elem_info *elem = kctl->private_data;
3123
3124	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3125	uinfo->count = elem->channels;
3126	uinfo->value.integer.min = 0;
3127	uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
3128	uinfo->value.integer.step = 1;
3129	return 0;
3130}
3131
3132static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
3133				   struct snd_ctl_elem_value *ucontrol)
3134{
3135	struct usb_mixer_elem_info *elem = kctl->private_data;
3136	struct scarlett2_data *private = elem->head.mixer->private_data;
3137
3138	ucontrol->value.integer.value[0] = private->mix[elem->control];
3139	return 0;
3140}
3141
3142static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
3143				   struct snd_ctl_elem_value *ucontrol)
3144{
3145	struct usb_mixer_elem_info *elem = kctl->private_data;
3146	struct usb_mixer_interface *mixer = elem->head.mixer;
3147	struct scarlett2_data *private = mixer->private_data;
3148	const struct scarlett2_device_info *info = private->info;
3149	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3150	int oval, val, num_mixer_in, mix_num, err = 0;
3151	int index = elem->control;
3152
3153	mutex_lock(&private->data_mutex);
3154
3155	oval = private->mix[index];
3156	val = ucontrol->value.integer.value[0];
3157	num_mixer_in = port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3158	mix_num = index / num_mixer_in;
3159
3160	if (oval == val)
3161		goto unlock;
3162
3163	private->mix[index] = val;
3164	err = scarlett2_usb_set_mix(mixer, mix_num);
3165	if (err == 0)
3166		err = 1;
3167
3168unlock:
3169	mutex_unlock(&private->data_mutex);
3170	return err;
3171}
3172
3173static const DECLARE_TLV_DB_MINMAX(
3174	db_scale_scarlett2_mixer,
3175	SCARLETT2_MIXER_MIN_DB * 100,
3176	SCARLETT2_MIXER_MAX_DB * 100
3177);
3178
3179static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
3180	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3181	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
3182		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
3183	.name = "",
3184	.info = scarlett2_mixer_ctl_info,
3185	.get  = scarlett2_mixer_ctl_get,
3186	.put  = scarlett2_mixer_ctl_put,
3187	.private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
3188	.tlv = { .p = db_scale_scarlett2_mixer }
3189};
3190
3191static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
3192{
3193	struct scarlett2_data *private = mixer->private_data;
3194	const struct scarlett2_device_info *info = private->info;
3195	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3196	int err, i, j;
3197	int index;
3198	char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3199
3200	int num_inputs =
3201		port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_OUT];
3202	int num_outputs =
3203		port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3204
3205	for (i = 0, index = 0; i < num_outputs; i++)
3206		for (j = 0; j < num_inputs; j++, index++) {
3207			snprintf(s, sizeof(s),
3208				 "Mix %c Input %02d Playback Volume",
3209				 'A' + i, j + 1);
3210			err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
3211						    index, 1, s, NULL);
3212			if (err < 0)
3213				return err;
3214		}
3215
3216	return 0;
3217}
3218
3219/*** Mux Source Selection Controls ***/
3220
3221static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
3222					   struct snd_ctl_elem_info *uinfo)
3223{
3224	struct usb_mixer_elem_info *elem = kctl->private_data;
3225	struct scarlett2_data *private = elem->head.mixer->private_data;
3226	const struct scarlett2_device_info *info = private->info;
3227	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3228	unsigned int item = uinfo->value.enumerated.item;
3229	int items = private->num_mux_srcs;
3230	int port_type;
3231
3232	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
3233	uinfo->count = elem->channels;
3234	uinfo->value.enumerated.items = items;
3235
3236	if (item >= items)
3237		item = uinfo->value.enumerated.item = items - 1;
3238
3239	for (port_type = 0;
3240	     port_type < SCARLETT2_PORT_TYPE_COUNT;
3241	     port_type++) {
3242		if (item < port_count[port_type][SCARLETT2_PORT_IN]) {
3243			const struct scarlett2_port *port =
3244				&scarlett2_ports[port_type];
3245
3246			sprintf(uinfo->value.enumerated.name,
3247				port->src_descr, item + port->src_num_offset);
3248			return 0;
3249		}
3250		item -= port_count[port_type][SCARLETT2_PORT_IN];
3251	}
3252
3253	return -EINVAL;
3254}
3255
3256static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
3257					  struct snd_ctl_elem_value *ucontrol)
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	const struct scarlett2_device_info *info = private->info;
3263	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3264	int line_out_count =
3265		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3266	int index = elem->control;
3267
3268	if (index < line_out_count)
3269		index = line_out_remap(private, index);
3270
3271	mutex_lock(&private->data_mutex);
3272	if (private->mux_updated)
3273		scarlett2_usb_get_mux(mixer);
3274	ucontrol->value.enumerated.item[0] = private->mux[index];
3275	mutex_unlock(&private->data_mutex);
3276
3277	return 0;
3278}
3279
3280static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
3281					  struct snd_ctl_elem_value *ucontrol)
3282{
3283	struct usb_mixer_elem_info *elem = kctl->private_data;
3284	struct usb_mixer_interface *mixer = elem->head.mixer;
3285	struct scarlett2_data *private = mixer->private_data;
3286	const struct scarlett2_device_info *info = private->info;
3287	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3288	int line_out_count =
3289		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3290	int index = elem->control;
3291	int oval, val, err = 0;
3292
3293	if (index < line_out_count)
3294		index = line_out_remap(private, index);
3295
3296	mutex_lock(&private->data_mutex);
3297
3298	oval = private->mux[index];
3299	val = min(ucontrol->value.enumerated.item[0],
3300		  private->num_mux_srcs - 1U);
3301
3302	if (oval == val)
3303		goto unlock;
3304
3305	private->mux[index] = val;
3306	err = scarlett2_usb_set_mux(mixer);
3307	if (err == 0)
3308		err = 1;
3309
3310unlock:
3311	mutex_unlock(&private->data_mutex);
3312	return err;
3313}
3314
3315static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
3316	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3317	.name = "",
3318	.info = scarlett2_mux_src_enum_ctl_info,
3319	.get  = scarlett2_mux_src_enum_ctl_get,
3320	.put  = scarlett2_mux_src_enum_ctl_put,
3321};
3322
3323static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
3324{
3325	struct scarlett2_data *private = mixer->private_data;
3326	const struct scarlett2_device_info *info = private->info;
3327	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3328	int port_type, channel, i;
3329
3330	for (i = 0, port_type = 0;
3331	     port_type < SCARLETT2_PORT_TYPE_COUNT;
3332	     port_type++) {
3333		for (channel = 0;
3334		     channel < port_count[port_type][SCARLETT2_PORT_OUT];
3335		     channel++, i++) {
3336			int err;
3337			char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
3338			const char *const descr =
3339				scarlett2_ports[port_type].dst_descr;
3340
3341			snprintf(s, sizeof(s) - 5, descr, channel + 1);
3342			strcat(s, " Enum");
3343
3344			err = scarlett2_add_new_ctl(mixer,
3345						    &scarlett2_mux_src_enum_ctl,
3346						    i, 1, s,
3347						    &private->mux_ctls[i]);
3348			if (err < 0)
3349				return err;
3350		}
3351	}
3352
3353	return 0;
3354}
3355
3356/*** Meter Controls ***/
3357
3358static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
3359				    struct snd_ctl_elem_info *uinfo)
3360{
3361	struct usb_mixer_elem_info *elem = kctl->private_data;
3362
3363	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
3364	uinfo->count = elem->channels;
3365	uinfo->value.integer.min = 0;
3366	uinfo->value.integer.max = 4095;
3367	uinfo->value.integer.step = 1;
3368	return 0;
3369}
3370
3371static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
3372				   struct snd_ctl_elem_value *ucontrol)
3373{
3374	struct usb_mixer_elem_info *elem = kctl->private_data;
3375	u16 meter_levels[SCARLETT2_MAX_METERS];
3376	int i, err;
3377
3378	err = scarlett2_usb_get_meter_levels(elem->head.mixer, elem->channels,
3379					     meter_levels);
3380	if (err < 0)
3381		return err;
3382
3383	for (i = 0; i < elem->channels; i++)
3384		ucontrol->value.integer.value[i] = meter_levels[i];
3385
3386	return 0;
3387}
3388
3389static const struct snd_kcontrol_new scarlett2_meter_ctl = {
3390	.iface = SNDRV_CTL_ELEM_IFACE_PCM,
3391	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
3392	.name = "",
3393	.info = scarlett2_meter_ctl_info,
3394	.get  = scarlett2_meter_ctl_get
3395};
3396
3397static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
3398{
3399	struct scarlett2_data *private = mixer->private_data;
3400
3401	/* devices without a mixer also don't support reporting levels */
3402	if (!private->info->has_mixer)
3403		return 0;
3404
3405	return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
3406				     0, private->num_mux_dsts,
3407				     "Level Meter", NULL);
3408}
3409
3410/*** MSD Controls ***/
3411
3412static int scarlett2_msd_ctl_get(struct snd_kcontrol *kctl,
3413				 struct snd_ctl_elem_value *ucontrol)
3414{
3415	struct usb_mixer_elem_info *elem = kctl->private_data;
3416	struct scarlett2_data *private = elem->head.mixer->private_data;
3417
3418	ucontrol->value.integer.value[0] = private->msd_switch;
3419	return 0;
3420}
3421
3422static int scarlett2_msd_ctl_put(struct snd_kcontrol *kctl,
3423				 struct snd_ctl_elem_value *ucontrol)
3424{
3425	struct usb_mixer_elem_info *elem = kctl->private_data;
3426	struct usb_mixer_interface *mixer = elem->head.mixer;
3427	struct scarlett2_data *private = mixer->private_data;
3428
3429	int oval, val, err = 0;
3430
3431	mutex_lock(&private->data_mutex);
3432
3433	oval = private->msd_switch;
3434	val = !!ucontrol->value.integer.value[0];
3435
3436	if (oval == val)
3437		goto unlock;
3438
3439	private->msd_switch = val;
3440
3441	/* Send switch change to the device */
3442	err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3443				       0, val);
3444	if (err == 0)
3445		err = 1;
3446
3447unlock:
3448	mutex_unlock(&private->data_mutex);
3449	return err;
3450}
3451
3452static const struct snd_kcontrol_new scarlett2_msd_ctl = {
3453	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3454	.name = "",
3455	.info = snd_ctl_boolean_mono_info,
3456	.get  = scarlett2_msd_ctl_get,
3457	.put  = scarlett2_msd_ctl_put,
3458};
3459
3460static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer)
3461{
3462	struct scarlett2_data *private = mixer->private_data;
3463	const struct scarlett2_device_info *info = private->info;
3464
3465	if (!info->has_msd_mode)
3466		return 0;
3467
3468	/* If MSD mode is off, hide the switch by default */
3469	if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE))
3470		return 0;
3471
3472	/* Add MSD control */
3473	return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl,
3474				     0, 1, "MSD Mode Switch", NULL);
3475}
3476
3477/*** Cleanup/Suspend Callbacks ***/
3478
3479static void scarlett2_private_free(struct usb_mixer_interface *mixer)
3480{
3481	struct scarlett2_data *private = mixer->private_data;
3482
3483	cancel_delayed_work_sync(&private->work);
3484	kfree(private);
3485	mixer->private_data = NULL;
3486}
3487
3488static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
3489{
3490	struct scarlett2_data *private = mixer->private_data;
3491
3492	if (cancel_delayed_work_sync(&private->work))
3493		scarlett2_config_save(private->mixer);
3494}
3495
3496/*** Initialisation ***/
3497
3498static void scarlett2_count_mux_io(struct scarlett2_data *private)
3499{
3500	const struct scarlett2_device_info *info = private->info;
3501	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3502	int port_type, srcs = 0, dsts = 0;
3503
3504	for (port_type = 0;
3505	     port_type < SCARLETT2_PORT_TYPE_COUNT;
3506	     port_type++) {
3507		srcs += port_count[port_type][SCARLETT2_PORT_IN];
3508		dsts += port_count[port_type][SCARLETT2_PORT_OUT];
3509	}
3510
3511	private->num_mux_srcs = srcs;
3512	private->num_mux_dsts = dsts;
3513}
3514
3515/* Look through the interface descriptors for the Focusrite Control
3516 * interface (bInterfaceClass = 255 Vendor Specific Class) and set
3517 * bInterfaceNumber, bEndpointAddress, wMaxPacketSize, and bInterval
3518 * in private
3519 */
3520static int scarlett2_find_fc_interface(struct usb_device *dev,
3521				       struct scarlett2_data *private)
3522{
3523	struct usb_host_config *config = dev->actconfig;
3524	int i;
3525
3526	for (i = 0; i < config->desc.bNumInterfaces; i++) {
3527		struct usb_interface *intf = config->interface[i];
3528		struct usb_interface_descriptor *desc =
3529			&intf->altsetting[0].desc;
3530		struct usb_endpoint_descriptor *epd;
3531
3532		if (desc->bInterfaceClass != 255)
3533			continue;
3534
3535		epd = get_endpoint(intf->altsetting, 0);
3536		private->bInterfaceNumber = desc->bInterfaceNumber;
3537		private->bEndpointAddress = epd->bEndpointAddress &
3538			USB_ENDPOINT_NUMBER_MASK;
3539		private->wMaxPacketSize = le16_to_cpu(epd->wMaxPacketSize);
3540		private->bInterval = epd->bInterval;
3541		return 0;
3542	}
3543
3544	return -EINVAL;
3545}
3546
3547/* Initialise private data */
3548static int scarlett2_init_private(struct usb_mixer_interface *mixer,
3549				  const struct scarlett2_device_info *info)
3550{
3551	struct scarlett2_data *private =
3552		kzalloc(sizeof(struct scarlett2_data), GFP_KERNEL);
3553
3554	if (!private)
3555		return -ENOMEM;
3556
3557	mutex_init(&private->usb_mutex);
3558	mutex_init(&private->data_mutex);
3559	INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
3560
3561	mixer->private_data = private;
3562	mixer->private_free = scarlett2_private_free;
3563	mixer->private_suspend = scarlett2_private_suspend;
3564
3565	private->info = info;
3566	scarlett2_count_mux_io(private);
3567	private->scarlett2_seq = 0;
3568	private->mixer = mixer;
3569
3570	return scarlett2_find_fc_interface(mixer->chip->dev, private);
3571}
3572
3573/* Cargo cult proprietary initialisation sequence */
3574static int scarlett2_usb_init(struct usb_mixer_interface *mixer)
3575{
3576	struct usb_device *dev = mixer->chip->dev;
3577	struct scarlett2_data *private = mixer->private_data;
3578	u8 buf[24];
3579	int err;
3580
3581	if (usb_pipe_type_check(dev, usb_sndctrlpipe(dev, 0)))
3582		return -EINVAL;
3583
3584	/* step 0 */
3585	err = scarlett2_usb_rx(dev, private->bInterfaceNumber,
3586			       SCARLETT2_USB_CMD_INIT, buf, sizeof(buf));
3587	if (err < 0)
3588		return err;
3589
3590	/* step 1 */
3591	private->scarlett2_seq = 1;
3592	err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0);
3593	if (err < 0)
3594		return err;
3595
3596	/* step 2 */
3597	private->scarlett2_seq = 1;
3598	return scarlett2_usb(mixer, SCARLETT2_USB_INIT_2, NULL, 0, NULL, 84);
3599}
3600
3601/* Read configuration from the interface on start */
3602static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
3603{
3604	struct scarlett2_data *private = mixer->private_data;
3605	const struct scarlett2_device_info *info = private->info;
3606	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3607	int num_line_out =
3608		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3609	int num_mixer_out =
3610		port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
3611	struct scarlett2_usb_volume_status volume_status;
3612	int err, i;
3613
3614	if (info->has_msd_mode) {
3615		err = scarlett2_usb_get_config(
3616			mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3617			1, &private->msd_switch);
3618		if (err < 0)
3619			return err;
3620
3621		/* no other controls are created if MSD mode is on */
3622		if (private->msd_switch)
3623			return 0;
3624	}
3625
3626	err = scarlett2_update_input_other(mixer);
3627	if (err < 0)
3628		return err;
3629
3630	err = scarlett2_update_monitor_other(mixer);
3631	if (err < 0)
3632		return err;
3633
3634	/* the rest of the configuration is for devices with a mixer */
3635	if (!info->has_mixer)
3636		return 0;
3637
3638	err = scarlett2_update_sync(mixer);
3639	if (err < 0)
3640		return err;
3641
3642	err = scarlett2_usb_get_volume_status(mixer, &volume_status);
3643	if (err < 0)
3644		return err;
3645
3646	if (info->line_out_hw_vol)
3647		for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3648			private->dim_mute[i] = !!volume_status.dim_mute[i];
3649
3650	private->master_vol = clamp(
3651		volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
3652		0, SCARLETT2_VOLUME_BIAS);
3653
3654	for (i = 0; i < num_line_out; i++) {
3655		int volume, mute;
3656
3657		private->vol_sw_hw_switch[i] =
3658			info->line_out_hw_vol
3659				&& volume_status.sw_hw_switch[i];
3660
3661		volume = private->vol_sw_hw_switch[i]
3662			   ? volume_status.master_vol
3663			   : volume_status.sw_vol[i];
3664		volume = clamp(volume + SCARLETT2_VOLUME_BIAS,
3665			       0, SCARLETT2_VOLUME_BIAS);
3666		private->vol[i] = volume;
3667
3668		mute = private->vol_sw_hw_switch[i]
3669			 ? private->dim_mute[SCARLETT2_BUTTON_MUTE]
3670			 : volume_status.mute_switch[i];
3671		private->mute_switch[i] = mute;
3672	}
3673
3674	for (i = 0; i < num_mixer_out; i++) {
3675		err = scarlett2_usb_get_mix(mixer, i);
3676		if (err < 0)
3677			return err;
3678	}
3679
3680	return scarlett2_usb_get_mux(mixer);
3681}
3682
3683/* Notify on sync change */
3684static void scarlett2_notify_sync(
3685	struct usb_mixer_interface *mixer)
3686{
3687	struct scarlett2_data *private = mixer->private_data;
3688
3689	private->sync_updated = 1;
3690
3691	snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3692		       &private->sync_ctl->id);
3693}
3694
3695/* Notify on monitor change */
3696static void scarlett2_notify_monitor(
3697	struct usb_mixer_interface *mixer)
3698{
3699	struct snd_card *card = mixer->chip->card;
3700	struct scarlett2_data *private = mixer->private_data;
3701	const struct scarlett2_device_info *info = private->info;
3702	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3703	int num_line_out =
3704		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3705	int i;
3706
3707	/* if line_out_hw_vol is 0, there are no controls to update */
3708	if (!info->line_out_hw_vol)
3709		return;
3710
3711	private->vol_updated = 1;
3712
3713	snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3714		       &private->master_vol_ctl->id);
3715
3716	for (i = 0; i < num_line_out; i++)
3717		if (private->vol_sw_hw_switch[line_out_remap(private, i)])
3718			snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3719				       &private->vol_ctls[i]->id);
3720}
3721
3722/* Notify on dim/mute change */
3723static void scarlett2_notify_dim_mute(
3724	struct usb_mixer_interface *mixer)
3725{
3726	struct snd_card *card = mixer->chip->card;
3727	struct scarlett2_data *private = mixer->private_data;
3728	const struct scarlett2_device_info *info = private->info;
3729	const int (*port_count)[SCARLETT2_PORT_DIRNS] = info->port_count;
3730	int num_line_out =
3731		port_count[SCARLETT2_PORT_TYPE_ANALOGUE][SCARLETT2_PORT_OUT];
3732	int i;
3733
3734	private->vol_updated = 1;
3735
3736	if (!info->line_out_hw_vol)
3737		return;
3738
3739	for (i = 0; i < SCARLETT2_DIM_MUTE_COUNT; i++)
3740		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3741			       &private->dim_mute_ctls[i]->id);
3742
3743	for (i = 0; i < num_line_out; i++)
3744		if (private->vol_sw_hw_switch[line_out_remap(private, i)])
3745			snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3746				       &private->mute_ctls[i]->id);
3747}
3748
3749/* Notify on "input other" change (level/pad/air) */
3750static void scarlett2_notify_input_other(
3751	struct usb_mixer_interface *mixer)
3752{
3753	struct snd_card *card = mixer->chip->card;
3754	struct scarlett2_data *private = mixer->private_data;
3755	const struct scarlett2_device_info *info = private->info;
3756	int i;
3757
3758	private->input_other_updated = 1;
3759
3760	for (i = 0; i < info->level_input_count; i++)
3761		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3762			       &private->level_ctls[i]->id);
3763	for (i = 0; i < info->pad_input_count; i++)
3764		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3765			       &private->pad_ctls[i]->id);
3766	for (i = 0; i < info->air_input_count; i++)
3767		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3768			       &private->air_ctls[i]->id);
3769	for (i = 0; i < info->phantom_count; i++)
3770		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3771			       &private->phantom_ctls[i]->id);
3772}
3773
3774/* Notify on "monitor other" change (direct monitor, speaker
3775 * switching, talkback)
3776 */
3777static void scarlett2_notify_monitor_other(
3778	struct usb_mixer_interface *mixer)
3779{
3780	struct snd_card *card = mixer->chip->card;
3781	struct scarlett2_data *private = mixer->private_data;
3782	const struct scarlett2_device_info *info = private->info;
3783
3784	private->monitor_other_updated = 1;
3785
3786	if (info->direct_monitor) {
3787		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3788			       &private->direct_monitor_ctl->id);
3789		return;
3790	}
3791
3792	if (info->has_speaker_switching)
3793		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3794			       &private->speaker_switching_ctl->id);
3795
3796	if (info->has_talkback)
3797		snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3798			       &private->talkback_ctl->id);
3799
3800	/* if speaker switching was recently enabled or disabled,
3801	 * invalidate the dim/mute and mux enum controls
3802	 */
3803	if (private->speaker_switching_switched) {
3804		int i;
3805
3806		scarlett2_notify_dim_mute(mixer);
3807
3808		private->speaker_switching_switched = 0;
3809		private->mux_updated = 1;
3810
3811		for (i = 0; i < private->num_mux_dsts; i++)
3812			snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE,
3813				       &private->mux_ctls[i]->id);
3814	}
3815}
3816
3817/* Interrupt callback */
3818static void scarlett2_notify(struct urb *urb)
3819{
3820	struct usb_mixer_interface *mixer = urb->context;
3821	int len = urb->actual_length;
3822	int ustatus = urb->status;
3823	u32 data;
3824
3825	if (ustatus != 0 || len != 8)
3826		goto requeue;
3827
3828	data = le32_to_cpu(*(__le32 *)urb->transfer_buffer);
3829	if (data & SCARLETT2_USB_NOTIFY_SYNC)
3830		scarlett2_notify_sync(mixer);
3831	if (data & SCARLETT2_USB_NOTIFY_MONITOR)
3832		scarlett2_notify_monitor(mixer);
3833	if (data & SCARLETT2_USB_NOTIFY_DIM_MUTE)
3834		scarlett2_notify_dim_mute(mixer);
3835	if (data & SCARLETT2_USB_NOTIFY_INPUT_OTHER)
3836		scarlett2_notify_input_other(mixer);
3837	if (data & SCARLETT2_USB_NOTIFY_MONITOR_OTHER)
3838		scarlett2_notify_monitor_other(mixer);
3839
3840requeue:
3841	if (ustatus != -ENOENT &&
3842	    ustatus != -ECONNRESET &&
3843	    ustatus != -ESHUTDOWN) {
3844		urb->dev = mixer->chip->dev;
3845		usb_submit_urb(urb, GFP_ATOMIC);
3846	}
3847}
3848
3849static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
3850{
3851	struct usb_device *dev = mixer->chip->dev;
3852	struct scarlett2_data *private = mixer->private_data;
3853	unsigned int pipe = usb_rcvintpipe(dev, private->bEndpointAddress);
3854	void *transfer_buffer;
3855
3856	if (mixer->urb) {
3857		usb_audio_err(mixer->chip,
3858			      "%s: mixer urb already in use!\n", __func__);
3859		return 0;
3860	}
3861
3862	if (usb_pipe_type_check(dev, pipe))
3863		return -EINVAL;
3864
3865	mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
3866	if (!mixer->urb)
3867		return -ENOMEM;
3868
3869	transfer_buffer = kmalloc(private->wMaxPacketSize, GFP_KERNEL);
3870	if (!transfer_buffer)
3871		return -ENOMEM;
3872
3873	usb_fill_int_urb(mixer->urb, dev, pipe,
3874			 transfer_buffer, private->wMaxPacketSize,
3875			 scarlett2_notify, mixer, private->bInterval);
3876
3877	return usb_submit_urb(mixer->urb, GFP_KERNEL);
3878}
3879
3880static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
3881{
3882	const struct scarlett2_device_info **info = scarlett2_devices;
3883	int err;
3884
3885	/* Find device in scarlett2_devices */
3886	while (*info && (*info)->usb_id != mixer->chip->usb_id)
3887		info++;
3888	if (!*info)
3889		return -EINVAL;
3890
3891	/* Initialise private data */
3892	err = scarlett2_init_private(mixer, *info);
3893	if (err < 0)
3894		return err;
3895
3896	/* Send proprietary USB initialisation sequence */
3897	err = scarlett2_usb_init(mixer);
3898	if (err < 0)
3899		return err;
3900
3901	/* Read volume levels and controls from the interface */
3902	err = scarlett2_read_configs(mixer);
3903	if (err < 0)
3904		return err;
3905
3906	/* Create the MSD control */
3907	err = scarlett2_add_msd_ctl(mixer);
3908	if (err < 0)
3909		return err;
3910
3911	/* If MSD mode is enabled, don't create any other controls */
3912	if (((struct scarlett2_data *)mixer->private_data)->msd_switch)
3913		return 0;
3914
3915	/* Create the analogue output controls */
3916	err = scarlett2_add_line_out_ctls(mixer);
3917	if (err < 0)
3918		return err;
3919
3920	/* Create the analogue input controls */
3921	err = scarlett2_add_line_in_ctls(mixer);
3922	if (err < 0)
3923		return err;
3924
3925	/* Create the input, output, and mixer mux input selections */
3926	err = scarlett2_add_mux_enums(mixer);
3927	if (err < 0)
3928		return err;
3929
3930	/* Create the matrix mixer controls */
3931	err = scarlett2_add_mixer_ctls(mixer);
3932	if (err < 0)
3933		return err;
3934
3935	/* Create the level meter controls */
3936	err = scarlett2_add_meter_ctl(mixer);
3937	if (err < 0)
3938		return err;
3939
3940	/* Create the sync control */
3941	err = scarlett2_add_sync_ctl(mixer);
3942	if (err < 0)
3943		return err;
3944
3945	/* Create the direct monitor control */
3946	err = scarlett2_add_direct_monitor_ctl(mixer);
3947	if (err < 0)
3948		return err;
3949
3950	/* Create the speaker switching control */
3951	err = scarlett2_add_speaker_switch_ctl(mixer);
3952	if (err < 0)
3953		return err;
3954
3955	/* Create the talkback controls */
3956	err = scarlett2_add_talkback_ctls(mixer);
3957	if (err < 0)
3958		return err;
3959
3960	/* Set up the interrupt polling */
3961	err = scarlett2_init_notify(mixer);
3962	if (err < 0)
3963		return err;
3964
3965	return 0;
3966}
3967
3968int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
3969{
3970	struct snd_usb_audio *chip = mixer->chip;
3971	int err;
3972
3973	/* only use UAC_VERSION_2 */
3974	if (!mixer->protocol)
3975		return 0;
3976
3977	if (!(chip->setup & SCARLETT2_ENABLE)) {
3978		usb_audio_info(chip,
3979			"Focusrite Scarlett Gen 2/3 Mixer Driver disabled; "
3980			"use options snd_usb_audio vid=0x%04x pid=0x%04x "
3981			"device_setup=1 to enable and report any issues "
3982			"to g@b4.vu",
3983			USB_ID_VENDOR(chip->usb_id),
3984			USB_ID_PRODUCT(chip->usb_id));
3985		return 0;
3986	}
3987
3988	usb_audio_info(chip,
3989		"Focusrite Scarlett Gen 2/3 Mixer Driver enabled pid=0x%04x",
3990		USB_ID_PRODUCT(chip->usb_id));
3991
3992	err = snd_scarlett_gen2_controls_create(mixer);
3993	if (err < 0)
3994		usb_audio_err(mixer->chip,
3995			      "Error initialising Scarlett Mixer Driver: %d",
3996			      err);
3997
3998	return err;
3999}