This source file includes following definitions.
- scarlett2_get_port_start_num
- scarlett2_usb
- scarlett2_config_save
- scarlett2_config_save_work
- scarlett2_usb_set_config
- scarlett2_usb_get
- scarlett2_usb_get_config
- scarlett2_usb_get_volume_status
- scarlett2_usb_set_mix
- scarlett2_mux_src_num_to_id
- scarlett2_usb_set_mux
- scarlett2_usb_get_meter_levels
- scarlett2_add_new_ctl
- scarlett2_update_volumes
- scarlett2_volume_ctl_info
- scarlett2_master_volume_ctl_get
- scarlett2_volume_ctl_get
- scarlett2_volume_ctl_put
- scarlett2_sw_hw_enum_ctl_info
- scarlett2_sw_hw_enum_ctl_get
- scarlett2_sw_hw_enum_ctl_put
- scarlett2_level_enum_ctl_info
- scarlett2_level_enum_ctl_get
- scarlett2_level_enum_ctl_put
- scarlett2_pad_ctl_get
- scarlett2_pad_ctl_put
- scarlett2_button_ctl_get
- scarlett2_button_ctl_put
- scarlett2_add_line_out_ctls
- scarlett2_add_line_in_ctls
- scarlett2_mixer_ctl_info
- scarlett2_mixer_ctl_get
- scarlett2_mixer_ctl_put
- scarlett2_add_mixer_ctls
- scarlett2_mux_src_enum_ctl_info
- scarlett2_mux_src_enum_ctl_get
- scarlett2_mux_src_enum_ctl_put
- scarlett2_add_mux_enums
- scarlett2_meter_ctl_info
- scarlett2_meter_ctl_get
- scarlett2_add_meter_ctl
- scarlett2_private_free
- scarlett2_private_suspend
- scarlett2_count_mux_srcs
- scarlett2_init_routing
- scarlett2_init_private
- scarlett2_read_configs
- scarlett2_mixer_interrupt_vol_change
- scarlett2_mixer_interrupt_button_change
- scarlett2_mixer_interrupt
- scarlett2_mixer_status_create
- snd_scarlett_gen2_controls_create
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 #include <linux/slab.h>
96 #include <linux/usb.h>
97 #include <linux/moduleparam.h>
98
99 #include <sound/control.h>
100 #include <sound/tlv.h>
101
102 #include "usbaudio.h"
103 #include "mixer.h"
104 #include "helper.h"
105
106 #include "mixer_scarlett_gen2.h"
107
108
109 #define SCARLETT2_ENABLE 0x01
110
111
112 #define SCARLETT2_VOLUME_BIAS 127
113
114
115 #define SCARLETT2_MIXER_MIN_DB -80
116 #define SCARLETT2_MIXER_BIAS (-SCARLETT2_MIXER_MIN_DB * 2)
117 #define SCARLETT2_MIXER_MAX_DB 6
118 #define SCARLETT2_MIXER_MAX_VALUE \
119 ((SCARLETT2_MIXER_MAX_DB - SCARLETT2_MIXER_MIN_DB) * 2)
120
121
122
123
124 static const u16 scarlett2_mixer_values[173] = {
125 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
126 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 8,
127 9, 9, 10, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
128 23, 24, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 46, 48, 51,
129 54, 57, 61, 65, 68, 73, 77, 81, 86, 91, 97, 103, 109, 115,
130 122, 129, 137, 145, 154, 163, 173, 183, 194, 205, 217, 230,
131 244, 259, 274, 290, 307, 326, 345, 365, 387, 410, 434, 460,
132 487, 516, 547, 579, 614, 650, 689, 730, 773, 819, 867, 919,
133 973, 1031, 1092, 1157, 1225, 1298, 1375, 1456, 1543, 1634,
134 1731, 1833, 1942, 2057, 2179, 2308, 2445, 2590, 2744, 2906,
135 3078, 3261, 3454, 3659, 3876, 4105, 4349, 4606, 4879, 5168,
136 5475, 5799, 6143, 6507, 6892, 7301, 7733, 8192, 8677, 9191,
137 9736, 10313, 10924, 11571, 12257, 12983, 13752, 14567, 15430,
138 16345
139 };
140
141
142 #define SCARLETT2_ANALOGUE_MAX 10
143
144
145 #define SCARLETT2_LEVEL_SWITCH_MAX 2
146 #define SCARLETT2_PAD_SWITCH_MAX 4
147
148
149 #define SCARLETT2_INPUT_MIX_MAX 18
150
151
152 #define SCARLETT2_OUTPUT_MIX_MAX 10
153
154
155
156
157 #define SCARLETT2_MUX_MAX 64
158
159
160
161
162 #define SCARLETT2_NUM_METERS 56
163
164
165
166
167
168
169
170
171
172 enum {
173 SCARLETT2_PORT_TYPE_NONE = 0,
174 SCARLETT2_PORT_TYPE_ANALOGUE = 1,
175 SCARLETT2_PORT_TYPE_SPDIF = 2,
176 SCARLETT2_PORT_TYPE_ADAT = 3,
177 SCARLETT2_PORT_TYPE_MIX = 4,
178 SCARLETT2_PORT_TYPE_PCM = 5,
179 SCARLETT2_PORT_TYPE_COUNT = 6,
180 };
181
182
183 enum {
184 SCARLETT2_PORT_IN = 0,
185 SCARLETT2_PORT_OUT = 1,
186 SCARLETT2_PORT_OUT_44 = 2,
187 SCARLETT2_PORT_OUT_88 = 3,
188 SCARLETT2_PORT_OUT_176 = 4,
189 SCARLETT2_PORT_DIRECTIONS = 5,
190 };
191
192
193 #define SCARLETT2_BUTTON_MAX 2
194
195 static const char *const scarlett2_button_names[SCARLETT2_BUTTON_MAX] = {
196 "Mute", "Dim"
197 };
198
199
200
201
202
203
204
205
206 struct scarlett2_ports {
207 u16 id;
208 int num[SCARLETT2_PORT_DIRECTIONS];
209 const char * const src_descr;
210 int src_num_offset;
211 const char * const dst_descr;
212 };
213
214 struct scarlett2_device_info {
215 u8 line_out_hw_vol;
216 u8 button_count;
217 u8 level_input_count;
218 u8 pad_input_count;
219 const char * const line_out_descrs[SCARLETT2_ANALOGUE_MAX];
220 struct scarlett2_ports ports[SCARLETT2_PORT_TYPE_COUNT];
221 };
222
223 struct scarlett2_mixer_data {
224 struct usb_mixer_interface *mixer;
225 struct mutex usb_mutex;
226 struct mutex data_mutex;
227 struct delayed_work work;
228 const struct scarlett2_device_info *info;
229 int num_mux_srcs;
230 u16 scarlett2_seq;
231 u8 vol_updated;
232 u8 master_vol;
233 u8 vol[SCARLETT2_ANALOGUE_MAX];
234 u8 vol_sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
235 u8 level_switch[SCARLETT2_LEVEL_SWITCH_MAX];
236 u8 pad_switch[SCARLETT2_PAD_SWITCH_MAX];
237 u8 buttons[SCARLETT2_BUTTON_MAX];
238 struct snd_kcontrol *master_vol_ctl;
239 struct snd_kcontrol *vol_ctls[SCARLETT2_ANALOGUE_MAX];
240 struct snd_kcontrol *button_ctls[SCARLETT2_BUTTON_MAX];
241 u8 mux[SCARLETT2_MUX_MAX];
242 u8 mix[SCARLETT2_INPUT_MIX_MAX * SCARLETT2_OUTPUT_MIX_MAX];
243 };
244
245
246
247 static const struct scarlett2_device_info s6i6_gen2_info = {
248
249
250
251 .level_input_count = 2,
252
253
254 .pad_input_count = 2,
255
256 .line_out_descrs = {
257 "Monitor L",
258 "Monitor R",
259 "Headphones L",
260 "Headphones R",
261 },
262
263 .ports = {
264 [SCARLETT2_PORT_TYPE_NONE] = {
265 .id = 0x000,
266 .num = { 1, 0, 8, 8, 8 },
267 .src_descr = "Off",
268 .src_num_offset = 0,
269 },
270 [SCARLETT2_PORT_TYPE_ANALOGUE] = {
271 .id = 0x080,
272 .num = { 4, 4, 4, 4, 4 },
273 .src_descr = "Analogue %d",
274 .src_num_offset = 1,
275 .dst_descr = "Analogue Output %02d Playback"
276 },
277 [SCARLETT2_PORT_TYPE_SPDIF] = {
278 .id = 0x180,
279 .num = { 2, 2, 2, 2, 2 },
280 .src_descr = "S/PDIF %d",
281 .src_num_offset = 1,
282 .dst_descr = "S/PDIF Output %d Playback"
283 },
284 [SCARLETT2_PORT_TYPE_MIX] = {
285 .id = 0x300,
286 .num = { 10, 18, 18, 18, 18 },
287 .src_descr = "Mix %c",
288 .src_num_offset = 65,
289 .dst_descr = "Mixer Input %02d Capture"
290 },
291 [SCARLETT2_PORT_TYPE_PCM] = {
292 .id = 0x600,
293 .num = { 6, 6, 6, 6, 6 },
294 .src_descr = "PCM %d",
295 .src_num_offset = 1,
296 .dst_descr = "PCM %02d Capture"
297 },
298 },
299 };
300
301 static const struct scarlett2_device_info s18i8_gen2_info = {
302
303
304
305 .level_input_count = 2,
306
307
308 .pad_input_count = 4,
309
310 .line_out_descrs = {
311 "Monitor L",
312 "Monitor R",
313 "Headphones 1 L",
314 "Headphones 1 R",
315 "Headphones 2 L",
316 "Headphones 2 R",
317 },
318
319 .ports = {
320 [SCARLETT2_PORT_TYPE_NONE] = {
321 .id = 0x000,
322 .num = { 1, 0, 8, 8, 4 },
323 .src_descr = "Off",
324 .src_num_offset = 0,
325 },
326 [SCARLETT2_PORT_TYPE_ANALOGUE] = {
327 .id = 0x080,
328 .num = { 8, 6, 6, 6, 6 },
329 .src_descr = "Analogue %d",
330 .src_num_offset = 1,
331 .dst_descr = "Analogue Output %02d Playback"
332 },
333 [SCARLETT2_PORT_TYPE_SPDIF] = {
334 .id = 0x180,
335
336
337
338
339 .num = { 2, 2, 2, 2, 2 },
340 .src_descr = "S/PDIF %d",
341 .src_num_offset = 1,
342 .dst_descr = "S/PDIF Output %d Playback"
343 },
344 [SCARLETT2_PORT_TYPE_ADAT] = {
345 .id = 0x200,
346 .num = { 8, 0, 0, 0, 0 },
347 .src_descr = "ADAT %d",
348 .src_num_offset = 1,
349 },
350 [SCARLETT2_PORT_TYPE_MIX] = {
351 .id = 0x300,
352 .num = { 10, 18, 18, 18, 18 },
353 .src_descr = "Mix %c",
354 .src_num_offset = 65,
355 .dst_descr = "Mixer Input %02d Capture"
356 },
357 [SCARLETT2_PORT_TYPE_PCM] = {
358 .id = 0x600,
359 .num = { 20, 18, 18, 14, 10 },
360 .src_descr = "PCM %d",
361 .src_num_offset = 1,
362 .dst_descr = "PCM %02d Capture"
363 },
364 },
365 };
366
367 static const struct scarlett2_device_info s18i20_gen2_info = {
368
369
370
371 .line_out_hw_vol = 1,
372
373
374 .button_count = 2,
375
376 .line_out_descrs = {
377 "Monitor L",
378 "Monitor R",
379 NULL,
380 NULL,
381 NULL,
382 NULL,
383 "Headphones 1 L",
384 "Headphones 1 R",
385 "Headphones 2 L",
386 "Headphones 2 R",
387 },
388
389 .ports = {
390 [SCARLETT2_PORT_TYPE_NONE] = {
391 .id = 0x000,
392 .num = { 1, 0, 8, 8, 6 },
393 .src_descr = "Off",
394 .src_num_offset = 0,
395 },
396 [SCARLETT2_PORT_TYPE_ANALOGUE] = {
397 .id = 0x080,
398 .num = { 8, 10, 10, 10, 10 },
399 .src_descr = "Analogue %d",
400 .src_num_offset = 1,
401 .dst_descr = "Analogue Output %02d Playback"
402 },
403 [SCARLETT2_PORT_TYPE_SPDIF] = {
404
405
406
407
408 .id = 0x180,
409 .num = { 2, 2, 2, 2, 2 },
410 .src_descr = "S/PDIF %d",
411 .src_num_offset = 1,
412 .dst_descr = "S/PDIF Output %d Playback"
413 },
414 [SCARLETT2_PORT_TYPE_ADAT] = {
415 .id = 0x200,
416 .num = { 8, 8, 8, 4, 0 },
417 .src_descr = "ADAT %d",
418 .src_num_offset = 1,
419 .dst_descr = "ADAT Output %d Playback"
420 },
421 [SCARLETT2_PORT_TYPE_MIX] = {
422 .id = 0x300,
423 .num = { 10, 18, 18, 18, 18 },
424 .src_descr = "Mix %c",
425 .src_num_offset = 65,
426 .dst_descr = "Mixer Input %02d Capture"
427 },
428 [SCARLETT2_PORT_TYPE_PCM] = {
429 .id = 0x600,
430 .num = { 20, 18, 18, 14, 10 },
431 .src_descr = "PCM %d",
432 .src_num_offset = 1,
433 .dst_descr = "PCM %02d Capture"
434 },
435 },
436 };
437
438
439 static int scarlett2_get_port_start_num(const struct scarlett2_ports *ports,
440 int direction, int port_type)
441 {
442 int i, num = 0;
443
444 for (i = 0; i < port_type; i++)
445 num += ports[i].num[direction];
446
447 return num;
448 }
449
450
451
452
453 #define SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE 5
454 #define SCARLETT2_USB_INTERRUPT_ENDPOINT 4
455 #define SCARLETT2_USB_INTERRUPT_MAX_DATA 64
456 #define SCARLETT2_USB_INTERRUPT_INTERVAL 3
457
458
459 #define SCARLETT2_USB_INTERRUPT_VOL_CHANGE 0x400000
460 #define SCARLETT2_USB_INTERRUPT_BUTTON_CHANGE 0x200000
461
462
463 #define SCARLETT2_USB_VENDOR_SPECIFIC_CMD_REQ 2
464 #define SCARLETT2_USB_VENDOR_SPECIFIC_CMD_RESP 3
465
466 #define SCARLETT2_USB_INIT_SEQ 0x00000000
467 #define SCARLETT2_USB_GET_METER_LEVELS 0x00001001
468 #define SCARLETT2_USB_SET_MIX 0x00002002
469 #define SCARLETT2_USB_SET_MUX 0x00003002
470 #define SCARLETT2_USB_GET_DATA 0x00800000
471 #define SCARLETT2_USB_SET_DATA 0x00800001
472 #define SCARLETT2_USB_DATA_CMD 0x00800002
473 #define SCARLETT2_USB_CONFIG_SAVE 6
474
475 #define SCARLETT2_USB_VOLUME_STATUS_OFFSET 0x31
476 #define SCARLETT2_USB_METER_LEVELS_GET_MAGIC 1
477
478
479 struct scarlett2_usb_volume_status {
480
481 u8 buttons[SCARLETT2_BUTTON_MAX];
482
483 u8 pad1;
484
485
486 s16 sw_vol[SCARLETT2_ANALOGUE_MAX];
487
488
489 s16 hw_vol[SCARLETT2_ANALOGUE_MAX];
490
491 u8 pad2[SCARLETT2_ANALOGUE_MAX];
492
493
494 u8 sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
495
496 u8 pad3[6];
497
498
499 s16 master_vol;
500 } __packed;
501
502
503 enum {
504 SCARLETT2_CONFIG_BUTTONS = 0,
505 SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
506 SCARLETT2_CONFIG_SW_HW_SWITCH = 2,
507 SCARLETT2_CONFIG_LEVEL_SWITCH = 3,
508 SCARLETT2_CONFIG_PAD_SWITCH = 4,
509 SCARLETT2_CONFIG_COUNT = 5
510 };
511
512
513
514
515 struct scarlett2_config {
516 u8 offset;
517 u8 size;
518 u8 activate;
519 };
520
521 static const struct scarlett2_config
522 scarlett2_config_items[SCARLETT2_CONFIG_COUNT] = {
523
524 {
525 .offset = 0x31,
526 .size = 1,
527 .activate = 2
528 },
529
530
531 {
532 .offset = 0x34,
533 .size = 2,
534 .activate = 1
535 },
536
537
538 {
539 .offset = 0x66,
540 .size = 1,
541 .activate = 3
542 },
543
544
545 {
546 .offset = 0x7c,
547 .size = 1,
548 .activate = 7
549 },
550
551
552 {
553 .offset = 0x84,
554 .size = 1,
555 .activate = 8
556 }
557 };
558
559
560 struct scarlett2_usb_packet {
561 __le32 cmd;
562 __le16 size;
563 __le16 seq;
564 __le32 error;
565 __le32 pad;
566 u8 data[];
567 };
568
569 #define SCARLETT2_USB_PACKET_LEN (sizeof(struct scarlett2_usb_packet))
570
571 static void scarlett2_fill_request_header(struct scarlett2_mixer_data *private,
572 struct scarlett2_usb_packet *req,
573 u32 cmd, u16 req_size)
574 {
575
576 u16 seq = private->scarlett2_seq++;
577
578 req->cmd = cpu_to_le32(cmd);
579 req->size = cpu_to_le16(req_size);
580 req->seq = cpu_to_le16(seq);
581 req->error = 0;
582 req->pad = 0;
583 }
584
585
586 static int scarlett2_usb(
587 struct usb_mixer_interface *mixer, u32 cmd,
588 void *req_data, u16 req_size, void *resp_data, u16 resp_size)
589 {
590 struct scarlett2_mixer_data *private = mixer->private_data;
591 u16 req_buf_size = sizeof(struct scarlett2_usb_packet) + req_size;
592 u16 resp_buf_size = sizeof(struct scarlett2_usb_packet) + resp_size;
593 struct scarlett2_usb_packet *req = NULL, *resp = NULL;
594 int err = 0;
595
596 req = kmalloc(req_buf_size, GFP_KERNEL);
597 if (!req) {
598 err = -ENOMEM;
599 goto error;
600 }
601
602 resp = kmalloc(resp_buf_size, GFP_KERNEL);
603 if (!resp) {
604 err = -ENOMEM;
605 goto error;
606 }
607
608 mutex_lock(&private->usb_mutex);
609
610
611
612 scarlett2_fill_request_header(private, req, cmd, req_size);
613
614 if (req_size)
615 memcpy(req->data, req_data, req_size);
616
617 err = snd_usb_ctl_msg(mixer->chip->dev,
618 usb_sndctrlpipe(mixer->chip->dev, 0),
619 SCARLETT2_USB_VENDOR_SPECIFIC_CMD_REQ,
620 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
621 0,
622 SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE,
623 req,
624 req_buf_size);
625
626 if (err != req_buf_size) {
627 usb_audio_err(
628 mixer->chip,
629 "Scarlett Gen 2 USB request result cmd %x was %d\n",
630 cmd, err);
631 err = -EINVAL;
632 goto unlock;
633 }
634
635
636
637 err = snd_usb_ctl_msg(mixer->chip->dev,
638 usb_sndctrlpipe(mixer->chip->dev, 0),
639 SCARLETT2_USB_VENDOR_SPECIFIC_CMD_RESP,
640 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
641 0,
642 SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE,
643 resp,
644 resp_buf_size);
645
646
647
648 if (err != resp_buf_size) {
649 usb_audio_err(
650 mixer->chip,
651 "Scarlett Gen 2 USB response result cmd %x was %d\n",
652 cmd, err);
653 err = -EINVAL;
654 goto unlock;
655 }
656
657 if (resp->cmd != req->cmd ||
658 resp->seq != req->seq ||
659 resp_size != le16_to_cpu(resp->size) ||
660 resp->error ||
661 resp->pad) {
662 usb_audio_err(
663 mixer->chip,
664 "Scarlett Gen 2 USB invalid response; "
665 "cmd tx/rx %d/%d seq %d/%d size %d/%d "
666 "error %d pad %d\n",
667 le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
668 le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
669 resp_size, le16_to_cpu(resp->size),
670 le32_to_cpu(resp->error),
671 le32_to_cpu(resp->pad));
672 err = -EINVAL;
673 goto unlock;
674 }
675
676 if (resp_size > 0)
677 memcpy(resp_data, resp->data, resp_size);
678
679 unlock:
680 mutex_unlock(&private->usb_mutex);
681 error:
682 kfree(req);
683 kfree(resp);
684 return err;
685 }
686
687
688 static void scarlett2_config_save(struct usb_mixer_interface *mixer)
689 {
690 __le32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
691
692 scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
693 &req, sizeof(u32),
694 NULL, 0);
695 }
696
697
698 static void scarlett2_config_save_work(struct work_struct *work)
699 {
700 struct scarlett2_mixer_data *private =
701 container_of(work, struct scarlett2_mixer_data, work.work);
702
703 scarlett2_config_save(private->mixer);
704 }
705
706
707
708
709 static int scarlett2_usb_set_config(
710 struct usb_mixer_interface *mixer,
711 int config_item_num, int index, int value)
712 {
713 const struct scarlett2_config config_item =
714 scarlett2_config_items[config_item_num];
715 struct {
716 __le32 offset;
717 __le32 bytes;
718 __le32 value;
719 } __packed req;
720 __le32 req2;
721 int err;
722 struct scarlett2_mixer_data *private = mixer->private_data;
723
724
725 cancel_delayed_work_sync(&private->work);
726
727
728 req.offset = cpu_to_le32(config_item.offset + index * config_item.size);
729 req.bytes = cpu_to_le32(config_item.size);
730 req.value = cpu_to_le32(value);
731 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
732 &req, sizeof(u32) * 2 + config_item.size,
733 NULL, 0);
734 if (err < 0)
735 return err;
736
737
738 req2 = cpu_to_le32(config_item.activate);
739 err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
740 &req2, sizeof(req2), NULL, 0);
741 if (err < 0)
742 return err;
743
744
745 schedule_delayed_work(&private->work, msecs_to_jiffies(2000));
746
747 return 0;
748 }
749
750
751 static int scarlett2_usb_get(
752 struct usb_mixer_interface *mixer,
753 int offset, void *buf, int size)
754 {
755 struct {
756 __le32 offset;
757 __le32 size;
758 } __packed req;
759
760 req.offset = cpu_to_le32(offset);
761 req.size = cpu_to_le32(size);
762 return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
763 &req, sizeof(req), buf, size);
764 }
765
766
767 static int scarlett2_usb_get_config(
768 struct usb_mixer_interface *mixer,
769 int config_item_num, int count, void *buf)
770 {
771 const struct scarlett2_config config_item =
772 scarlett2_config_items[config_item_num];
773 int size = config_item.size * count;
774
775 return scarlett2_usb_get(mixer, config_item.offset, buf, size);
776 }
777
778
779 static int scarlett2_usb_get_volume_status(
780 struct usb_mixer_interface *mixer,
781 struct scarlett2_usb_volume_status *buf)
782 {
783 return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
784 buf, sizeof(*buf));
785 }
786
787
788
789
790 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
791 int mix_num)
792 {
793 struct scarlett2_mixer_data *private = mixer->private_data;
794 const struct scarlett2_device_info *info = private->info;
795
796 struct {
797 __le16 mix_num;
798 __le16 data[SCARLETT2_INPUT_MIX_MAX];
799 } __packed req;
800
801 int i, j;
802 int num_mixer_in =
803 info->ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
804
805 req.mix_num = cpu_to_le16(mix_num);
806
807 for (i = 0, j = mix_num * num_mixer_in; i < num_mixer_in; i++, j++)
808 req.data[i] = cpu_to_le16(
809 scarlett2_mixer_values[private->mix[j]]
810 );
811
812 return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
813 &req, (num_mixer_in + 1) * sizeof(u16),
814 NULL, 0);
815 }
816
817
818 static u32 scarlett2_mux_src_num_to_id(const struct scarlett2_ports *ports,
819 int num)
820 {
821 int port_type;
822
823 for (port_type = 0;
824 port_type < SCARLETT2_PORT_TYPE_COUNT;
825 port_type++) {
826 if (num < ports[port_type].num[SCARLETT2_PORT_IN])
827 return ports[port_type].id | num;
828 num -= ports[port_type].num[SCARLETT2_PORT_IN];
829 }
830
831
832 return 0;
833 }
834
835
836 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
837 {
838 struct scarlett2_mixer_data *private = mixer->private_data;
839 const struct scarlett2_device_info *info = private->info;
840 const struct scarlett2_ports *ports = info->ports;
841 int rate, port_dir_rate;
842
843 static const int assignment_order[SCARLETT2_PORT_TYPE_COUNT] = {
844 SCARLETT2_PORT_TYPE_PCM,
845 SCARLETT2_PORT_TYPE_ANALOGUE,
846 SCARLETT2_PORT_TYPE_SPDIF,
847 SCARLETT2_PORT_TYPE_ADAT,
848 SCARLETT2_PORT_TYPE_MIX,
849 SCARLETT2_PORT_TYPE_NONE,
850 };
851
852 struct {
853 __le16 pad;
854 __le16 num;
855 __le32 data[SCARLETT2_MUX_MAX];
856 } __packed req;
857
858 req.pad = 0;
859
860
861 for (rate = 0, port_dir_rate = SCARLETT2_PORT_OUT_44;
862 port_dir_rate <= SCARLETT2_PORT_OUT_176;
863 rate++, port_dir_rate++) {
864 int order_num, i, err;
865
866 req.num = cpu_to_le16(rate);
867
868 for (order_num = 0, i = 0;
869 order_num < SCARLETT2_PORT_TYPE_COUNT;
870 order_num++) {
871 int port_type = assignment_order[order_num];
872 int j = scarlett2_get_port_start_num(ports,
873 SCARLETT2_PORT_OUT,
874 port_type);
875 int port_id = ports[port_type].id;
876 int channel;
877
878 for (channel = 0;
879 channel < ports[port_type].num[port_dir_rate];
880 channel++, i++, j++)
881
882
883
884 req.data[i] = !port_id
885 ? 0
886 : cpu_to_le32(
887 port_id |
888 channel |
889 scarlett2_mux_src_num_to_id(
890 ports, private->mux[j]
891 ) << 12
892 );
893
894
895 j += ports[port_type].num[SCARLETT2_PORT_OUT] -
896 ports[port_type].num[port_dir_rate];
897 }
898
899 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
900 &req, (i + 1) * sizeof(u32),
901 NULL, 0);
902 if (err < 0)
903 return err;
904 }
905
906 return 0;
907 }
908
909
910 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
911 u16 *levels)
912 {
913 struct {
914 __le16 pad;
915 __le16 num_meters;
916 __le32 magic;
917 } __packed req;
918 u32 resp[SCARLETT2_NUM_METERS];
919 int i, err;
920
921 req.pad = 0;
922 req.num_meters = cpu_to_le16(SCARLETT2_NUM_METERS);
923 req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
924 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER_LEVELS,
925 &req, sizeof(req), resp, sizeof(resp));
926 if (err < 0)
927 return err;
928
929
930 for (i = 0; i < SCARLETT2_NUM_METERS; i++)
931 levels[i] = resp[i];
932
933 return 0;
934 }
935
936
937
938
939 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
940 const struct snd_kcontrol_new *ncontrol,
941 int index, int channels, const char *name,
942 struct snd_kcontrol **kctl_return)
943 {
944 struct snd_kcontrol *kctl;
945 struct usb_mixer_elem_info *elem;
946 int err;
947
948 elem = kzalloc(sizeof(*elem), GFP_KERNEL);
949 if (!elem)
950 return -ENOMEM;
951
952 elem->head.mixer = mixer;
953 elem->control = index;
954 elem->head.id = index;
955 elem->channels = channels;
956
957 kctl = snd_ctl_new1(ncontrol, elem);
958 if (!kctl) {
959 kfree(elem);
960 return -ENOMEM;
961 }
962 kctl->private_free = snd_usb_mixer_elem_free;
963
964 strlcpy(kctl->id.name, name, sizeof(kctl->id.name));
965
966 err = snd_usb_mixer_add_control(&elem->head, kctl);
967 if (err < 0)
968 return err;
969
970 if (kctl_return)
971 *kctl_return = kctl;
972
973 return 0;
974 }
975
976
977
978
979
980
981 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
982 {
983 struct scarlett2_mixer_data *private = mixer->private_data;
984 const struct scarlett2_ports *ports = private->info->ports;
985 struct scarlett2_usb_volume_status volume_status;
986 int num_line_out =
987 ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
988 int err, i;
989
990 private->vol_updated = 0;
991
992 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
993 if (err < 0)
994 return err;
995
996 private->master_vol = clamp(
997 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
998 0, SCARLETT2_VOLUME_BIAS);
999
1000 for (i = 0; i < num_line_out; i++) {
1001 if (private->vol_sw_hw_switch[i])
1002 private->vol[i] = private->master_vol;
1003 }
1004
1005 for (i = 0; i < private->info->button_count; i++)
1006 private->buttons[i] = !!volume_status.buttons[i];
1007
1008 return 0;
1009 }
1010
1011 static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
1012 struct snd_ctl_elem_info *uinfo)
1013 {
1014 struct usb_mixer_elem_info *elem = kctl->private_data;
1015
1016 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1017 uinfo->count = elem->channels;
1018 uinfo->value.integer.min = 0;
1019 uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
1020 uinfo->value.integer.step = 1;
1021 return 0;
1022 }
1023
1024 static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
1025 struct snd_ctl_elem_value *ucontrol)
1026 {
1027 struct usb_mixer_elem_info *elem = kctl->private_data;
1028 struct usb_mixer_interface *mixer = elem->head.mixer;
1029 struct scarlett2_mixer_data *private = mixer->private_data;
1030
1031 if (private->vol_updated) {
1032 mutex_lock(&private->data_mutex);
1033 scarlett2_update_volumes(mixer);
1034 mutex_unlock(&private->data_mutex);
1035 }
1036
1037 ucontrol->value.integer.value[0] = private->master_vol;
1038 return 0;
1039 }
1040
1041 static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
1042 struct snd_ctl_elem_value *ucontrol)
1043 {
1044 struct usb_mixer_elem_info *elem = kctl->private_data;
1045 struct usb_mixer_interface *mixer = elem->head.mixer;
1046 struct scarlett2_mixer_data *private = mixer->private_data;
1047 int index = elem->control;
1048
1049 if (private->vol_updated) {
1050 mutex_lock(&private->data_mutex);
1051 scarlett2_update_volumes(mixer);
1052 mutex_unlock(&private->data_mutex);
1053 }
1054
1055 ucontrol->value.integer.value[0] = private->vol[index];
1056 return 0;
1057 }
1058
1059 static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
1060 struct snd_ctl_elem_value *ucontrol)
1061 {
1062 struct usb_mixer_elem_info *elem = kctl->private_data;
1063 struct usb_mixer_interface *mixer = elem->head.mixer;
1064 struct scarlett2_mixer_data *private = mixer->private_data;
1065 int index = elem->control;
1066 int oval, val, err = 0;
1067
1068 mutex_lock(&private->data_mutex);
1069
1070 oval = private->vol[index];
1071 val = ucontrol->value.integer.value[0];
1072
1073 if (oval == val)
1074 goto unlock;
1075
1076 private->vol[index] = val;
1077 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1078 index, val - SCARLETT2_VOLUME_BIAS);
1079 if (err == 0)
1080 err = 1;
1081
1082 unlock:
1083 mutex_unlock(&private->data_mutex);
1084 return err;
1085 }
1086
1087 static const DECLARE_TLV_DB_MINMAX(
1088 db_scale_scarlett2_gain, -SCARLETT2_VOLUME_BIAS * 100, 0
1089 );
1090
1091 static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
1092 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1093 .access = SNDRV_CTL_ELEM_ACCESS_READ |
1094 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1095 .name = "",
1096 .info = scarlett2_volume_ctl_info,
1097 .get = scarlett2_master_volume_ctl_get,
1098 .private_value = 0,
1099 .tlv = { .p = db_scale_scarlett2_gain }
1100 };
1101
1102 static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
1103 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1104 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1105 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1106 .name = "",
1107 .info = scarlett2_volume_ctl_info,
1108 .get = scarlett2_volume_ctl_get,
1109 .put = scarlett2_volume_ctl_put,
1110 .private_value = 0,
1111 .tlv = { .p = db_scale_scarlett2_gain }
1112 };
1113
1114
1115
1116 static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
1117 struct snd_ctl_elem_info *uinfo)
1118 {
1119 static const char *const values[2] = {
1120 "SW", "HW"
1121 };
1122
1123 return snd_ctl_enum_info(uinfo, 1, 2, values);
1124 }
1125
1126 static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
1127 struct snd_ctl_elem_value *ucontrol)
1128 {
1129 struct usb_mixer_elem_info *elem = kctl->private_data;
1130 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1131
1132 ucontrol->value.enumerated.item[0] =
1133 private->vol_sw_hw_switch[elem->control];
1134 return 0;
1135 }
1136
1137 static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
1138 struct snd_ctl_elem_value *ucontrol)
1139 {
1140 struct usb_mixer_elem_info *elem = kctl->private_data;
1141 struct usb_mixer_interface *mixer = elem->head.mixer;
1142 struct scarlett2_mixer_data *private = mixer->private_data;
1143
1144 int index = elem->control;
1145 int oval, val, err = 0;
1146
1147 mutex_lock(&private->data_mutex);
1148
1149 oval = private->vol_sw_hw_switch[index];
1150 val = !!ucontrol->value.integer.value[0];
1151
1152 if (oval == val)
1153 goto unlock;
1154
1155 private->vol_sw_hw_switch[index] = val;
1156
1157
1158
1159
1160 if (val)
1161 private->vol_ctls[index]->vd[0].access &=
1162 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
1163 else
1164 private->vol_ctls[index]->vd[0].access |=
1165 SNDRV_CTL_ELEM_ACCESS_WRITE;
1166
1167
1168 private->vol[index] = private->master_vol;
1169
1170
1171 err = scarlett2_usb_set_config(
1172 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
1173 index, private->master_vol - SCARLETT2_VOLUME_BIAS);
1174 if (err < 0)
1175 goto unlock;
1176
1177
1178 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_INFO,
1179 &private->vol_ctls[index]->id);
1180
1181
1182 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
1183 index, val);
1184
1185 unlock:
1186 mutex_unlock(&private->data_mutex);
1187 return err;
1188 }
1189
1190 static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
1191 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1192 .name = "",
1193 .info = scarlett2_sw_hw_enum_ctl_info,
1194 .get = scarlett2_sw_hw_enum_ctl_get,
1195 .put = scarlett2_sw_hw_enum_ctl_put,
1196 };
1197
1198
1199
1200 static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
1201 struct snd_ctl_elem_info *uinfo)
1202 {
1203 static const char *const values[2] = {
1204 "Line", "Inst"
1205 };
1206
1207 return snd_ctl_enum_info(uinfo, 1, 2, values);
1208 }
1209
1210 static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
1211 struct snd_ctl_elem_value *ucontrol)
1212 {
1213 struct usb_mixer_elem_info *elem = kctl->private_data;
1214 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1215
1216 ucontrol->value.enumerated.item[0] =
1217 private->level_switch[elem->control];
1218 return 0;
1219 }
1220
1221 static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
1222 struct snd_ctl_elem_value *ucontrol)
1223 {
1224 struct usb_mixer_elem_info *elem = kctl->private_data;
1225 struct usb_mixer_interface *mixer = elem->head.mixer;
1226 struct scarlett2_mixer_data *private = mixer->private_data;
1227
1228 int index = elem->control;
1229 int oval, val, err = 0;
1230
1231 mutex_lock(&private->data_mutex);
1232
1233 oval = private->level_switch[index];
1234 val = !!ucontrol->value.integer.value[0];
1235
1236 if (oval == val)
1237 goto unlock;
1238
1239 private->level_switch[index] = val;
1240
1241
1242 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
1243 index, val);
1244
1245 unlock:
1246 mutex_unlock(&private->data_mutex);
1247 return err;
1248 }
1249
1250 static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
1251 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1252 .name = "",
1253 .info = scarlett2_level_enum_ctl_info,
1254 .get = scarlett2_level_enum_ctl_get,
1255 .put = scarlett2_level_enum_ctl_put,
1256 };
1257
1258
1259
1260 static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
1261 struct snd_ctl_elem_value *ucontrol)
1262 {
1263 struct usb_mixer_elem_info *elem = kctl->private_data;
1264 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1265
1266 ucontrol->value.enumerated.item[0] =
1267 private->pad_switch[elem->control];
1268 return 0;
1269 }
1270
1271 static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
1272 struct snd_ctl_elem_value *ucontrol)
1273 {
1274 struct usb_mixer_elem_info *elem = kctl->private_data;
1275 struct usb_mixer_interface *mixer = elem->head.mixer;
1276 struct scarlett2_mixer_data *private = mixer->private_data;
1277
1278 int index = elem->control;
1279 int oval, val, err = 0;
1280
1281 mutex_lock(&private->data_mutex);
1282
1283 oval = private->pad_switch[index];
1284 val = !!ucontrol->value.integer.value[0];
1285
1286 if (oval == val)
1287 goto unlock;
1288
1289 private->pad_switch[index] = val;
1290
1291
1292 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
1293 index, val);
1294
1295 unlock:
1296 mutex_unlock(&private->data_mutex);
1297 return err;
1298 }
1299
1300 static const struct snd_kcontrol_new scarlett2_pad_ctl = {
1301 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1302 .name = "",
1303 .info = snd_ctl_boolean_mono_info,
1304 .get = scarlett2_pad_ctl_get,
1305 .put = scarlett2_pad_ctl_put,
1306 };
1307
1308
1309
1310 static int scarlett2_button_ctl_get(struct snd_kcontrol *kctl,
1311 struct snd_ctl_elem_value *ucontrol)
1312 {
1313 struct usb_mixer_elem_info *elem = kctl->private_data;
1314 struct usb_mixer_interface *mixer = elem->head.mixer;
1315 struct scarlett2_mixer_data *private = mixer->private_data;
1316
1317 if (private->vol_updated) {
1318 mutex_lock(&private->data_mutex);
1319 scarlett2_update_volumes(mixer);
1320 mutex_unlock(&private->data_mutex);
1321 }
1322
1323 ucontrol->value.enumerated.item[0] = private->buttons[elem->control];
1324 return 0;
1325 }
1326
1327 static int scarlett2_button_ctl_put(struct snd_kcontrol *kctl,
1328 struct snd_ctl_elem_value *ucontrol)
1329 {
1330 struct usb_mixer_elem_info *elem = kctl->private_data;
1331 struct usb_mixer_interface *mixer = elem->head.mixer;
1332 struct scarlett2_mixer_data *private = mixer->private_data;
1333
1334 int index = elem->control;
1335 int oval, val, err = 0;
1336
1337 mutex_lock(&private->data_mutex);
1338
1339 oval = private->buttons[index];
1340 val = !!ucontrol->value.integer.value[0];
1341
1342 if (oval == val)
1343 goto unlock;
1344
1345 private->buttons[index] = val;
1346
1347
1348 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_BUTTONS,
1349 index, val);
1350
1351 unlock:
1352 mutex_unlock(&private->data_mutex);
1353 return err;
1354 }
1355
1356 static const struct snd_kcontrol_new scarlett2_button_ctl = {
1357 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1358 .name = "",
1359 .info = snd_ctl_boolean_mono_info,
1360 .get = scarlett2_button_ctl_get,
1361 .put = scarlett2_button_ctl_put
1362 };
1363
1364
1365
1366 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
1367 {
1368 struct scarlett2_mixer_data *private = mixer->private_data;
1369 const struct scarlett2_device_info *info = private->info;
1370 const struct scarlett2_ports *ports = info->ports;
1371 int num_line_out =
1372 ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
1373 int err, i;
1374 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1375
1376
1377 if (info->line_out_hw_vol) {
1378 snprintf(s, sizeof(s), "Master HW Playback Volume");
1379 err = scarlett2_add_new_ctl(mixer,
1380 &scarlett2_master_volume_ctl,
1381 0, 1, s, &private->master_vol_ctl);
1382 if (err < 0)
1383 return err;
1384 }
1385
1386
1387 for (i = 0; i < num_line_out; i++) {
1388
1389
1390 if (info->line_out_descrs[i])
1391 snprintf(s, sizeof(s),
1392 "Line %02d (%s) Playback Volume",
1393 i + 1, info->line_out_descrs[i]);
1394 else
1395 snprintf(s, sizeof(s),
1396 "Line %02d Playback Volume",
1397 i + 1);
1398 err = scarlett2_add_new_ctl(mixer,
1399 &scarlett2_line_out_volume_ctl,
1400 i, 1, s, &private->vol_ctls[i]);
1401 if (err < 0)
1402 return err;
1403
1404
1405 if (private->vol_sw_hw_switch[i])
1406 private->vol_ctls[i]->vd[0].access &=
1407 ~SNDRV_CTL_ELEM_ACCESS_WRITE;
1408
1409
1410 if (info->line_out_hw_vol) {
1411 snprintf(s, sizeof(s),
1412 "Line Out %02d Volume Control Playback Enum",
1413 i + 1);
1414 err = scarlett2_add_new_ctl(mixer,
1415 &scarlett2_sw_hw_enum_ctl,
1416 i, 1, s, NULL);
1417 if (err < 0)
1418 return err;
1419 }
1420 }
1421
1422
1423 for (i = 0; i < private->info->button_count; i++) {
1424 err = scarlett2_add_new_ctl(mixer, &scarlett2_button_ctl,
1425 i, 1, scarlett2_button_names[i],
1426 &private->button_ctls[i]);
1427 if (err < 0)
1428 return err;
1429 }
1430
1431 return 0;
1432 }
1433
1434
1435
1436 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
1437 {
1438 struct scarlett2_mixer_data *private = mixer->private_data;
1439 const struct scarlett2_device_info *info = private->info;
1440 int err, i;
1441 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1442
1443
1444 for (i = 0; i < info->level_input_count; i++) {
1445 snprintf(s, sizeof(s), "Line In %d Level Capture Enum", i + 1);
1446 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
1447 i, 1, s, NULL);
1448 if (err < 0)
1449 return err;
1450 }
1451
1452
1453 for (i = 0; i < info->pad_input_count; i++) {
1454 snprintf(s, sizeof(s), "Line In %d Pad Capture Switch", i + 1);
1455 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
1456 i, 1, s, NULL);
1457 if (err < 0)
1458 return err;
1459 }
1460
1461 return 0;
1462 }
1463
1464
1465
1466 static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
1467 struct snd_ctl_elem_info *uinfo)
1468 {
1469 struct usb_mixer_elem_info *elem = kctl->private_data;
1470
1471 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1472 uinfo->count = elem->channels;
1473 uinfo->value.integer.min = 0;
1474 uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
1475 uinfo->value.integer.step = 1;
1476 return 0;
1477 }
1478
1479 static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
1480 struct snd_ctl_elem_value *ucontrol)
1481 {
1482 struct usb_mixer_elem_info *elem = kctl->private_data;
1483 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1484
1485 ucontrol->value.integer.value[0] = private->mix[elem->control];
1486 return 0;
1487 }
1488
1489 static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
1490 struct snd_ctl_elem_value *ucontrol)
1491 {
1492 struct usb_mixer_elem_info *elem = kctl->private_data;
1493 struct usb_mixer_interface *mixer = elem->head.mixer;
1494 struct scarlett2_mixer_data *private = mixer->private_data;
1495 const struct scarlett2_device_info *info = private->info;
1496 const struct scarlett2_ports *ports = info->ports;
1497 int oval, val, num_mixer_in, mix_num, err = 0;
1498
1499 mutex_lock(&private->data_mutex);
1500
1501 oval = private->mix[elem->control];
1502 val = ucontrol->value.integer.value[0];
1503 num_mixer_in = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
1504 mix_num = elem->control / num_mixer_in;
1505
1506 if (oval == val)
1507 goto unlock;
1508
1509 private->mix[elem->control] = val;
1510 err = scarlett2_usb_set_mix(mixer, mix_num);
1511 if (err == 0)
1512 err = 1;
1513
1514 unlock:
1515 mutex_unlock(&private->data_mutex);
1516 return err;
1517 }
1518
1519 static const DECLARE_TLV_DB_MINMAX(
1520 db_scale_scarlett2_mixer,
1521 SCARLETT2_MIXER_MIN_DB * 100,
1522 SCARLETT2_MIXER_MAX_DB * 100
1523 );
1524
1525 static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
1526 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1527 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
1528 SNDRV_CTL_ELEM_ACCESS_TLV_READ,
1529 .name = "",
1530 .info = scarlett2_mixer_ctl_info,
1531 .get = scarlett2_mixer_ctl_get,
1532 .put = scarlett2_mixer_ctl_put,
1533 .private_value = SCARLETT2_MIXER_MAX_DB,
1534 .tlv = { .p = db_scale_scarlett2_mixer }
1535 };
1536
1537 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
1538 {
1539 struct scarlett2_mixer_data *private = mixer->private_data;
1540 const struct scarlett2_ports *ports = private->info->ports;
1541 int err, i, j;
1542 int index;
1543 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1544
1545 int num_inputs = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
1546 int num_outputs = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_IN];
1547
1548 for (i = 0, index = 0; i < num_outputs; i++) {
1549 for (j = 0; j < num_inputs; j++, index++) {
1550 snprintf(s, sizeof(s),
1551 "Mix %c Input %02d Playback Volume",
1552 'A' + i, j + 1);
1553 err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
1554 index, 1, s, NULL);
1555 if (err < 0)
1556 return err;
1557 }
1558 }
1559
1560 return 0;
1561 }
1562
1563
1564
1565 static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
1566 struct snd_ctl_elem_info *uinfo)
1567 {
1568 struct usb_mixer_elem_info *elem = kctl->private_data;
1569 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1570 const struct scarlett2_ports *ports = private->info->ports;
1571 unsigned int item = uinfo->value.enumerated.item;
1572 int items = private->num_mux_srcs;
1573 int port_type;
1574
1575 uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
1576 uinfo->count = elem->channels;
1577 uinfo->value.enumerated.items = items;
1578
1579 if (item >= items)
1580 item = uinfo->value.enumerated.item = items - 1;
1581
1582 for (port_type = 0;
1583 port_type < SCARLETT2_PORT_TYPE_COUNT;
1584 port_type++) {
1585 if (item < ports[port_type].num[SCARLETT2_PORT_IN]) {
1586 sprintf(uinfo->value.enumerated.name,
1587 ports[port_type].src_descr,
1588 item + ports[port_type].src_num_offset);
1589 return 0;
1590 }
1591 item -= ports[port_type].num[SCARLETT2_PORT_IN];
1592 }
1593
1594 return -EINVAL;
1595 }
1596
1597 static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
1598 struct snd_ctl_elem_value *ucontrol)
1599 {
1600 struct usb_mixer_elem_info *elem = kctl->private_data;
1601 struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
1602
1603 ucontrol->value.enumerated.item[0] = private->mux[elem->control];
1604 return 0;
1605 }
1606
1607 static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
1608 struct snd_ctl_elem_value *ucontrol)
1609 {
1610 struct usb_mixer_elem_info *elem = kctl->private_data;
1611 struct usb_mixer_interface *mixer = elem->head.mixer;
1612 struct scarlett2_mixer_data *private = mixer->private_data;
1613 int index = elem->control;
1614 int oval, val, err = 0;
1615
1616 mutex_lock(&private->data_mutex);
1617
1618 oval = private->mux[index];
1619 val = clamp(ucontrol->value.integer.value[0],
1620 0L, private->num_mux_srcs - 1L);
1621
1622 if (oval == val)
1623 goto unlock;
1624
1625 private->mux[index] = val;
1626 err = scarlett2_usb_set_mux(mixer);
1627 if (err == 0)
1628 err = 1;
1629
1630 unlock:
1631 mutex_unlock(&private->data_mutex);
1632 return err;
1633 }
1634
1635 static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
1636 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1637 .name = "",
1638 .info = scarlett2_mux_src_enum_ctl_info,
1639 .get = scarlett2_mux_src_enum_ctl_get,
1640 .put = scarlett2_mux_src_enum_ctl_put,
1641 };
1642
1643 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
1644 {
1645 struct scarlett2_mixer_data *private = mixer->private_data;
1646 const struct scarlett2_ports *ports = private->info->ports;
1647 int port_type, channel, i;
1648
1649 for (i = 0, port_type = 0;
1650 port_type < SCARLETT2_PORT_TYPE_COUNT;
1651 port_type++) {
1652 for (channel = 0;
1653 channel < ports[port_type].num[SCARLETT2_PORT_OUT];
1654 channel++, i++) {
1655 int err;
1656 char s[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
1657 const char *const descr = ports[port_type].dst_descr;
1658
1659 snprintf(s, sizeof(s) - 5, descr, channel + 1);
1660 strcat(s, " Enum");
1661
1662 err = scarlett2_add_new_ctl(mixer,
1663 &scarlett2_mux_src_enum_ctl,
1664 i, 1, s, NULL);
1665 if (err < 0)
1666 return err;
1667 }
1668 }
1669
1670 return 0;
1671 }
1672
1673
1674
1675 static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
1676 struct snd_ctl_elem_info *uinfo)
1677 {
1678 struct usb_mixer_elem_info *elem = kctl->private_data;
1679
1680 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1681 uinfo->count = elem->channels;
1682 uinfo->value.integer.min = 0;
1683 uinfo->value.integer.max = 4095;
1684 uinfo->value.integer.step = 1;
1685 return 0;
1686 }
1687
1688 static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
1689 struct snd_ctl_elem_value *ucontrol)
1690 {
1691 struct usb_mixer_elem_info *elem = kctl->private_data;
1692 u16 meter_levels[SCARLETT2_NUM_METERS];
1693 int i, err;
1694
1695 err = scarlett2_usb_get_meter_levels(elem->head.mixer, meter_levels);
1696 if (err < 0)
1697 return err;
1698
1699 for (i = 0; i < elem->channels; i++)
1700 ucontrol->value.integer.value[i] = meter_levels[i];
1701
1702 return 0;
1703 }
1704
1705 static const struct snd_kcontrol_new scarlett2_meter_ctl = {
1706 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1707 .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
1708 .name = "",
1709 .info = scarlett2_meter_ctl_info,
1710 .get = scarlett2_meter_ctl_get
1711 };
1712
1713 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
1714 {
1715 return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
1716 0, SCARLETT2_NUM_METERS,
1717 "Level Meter", NULL);
1718 }
1719
1720
1721
1722 static void scarlett2_private_free(struct usb_mixer_interface *mixer)
1723 {
1724 struct scarlett2_mixer_data *private = mixer->private_data;
1725
1726 cancel_delayed_work_sync(&private->work);
1727 kfree(private);
1728 mixer->private_data = NULL;
1729 }
1730
1731 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
1732 {
1733 struct scarlett2_mixer_data *private = mixer->private_data;
1734
1735 if (cancel_delayed_work_sync(&private->work))
1736 scarlett2_config_save(private->mixer);
1737 }
1738
1739
1740
1741 static int scarlett2_count_mux_srcs(const struct scarlett2_ports *ports)
1742 {
1743 int port_type, count = 0;
1744
1745 for (port_type = 0;
1746 port_type < SCARLETT2_PORT_TYPE_COUNT;
1747 port_type++)
1748 count += ports[port_type].num[SCARLETT2_PORT_IN];
1749
1750 return count;
1751 }
1752
1753
1754
1755
1756 static void scarlett2_init_routing(u8 *mux,
1757 const struct scarlett2_ports *ports)
1758 {
1759 int i, input_num, input_count, port_type;
1760 int output_num, output_count, port_type_connect_num;
1761
1762 static const int connect_order[] = {
1763 SCARLETT2_PORT_TYPE_ANALOGUE,
1764 SCARLETT2_PORT_TYPE_SPDIF,
1765 SCARLETT2_PORT_TYPE_ADAT,
1766 -1
1767 };
1768
1769
1770 output_num = scarlett2_get_port_start_num(ports,
1771 SCARLETT2_PORT_OUT,
1772 SCARLETT2_PORT_TYPE_PCM);
1773 output_count = ports[SCARLETT2_PORT_TYPE_PCM].num[SCARLETT2_PORT_OUT];
1774
1775 for (port_type = connect_order[port_type_connect_num = 0];
1776 port_type >= 0;
1777 port_type = connect_order[++port_type_connect_num]) {
1778 input_num = scarlett2_get_port_start_num(
1779 ports, SCARLETT2_PORT_IN, port_type);
1780 input_count = ports[port_type].num[SCARLETT2_PORT_IN];
1781 for (i = 0;
1782 i < input_count && output_count;
1783 i++, output_count--)
1784 mux[output_num++] = input_num++;
1785 }
1786
1787
1788 input_num = scarlett2_get_port_start_num(ports,
1789 SCARLETT2_PORT_IN,
1790 SCARLETT2_PORT_TYPE_PCM);
1791 input_count = ports[SCARLETT2_PORT_TYPE_PCM].num[SCARLETT2_PORT_IN];
1792
1793 for (port_type = connect_order[port_type_connect_num = 0];
1794 port_type >= 0;
1795 port_type = connect_order[++port_type_connect_num]) {
1796 output_num = scarlett2_get_port_start_num(
1797 ports, SCARLETT2_PORT_OUT, port_type);
1798 output_count = ports[port_type].num[SCARLETT2_PORT_OUT];
1799 for (i = 0;
1800 i < output_count && input_count;
1801 i++, input_count--)
1802 mux[output_num++] = input_num++;
1803 }
1804 }
1805
1806
1807 static int scarlett2_init_private(struct usb_mixer_interface *mixer,
1808 const struct scarlett2_device_info *info)
1809 {
1810 struct scarlett2_mixer_data *private =
1811 kzalloc(sizeof(struct scarlett2_mixer_data), GFP_KERNEL);
1812
1813 if (!private)
1814 return -ENOMEM;
1815
1816 mutex_init(&private->usb_mutex);
1817 mutex_init(&private->data_mutex);
1818 INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
1819 private->info = info;
1820 private->num_mux_srcs = scarlett2_count_mux_srcs(info->ports);
1821 private->scarlett2_seq = 0;
1822 private->mixer = mixer;
1823 mixer->private_data = private;
1824 mixer->private_free = scarlett2_private_free;
1825 mixer->private_suspend = scarlett2_private_suspend;
1826
1827
1828 scarlett2_init_routing(private->mux, info->ports);
1829
1830
1831 return scarlett2_usb(mixer, SCARLETT2_USB_INIT_SEQ, NULL, 0, NULL, 0);
1832 }
1833
1834
1835 static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
1836 {
1837 struct scarlett2_mixer_data *private = mixer->private_data;
1838 const struct scarlett2_device_info *info = private->info;
1839 const struct scarlett2_ports *ports = info->ports;
1840 int num_line_out =
1841 ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
1842 u8 level_switches[SCARLETT2_LEVEL_SWITCH_MAX];
1843 u8 pad_switches[SCARLETT2_PAD_SWITCH_MAX];
1844 struct scarlett2_usb_volume_status volume_status;
1845 int err, i;
1846
1847 if (info->level_input_count) {
1848 err = scarlett2_usb_get_config(
1849 mixer,
1850 SCARLETT2_CONFIG_LEVEL_SWITCH,
1851 info->level_input_count,
1852 level_switches);
1853 if (err < 0)
1854 return err;
1855 for (i = 0; i < info->level_input_count; i++)
1856 private->level_switch[i] = level_switches[i];
1857 }
1858
1859 if (info->pad_input_count) {
1860 err = scarlett2_usb_get_config(
1861 mixer,
1862 SCARLETT2_CONFIG_PAD_SWITCH,
1863 info->pad_input_count,
1864 pad_switches);
1865 if (err < 0)
1866 return err;
1867 for (i = 0; i < info->pad_input_count; i++)
1868 private->pad_switch[i] = pad_switches[i];
1869 }
1870
1871 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
1872 if (err < 0)
1873 return err;
1874
1875 private->master_vol = clamp(
1876 volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
1877 0, SCARLETT2_VOLUME_BIAS);
1878
1879 for (i = 0; i < num_line_out; i++) {
1880 int volume;
1881
1882 private->vol_sw_hw_switch[i] =
1883 info->line_out_hw_vol
1884 && volume_status.sw_hw_switch[i];
1885
1886 volume = private->vol_sw_hw_switch[i]
1887 ? volume_status.master_vol
1888 : volume_status.sw_vol[i];
1889 volume = clamp(volume + SCARLETT2_VOLUME_BIAS,
1890 0, SCARLETT2_VOLUME_BIAS);
1891 private->vol[i] = volume;
1892 }
1893
1894 for (i = 0; i < info->button_count; i++)
1895 private->buttons[i] = !!volume_status.buttons[i];
1896
1897 return 0;
1898 }
1899
1900
1901 static void scarlett2_mixer_interrupt_vol_change(
1902 struct usb_mixer_interface *mixer)
1903 {
1904 struct scarlett2_mixer_data *private = mixer->private_data;
1905 const struct scarlett2_ports *ports = private->info->ports;
1906 int num_line_out =
1907 ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
1908 int i;
1909
1910 private->vol_updated = 1;
1911
1912 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1913 &private->master_vol_ctl->id);
1914
1915 for (i = 0; i < num_line_out; i++) {
1916 if (!private->vol_sw_hw_switch[i])
1917 continue;
1918 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1919 &private->vol_ctls[i]->id);
1920 }
1921 }
1922
1923
1924 static void scarlett2_mixer_interrupt_button_change(
1925 struct usb_mixer_interface *mixer)
1926 {
1927 struct scarlett2_mixer_data *private = mixer->private_data;
1928 int i;
1929
1930 private->vol_updated = 1;
1931
1932 for (i = 0; i < private->info->button_count; i++)
1933 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1934 &private->button_ctls[i]->id);
1935 }
1936
1937
1938 static void scarlett2_mixer_interrupt(struct urb *urb)
1939 {
1940 struct usb_mixer_interface *mixer = urb->context;
1941 int len = urb->actual_length;
1942 int ustatus = urb->status;
1943 u32 data;
1944
1945 if (ustatus != 0)
1946 goto requeue;
1947
1948 if (len == 8) {
1949 data = le32_to_cpu(*(u32 *)urb->transfer_buffer);
1950 if (data & SCARLETT2_USB_INTERRUPT_VOL_CHANGE)
1951 scarlett2_mixer_interrupt_vol_change(mixer);
1952 if (data & SCARLETT2_USB_INTERRUPT_BUTTON_CHANGE)
1953 scarlett2_mixer_interrupt_button_change(mixer);
1954 } else {
1955 usb_audio_err(mixer->chip,
1956 "scarlett mixer interrupt length %d\n", len);
1957 }
1958
1959 requeue:
1960 if (ustatus != -ENOENT &&
1961 ustatus != -ECONNRESET &&
1962 ustatus != -ESHUTDOWN) {
1963 urb->dev = mixer->chip->dev;
1964 usb_submit_urb(urb, GFP_ATOMIC);
1965 }
1966 }
1967
1968 static int scarlett2_mixer_status_create(struct usb_mixer_interface *mixer)
1969 {
1970 struct usb_device *dev = mixer->chip->dev;
1971 unsigned int pipe = usb_rcvintpipe(dev,
1972 SCARLETT2_USB_INTERRUPT_ENDPOINT);
1973 void *transfer_buffer;
1974
1975 if (mixer->urb) {
1976 usb_audio_err(mixer->chip,
1977 "%s: mixer urb already in use!\n", __func__);
1978 return 0;
1979 }
1980
1981 if (snd_usb_pipe_sanity_check(dev, pipe))
1982 return -EINVAL;
1983
1984 mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
1985 if (!mixer->urb)
1986 return -ENOMEM;
1987
1988 transfer_buffer = kmalloc(SCARLETT2_USB_INTERRUPT_MAX_DATA, GFP_KERNEL);
1989 if (!transfer_buffer)
1990 return -ENOMEM;
1991
1992 usb_fill_int_urb(mixer->urb, dev, pipe,
1993 transfer_buffer, SCARLETT2_USB_INTERRUPT_MAX_DATA,
1994 scarlett2_mixer_interrupt, mixer,
1995 SCARLETT2_USB_INTERRUPT_INTERVAL);
1996
1997 return usb_submit_urb(mixer->urb, GFP_KERNEL);
1998 }
1999
2000
2001 int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
2002 {
2003 const struct scarlett2_device_info *info;
2004 int err;
2005
2006
2007 if (!mixer->protocol)
2008 return 0;
2009
2010 switch (mixer->chip->usb_id) {
2011 case USB_ID(0x1235, 0x8203):
2012 info = &s6i6_gen2_info;
2013 break;
2014 case USB_ID(0x1235, 0x8204):
2015 info = &s18i8_gen2_info;
2016 break;
2017 case USB_ID(0x1235, 0x8201):
2018 info = &s18i20_gen2_info;
2019 break;
2020 default:
2021 return -EINVAL;
2022 }
2023
2024 if (!(mixer->chip->setup & SCARLETT2_ENABLE)) {
2025 usb_audio_err(mixer->chip,
2026 "Focusrite Scarlett Gen 2 Mixer Driver disabled; "
2027 "use options snd_usb_audio device_setup=1 "
2028 "to enable and report any issues to g@b4.vu");
2029 return 0;
2030 }
2031
2032
2033 err = scarlett2_init_private(mixer, info);
2034 if (err < 0)
2035 return err;
2036
2037
2038 err = scarlett2_read_configs(mixer);
2039 if (err < 0)
2040 return err;
2041
2042
2043 err = scarlett2_add_line_out_ctls(mixer);
2044 if (err < 0)
2045 return err;
2046
2047
2048 err = scarlett2_add_line_in_ctls(mixer);
2049 if (err < 0)
2050 return err;
2051
2052
2053 err = scarlett2_add_mux_enums(mixer);
2054 if (err < 0)
2055 return err;
2056
2057
2058 err = scarlett2_add_mixer_ctls(mixer);
2059 if (err < 0)
2060 return err;
2061
2062
2063 err = scarlett2_add_meter_ctl(mixer);
2064 if (err < 0)
2065 return err;
2066
2067
2068 if (info->button_count) {
2069 err = scarlett2_mixer_status_create(mixer);
2070 if (err < 0)
2071 return err;
2072 }
2073
2074 return 0;
2075 }