Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/usb/mixer.c
50360 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* (Tentative) USB Audio Driver for ALSA
4
*
5
* Mixer control part
6
*
7
* Copyright (c) 2002 by Takashi Iwai <[email protected]>
8
*
9
* Many codes borrowed from audio.c by
10
* Alan Cox ([email protected])
11
* Thomas Sailer ([email protected])
12
*/
13
14
/*
15
* TODOs, for both the mixer and the streaming interfaces:
16
*
17
* - support for UAC2 effect units
18
* - support for graphical equalizers
19
* - RANGE and MEM set commands (UAC2)
20
* - RANGE and MEM interrupt dispatchers (UAC2)
21
* - audio channel clustering (UAC2)
22
* - audio sample rate converter units (UAC2)
23
* - proper handling of clock multipliers (UAC2)
24
* - dispatch clock change notifications (UAC2)
25
* - stop PCM streams which use a clock that became invalid
26
* - stop PCM streams which use a clock selector that has changed
27
* - parse available sample rates again when clock sources changed
28
*/
29
30
#include <linux/bitops.h>
31
#include <linux/init.h>
32
#include <linux/list.h>
33
#include <linux/log2.h>
34
#include <linux/slab.h>
35
#include <linux/string.h>
36
#include <linux/usb.h>
37
#include <linux/usb/audio.h>
38
#include <linux/usb/audio-v2.h>
39
#include <linux/usb/audio-v3.h>
40
41
#include <sound/core.h>
42
#include <sound/control.h>
43
#include <sound/hwdep.h>
44
#include <sound/info.h>
45
#include <sound/tlv.h>
46
47
#include "usbaudio.h"
48
#include "mixer.h"
49
#include "helper.h"
50
#include "mixer_quirks.h"
51
#include "power.h"
52
53
#define MAX_ID_ELEMS 256
54
55
struct usb_audio_term {
56
int id;
57
int type;
58
int channels;
59
unsigned int chconfig;
60
int name;
61
};
62
63
struct usbmix_name_map;
64
65
struct mixer_build {
66
struct snd_usb_audio *chip;
67
struct usb_mixer_interface *mixer;
68
unsigned char *buffer;
69
unsigned int buflen;
70
DECLARE_BITMAP(unitbitmap, MAX_ID_ELEMS);
71
DECLARE_BITMAP(termbitmap, MAX_ID_ELEMS);
72
struct usb_audio_term oterm;
73
const struct usbmix_name_map *map;
74
const struct usbmix_selector_map *selector_map;
75
};
76
77
/*E-mu 0202/0404/0204 eXtension Unit(XU) control*/
78
enum {
79
USB_XU_CLOCK_RATE = 0xe301,
80
USB_XU_CLOCK_SOURCE = 0xe302,
81
USB_XU_DIGITAL_IO_STATUS = 0xe303,
82
USB_XU_DEVICE_OPTIONS = 0xe304,
83
USB_XU_DIRECT_MONITORING = 0xe305,
84
USB_XU_METERING = 0xe306
85
};
86
enum {
87
USB_XU_CLOCK_SOURCE_SELECTOR = 0x02, /* clock source*/
88
USB_XU_CLOCK_RATE_SELECTOR = 0x03, /* clock rate */
89
USB_XU_DIGITAL_FORMAT_SELECTOR = 0x01, /* the spdif format */
90
USB_XU_SOFT_LIMIT_SELECTOR = 0x03 /* soft limiter */
91
};
92
93
/*
94
* manual mapping of mixer names
95
* if the mixer topology is too complicated and the parsed names are
96
* ambiguous, add the entries in usbmixer_maps.c.
97
*/
98
#include "mixer_maps.c"
99
100
static const struct usbmix_name_map *
101
find_map(const struct usbmix_name_map *p, int unitid, int control)
102
{
103
if (!p)
104
return NULL;
105
106
for (; p->id; p++) {
107
if (p->id == unitid &&
108
(!control || !p->control || control == p->control))
109
return p;
110
}
111
return NULL;
112
}
113
114
/* get the mapped name if the unit matches */
115
static int
116
check_mapped_name(const struct usbmix_name_map *p, char *buf, int buflen)
117
{
118
int len;
119
120
if (!p || !p->name)
121
return 0;
122
123
buflen--;
124
len = strscpy(buf, p->name, buflen);
125
return len < 0 ? buflen : len;
126
}
127
128
/* ignore the error value if ignore_ctl_error flag is set */
129
#define filter_error(cval, err) \
130
((cval)->head.mixer->ignore_ctl_error ? 0 : (err))
131
132
/* check whether the control should be ignored */
133
static inline int
134
check_ignored_ctl(const struct usbmix_name_map *p)
135
{
136
if (!p || p->name || p->dB)
137
return 0;
138
return 1;
139
}
140
141
/* dB mapping */
142
static inline void check_mapped_dB(const struct usbmix_name_map *p,
143
struct usb_mixer_elem_info *cval)
144
{
145
if (p && p->dB) {
146
cval->dBmin = p->dB->min;
147
cval->dBmax = p->dB->max;
148
cval->min_mute = p->dB->min_mute;
149
cval->initialized = 1;
150
}
151
}
152
153
/* get the mapped selector source name */
154
static int check_mapped_selector_name(struct mixer_build *state, int unitid,
155
int index, char *buf, int buflen)
156
{
157
const struct usbmix_selector_map *p;
158
int len;
159
160
if (!state->selector_map)
161
return 0;
162
for (p = state->selector_map; p->id; p++) {
163
if (p->id == unitid && index < p->count) {
164
len = strscpy(buf, p->names[index], buflen);
165
return len < 0 ? buflen : len;
166
}
167
}
168
return 0;
169
}
170
171
/*
172
* find an audio control unit with the given unit id
173
*/
174
static void *find_audio_control_unit(struct mixer_build *state,
175
unsigned char unit)
176
{
177
/* we just parse the header */
178
struct uac_feature_unit_descriptor *hdr = NULL;
179
180
while ((hdr = snd_usb_find_desc(state->buffer, state->buflen, hdr,
181
USB_DT_CS_INTERFACE)) != NULL) {
182
if (hdr->bLength >= 4 &&
183
hdr->bDescriptorSubtype >= UAC_INPUT_TERMINAL &&
184
hdr->bDescriptorSubtype <= UAC3_SAMPLE_RATE_CONVERTER &&
185
hdr->bUnitID == unit)
186
return hdr;
187
}
188
189
return NULL;
190
}
191
192
/*
193
* copy a string with the given id
194
*/
195
static int snd_usb_copy_string_desc(struct snd_usb_audio *chip,
196
int index, char *buf, int maxlen)
197
{
198
int len = usb_string(chip->dev, index, buf, maxlen - 1);
199
200
if (len < 0)
201
return 0;
202
203
buf[len] = 0;
204
return len;
205
}
206
207
/*
208
* convert from the byte/word on usb descriptor to the zero-based integer
209
*/
210
static int convert_signed_value(struct usb_mixer_elem_info *cval, int val)
211
{
212
switch (cval->val_type) {
213
case USB_MIXER_BOOLEAN:
214
return !!val;
215
case USB_MIXER_INV_BOOLEAN:
216
return !val;
217
case USB_MIXER_U8:
218
val &= 0xff;
219
break;
220
case USB_MIXER_S8:
221
val &= 0xff;
222
if (val >= 0x80)
223
val -= 0x100;
224
break;
225
case USB_MIXER_U16:
226
val &= 0xffff;
227
break;
228
case USB_MIXER_S16:
229
val &= 0xffff;
230
if (val >= 0x8000)
231
val -= 0x10000;
232
break;
233
}
234
return val;
235
}
236
237
/*
238
* convert from the zero-based int to the byte/word for usb descriptor
239
*/
240
static int convert_bytes_value(struct usb_mixer_elem_info *cval, int val)
241
{
242
switch (cval->val_type) {
243
case USB_MIXER_BOOLEAN:
244
return !!val;
245
case USB_MIXER_INV_BOOLEAN:
246
return !val;
247
case USB_MIXER_S8:
248
case USB_MIXER_U8:
249
return val & 0xff;
250
case USB_MIXER_S16:
251
case USB_MIXER_U16:
252
return val & 0xffff;
253
}
254
return 0; /* not reached */
255
}
256
257
static int get_relative_value(struct usb_mixer_elem_info *cval, int val)
258
{
259
if (!cval->res)
260
cval->res = 1;
261
if (val < cval->min)
262
return 0;
263
else if (val >= cval->max)
264
return DIV_ROUND_UP(cval->max - cval->min, cval->res);
265
else
266
return (val - cval->min) / cval->res;
267
}
268
269
static int get_abs_value(struct usb_mixer_elem_info *cval, int val)
270
{
271
if (val < 0)
272
return cval->min;
273
if (!cval->res)
274
cval->res = 1;
275
val *= cval->res;
276
val += cval->min;
277
if (val > cval->max)
278
return cval->max;
279
return val;
280
}
281
282
static int uac2_ctl_value_size(int val_type)
283
{
284
switch (val_type) {
285
case USB_MIXER_S32:
286
case USB_MIXER_U32:
287
return 4;
288
case USB_MIXER_S16:
289
case USB_MIXER_U16:
290
return 2;
291
default:
292
return 1;
293
}
294
return 0; /* unreachable */
295
}
296
297
298
/*
299
* retrieve a mixer value
300
*/
301
302
static inline int mixer_ctrl_intf(struct usb_mixer_interface *mixer)
303
{
304
return get_iface_desc(mixer->hostif)->bInterfaceNumber;
305
}
306
307
static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request,
308
int validx, int *value_ret)
309
{
310
struct snd_usb_audio *chip = cval->head.mixer->chip;
311
unsigned char buf[2];
312
int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1;
313
int timeout = 10;
314
int idx = 0, err;
315
316
CLASS(snd_usb_lock, pm)(chip);
317
if (pm.err < 0)
318
return -EIO;
319
320
while (timeout-- > 0) {
321
idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
322
err = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request,
323
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
324
validx, idx, buf, val_len);
325
if (err >= val_len) {
326
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len));
327
return 0;
328
} else if (err == -ETIMEDOUT) {
329
return err;
330
}
331
}
332
usb_audio_dbg(chip,
333
"cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
334
request, validx, idx, cval->val_type);
335
return -EINVAL;
336
}
337
338
static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
339
int validx, int *value_ret)
340
{
341
struct snd_usb_audio *chip = cval->head.mixer->chip;
342
/* enough space for one range */
343
unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
344
unsigned char *val;
345
int idx = 0, ret, val_size, size;
346
__u8 bRequest;
347
348
val_size = uac2_ctl_value_size(cval->val_type);
349
350
if (request == UAC_GET_CUR) {
351
bRequest = UAC2_CS_CUR;
352
size = val_size;
353
} else {
354
bRequest = UAC2_CS_RANGE;
355
size = sizeof(__u16) + 3 * val_size;
356
}
357
358
memset(buf, 0, sizeof(buf));
359
360
{
361
CLASS(snd_usb_lock, pm)(chip);
362
if (pm.err)
363
return -EIO;
364
365
idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
366
ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), bRequest,
367
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
368
validx, idx, buf, size);
369
}
370
371
if (ret < 0) {
372
usb_audio_dbg(chip,
373
"cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
374
request, validx, idx, cval->val_type);
375
return ret;
376
}
377
378
/* FIXME: how should we handle multiple triplets here? */
379
380
switch (request) {
381
case UAC_GET_CUR:
382
val = buf;
383
break;
384
case UAC_GET_MIN:
385
val = buf + sizeof(__u16);
386
break;
387
case UAC_GET_MAX:
388
val = buf + sizeof(__u16) + val_size;
389
break;
390
case UAC_GET_RES:
391
val = buf + sizeof(__u16) + val_size * 2;
392
break;
393
default:
394
return -EINVAL;
395
}
396
397
*value_ret = convert_signed_value(cval,
398
snd_usb_combine_bytes(val, val_size));
399
400
return 0;
401
}
402
403
static int get_ctl_value(struct usb_mixer_elem_info *cval, int request,
404
int validx, int *value_ret)
405
{
406
validx += cval->idx_off;
407
408
return (cval->head.mixer->protocol == UAC_VERSION_1) ?
409
get_ctl_value_v1(cval, request, validx, value_ret) :
410
get_ctl_value_v2(cval, request, validx, value_ret);
411
}
412
413
static int get_cur_ctl_value(struct usb_mixer_elem_info *cval,
414
int validx, int *value)
415
{
416
return get_ctl_value(cval, UAC_GET_CUR, validx, value);
417
}
418
419
/* channel = 0: master, 1 = first channel */
420
static inline int get_cur_mix_raw(struct usb_mixer_elem_info *cval,
421
int channel, int *value)
422
{
423
return get_ctl_value(cval, UAC_GET_CUR,
424
(cval->control << 8) | channel,
425
value);
426
}
427
428
int snd_usb_get_cur_mix_value(struct usb_mixer_elem_info *cval,
429
int channel, int index, int *value)
430
{
431
int err;
432
433
if (cval->cached & BIT(channel)) {
434
*value = cval->cache_val[index];
435
return 0;
436
}
437
err = get_cur_mix_raw(cval, channel, value);
438
if (err < 0) {
439
if (!cval->head.mixer->ignore_ctl_error)
440
usb_audio_dbg(cval->head.mixer->chip,
441
"cannot get current value for control %d ch %d: err = %d\n",
442
cval->control, channel, err);
443
return err;
444
}
445
cval->cached |= BIT(channel);
446
cval->cache_val[index] = *value;
447
return 0;
448
}
449
450
/*
451
* set a mixer value
452
*/
453
454
int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval,
455
int request, int validx, int value_set)
456
{
457
struct snd_usb_audio *chip = cval->head.mixer->chip;
458
unsigned char buf[4];
459
int idx = 0, val_len, err, timeout = 10;
460
461
validx += cval->idx_off;
462
463
464
if (cval->head.mixer->protocol == UAC_VERSION_1) {
465
val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1;
466
} else { /* UAC_VERSION_2/3 */
467
val_len = uac2_ctl_value_size(cval->val_type);
468
469
/* FIXME */
470
if (request != UAC_SET_CUR) {
471
usb_audio_dbg(chip, "RANGE setting not yet supported\n");
472
return -EINVAL;
473
}
474
475
request = UAC2_CS_CUR;
476
}
477
478
value_set = convert_bytes_value(cval, value_set);
479
buf[0] = value_set & 0xff;
480
buf[1] = (value_set >> 8) & 0xff;
481
buf[2] = (value_set >> 16) & 0xff;
482
buf[3] = (value_set >> 24) & 0xff;
483
484
CLASS(snd_usb_lock, pm)(chip);
485
if (pm.err < 0)
486
return -EIO;
487
488
while (timeout-- > 0) {
489
idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
490
err = snd_usb_ctl_msg(chip->dev,
491
usb_sndctrlpipe(chip->dev, 0), request,
492
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
493
validx, idx, buf, val_len);
494
if (err >= 0)
495
return 0;
496
else if (err == -ETIMEDOUT)
497
return err;
498
}
499
usb_audio_dbg(chip, "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n",
500
request, validx, idx, cval->val_type, buf[0], buf[1]);
501
return -EINVAL;
502
}
503
504
static int set_cur_ctl_value(struct usb_mixer_elem_info *cval,
505
int validx, int value)
506
{
507
return snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR, validx, value);
508
}
509
510
int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel,
511
int index, int value)
512
{
513
int err;
514
unsigned int read_only = (channel == 0) ?
515
cval->master_readonly :
516
cval->ch_readonly & BIT(channel - 1);
517
518
if (read_only) {
519
usb_audio_dbg(cval->head.mixer->chip,
520
"%s(): channel %d of control %d is read_only\n",
521
__func__, channel, cval->control);
522
return 0;
523
}
524
525
err = snd_usb_mixer_set_ctl_value(cval,
526
UAC_SET_CUR, (cval->control << 8) | channel,
527
value);
528
if (err < 0)
529
return err;
530
cval->cached |= BIT(channel);
531
cval->cache_val[index] = value;
532
return 0;
533
}
534
535
/*
536
* TLV callback for mixer volume controls
537
*/
538
int snd_usb_mixer_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,
539
unsigned int size, unsigned int __user *_tlv)
540
{
541
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
542
DECLARE_TLV_DB_MINMAX(scale, 0, 0);
543
544
if (size < sizeof(scale))
545
return -ENOMEM;
546
if (cval->min_mute)
547
scale[0] = SNDRV_CTL_TLVT_DB_MINMAX_MUTE;
548
scale[2] = cval->dBmin;
549
scale[3] = cval->dBmax;
550
if (copy_to_user(_tlv, scale, sizeof(scale)))
551
return -EFAULT;
552
return 0;
553
}
554
555
/*
556
* parser routines begin here...
557
*/
558
559
static int parse_audio_unit(struct mixer_build *state, int unitid);
560
561
562
/*
563
* check if the input/output channel routing is enabled on the given bitmap.
564
* used for mixer unit parser
565
*/
566
static int check_matrix_bitmap(unsigned char *bmap,
567
int ich, int och, int num_outs)
568
{
569
int idx = ich * num_outs + och;
570
return bmap[idx >> 3] & (0x80 >> (idx & 7));
571
}
572
573
/*
574
* add an alsa control element
575
* search and increment the index until an empty slot is found.
576
*
577
* if failed, give up and free the control instance.
578
*/
579
580
int snd_usb_mixer_add_list(struct usb_mixer_elem_list *list,
581
struct snd_kcontrol *kctl,
582
bool is_std_info)
583
{
584
struct usb_mixer_interface *mixer = list->mixer;
585
int err;
586
587
while (snd_ctl_find_id(mixer->chip->card, &kctl->id))
588
kctl->id.index++;
589
err = snd_ctl_add(mixer->chip->card, kctl);
590
if (err < 0) {
591
usb_audio_dbg(mixer->chip, "cannot add control (err = %d)\n",
592
err);
593
return err;
594
}
595
list->kctl = kctl;
596
list->is_std_info = is_std_info;
597
list->next_id_elem = mixer->id_elems[list->id];
598
mixer->id_elems[list->id] = list;
599
return 0;
600
}
601
602
/*
603
* get a terminal name string
604
*/
605
606
static struct iterm_name_combo {
607
int type;
608
char *name;
609
} iterm_names[] = {
610
{ 0x0300, "Output" },
611
{ 0x0301, "Speaker" },
612
{ 0x0302, "Headphone" },
613
{ 0x0303, "HMD Audio" },
614
{ 0x0304, "Desktop Speaker" },
615
{ 0x0305, "Room Speaker" },
616
{ 0x0306, "Com Speaker" },
617
{ 0x0307, "LFE" },
618
{ 0x0600, "External In" },
619
{ 0x0601, "Analog In" },
620
{ 0x0602, "Digital In" },
621
{ 0x0603, "Line" },
622
{ 0x0604, "Legacy In" },
623
{ 0x0605, "IEC958 In" },
624
{ 0x0606, "1394 DA Stream" },
625
{ 0x0607, "1394 DV Stream" },
626
{ 0x0700, "Embedded" },
627
{ 0x0701, "Noise Source" },
628
{ 0x0702, "Equalization Noise" },
629
{ 0x0703, "CD" },
630
{ 0x0704, "DAT" },
631
{ 0x0705, "DCC" },
632
{ 0x0706, "MiniDisk" },
633
{ 0x0707, "Analog Tape" },
634
{ 0x0708, "Phonograph" },
635
{ 0x0709, "VCR Audio" },
636
{ 0x070a, "Video Disk Audio" },
637
{ 0x070b, "DVD Audio" },
638
{ 0x070c, "TV Tuner Audio" },
639
{ 0x070d, "Satellite Rec Audio" },
640
{ 0x070e, "Cable Tuner Audio" },
641
{ 0x070f, "DSS Audio" },
642
{ 0x0710, "Radio Receiver" },
643
{ 0x0711, "Radio Transmitter" },
644
{ 0x0712, "Multi-Track Recorder" },
645
{ 0x0713, "Synthesizer" },
646
{ 0 },
647
};
648
649
static int get_term_name(struct snd_usb_audio *chip, struct usb_audio_term *iterm,
650
unsigned char *name, int maxlen, int term_only)
651
{
652
struct iterm_name_combo *names;
653
int len;
654
655
if (iterm->name) {
656
len = snd_usb_copy_string_desc(chip, iterm->name,
657
name, maxlen);
658
if (len)
659
return len;
660
}
661
662
/* virtual type - not a real terminal */
663
if (iterm->type >> 16) {
664
if (term_only)
665
return 0;
666
switch (iterm->type >> 16) {
667
case UAC3_SELECTOR_UNIT:
668
strscpy(name, "Selector", maxlen);
669
return 8;
670
case UAC3_PROCESSING_UNIT:
671
strscpy(name, "Process Unit", maxlen);
672
return 12;
673
case UAC3_EXTENSION_UNIT:
674
strscpy(name, "Ext Unit", maxlen);
675
return 8;
676
case UAC3_MIXER_UNIT:
677
strscpy(name, "Mixer", maxlen);
678
return 5;
679
default:
680
return scnprintf(name, maxlen, "Unit %d", iterm->id);
681
}
682
}
683
684
switch (iterm->type & 0xff00) {
685
case 0x0100:
686
strscpy(name, "PCM", maxlen);
687
return 3;
688
case 0x0200:
689
strscpy(name, "Mic", maxlen);
690
return 3;
691
case 0x0400:
692
strscpy(name, "Headset", maxlen);
693
return 7;
694
case 0x0500:
695
strscpy(name, "Phone", maxlen);
696
return 5;
697
}
698
699
for (names = iterm_names; names->type; names++) {
700
if (names->type == iterm->type) {
701
strscpy(name, names->name, maxlen);
702
return strlen(names->name);
703
}
704
}
705
706
return 0;
707
}
708
709
/*
710
* Get logical cluster information for UAC3 devices.
711
*/
712
static int get_cluster_channels_v3(struct mixer_build *state, unsigned int cluster_id)
713
{
714
struct uac3_cluster_header_descriptor c_header;
715
int err;
716
717
err = snd_usb_ctl_msg(state->chip->dev,
718
usb_rcvctrlpipe(state->chip->dev, 0),
719
UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR,
720
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
721
cluster_id,
722
snd_usb_ctrl_intf(state->mixer->hostif),
723
&c_header, sizeof(c_header));
724
if (err < 0)
725
goto error;
726
if (err != sizeof(c_header)) {
727
err = -EIO;
728
goto error;
729
}
730
731
return c_header.bNrChannels;
732
733
error:
734
usb_audio_err(state->chip, "cannot request logical cluster ID: %d (err: %d)\n", cluster_id, err);
735
return err;
736
}
737
738
/*
739
* Get number of channels for a Mixer Unit.
740
*/
741
static int uac_mixer_unit_get_channels(struct mixer_build *state,
742
struct uac_mixer_unit_descriptor *desc)
743
{
744
int mu_channels;
745
746
switch (state->mixer->protocol) {
747
case UAC_VERSION_1:
748
case UAC_VERSION_2:
749
default:
750
if (desc->bLength < sizeof(*desc) + desc->bNrInPins + 1)
751
return 0; /* no bmControls -> skip */
752
mu_channels = uac_mixer_unit_bNrChannels(desc);
753
break;
754
case UAC_VERSION_3:
755
mu_channels = get_cluster_channels_v3(state,
756
uac3_mixer_unit_wClusterDescrID(desc));
757
break;
758
}
759
760
return mu_channels;
761
}
762
763
/*
764
* Parse Input Terminal Unit
765
*/
766
static int __check_input_term(struct mixer_build *state, int id,
767
struct usb_audio_term *term);
768
769
static int parse_term_uac1_iterm_unit(struct mixer_build *state,
770
struct usb_audio_term *term,
771
void *p1, int id)
772
{
773
struct uac_input_terminal_descriptor *d = p1;
774
775
term->type = le16_to_cpu(d->wTerminalType);
776
term->channels = d->bNrChannels;
777
term->chconfig = le16_to_cpu(d->wChannelConfig);
778
term->name = d->iTerminal;
779
return 0;
780
}
781
782
static int parse_term_uac2_iterm_unit(struct mixer_build *state,
783
struct usb_audio_term *term,
784
void *p1, int id)
785
{
786
struct uac2_input_terminal_descriptor *d = p1;
787
int err;
788
789
/* call recursively to verify the referenced clock entity */
790
err = __check_input_term(state, d->bCSourceID, term);
791
if (err < 0)
792
return err;
793
794
/* save input term properties after recursion,
795
* to ensure they are not overriden by the recursion calls
796
*/
797
term->id = id;
798
term->type = le16_to_cpu(d->wTerminalType);
799
term->channels = d->bNrChannels;
800
term->chconfig = le32_to_cpu(d->bmChannelConfig);
801
term->name = d->iTerminal;
802
return 0;
803
}
804
805
static int parse_term_uac3_iterm_unit(struct mixer_build *state,
806
struct usb_audio_term *term,
807
void *p1, int id)
808
{
809
struct uac3_input_terminal_descriptor *d = p1;
810
int err;
811
812
/* call recursively to verify the referenced clock entity */
813
err = __check_input_term(state, d->bCSourceID, term);
814
if (err < 0)
815
return err;
816
817
/* save input term properties after recursion,
818
* to ensure they are not overriden by the recursion calls
819
*/
820
term->id = id;
821
term->type = le16_to_cpu(d->wTerminalType);
822
823
err = get_cluster_channels_v3(state, le16_to_cpu(d->wClusterDescrID));
824
if (err < 0)
825
return err;
826
term->channels = err;
827
828
/* REVISIT: UAC3 IT doesn't have channels cfg */
829
term->chconfig = 0;
830
831
term->name = le16_to_cpu(d->wTerminalDescrStr);
832
return 0;
833
}
834
835
static int parse_term_mixer_unit(struct mixer_build *state,
836
struct usb_audio_term *term,
837
void *p1, int id)
838
{
839
struct uac_mixer_unit_descriptor *d = p1;
840
int protocol = state->mixer->protocol;
841
int err;
842
843
err = uac_mixer_unit_get_channels(state, d);
844
if (err <= 0)
845
return err;
846
847
term->type = UAC3_MIXER_UNIT << 16; /* virtual type */
848
term->channels = err;
849
if (protocol != UAC_VERSION_3) {
850
term->chconfig = uac_mixer_unit_wChannelConfig(d, protocol);
851
term->name = uac_mixer_unit_iMixer(d);
852
}
853
return 0;
854
}
855
856
static int parse_term_selector_unit(struct mixer_build *state,
857
struct usb_audio_term *term,
858
void *p1, int id)
859
{
860
struct uac_selector_unit_descriptor *d = p1;
861
int err;
862
863
/* call recursively to retrieve the channel info */
864
err = __check_input_term(state, d->baSourceID[0], term);
865
if (err < 0)
866
return err;
867
term->type = UAC3_SELECTOR_UNIT << 16; /* virtual type */
868
term->id = id;
869
if (state->mixer->protocol != UAC_VERSION_3)
870
term->name = uac_selector_unit_iSelector(d);
871
return 0;
872
}
873
874
static int parse_term_proc_unit(struct mixer_build *state,
875
struct usb_audio_term *term,
876
void *p1, int id, int vtype)
877
{
878
struct uac_processing_unit_descriptor *d = p1;
879
int protocol = state->mixer->protocol;
880
int err;
881
882
if (d->bNrInPins) {
883
/* call recursively to retrieve the channel info */
884
err = __check_input_term(state, d->baSourceID[0], term);
885
if (err < 0)
886
return err;
887
}
888
889
term->type = vtype << 16; /* virtual type */
890
term->id = id;
891
892
if (protocol == UAC_VERSION_3)
893
return 0;
894
895
if (!term->channels) {
896
term->channels = uac_processing_unit_bNrChannels(d);
897
term->chconfig = uac_processing_unit_wChannelConfig(d, protocol);
898
}
899
term->name = uac_processing_unit_iProcessing(d, protocol);
900
return 0;
901
}
902
903
static int parse_term_effect_unit(struct mixer_build *state,
904
struct usb_audio_term *term,
905
void *p1, int id)
906
{
907
struct uac2_effect_unit_descriptor *d = p1;
908
int err;
909
910
err = __check_input_term(state, d->bSourceID, term);
911
if (err < 0)
912
return err;
913
term->type = UAC3_EFFECT_UNIT << 16; /* virtual type */
914
term->id = id;
915
return 0;
916
}
917
918
static int parse_term_uac2_clock_source(struct mixer_build *state,
919
struct usb_audio_term *term,
920
void *p1, int id)
921
{
922
struct uac_clock_source_descriptor *d = p1;
923
924
term->type = UAC2_CLOCK_SOURCE << 16; /* virtual type */
925
term->id = id;
926
term->name = d->iClockSource;
927
return 0;
928
}
929
930
static int parse_term_uac3_clock_source(struct mixer_build *state,
931
struct usb_audio_term *term,
932
void *p1, int id)
933
{
934
struct uac3_clock_source_descriptor *d = p1;
935
936
term->type = UAC3_CLOCK_SOURCE << 16; /* virtual type */
937
term->id = id;
938
term->name = le16_to_cpu(d->wClockSourceStr);
939
return 0;
940
}
941
942
#define PTYPE(a, b) ((a) << 8 | (b))
943
944
/*
945
* parse the source unit recursively until it reaches to a terminal
946
* or a branched unit.
947
*/
948
static int __check_input_term(struct mixer_build *state, int id,
949
struct usb_audio_term *term)
950
{
951
int protocol = state->mixer->protocol;
952
void *p1;
953
unsigned char *hdr;
954
955
for (;;) {
956
/* a loop in the terminal chain? */
957
if (test_and_set_bit(id, state->termbitmap))
958
return -EINVAL;
959
960
p1 = find_audio_control_unit(state, id);
961
if (!p1)
962
break;
963
if (!snd_usb_validate_audio_desc(p1, protocol))
964
break; /* bad descriptor */
965
966
hdr = p1;
967
term->id = id;
968
969
switch (PTYPE(protocol, hdr[2])) {
970
case PTYPE(UAC_VERSION_1, UAC_FEATURE_UNIT):
971
case PTYPE(UAC_VERSION_2, UAC_FEATURE_UNIT):
972
case PTYPE(UAC_VERSION_3, UAC3_FEATURE_UNIT): {
973
/* the header is the same for all versions */
974
struct uac_feature_unit_descriptor *d = p1;
975
976
id = d->bSourceID;
977
break; /* continue to parse */
978
}
979
case PTYPE(UAC_VERSION_1, UAC_INPUT_TERMINAL):
980
return parse_term_uac1_iterm_unit(state, term, p1, id);
981
case PTYPE(UAC_VERSION_2, UAC_INPUT_TERMINAL):
982
return parse_term_uac2_iterm_unit(state, term, p1, id);
983
case PTYPE(UAC_VERSION_3, UAC_INPUT_TERMINAL):
984
return parse_term_uac3_iterm_unit(state, term, p1, id);
985
case PTYPE(UAC_VERSION_1, UAC_MIXER_UNIT):
986
case PTYPE(UAC_VERSION_2, UAC_MIXER_UNIT):
987
case PTYPE(UAC_VERSION_3, UAC3_MIXER_UNIT):
988
return parse_term_mixer_unit(state, term, p1, id);
989
case PTYPE(UAC_VERSION_1, UAC_SELECTOR_UNIT):
990
case PTYPE(UAC_VERSION_2, UAC_SELECTOR_UNIT):
991
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SELECTOR):
992
case PTYPE(UAC_VERSION_3, UAC3_SELECTOR_UNIT):
993
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SELECTOR):
994
return parse_term_selector_unit(state, term, p1, id);
995
case PTYPE(UAC_VERSION_1, UAC1_PROCESSING_UNIT):
996
case PTYPE(UAC_VERSION_2, UAC2_PROCESSING_UNIT_V2):
997
case PTYPE(UAC_VERSION_3, UAC3_PROCESSING_UNIT):
998
return parse_term_proc_unit(state, term, p1, id,
999
UAC3_PROCESSING_UNIT);
1000
case PTYPE(UAC_VERSION_2, UAC2_EFFECT_UNIT):
1001
case PTYPE(UAC_VERSION_3, UAC3_EFFECT_UNIT):
1002
return parse_term_effect_unit(state, term, p1, id);
1003
case PTYPE(UAC_VERSION_1, UAC1_EXTENSION_UNIT):
1004
case PTYPE(UAC_VERSION_2, UAC2_EXTENSION_UNIT_V2):
1005
case PTYPE(UAC_VERSION_3, UAC3_EXTENSION_UNIT):
1006
return parse_term_proc_unit(state, term, p1, id,
1007
UAC3_EXTENSION_UNIT);
1008
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SOURCE):
1009
return parse_term_uac2_clock_source(state, term, p1, id);
1010
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SOURCE):
1011
return parse_term_uac3_clock_source(state, term, p1, id);
1012
default:
1013
return -ENODEV;
1014
}
1015
}
1016
return -ENODEV;
1017
}
1018
1019
1020
static int check_input_term(struct mixer_build *state, int id,
1021
struct usb_audio_term *term)
1022
{
1023
memset(term, 0, sizeof(*term));
1024
memset(state->termbitmap, 0, sizeof(state->termbitmap));
1025
return __check_input_term(state, id, term);
1026
}
1027
1028
/*
1029
* Feature Unit
1030
*/
1031
1032
/* feature unit control information */
1033
struct usb_feature_control_info {
1034
int control;
1035
const char *name;
1036
int type; /* data type for uac1 */
1037
int type_uac2; /* data type for uac2 if different from uac1, else -1 */
1038
};
1039
1040
static const struct usb_feature_control_info audio_feature_info[] = {
1041
{ UAC_FU_MUTE, "Mute", USB_MIXER_INV_BOOLEAN, -1 },
1042
{ UAC_FU_VOLUME, "Volume", USB_MIXER_S16, -1 },
1043
{ UAC_FU_BASS, "Tone Control - Bass", USB_MIXER_S8, -1 },
1044
{ UAC_FU_MID, "Tone Control - Mid", USB_MIXER_S8, -1 },
1045
{ UAC_FU_TREBLE, "Tone Control - Treble", USB_MIXER_S8, -1 },
1046
{ UAC_FU_GRAPHIC_EQUALIZER, "Graphic Equalizer", USB_MIXER_S8, -1 }, /* FIXME: not implemented yet */
1047
{ UAC_FU_AUTOMATIC_GAIN, "Auto Gain Control", USB_MIXER_BOOLEAN, -1 },
1048
{ UAC_FU_DELAY, "Delay Control", USB_MIXER_U16, USB_MIXER_U32 },
1049
{ UAC_FU_BASS_BOOST, "Bass Boost", USB_MIXER_BOOLEAN, -1 },
1050
{ UAC_FU_LOUDNESS, "Loudness", USB_MIXER_BOOLEAN, -1 },
1051
/* UAC2 specific */
1052
{ UAC2_FU_INPUT_GAIN, "Input Gain Control", USB_MIXER_S16, -1 },
1053
{ UAC2_FU_INPUT_GAIN_PAD, "Input Gain Pad Control", USB_MIXER_S16, -1 },
1054
{ UAC2_FU_PHASE_INVERTER, "Phase Inverter Control", USB_MIXER_BOOLEAN, -1 },
1055
};
1056
1057
static void usb_mixer_elem_info_free(struct usb_mixer_elem_info *cval)
1058
{
1059
kfree(cval);
1060
}
1061
1062
/* private_free callback */
1063
void snd_usb_mixer_elem_free(struct snd_kcontrol *kctl)
1064
{
1065
usb_mixer_elem_info_free(kctl->private_data);
1066
kctl->private_data = NULL;
1067
}
1068
1069
/*
1070
* interface to ALSA control for feature/mixer units
1071
*/
1072
1073
/* volume control quirks */
1074
static void volume_control_quirks(struct usb_mixer_elem_info *cval,
1075
struct snd_kcontrol *kctl)
1076
{
1077
struct snd_usb_audio *chip = cval->head.mixer->chip;
1078
1079
if (chip->quirk_flags & QUIRK_FLAG_MIC_RES_384) {
1080
if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
1081
usb_audio_info(chip,
1082
"set resolution quirk: cval->res = 384\n");
1083
cval->res = 384;
1084
}
1085
} else if (chip->quirk_flags & QUIRK_FLAG_MIC_RES_16) {
1086
if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
1087
usb_audio_info(chip,
1088
"set resolution quirk: cval->res = 16\n");
1089
cval->res = 16;
1090
}
1091
}
1092
1093
switch (chip->usb_id) {
1094
case USB_ID(0x0763, 0x2030): /* M-Audio Fast Track C400 */
1095
case USB_ID(0x0763, 0x2031): /* M-Audio Fast Track C600 */
1096
if (strcmp(kctl->id.name, "Effect Duration") == 0) {
1097
cval->min = 0x0000;
1098
cval->max = 0xffff;
1099
cval->res = 0x00e6;
1100
break;
1101
}
1102
if (strcmp(kctl->id.name, "Effect Volume") == 0 ||
1103
strcmp(kctl->id.name, "Effect Feedback Volume") == 0) {
1104
cval->min = 0x00;
1105
cval->max = 0xff;
1106
break;
1107
}
1108
if (strstr(kctl->id.name, "Effect Return") != NULL) {
1109
cval->min = 0xb706;
1110
cval->max = 0xff7b;
1111
cval->res = 0x0073;
1112
break;
1113
}
1114
if ((strstr(kctl->id.name, "Playback Volume") != NULL) ||
1115
(strstr(kctl->id.name, "Effect Send") != NULL)) {
1116
cval->min = 0xb5fb; /* -73 dB = 0xb6ff */
1117
cval->max = 0xfcfe;
1118
cval->res = 0x0073;
1119
}
1120
break;
1121
1122
case USB_ID(0x0763, 0x2081): /* M-Audio Fast Track Ultra 8R */
1123
case USB_ID(0x0763, 0x2080): /* M-Audio Fast Track Ultra */
1124
if (strcmp(kctl->id.name, "Effect Duration") == 0) {
1125
usb_audio_info(chip,
1126
"set quirk for FTU Effect Duration\n");
1127
cval->min = 0x0000;
1128
cval->max = 0x7f00;
1129
cval->res = 0x0100;
1130
break;
1131
}
1132
if (strcmp(kctl->id.name, "Effect Volume") == 0 ||
1133
strcmp(kctl->id.name, "Effect Feedback Volume") == 0) {
1134
usb_audio_info(chip,
1135
"set quirks for FTU Effect Feedback/Volume\n");
1136
cval->min = 0x00;
1137
cval->max = 0x7f;
1138
break;
1139
}
1140
break;
1141
1142
case USB_ID(0x0d8c, 0x0103):
1143
if (!strcmp(kctl->id.name, "PCM Playback Volume")) {
1144
usb_audio_info(chip,
1145
"set volume quirk for CM102-A+/102S+\n");
1146
cval->min = -256;
1147
}
1148
break;
1149
1150
case USB_ID(0x045e, 0x070f): /* MS LifeChat LX-3000 Headset */
1151
if (!strcmp(kctl->id.name, "Speaker Playback Volume")) {
1152
usb_audio_info(chip,
1153
"set volume quirk for MS LifeChat LX-3000\n");
1154
cval->res = 192;
1155
}
1156
break;
1157
1158
case USB_ID(0x0471, 0x0101):
1159
case USB_ID(0x0471, 0x0104):
1160
case USB_ID(0x0471, 0x0105):
1161
case USB_ID(0x0672, 0x1041):
1162
/* quirk for UDA1321/N101.
1163
* note that detection between firmware 2.1.1.7 (N101)
1164
* and later 2.1.1.21 is not very clear from datasheets.
1165
* I hope that the min value is -15360 for newer firmware --jk
1166
*/
1167
if (!strcmp(kctl->id.name, "PCM Playback Volume") &&
1168
cval->min == -15616) {
1169
usb_audio_info(chip,
1170
"set volume quirk for UDA1321/N101 chip\n");
1171
cval->max = -256;
1172
}
1173
break;
1174
1175
case USB_ID(0x046d, 0x09a4):
1176
if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
1177
usb_audio_info(chip,
1178
"set volume quirk for QuickCam E3500\n");
1179
cval->min = 6080;
1180
cval->max = 8768;
1181
cval->res = 192;
1182
}
1183
break;
1184
1185
case USB_ID(0x0495, 0x3042): /* ESS Technology Asus USB DAC */
1186
if ((strstr(kctl->id.name, "Playback Volume") != NULL) ||
1187
strstr(kctl->id.name, "Capture Volume") != NULL) {
1188
cval->min >>= 8;
1189
cval->max = 0;
1190
cval->res = 1;
1191
}
1192
break;
1193
case USB_ID(0x3302, 0x12db): /* MOONDROP Quark2 */
1194
if (!strcmp(kctl->id.name, "PCM Playback Volume")) {
1195
usb_audio_info(chip,
1196
"set volume quirk for MOONDROP Quark2\n");
1197
cval->min = -14208; /* Mute under it */
1198
}
1199
break;
1200
case USB_ID(0x12d1, 0x3a07): /* Huawei Technologies Co., Ltd. CM-Q3 */
1201
if (!strcmp(kctl->id.name, "PCM Playback Volume")) {
1202
usb_audio_info(chip,
1203
"set volume quirk for Huawei Technologies Co., Ltd. CM-Q3\n");
1204
cval->min = -11264; /* Mute under it */
1205
}
1206
break;
1207
}
1208
}
1209
1210
/* forcibly initialize the current mixer value; if GET_CUR fails, set to
1211
* the minimum as default
1212
*/
1213
static void init_cur_mix_raw(struct usb_mixer_elem_info *cval, int ch, int idx)
1214
{
1215
int val, err;
1216
1217
err = snd_usb_get_cur_mix_value(cval, ch, idx, &val);
1218
if (!err)
1219
return;
1220
if (!cval->head.mixer->ignore_ctl_error)
1221
usb_audio_warn(cval->head.mixer->chip,
1222
"%d:%d: failed to get current value for ch %d (%d)\n",
1223
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1224
ch, err);
1225
snd_usb_set_cur_mix_value(cval, ch, idx, cval->min);
1226
}
1227
1228
/*
1229
* retrieve the minimum and maximum values for the specified control
1230
*/
1231
static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
1232
int default_min, struct snd_kcontrol *kctl)
1233
{
1234
int i, idx;
1235
1236
/* for failsafe */
1237
cval->min = default_min;
1238
cval->max = cval->min + 1;
1239
cval->res = 1;
1240
cval->dBmin = cval->dBmax = 0;
1241
1242
if (cval->val_type == USB_MIXER_BOOLEAN ||
1243
cval->val_type == USB_MIXER_INV_BOOLEAN) {
1244
cval->initialized = 1;
1245
} else {
1246
int minchn = 0;
1247
if (cval->cmask) {
1248
for (i = 0; i < MAX_CHANNELS; i++)
1249
if (cval->cmask & BIT(i)) {
1250
minchn = i + 1;
1251
break;
1252
}
1253
}
1254
if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 ||
1255
get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) {
1256
usb_audio_err(cval->head.mixer->chip,
1257
"%d:%d: cannot get min/max values for control %d (id %d)\n",
1258
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1259
cval->control, cval->head.id);
1260
return -EINVAL;
1261
}
1262
if (get_ctl_value(cval, UAC_GET_RES,
1263
(cval->control << 8) | minchn,
1264
&cval->res) < 0) {
1265
cval->res = 1;
1266
} else if (cval->head.mixer->protocol == UAC_VERSION_1) {
1267
int last_valid_res = cval->res;
1268
1269
while (cval->res > 1) {
1270
if (snd_usb_mixer_set_ctl_value(cval, UAC_SET_RES,
1271
(cval->control << 8) | minchn,
1272
cval->res / 2) < 0)
1273
break;
1274
cval->res /= 2;
1275
}
1276
if (get_ctl_value(cval, UAC_GET_RES,
1277
(cval->control << 8) | minchn, &cval->res) < 0)
1278
cval->res = last_valid_res;
1279
}
1280
if (cval->res == 0)
1281
cval->res = 1;
1282
1283
/* Additional checks for the proper resolution
1284
*
1285
* Some devices report smaller resolutions than actually
1286
* reacting. They don't return errors but simply clip
1287
* to the lower aligned value.
1288
*/
1289
if (cval->min + cval->res < cval->max) {
1290
int last_valid_res = cval->res;
1291
int saved, test, check;
1292
if (get_cur_mix_raw(cval, minchn, &saved) < 0)
1293
goto no_res_check;
1294
for (;;) {
1295
test = saved;
1296
if (test < cval->max)
1297
test += cval->res;
1298
else
1299
test -= cval->res;
1300
if (test < cval->min || test > cval->max ||
1301
snd_usb_set_cur_mix_value(cval, minchn, 0, test) ||
1302
get_cur_mix_raw(cval, minchn, &check)) {
1303
cval->res = last_valid_res;
1304
break;
1305
}
1306
if (test == check)
1307
break;
1308
cval->res *= 2;
1309
}
1310
snd_usb_set_cur_mix_value(cval, minchn, 0, saved);
1311
}
1312
1313
no_res_check:
1314
cval->initialized = 1;
1315
}
1316
1317
if (kctl)
1318
volume_control_quirks(cval, kctl);
1319
1320
/* USB descriptions contain the dB scale in 1/256 dB unit
1321
* while ALSA TLV contains in 1/100 dB unit
1322
*/
1323
cval->dBmin = (convert_signed_value(cval, cval->min) * 100) / 256;
1324
cval->dBmax = (convert_signed_value(cval, cval->max) * 100) / 256;
1325
if (cval->dBmin > cval->dBmax) {
1326
/* something is wrong; assume it's either from/to 0dB */
1327
if (cval->dBmin < 0)
1328
cval->dBmax = 0;
1329
else if (cval->dBmin > 0)
1330
cval->dBmin = 0;
1331
if (cval->dBmin > cval->dBmax) {
1332
/* totally crap, return an error */
1333
return -EINVAL;
1334
}
1335
} else {
1336
/* if the max volume is too low, it's likely a bogus range;
1337
* here we use -96dB as the threshold
1338
*/
1339
if (cval->dBmax <= -9600) {
1340
usb_audio_info(cval->head.mixer->chip,
1341
"%d:%d: bogus dB values (%d/%d), disabling dB reporting\n",
1342
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1343
cval->dBmin, cval->dBmax);
1344
cval->dBmin = cval->dBmax = 0;
1345
}
1346
}
1347
1348
/* initialize all elements */
1349
if (!cval->cmask) {
1350
init_cur_mix_raw(cval, 0, 0);
1351
} else {
1352
idx = 0;
1353
for (i = 0; i < MAX_CHANNELS; i++) {
1354
if (cval->cmask & BIT(i)) {
1355
init_cur_mix_raw(cval, i + 1, idx);
1356
idx++;
1357
}
1358
}
1359
}
1360
1361
return 0;
1362
}
1363
1364
#define get_min_max(cval, def) get_min_max_with_quirks(cval, def, NULL)
1365
1366
/* get the max value advertised via control API */
1367
static int get_max_exposed(struct usb_mixer_elem_info *cval)
1368
{
1369
if (!cval->max_exposed) {
1370
if (cval->res)
1371
cval->max_exposed =
1372
DIV_ROUND_UP(cval->max - cval->min, cval->res);
1373
else
1374
cval->max_exposed = cval->max - cval->min;
1375
}
1376
return cval->max_exposed;
1377
}
1378
1379
/* get a feature/mixer unit info */
1380
static int mixer_ctl_feature_info(struct snd_kcontrol *kcontrol,
1381
struct snd_ctl_elem_info *uinfo)
1382
{
1383
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1384
1385
if (cval->val_type == USB_MIXER_BOOLEAN ||
1386
cval->val_type == USB_MIXER_INV_BOOLEAN)
1387
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1388
else
1389
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1390
uinfo->count = cval->channels;
1391
if (cval->val_type != USB_MIXER_BOOLEAN &&
1392
cval->val_type != USB_MIXER_INV_BOOLEAN) {
1393
if (!cval->initialized) {
1394
get_min_max_with_quirks(cval, 0, kcontrol);
1395
if (cval->initialized && cval->dBmin >= cval->dBmax) {
1396
kcontrol->vd[0].access &=
1397
~(SNDRV_CTL_ELEM_ACCESS_TLV_READ |
1398
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK);
1399
snd_ctl_notify(cval->head.mixer->chip->card,
1400
SNDRV_CTL_EVENT_MASK_INFO,
1401
&kcontrol->id);
1402
}
1403
}
1404
}
1405
1406
uinfo->value.integer.min = 0;
1407
uinfo->value.integer.max = get_max_exposed(cval);
1408
return 0;
1409
}
1410
1411
/* get the current value from feature/mixer unit */
1412
static int mixer_ctl_feature_get(struct snd_kcontrol *kcontrol,
1413
struct snd_ctl_elem_value *ucontrol)
1414
{
1415
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1416
int c, cnt, val, err;
1417
1418
ucontrol->value.integer.value[0] = cval->min;
1419
if (cval->cmask) {
1420
cnt = 0;
1421
for (c = 0; c < MAX_CHANNELS; c++) {
1422
if (!(cval->cmask & BIT(c)))
1423
continue;
1424
err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &val);
1425
if (err < 0)
1426
return filter_error(cval, err);
1427
val = get_relative_value(cval, val);
1428
ucontrol->value.integer.value[cnt] = val;
1429
cnt++;
1430
}
1431
return 0;
1432
} else {
1433
/* master channel */
1434
err = snd_usb_get_cur_mix_value(cval, 0, 0, &val);
1435
if (err < 0)
1436
return filter_error(cval, err);
1437
val = get_relative_value(cval, val);
1438
ucontrol->value.integer.value[0] = val;
1439
}
1440
return 0;
1441
}
1442
1443
/* put the current value to feature/mixer unit */
1444
static int mixer_ctl_feature_put(struct snd_kcontrol *kcontrol,
1445
struct snd_ctl_elem_value *ucontrol)
1446
{
1447
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1448
int max_val = get_max_exposed(cval);
1449
int c, cnt, val, oval, err;
1450
int changed = 0;
1451
1452
if (cval->cmask) {
1453
cnt = 0;
1454
for (c = 0; c < MAX_CHANNELS; c++) {
1455
if (!(cval->cmask & BIT(c)))
1456
continue;
1457
err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &oval);
1458
if (err < 0)
1459
return filter_error(cval, err);
1460
val = ucontrol->value.integer.value[cnt];
1461
if (val < 0 || val > max_val)
1462
return -EINVAL;
1463
val = get_abs_value(cval, val);
1464
if (oval != val) {
1465
snd_usb_set_cur_mix_value(cval, c + 1, cnt, val);
1466
changed = 1;
1467
}
1468
cnt++;
1469
}
1470
} else {
1471
/* master channel */
1472
err = snd_usb_get_cur_mix_value(cval, 0, 0, &oval);
1473
if (err < 0)
1474
return filter_error(cval, err);
1475
val = ucontrol->value.integer.value[0];
1476
if (val < 0 || val > max_val)
1477
return -EINVAL;
1478
val = get_abs_value(cval, val);
1479
if (val != oval) {
1480
snd_usb_set_cur_mix_value(cval, 0, 0, val);
1481
changed = 1;
1482
}
1483
}
1484
return changed;
1485
}
1486
1487
/* get the boolean value from the master channel of a UAC control */
1488
static int mixer_ctl_master_bool_get(struct snd_kcontrol *kcontrol,
1489
struct snd_ctl_elem_value *ucontrol)
1490
{
1491
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1492
int val, err;
1493
1494
err = snd_usb_get_cur_mix_value(cval, 0, 0, &val);
1495
if (err < 0)
1496
return filter_error(cval, err);
1497
val = (val != 0);
1498
ucontrol->value.integer.value[0] = val;
1499
return 0;
1500
}
1501
1502
static int get_connector_value(struct usb_mixer_elem_info *cval,
1503
char *name, int *val)
1504
{
1505
struct snd_usb_audio *chip = cval->head.mixer->chip;
1506
int idx = 0, validx, ret;
1507
1508
validx = cval->control << 8 | 0;
1509
1510
CLASS(snd_usb_lock, pm)(chip);
1511
if (pm.err) {
1512
ret = -EIO;
1513
goto error;
1514
}
1515
1516
idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
1517
if (cval->head.mixer->protocol == UAC_VERSION_2) {
1518
struct uac2_connectors_ctl_blk uac2_conn;
1519
1520
ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), UAC2_CS_CUR,
1521
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1522
validx, idx, &uac2_conn, sizeof(uac2_conn));
1523
if (val)
1524
*val = !!uac2_conn.bNrChannels;
1525
} else { /* UAC_VERSION_3 */
1526
struct uac3_insertion_ctl_blk uac3_conn;
1527
1528
ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), UAC2_CS_CUR,
1529
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1530
validx, idx, &uac3_conn, sizeof(uac3_conn));
1531
if (val)
1532
*val = !!uac3_conn.bmConInserted;
1533
}
1534
1535
if (ret < 0) {
1536
if (name && strstr(name, "Speaker")) {
1537
if (val)
1538
*val = 1;
1539
return 0;
1540
}
1541
error:
1542
usb_audio_err(chip,
1543
"cannot get connectors status: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
1544
UAC_GET_CUR, validx, idx, cval->val_type);
1545
1546
if (val)
1547
*val = 0;
1548
1549
return filter_error(cval, ret);
1550
}
1551
1552
return ret;
1553
}
1554
1555
/* get the connectors status and report it as boolean type */
1556
static int mixer_ctl_connector_get(struct snd_kcontrol *kcontrol,
1557
struct snd_ctl_elem_value *ucontrol)
1558
{
1559
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1560
int ret, val;
1561
1562
ret = get_connector_value(cval, kcontrol->id.name, &val);
1563
1564
if (ret < 0)
1565
return ret;
1566
1567
ucontrol->value.integer.value[0] = val;
1568
return 0;
1569
}
1570
1571
static const struct snd_kcontrol_new usb_feature_unit_ctl = {
1572
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1573
.name = "", /* will be filled later manually */
1574
.info = mixer_ctl_feature_info,
1575
.get = mixer_ctl_feature_get,
1576
.put = mixer_ctl_feature_put,
1577
};
1578
1579
/* the read-only variant */
1580
static const struct snd_kcontrol_new usb_feature_unit_ctl_ro = {
1581
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1582
.name = "", /* will be filled later manually */
1583
.info = mixer_ctl_feature_info,
1584
.get = mixer_ctl_feature_get,
1585
.put = NULL,
1586
};
1587
1588
/*
1589
* A control which shows the boolean value from reading a UAC control on
1590
* the master channel.
1591
*/
1592
static const struct snd_kcontrol_new usb_bool_master_control_ctl_ro = {
1593
.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1594
.name = "", /* will be filled later manually */
1595
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1596
.info = snd_ctl_boolean_mono_info,
1597
.get = mixer_ctl_master_bool_get,
1598
.put = NULL,
1599
};
1600
1601
static const struct snd_kcontrol_new usb_connector_ctl_ro = {
1602
.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1603
.name = "", /* will be filled later manually */
1604
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1605
.info = snd_ctl_boolean_mono_info,
1606
.get = mixer_ctl_connector_get,
1607
.put = NULL,
1608
};
1609
1610
/*
1611
* This symbol is exported in order to allow the mixer quirks to
1612
* hook up to the standard feature unit control mechanism
1613
*/
1614
const struct snd_kcontrol_new *snd_usb_feature_unit_ctl = &usb_feature_unit_ctl;
1615
1616
/*
1617
* build a feature control
1618
*/
1619
static size_t append_ctl_name(struct snd_kcontrol *kctl, const char *str)
1620
{
1621
return strlcat(kctl->id.name, str, sizeof(kctl->id.name));
1622
}
1623
1624
/*
1625
* A lot of headsets/headphones have a "Speaker" mixer. Make sure we
1626
* rename it to "Headphone". We determine if something is a headphone
1627
* similar to how udev determines form factor.
1628
*/
1629
static void check_no_speaker_on_headset(struct snd_kcontrol *kctl,
1630
struct snd_card *card)
1631
{
1632
static const char * const names_to_check[] = {
1633
"Headset", "headset", "Headphone", "headphone", NULL};
1634
const char * const *s;
1635
bool found = false;
1636
1637
if (strcmp("Speaker", kctl->id.name))
1638
return;
1639
1640
for (s = names_to_check; *s; s++)
1641
if (strstr(card->shortname, *s)) {
1642
found = true;
1643
break;
1644
}
1645
1646
if (!found)
1647
return;
1648
1649
snd_ctl_rename(card, kctl, "Headphone");
1650
}
1651
1652
static const struct usb_feature_control_info *get_feature_control_info(int control)
1653
{
1654
int i;
1655
1656
for (i = 0; i < ARRAY_SIZE(audio_feature_info); ++i) {
1657
if (audio_feature_info[i].control == control)
1658
return &audio_feature_info[i];
1659
}
1660
return NULL;
1661
}
1662
1663
static void __build_feature_ctl(struct usb_mixer_interface *mixer,
1664
const struct usbmix_name_map *imap,
1665
unsigned int ctl_mask, int control,
1666
struct usb_audio_term *iterm,
1667
struct usb_audio_term *oterm,
1668
int unitid, int nameid, int readonly_mask)
1669
{
1670
const struct usb_feature_control_info *ctl_info;
1671
unsigned int len = 0;
1672
int mapped_name = 0;
1673
struct snd_kcontrol *kctl;
1674
struct usb_mixer_elem_info *cval;
1675
const struct usbmix_name_map *map;
1676
unsigned int range;
1677
1678
if (control == UAC_FU_GRAPHIC_EQUALIZER) {
1679
/* FIXME: not supported yet */
1680
return;
1681
}
1682
1683
map = find_map(imap, unitid, control);
1684
if (check_ignored_ctl(map))
1685
return;
1686
1687
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1688
if (!cval)
1689
return;
1690
snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid);
1691
cval->control = control;
1692
cval->cmask = ctl_mask;
1693
1694
ctl_info = get_feature_control_info(control);
1695
if (!ctl_info) {
1696
usb_mixer_elem_info_free(cval);
1697
return;
1698
}
1699
if (mixer->protocol == UAC_VERSION_1)
1700
cval->val_type = ctl_info->type;
1701
else /* UAC_VERSION_2 */
1702
cval->val_type = ctl_info->type_uac2 >= 0 ?
1703
ctl_info->type_uac2 : ctl_info->type;
1704
1705
if (ctl_mask == 0) {
1706
cval->channels = 1; /* master channel */
1707
cval->master_readonly = readonly_mask;
1708
} else {
1709
int i, c = 0;
1710
for (i = 0; i < 16; i++)
1711
if (ctl_mask & BIT(i))
1712
c++;
1713
cval->channels = c;
1714
cval->ch_readonly = readonly_mask;
1715
}
1716
1717
/*
1718
* If all channels in the mask are marked read-only, make the control
1719
* read-only. snd_usb_set_cur_mix_value() will check the mask again and won't
1720
* issue write commands to read-only channels.
1721
*/
1722
if (cval->channels == readonly_mask)
1723
kctl = snd_ctl_new1(&usb_feature_unit_ctl_ro, cval);
1724
else
1725
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
1726
1727
if (!kctl) {
1728
usb_audio_err(mixer->chip, "cannot malloc kcontrol\n");
1729
usb_mixer_elem_info_free(cval);
1730
return;
1731
}
1732
kctl->private_free = snd_usb_mixer_elem_free;
1733
1734
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
1735
mapped_name = len != 0;
1736
if (!len && nameid)
1737
len = snd_usb_copy_string_desc(mixer->chip, nameid,
1738
kctl->id.name, sizeof(kctl->id.name));
1739
1740
switch (control) {
1741
case UAC_FU_MUTE:
1742
case UAC_FU_VOLUME:
1743
/*
1744
* determine the control name. the rule is:
1745
* - if a name id is given in descriptor, use it.
1746
* - if the connected input can be determined, then use the name
1747
* of terminal type.
1748
* - if the connected output can be determined, use it.
1749
* - otherwise, anonymous name.
1750
*/
1751
if (!len) {
1752
if (iterm)
1753
len = get_term_name(mixer->chip, iterm,
1754
kctl->id.name,
1755
sizeof(kctl->id.name), 1);
1756
if (!len && oterm)
1757
len = get_term_name(mixer->chip, oterm,
1758
kctl->id.name,
1759
sizeof(kctl->id.name), 1);
1760
if (!len)
1761
snprintf(kctl->id.name, sizeof(kctl->id.name),
1762
"Feature %d", unitid);
1763
}
1764
1765
if (!mapped_name)
1766
check_no_speaker_on_headset(kctl, mixer->chip->card);
1767
1768
/*
1769
* determine the stream direction:
1770
* if the connected output is USB stream, then it's likely a
1771
* capture stream. otherwise it should be playback (hopefully :)
1772
*/
1773
if (!mapped_name && oterm && !(oterm->type >> 16)) {
1774
if ((oterm->type & 0xff00) == 0x0100)
1775
append_ctl_name(kctl, " Capture");
1776
else
1777
append_ctl_name(kctl, " Playback");
1778
}
1779
append_ctl_name(kctl, control == UAC_FU_MUTE ?
1780
" Switch" : " Volume");
1781
break;
1782
default:
1783
if (!len)
1784
strscpy(kctl->id.name, audio_feature_info[control-1].name,
1785
sizeof(kctl->id.name));
1786
break;
1787
}
1788
1789
/* get min/max values */
1790
get_min_max_with_quirks(cval, 0, kctl);
1791
1792
/* skip a bogus volume range */
1793
if (cval->max <= cval->min) {
1794
usb_audio_dbg(mixer->chip,
1795
"[%d] FU [%s] skipped due to invalid volume\n",
1796
cval->head.id, kctl->id.name);
1797
snd_ctl_free_one(kctl);
1798
return;
1799
}
1800
1801
1802
if (control == UAC_FU_VOLUME) {
1803
check_mapped_dB(map, cval);
1804
if (cval->dBmin < cval->dBmax || !cval->initialized) {
1805
kctl->tlv.c = snd_usb_mixer_vol_tlv;
1806
kctl->vd[0].access |=
1807
SNDRV_CTL_ELEM_ACCESS_TLV_READ |
1808
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
1809
}
1810
}
1811
1812
snd_usb_mixer_fu_apply_quirk(mixer, cval, unitid, kctl);
1813
1814
range = (cval->max - cval->min) / cval->res;
1815
/*
1816
* There are definitely devices with a range of ~20,000, so let's be
1817
* conservative and allow for a bit more.
1818
*/
1819
if (range > 65535) {
1820
usb_audio_warn(mixer->chip,
1821
"Warning! Unlikely big volume range (=%u), cval->res is probably wrong.",
1822
range);
1823
usb_audio_warn(mixer->chip,
1824
"[%d] FU [%s] ch = %d, val = %d/%d/%d",
1825
cval->head.id, kctl->id.name, cval->channels,
1826
cval->min, cval->max, cval->res);
1827
}
1828
1829
usb_audio_dbg(mixer->chip, "[%d] FU [%s] ch = %d, val = %d/%d/%d\n",
1830
cval->head.id, kctl->id.name, cval->channels,
1831
cval->min, cval->max, cval->res);
1832
snd_usb_mixer_add_control(&cval->head, kctl);
1833
}
1834
1835
static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
1836
unsigned int ctl_mask, int control,
1837
struct usb_audio_term *iterm, int unitid,
1838
int readonly_mask)
1839
{
1840
struct uac_feature_unit_descriptor *desc = raw_desc;
1841
int nameid = uac_feature_unit_iFeature(desc);
1842
1843
__build_feature_ctl(state->mixer, state->map, ctl_mask, control,
1844
iterm, &state->oterm, unitid, nameid, readonly_mask);
1845
}
1846
1847
static void build_feature_ctl_badd(struct usb_mixer_interface *mixer,
1848
unsigned int ctl_mask, int control, int unitid,
1849
const struct usbmix_name_map *badd_map)
1850
{
1851
__build_feature_ctl(mixer, badd_map, ctl_mask, control,
1852
NULL, NULL, unitid, 0, 0);
1853
}
1854
1855
static void get_connector_control_name(struct usb_mixer_interface *mixer,
1856
struct usb_audio_term *term,
1857
bool is_input, char *name, int name_size)
1858
{
1859
int name_len = get_term_name(mixer->chip, term, name, name_size, 0);
1860
1861
if (name_len == 0)
1862
strscpy(name, "Unknown", name_size);
1863
1864
/*
1865
* sound/core/ctljack.c has a convention of naming jack controls
1866
* by ending in " Jack". Make it slightly more useful by
1867
* indicating Input or Output after the terminal name.
1868
*/
1869
if (is_input)
1870
strlcat(name, " - Input Jack", name_size);
1871
else
1872
strlcat(name, " - Output Jack", name_size);
1873
}
1874
1875
/* get connector value to "wake up" the USB audio */
1876
static int connector_mixer_resume(struct usb_mixer_elem_list *list)
1877
{
1878
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
1879
1880
get_connector_value(cval, NULL, NULL);
1881
return 0;
1882
}
1883
1884
/* Build a mixer control for a UAC connector control (jack-detect) */
1885
static void build_connector_control(struct usb_mixer_interface *mixer,
1886
const struct usbmix_name_map *imap,
1887
struct usb_audio_term *term, bool is_input)
1888
{
1889
struct snd_kcontrol *kctl;
1890
struct usb_mixer_elem_info *cval;
1891
const struct usbmix_name_map *map;
1892
1893
map = find_map(imap, term->id, 0);
1894
if (check_ignored_ctl(map))
1895
return;
1896
1897
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1898
if (!cval)
1899
return;
1900
snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id);
1901
1902
/* set up a specific resume callback */
1903
cval->head.resume = connector_mixer_resume;
1904
1905
/*
1906
* UAC2: The first byte from reading the UAC2_TE_CONNECTOR control returns the
1907
* number of channels connected.
1908
*
1909
* UAC3: The first byte specifies size of bitmap for the inserted controls. The
1910
* following byte(s) specifies which connectors are inserted.
1911
*
1912
* This boolean ctl will simply report if any channels are connected
1913
* or not.
1914
*/
1915
if (mixer->protocol == UAC_VERSION_2)
1916
cval->control = UAC2_TE_CONNECTOR;
1917
else /* UAC_VERSION_3 */
1918
cval->control = UAC3_TE_INSERTION;
1919
1920
cval->val_type = USB_MIXER_BOOLEAN;
1921
cval->channels = 1; /* report true if any channel is connected */
1922
cval->min = 0;
1923
cval->max = 1;
1924
kctl = snd_ctl_new1(&usb_connector_ctl_ro, cval);
1925
if (!kctl) {
1926
usb_audio_err(mixer->chip, "cannot malloc kcontrol\n");
1927
usb_mixer_elem_info_free(cval);
1928
return;
1929
}
1930
1931
if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name)))
1932
strlcat(kctl->id.name, " Jack", sizeof(kctl->id.name));
1933
else
1934
get_connector_control_name(mixer, term, is_input, kctl->id.name,
1935
sizeof(kctl->id.name));
1936
kctl->private_free = snd_usb_mixer_elem_free;
1937
snd_usb_mixer_add_control(&cval->head, kctl);
1938
}
1939
1940
static int parse_clock_source_unit(struct mixer_build *state, int unitid,
1941
void *_ftr)
1942
{
1943
struct uac_clock_source_descriptor *hdr = _ftr;
1944
struct usb_mixer_elem_info *cval;
1945
struct snd_kcontrol *kctl;
1946
int ret;
1947
1948
if (state->mixer->protocol != UAC_VERSION_2)
1949
return -EINVAL;
1950
1951
/*
1952
* The only property of this unit we are interested in is the
1953
* clock source validity. If that isn't readable, just bail out.
1954
*/
1955
if (!uac_v2v3_control_is_readable(hdr->bmControls,
1956
UAC2_CS_CONTROL_CLOCK_VALID))
1957
return 0;
1958
1959
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1960
if (!cval)
1961
return -ENOMEM;
1962
1963
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, hdr->bClockID);
1964
1965
cval->min = 0;
1966
cval->max = 1;
1967
cval->channels = 1;
1968
cval->val_type = USB_MIXER_BOOLEAN;
1969
cval->control = UAC2_CS_CONTROL_CLOCK_VALID;
1970
1971
cval->master_readonly = 1;
1972
/* From UAC2 5.2.5.1.2 "Only the get request is supported." */
1973
kctl = snd_ctl_new1(&usb_bool_master_control_ctl_ro, cval);
1974
1975
if (!kctl) {
1976
usb_mixer_elem_info_free(cval);
1977
return -ENOMEM;
1978
}
1979
1980
kctl->private_free = snd_usb_mixer_elem_free;
1981
ret = snd_usb_copy_string_desc(state->chip, hdr->iClockSource,
1982
kctl->id.name, sizeof(kctl->id.name));
1983
if (ret > 0)
1984
append_ctl_name(kctl, " Validity");
1985
else
1986
snprintf(kctl->id.name, sizeof(kctl->id.name),
1987
"Clock Source %d Validity", hdr->bClockID);
1988
1989
return snd_usb_mixer_add_control(&cval->head, kctl);
1990
}
1991
1992
/*
1993
* parse a feature unit
1994
*
1995
* most of controls are defined here.
1996
*/
1997
static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
1998
void *_ftr)
1999
{
2000
int channels, i, j;
2001
struct usb_audio_term iterm;
2002
unsigned int master_bits;
2003
int err, csize;
2004
struct uac_feature_unit_descriptor *hdr = _ftr;
2005
__u8 *bmaControls;
2006
2007
if (state->mixer->protocol == UAC_VERSION_1) {
2008
csize = hdr->bControlSize;
2009
channels = (hdr->bLength - 7) / csize - 1;
2010
bmaControls = hdr->bmaControls;
2011
} else if (state->mixer->protocol == UAC_VERSION_2) {
2012
struct uac2_feature_unit_descriptor *ftr = _ftr;
2013
csize = 4;
2014
channels = (hdr->bLength - 6) / 4 - 1;
2015
bmaControls = ftr->bmaControls;
2016
} else { /* UAC_VERSION_3 */
2017
struct uac3_feature_unit_descriptor *ftr = _ftr;
2018
2019
csize = 4;
2020
channels = (ftr->bLength - 7) / 4 - 1;
2021
bmaControls = ftr->bmaControls;
2022
}
2023
2024
if (channels > 32) {
2025
usb_audio_info(state->chip,
2026
"usbmixer: too many channels (%d) in unit %d\n",
2027
channels, unitid);
2028
return -EINVAL;
2029
}
2030
2031
/* parse the source unit */
2032
err = parse_audio_unit(state, hdr->bSourceID);
2033
if (err < 0)
2034
return err;
2035
2036
/* determine the input source type and name */
2037
err = check_input_term(state, hdr->bSourceID, &iterm);
2038
if (err < 0)
2039
return err;
2040
2041
master_bits = snd_usb_combine_bytes(bmaControls, csize);
2042
/* master configuration quirks */
2043
switch (state->chip->usb_id) {
2044
case USB_ID(0x08bb, 0x2702):
2045
usb_audio_info(state->chip,
2046
"usbmixer: master volume quirk for PCM2702 chip\n");
2047
/* disable non-functional volume control */
2048
master_bits &= ~UAC_CONTROL_BIT(UAC_FU_VOLUME);
2049
break;
2050
case USB_ID(0x1130, 0xf211):
2051
usb_audio_info(state->chip,
2052
"usbmixer: volume control quirk for Tenx TP6911 Audio Headset\n");
2053
/* disable non-functional volume control */
2054
channels = 0;
2055
break;
2056
2057
}
2058
2059
if (state->mixer->protocol == UAC_VERSION_1) {
2060
/* check all control types */
2061
for (i = 0; i < 10; i++) {
2062
unsigned int ch_bits = 0;
2063
int control = audio_feature_info[i].control;
2064
2065
for (j = 0; j < channels; j++) {
2066
unsigned int mask;
2067
2068
mask = snd_usb_combine_bytes(bmaControls +
2069
csize * (j+1), csize);
2070
if (mask & BIT(i))
2071
ch_bits |= BIT(j);
2072
}
2073
/* audio class v1 controls are never read-only */
2074
2075
/*
2076
* The first channel must be set
2077
* (for ease of programming).
2078
*/
2079
if (ch_bits & 1)
2080
build_feature_ctl(state, _ftr, ch_bits, control,
2081
&iterm, unitid, 0);
2082
if (master_bits & BIT(i))
2083
build_feature_ctl(state, _ftr, 0, control,
2084
&iterm, unitid, 0);
2085
}
2086
} else { /* UAC_VERSION_2/3 */
2087
for (i = 0; i < ARRAY_SIZE(audio_feature_info); i++) {
2088
unsigned int ch_bits = 0;
2089
unsigned int ch_read_only = 0;
2090
int control = audio_feature_info[i].control;
2091
2092
for (j = 0; j < channels; j++) {
2093
unsigned int mask;
2094
2095
mask = snd_usb_combine_bytes(bmaControls +
2096
csize * (j+1), csize);
2097
if (uac_v2v3_control_is_readable(mask, control)) {
2098
ch_bits |= BIT(j);
2099
if (!uac_v2v3_control_is_writeable(mask, control))
2100
ch_read_only |= BIT(j);
2101
}
2102
}
2103
2104
/*
2105
* NOTE: build_feature_ctl() will mark the control
2106
* read-only if all channels are marked read-only in
2107
* the descriptors. Otherwise, the control will be
2108
* reported as writeable, but the driver will not
2109
* actually issue a write command for read-only
2110
* channels.
2111
*/
2112
2113
/*
2114
* The first channel must be set
2115
* (for ease of programming).
2116
*/
2117
if (ch_bits & 1)
2118
build_feature_ctl(state, _ftr, ch_bits, control,
2119
&iterm, unitid, ch_read_only);
2120
if (uac_v2v3_control_is_readable(master_bits, control))
2121
build_feature_ctl(state, _ftr, 0, control,
2122
&iterm, unitid,
2123
!uac_v2v3_control_is_writeable(master_bits,
2124
control));
2125
}
2126
}
2127
2128
return 0;
2129
}
2130
2131
/*
2132
* Mixer Unit
2133
*/
2134
2135
/* check whether the given in/out overflows bmMixerControls matrix */
2136
static bool mixer_bitmap_overflow(struct uac_mixer_unit_descriptor *desc,
2137
int protocol, int num_ins, int num_outs)
2138
{
2139
u8 *hdr = (u8 *)desc;
2140
u8 *c = uac_mixer_unit_bmControls(desc, protocol);
2141
size_t rest; /* remaining bytes after bmMixerControls */
2142
2143
switch (protocol) {
2144
case UAC_VERSION_1:
2145
default:
2146
rest = 1; /* iMixer */
2147
break;
2148
case UAC_VERSION_2:
2149
rest = 2; /* bmControls + iMixer */
2150
break;
2151
case UAC_VERSION_3:
2152
rest = 6; /* bmControls + wMixerDescrStr */
2153
break;
2154
}
2155
2156
/* overflow? */
2157
return c + (num_ins * num_outs + 7) / 8 + rest > hdr + hdr[0];
2158
}
2159
2160
/*
2161
* build a mixer unit control
2162
*
2163
* the callbacks are identical with feature unit.
2164
* input channel number (zero based) is given in control field instead.
2165
*/
2166
static void build_mixer_unit_ctl(struct mixer_build *state,
2167
struct uac_mixer_unit_descriptor *desc,
2168
int in_pin, int in_ch, int num_outs,
2169
int unitid, struct usb_audio_term *iterm)
2170
{
2171
struct usb_mixer_elem_info *cval;
2172
unsigned int i, len;
2173
struct snd_kcontrol *kctl;
2174
const struct usbmix_name_map *map;
2175
2176
map = find_map(state->map, unitid, 0);
2177
if (check_ignored_ctl(map))
2178
return;
2179
2180
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2181
if (!cval)
2182
return;
2183
2184
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2185
cval->control = in_ch + 1; /* based on 1 */
2186
cval->val_type = USB_MIXER_S16;
2187
for (i = 0; i < num_outs; i++) {
2188
__u8 *c = uac_mixer_unit_bmControls(desc, state->mixer->protocol);
2189
2190
if (check_matrix_bitmap(c, in_ch, i, num_outs)) {
2191
cval->cmask |= BIT(i);
2192
cval->channels++;
2193
}
2194
}
2195
2196
/* get min/max values */
2197
get_min_max(cval, 0);
2198
2199
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
2200
if (!kctl) {
2201
usb_audio_err(state->chip, "cannot malloc kcontrol\n");
2202
usb_mixer_elem_info_free(cval);
2203
return;
2204
}
2205
kctl->private_free = snd_usb_mixer_elem_free;
2206
2207
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
2208
if (!len)
2209
len = get_term_name(state->chip, iterm, kctl->id.name,
2210
sizeof(kctl->id.name), 0);
2211
if (!len)
2212
snprintf(kctl->id.name, sizeof(kctl->id.name), "Mixer Source %d", in_ch + 1);
2213
2214
append_ctl_name(kctl, " Volume");
2215
2216
usb_audio_dbg(state->chip, "[%d] MU [%s] ch = %d, val = %d/%d\n",
2217
cval->head.id, kctl->id.name, cval->channels, cval->min, cval->max);
2218
snd_usb_mixer_add_control(&cval->head, kctl);
2219
}
2220
2221
static int parse_audio_input_terminal(struct mixer_build *state, int unitid,
2222
void *raw_desc)
2223
{
2224
struct usb_audio_term iterm;
2225
unsigned int control, bmctls, term_id;
2226
2227
if (state->mixer->protocol == UAC_VERSION_2) {
2228
struct uac2_input_terminal_descriptor *d_v2 = raw_desc;
2229
control = UAC2_TE_CONNECTOR;
2230
term_id = d_v2->bTerminalID;
2231
bmctls = le16_to_cpu(d_v2->bmControls);
2232
} else if (state->mixer->protocol == UAC_VERSION_3) {
2233
struct uac3_input_terminal_descriptor *d_v3 = raw_desc;
2234
control = UAC3_TE_INSERTION;
2235
term_id = d_v3->bTerminalID;
2236
bmctls = le32_to_cpu(d_v3->bmControls);
2237
} else {
2238
return 0; /* UAC1. No Insertion control */
2239
}
2240
2241
check_input_term(state, term_id, &iterm);
2242
2243
/* Check for jack detection. */
2244
if ((iterm.type & 0xff00) != 0x0100 &&
2245
uac_v2v3_control_is_readable(bmctls, control))
2246
build_connector_control(state->mixer, state->map, &iterm, true);
2247
2248
return 0;
2249
}
2250
2251
/*
2252
* parse a mixer unit
2253
*/
2254
static int parse_audio_mixer_unit(struct mixer_build *state, int unitid,
2255
void *raw_desc)
2256
{
2257
struct uac_mixer_unit_descriptor *desc = raw_desc;
2258
struct usb_audio_term iterm;
2259
int input_pins, num_ins, num_outs;
2260
int pin, ich, err;
2261
2262
err = uac_mixer_unit_get_channels(state, desc);
2263
if (err < 0) {
2264
usb_audio_err(state->chip,
2265
"invalid MIXER UNIT descriptor %d\n",
2266
unitid);
2267
return err;
2268
}
2269
2270
num_outs = err;
2271
input_pins = desc->bNrInPins;
2272
2273
num_ins = 0;
2274
ich = 0;
2275
for (pin = 0; pin < input_pins; pin++) {
2276
err = parse_audio_unit(state, desc->baSourceID[pin]);
2277
if (err < 0)
2278
continue;
2279
/* no bmControls field (e.g. Maya44) -> ignore */
2280
if (!num_outs)
2281
continue;
2282
err = check_input_term(state, desc->baSourceID[pin], &iterm);
2283
if (err < 0)
2284
return err;
2285
num_ins += iterm.channels;
2286
if (mixer_bitmap_overflow(desc, state->mixer->protocol,
2287
num_ins, num_outs))
2288
break;
2289
for (; ich < num_ins; ich++) {
2290
int och, ich_has_controls = 0;
2291
2292
for (och = 0; och < num_outs; och++) {
2293
__u8 *c = uac_mixer_unit_bmControls(desc,
2294
state->mixer->protocol);
2295
2296
if (check_matrix_bitmap(c, ich, och, num_outs)) {
2297
ich_has_controls = 1;
2298
break;
2299
}
2300
}
2301
if (ich_has_controls)
2302
build_mixer_unit_ctl(state, desc, pin, ich, num_outs,
2303
unitid, &iterm);
2304
}
2305
}
2306
return 0;
2307
}
2308
2309
/*
2310
* Processing Unit / Extension Unit
2311
*/
2312
2313
/* get callback for processing/extension unit */
2314
static int mixer_ctl_procunit_get(struct snd_kcontrol *kcontrol,
2315
struct snd_ctl_elem_value *ucontrol)
2316
{
2317
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2318
int err, val;
2319
2320
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2321
if (err < 0) {
2322
ucontrol->value.integer.value[0] = cval->min;
2323
return filter_error(cval, err);
2324
}
2325
val = get_relative_value(cval, val);
2326
ucontrol->value.integer.value[0] = val;
2327
return 0;
2328
}
2329
2330
/* put callback for processing/extension unit */
2331
static int mixer_ctl_procunit_put(struct snd_kcontrol *kcontrol,
2332
struct snd_ctl_elem_value *ucontrol)
2333
{
2334
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2335
int val, oval, err;
2336
2337
err = get_cur_ctl_value(cval, cval->control << 8, &oval);
2338
if (err < 0)
2339
return filter_error(cval, err);
2340
val = ucontrol->value.integer.value[0];
2341
if (val < 0 || val > get_max_exposed(cval))
2342
return -EINVAL;
2343
val = get_abs_value(cval, val);
2344
if (val != oval) {
2345
set_cur_ctl_value(cval, cval->control << 8, val);
2346
return 1;
2347
}
2348
return 0;
2349
}
2350
2351
/* alsa control interface for processing/extension unit */
2352
static const struct snd_kcontrol_new mixer_procunit_ctl = {
2353
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2354
.name = "", /* will be filled later */
2355
.info = mixer_ctl_feature_info,
2356
.get = mixer_ctl_procunit_get,
2357
.put = mixer_ctl_procunit_put,
2358
};
2359
2360
/*
2361
* predefined data for processing units
2362
*/
2363
struct procunit_value_info {
2364
int control;
2365
const char *suffix;
2366
int val_type;
2367
int min_value;
2368
};
2369
2370
struct procunit_info {
2371
int type;
2372
char *name;
2373
const struct procunit_value_info *values;
2374
};
2375
2376
static const struct procunit_value_info undefined_proc_info[] = {
2377
{ 0x00, "Control Undefined", 0 },
2378
{ 0 }
2379
};
2380
2381
static const struct procunit_value_info updown_proc_info[] = {
2382
{ UAC_UD_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2383
{ UAC_UD_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2384
{ 0 }
2385
};
2386
static const struct procunit_value_info prologic_proc_info[] = {
2387
{ UAC_DP_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2388
{ UAC_DP_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2389
{ 0 }
2390
};
2391
static const struct procunit_value_info threed_enh_proc_info[] = {
2392
{ UAC_3D_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2393
{ UAC_3D_SPACE, "Spaciousness", USB_MIXER_U8 },
2394
{ 0 }
2395
};
2396
static const struct procunit_value_info reverb_proc_info[] = {
2397
{ UAC_REVERB_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2398
{ UAC_REVERB_LEVEL, "Level", USB_MIXER_U8 },
2399
{ UAC_REVERB_TIME, "Time", USB_MIXER_U16 },
2400
{ UAC_REVERB_FEEDBACK, "Feedback", USB_MIXER_U8 },
2401
{ 0 }
2402
};
2403
static const struct procunit_value_info chorus_proc_info[] = {
2404
{ UAC_CHORUS_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2405
{ UAC_CHORUS_LEVEL, "Level", USB_MIXER_U8 },
2406
{ UAC_CHORUS_RATE, "Rate", USB_MIXER_U16 },
2407
{ UAC_CHORUS_DEPTH, "Depth", USB_MIXER_U16 },
2408
{ 0 }
2409
};
2410
static const struct procunit_value_info dcr_proc_info[] = {
2411
{ UAC_DCR_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2412
{ UAC_DCR_RATE, "Ratio", USB_MIXER_U16 },
2413
{ UAC_DCR_MAXAMPL, "Max Amp", USB_MIXER_S16 },
2414
{ UAC_DCR_THRESHOLD, "Threshold", USB_MIXER_S16 },
2415
{ UAC_DCR_ATTACK_TIME, "Attack Time", USB_MIXER_U16 },
2416
{ UAC_DCR_RELEASE_TIME, "Release Time", USB_MIXER_U16 },
2417
{ 0 }
2418
};
2419
2420
static const struct procunit_info procunits[] = {
2421
{ UAC_PROCESS_UP_DOWNMIX, "Up Down", updown_proc_info },
2422
{ UAC_PROCESS_DOLBY_PROLOGIC, "Dolby Prologic", prologic_proc_info },
2423
{ UAC_PROCESS_STEREO_EXTENDER, "3D Stereo Extender", threed_enh_proc_info },
2424
{ UAC_PROCESS_REVERB, "Reverb", reverb_proc_info },
2425
{ UAC_PROCESS_CHORUS, "Chorus", chorus_proc_info },
2426
{ UAC_PROCESS_DYN_RANGE_COMP, "DCR", dcr_proc_info },
2427
{ 0 },
2428
};
2429
2430
static const struct procunit_value_info uac3_updown_proc_info[] = {
2431
{ UAC3_UD_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2432
{ 0 }
2433
};
2434
static const struct procunit_value_info uac3_stereo_ext_proc_info[] = {
2435
{ UAC3_EXT_WIDTH_CONTROL, "Width Control", USB_MIXER_U8 },
2436
{ 0 }
2437
};
2438
2439
static const struct procunit_info uac3_procunits[] = {
2440
{ UAC3_PROCESS_UP_DOWNMIX, "Up Down", uac3_updown_proc_info },
2441
{ UAC3_PROCESS_STEREO_EXTENDER, "3D Stereo Extender", uac3_stereo_ext_proc_info },
2442
{ UAC3_PROCESS_MULTI_FUNCTION, "Multi-Function", undefined_proc_info },
2443
{ 0 },
2444
};
2445
2446
/*
2447
* predefined data for extension units
2448
*/
2449
static const struct procunit_value_info clock_rate_xu_info[] = {
2450
{ USB_XU_CLOCK_RATE_SELECTOR, "Selector", USB_MIXER_U8, 0 },
2451
{ 0 }
2452
};
2453
static const struct procunit_value_info clock_source_xu_info[] = {
2454
{ USB_XU_CLOCK_SOURCE_SELECTOR, "External", USB_MIXER_BOOLEAN },
2455
{ 0 }
2456
};
2457
static const struct procunit_value_info spdif_format_xu_info[] = {
2458
{ USB_XU_DIGITAL_FORMAT_SELECTOR, "SPDIF/AC3", USB_MIXER_BOOLEAN },
2459
{ 0 }
2460
};
2461
static const struct procunit_value_info soft_limit_xu_info[] = {
2462
{ USB_XU_SOFT_LIMIT_SELECTOR, " ", USB_MIXER_BOOLEAN },
2463
{ 0 }
2464
};
2465
static const struct procunit_info extunits[] = {
2466
{ USB_XU_CLOCK_RATE, "Clock rate", clock_rate_xu_info },
2467
{ USB_XU_CLOCK_SOURCE, "DigitalIn CLK source", clock_source_xu_info },
2468
{ USB_XU_DIGITAL_IO_STATUS, "DigitalOut format:", spdif_format_xu_info },
2469
{ USB_XU_DEVICE_OPTIONS, "AnalogueIn Soft Limit", soft_limit_xu_info },
2470
{ 0 }
2471
};
2472
2473
/*
2474
* build a processing/extension unit
2475
*/
2476
static int build_audio_procunit(struct mixer_build *state, int unitid,
2477
void *raw_desc, const struct procunit_info *list,
2478
bool extension_unit)
2479
{
2480
struct uac_processing_unit_descriptor *desc = raw_desc;
2481
int num_ins;
2482
struct usb_mixer_elem_info *cval;
2483
struct snd_kcontrol *kctl;
2484
int i, err, nameid, type, len, val;
2485
const struct procunit_info *info;
2486
const struct procunit_value_info *valinfo;
2487
const struct usbmix_name_map *map;
2488
static const struct procunit_value_info default_value_info[] = {
2489
{ 0x01, "Switch", USB_MIXER_BOOLEAN },
2490
{ 0 }
2491
};
2492
static const struct procunit_info default_info = {
2493
0, NULL, default_value_info
2494
};
2495
const char *name = extension_unit ?
2496
"Extension Unit" : "Processing Unit";
2497
2498
num_ins = desc->bNrInPins;
2499
for (i = 0; i < num_ins; i++) {
2500
err = parse_audio_unit(state, desc->baSourceID[i]);
2501
if (err < 0)
2502
return err;
2503
}
2504
2505
type = le16_to_cpu(desc->wProcessType);
2506
for (info = list; info && info->type; info++)
2507
if (info->type == type)
2508
break;
2509
if (!info || !info->type)
2510
info = &default_info;
2511
2512
for (valinfo = info->values; valinfo->control; valinfo++) {
2513
__u8 *controls = uac_processing_unit_bmControls(desc, state->mixer->protocol);
2514
2515
if (state->mixer->protocol == UAC_VERSION_1) {
2516
if (!(controls[valinfo->control / 8] &
2517
BIT((valinfo->control % 8) - 1)))
2518
continue;
2519
} else { /* UAC_VERSION_2/3 */
2520
if (!uac_v2v3_control_is_readable(controls[valinfo->control / 8],
2521
valinfo->control))
2522
continue;
2523
}
2524
2525
map = find_map(state->map, unitid, valinfo->control);
2526
if (check_ignored_ctl(map))
2527
continue;
2528
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2529
if (!cval)
2530
return -ENOMEM;
2531
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2532
cval->control = valinfo->control;
2533
cval->val_type = valinfo->val_type;
2534
cval->channels = 1;
2535
2536
if (state->mixer->protocol > UAC_VERSION_1 &&
2537
!uac_v2v3_control_is_writeable(controls[valinfo->control / 8],
2538
valinfo->control))
2539
cval->master_readonly = 1;
2540
2541
/* get min/max values */
2542
switch (type) {
2543
case UAC_PROCESS_UP_DOWNMIX: {
2544
bool mode_sel = false;
2545
2546
switch (state->mixer->protocol) {
2547
case UAC_VERSION_1:
2548
case UAC_VERSION_2:
2549
default:
2550
if (cval->control == UAC_UD_MODE_SELECT)
2551
mode_sel = true;
2552
break;
2553
case UAC_VERSION_3:
2554
if (cval->control == UAC3_UD_MODE_SELECT)
2555
mode_sel = true;
2556
break;
2557
}
2558
2559
if (mode_sel) {
2560
__u8 *control_spec = uac_processing_unit_specific(desc,
2561
state->mixer->protocol);
2562
cval->min = 1;
2563
cval->max = control_spec[0];
2564
cval->res = 1;
2565
cval->initialized = 1;
2566
break;
2567
}
2568
2569
get_min_max(cval, valinfo->min_value);
2570
break;
2571
}
2572
case USB_XU_CLOCK_RATE:
2573
/*
2574
* E-Mu USB 0404/0202/TrackerPre/0204
2575
* samplerate control quirk
2576
*/
2577
cval->min = 0;
2578
cval->max = 5;
2579
cval->res = 1;
2580
cval->initialized = 1;
2581
break;
2582
default:
2583
get_min_max(cval, valinfo->min_value);
2584
break;
2585
}
2586
2587
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2588
if (err < 0) {
2589
usb_mixer_elem_info_free(cval);
2590
return -EINVAL;
2591
}
2592
2593
kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
2594
if (!kctl) {
2595
usb_mixer_elem_info_free(cval);
2596
return -ENOMEM;
2597
}
2598
kctl->private_free = snd_usb_mixer_elem_free;
2599
2600
if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name))) {
2601
/* nothing */ ;
2602
} else if (info->name) {
2603
strscpy(kctl->id.name, info->name, sizeof(kctl->id.name));
2604
} else {
2605
if (extension_unit)
2606
nameid = uac_extension_unit_iExtension(desc, state->mixer->protocol);
2607
else
2608
nameid = uac_processing_unit_iProcessing(desc, state->mixer->protocol);
2609
len = 0;
2610
if (nameid)
2611
len = snd_usb_copy_string_desc(state->chip,
2612
nameid,
2613
kctl->id.name,
2614
sizeof(kctl->id.name));
2615
if (!len)
2616
strscpy(kctl->id.name, name, sizeof(kctl->id.name));
2617
}
2618
append_ctl_name(kctl, " ");
2619
append_ctl_name(kctl, valinfo->suffix);
2620
2621
usb_audio_dbg(state->chip,
2622
"[%d] PU [%s] ch = %d, val = %d/%d\n",
2623
cval->head.id, kctl->id.name, cval->channels,
2624
cval->min, cval->max);
2625
2626
err = snd_usb_mixer_add_control(&cval->head, kctl);
2627
if (err < 0)
2628
return err;
2629
}
2630
return 0;
2631
}
2632
2633
static int parse_audio_processing_unit(struct mixer_build *state, int unitid,
2634
void *raw_desc)
2635
{
2636
switch (state->mixer->protocol) {
2637
case UAC_VERSION_1:
2638
case UAC_VERSION_2:
2639
default:
2640
return build_audio_procunit(state, unitid, raw_desc,
2641
procunits, false);
2642
case UAC_VERSION_3:
2643
return build_audio_procunit(state, unitid, raw_desc,
2644
uac3_procunits, false);
2645
}
2646
}
2647
2648
static int parse_audio_extension_unit(struct mixer_build *state, int unitid,
2649
void *raw_desc)
2650
{
2651
/*
2652
* Note that we parse extension units with processing unit descriptors.
2653
* That's ok as the layout is the same.
2654
*/
2655
return build_audio_procunit(state, unitid, raw_desc, extunits, true);
2656
}
2657
2658
/*
2659
* Selector Unit
2660
*/
2661
2662
/*
2663
* info callback for selector unit
2664
* use an enumerator type for routing
2665
*/
2666
static int mixer_ctl_selector_info(struct snd_kcontrol *kcontrol,
2667
struct snd_ctl_elem_info *uinfo)
2668
{
2669
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2670
const char **itemlist = (const char **)kcontrol->private_value;
2671
2672
if (snd_BUG_ON(!itemlist))
2673
return -EINVAL;
2674
return snd_ctl_enum_info(uinfo, 1, cval->max, itemlist);
2675
}
2676
2677
/* get callback for selector unit */
2678
static int mixer_ctl_selector_get(struct snd_kcontrol *kcontrol,
2679
struct snd_ctl_elem_value *ucontrol)
2680
{
2681
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2682
int val, err;
2683
2684
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2685
if (err < 0) {
2686
ucontrol->value.enumerated.item[0] = 0;
2687
return filter_error(cval, err);
2688
}
2689
val = get_relative_value(cval, val);
2690
ucontrol->value.enumerated.item[0] = val;
2691
return 0;
2692
}
2693
2694
/* put callback for selector unit */
2695
static int mixer_ctl_selector_put(struct snd_kcontrol *kcontrol,
2696
struct snd_ctl_elem_value *ucontrol)
2697
{
2698
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2699
int val, oval, err;
2700
2701
err = get_cur_ctl_value(cval, cval->control << 8, &oval);
2702
if (err < 0)
2703
return filter_error(cval, err);
2704
val = ucontrol->value.enumerated.item[0];
2705
if (val < 0 || val >= cval->max) /* here cval->max = # elements */
2706
return -EINVAL;
2707
val = get_abs_value(cval, val);
2708
if (val != oval) {
2709
set_cur_ctl_value(cval, cval->control << 8, val);
2710
return 1;
2711
}
2712
return 0;
2713
}
2714
2715
/* alsa control interface for selector unit */
2716
static const struct snd_kcontrol_new mixer_selectunit_ctl = {
2717
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2718
.name = "", /* will be filled later */
2719
.info = mixer_ctl_selector_info,
2720
.get = mixer_ctl_selector_get,
2721
.put = mixer_ctl_selector_put,
2722
};
2723
2724
/*
2725
* private free callback.
2726
* free both private_data and private_value
2727
*/
2728
static void usb_mixer_selector_elem_free(struct snd_kcontrol *kctl)
2729
{
2730
int i, num_ins = 0;
2731
2732
if (kctl->private_data) {
2733
struct usb_mixer_elem_info *cval = kctl->private_data;
2734
num_ins = cval->max;
2735
usb_mixer_elem_info_free(cval);
2736
kctl->private_data = NULL;
2737
}
2738
if (kctl->private_value) {
2739
char **itemlist = (char **)kctl->private_value;
2740
for (i = 0; i < num_ins; i++)
2741
kfree(itemlist[i]);
2742
kfree(itemlist);
2743
kctl->private_value = 0;
2744
}
2745
}
2746
2747
/*
2748
* parse a selector unit
2749
*/
2750
static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
2751
void *raw_desc)
2752
{
2753
struct uac_selector_unit_descriptor *desc = raw_desc;
2754
unsigned int i, nameid, len;
2755
int err;
2756
struct usb_mixer_elem_info *cval;
2757
struct snd_kcontrol *kctl;
2758
const struct usbmix_name_map *map;
2759
char **namelist;
2760
2761
for (i = 0; i < desc->bNrInPins; i++) {
2762
err = parse_audio_unit(state, desc->baSourceID[i]);
2763
if (err < 0)
2764
return err;
2765
}
2766
2767
if (desc->bNrInPins == 1) /* only one ? nonsense! */
2768
return 0;
2769
2770
map = find_map(state->map, unitid, 0);
2771
if (check_ignored_ctl(map))
2772
return 0;
2773
2774
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2775
if (!cval)
2776
return -ENOMEM;
2777
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2778
cval->val_type = USB_MIXER_U8;
2779
cval->channels = 1;
2780
cval->min = 1;
2781
cval->max = desc->bNrInPins;
2782
cval->res = 1;
2783
cval->initialized = 1;
2784
2785
switch (state->mixer->protocol) {
2786
case UAC_VERSION_1:
2787
default:
2788
cval->control = 0;
2789
break;
2790
case UAC_VERSION_2:
2791
case UAC_VERSION_3:
2792
if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR ||
2793
desc->bDescriptorSubtype == UAC3_CLOCK_SELECTOR)
2794
cval->control = UAC2_CX_CLOCK_SELECTOR;
2795
else /* UAC2/3_SELECTOR_UNIT */
2796
cval->control = UAC2_SU_SELECTOR;
2797
break;
2798
}
2799
2800
namelist = kcalloc(desc->bNrInPins, sizeof(char *), GFP_KERNEL);
2801
if (!namelist) {
2802
err = -ENOMEM;
2803
goto error_cval;
2804
}
2805
#define MAX_ITEM_NAME_LEN 64
2806
for (i = 0; i < desc->bNrInPins; i++) {
2807
struct usb_audio_term iterm;
2808
namelist[i] = kmalloc(MAX_ITEM_NAME_LEN, GFP_KERNEL);
2809
if (!namelist[i]) {
2810
err = -ENOMEM;
2811
goto error_name;
2812
}
2813
len = check_mapped_selector_name(state, unitid, i, namelist[i],
2814
MAX_ITEM_NAME_LEN);
2815
if (! len && check_input_term(state, desc->baSourceID[i], &iterm) >= 0)
2816
len = get_term_name(state->chip, &iterm, namelist[i],
2817
MAX_ITEM_NAME_LEN, 0);
2818
if (! len)
2819
scnprintf(namelist[i], MAX_ITEM_NAME_LEN, "Input %u", i);
2820
}
2821
2822
kctl = snd_ctl_new1(&mixer_selectunit_ctl, cval);
2823
if (! kctl) {
2824
usb_audio_err(state->chip, "cannot malloc kcontrol\n");
2825
err = -ENOMEM;
2826
goto error_name;
2827
}
2828
kctl->private_value = (unsigned long)namelist;
2829
kctl->private_free = usb_mixer_selector_elem_free;
2830
2831
/* check the static mapping table at first */
2832
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
2833
if (!len) {
2834
/* no mapping ? */
2835
switch (state->mixer->protocol) {
2836
case UAC_VERSION_1:
2837
case UAC_VERSION_2:
2838
default:
2839
/* if iSelector is given, use it */
2840
nameid = uac_selector_unit_iSelector(desc);
2841
if (nameid)
2842
len = snd_usb_copy_string_desc(state->chip,
2843
nameid, kctl->id.name,
2844
sizeof(kctl->id.name));
2845
break;
2846
case UAC_VERSION_3:
2847
/* TODO: Class-Specific strings not yet supported */
2848
break;
2849
}
2850
2851
/* ... or pick up the terminal name at next */
2852
if (!len)
2853
len = get_term_name(state->chip, &state->oterm,
2854
kctl->id.name, sizeof(kctl->id.name), 0);
2855
/* ... or use the fixed string "USB" as the last resort */
2856
if (!len)
2857
strscpy(kctl->id.name, "USB", sizeof(kctl->id.name));
2858
2859
/* and add the proper suffix */
2860
if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR ||
2861
desc->bDescriptorSubtype == UAC3_CLOCK_SELECTOR)
2862
append_ctl_name(kctl, " Clock Source");
2863
else if ((state->oterm.type & 0xff00) == 0x0100)
2864
append_ctl_name(kctl, " Capture Source");
2865
else
2866
append_ctl_name(kctl, " Playback Source");
2867
}
2868
2869
usb_audio_dbg(state->chip, "[%d] SU [%s] items = %d\n",
2870
cval->head.id, kctl->id.name, desc->bNrInPins);
2871
return snd_usb_mixer_add_control(&cval->head, kctl);
2872
2873
error_name:
2874
for (i = 0; i < desc->bNrInPins; i++)
2875
kfree(namelist[i]);
2876
kfree(namelist);
2877
error_cval:
2878
usb_mixer_elem_info_free(cval);
2879
return err;
2880
}
2881
2882
/*
2883
* parse an audio unit recursively
2884
*/
2885
2886
static int parse_audio_unit(struct mixer_build *state, int unitid)
2887
{
2888
unsigned char *p1;
2889
int protocol = state->mixer->protocol;
2890
2891
if (test_and_set_bit(unitid, state->unitbitmap))
2892
return 0; /* the unit already visited */
2893
2894
p1 = find_audio_control_unit(state, unitid);
2895
if (!p1) {
2896
usb_audio_err(state->chip, "unit %d not found!\n", unitid);
2897
return -EINVAL;
2898
}
2899
2900
if (!snd_usb_validate_audio_desc(p1, protocol)) {
2901
usb_audio_dbg(state->chip, "invalid unit %d\n", unitid);
2902
return 0; /* skip invalid unit */
2903
}
2904
2905
switch (PTYPE(protocol, p1[2])) {
2906
case PTYPE(UAC_VERSION_1, UAC_INPUT_TERMINAL):
2907
case PTYPE(UAC_VERSION_2, UAC_INPUT_TERMINAL):
2908
case PTYPE(UAC_VERSION_3, UAC_INPUT_TERMINAL):
2909
return parse_audio_input_terminal(state, unitid, p1);
2910
case PTYPE(UAC_VERSION_1, UAC_MIXER_UNIT):
2911
case PTYPE(UAC_VERSION_2, UAC_MIXER_UNIT):
2912
case PTYPE(UAC_VERSION_3, UAC3_MIXER_UNIT):
2913
return parse_audio_mixer_unit(state, unitid, p1);
2914
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SOURCE):
2915
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SOURCE):
2916
return parse_clock_source_unit(state, unitid, p1);
2917
case PTYPE(UAC_VERSION_1, UAC_SELECTOR_UNIT):
2918
case PTYPE(UAC_VERSION_2, UAC_SELECTOR_UNIT):
2919
case PTYPE(UAC_VERSION_3, UAC3_SELECTOR_UNIT):
2920
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SELECTOR):
2921
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SELECTOR):
2922
return parse_audio_selector_unit(state, unitid, p1);
2923
case PTYPE(UAC_VERSION_1, UAC_FEATURE_UNIT):
2924
case PTYPE(UAC_VERSION_2, UAC_FEATURE_UNIT):
2925
case PTYPE(UAC_VERSION_3, UAC3_FEATURE_UNIT):
2926
return parse_audio_feature_unit(state, unitid, p1);
2927
case PTYPE(UAC_VERSION_1, UAC1_PROCESSING_UNIT):
2928
case PTYPE(UAC_VERSION_2, UAC2_PROCESSING_UNIT_V2):
2929
case PTYPE(UAC_VERSION_3, UAC3_PROCESSING_UNIT):
2930
return parse_audio_processing_unit(state, unitid, p1);
2931
case PTYPE(UAC_VERSION_1, UAC1_EXTENSION_UNIT):
2932
case PTYPE(UAC_VERSION_2, UAC2_EXTENSION_UNIT_V2):
2933
case PTYPE(UAC_VERSION_3, UAC3_EXTENSION_UNIT):
2934
return parse_audio_extension_unit(state, unitid, p1);
2935
case PTYPE(UAC_VERSION_2, UAC2_EFFECT_UNIT):
2936
case PTYPE(UAC_VERSION_3, UAC3_EFFECT_UNIT):
2937
return 0; /* FIXME - effect units not implemented yet */
2938
default:
2939
usb_audio_err(state->chip,
2940
"unit %u: unexpected type 0x%02x\n",
2941
unitid, p1[2]);
2942
return -EINVAL;
2943
}
2944
}
2945
2946
static void snd_usb_mixer_free(struct usb_mixer_interface *mixer)
2947
{
2948
struct usb_mixer_elem_list *list, *next;
2949
int id;
2950
2951
/* kill pending URBs */
2952
snd_usb_mixer_disconnect(mixer);
2953
2954
/* Unregister controls first, snd_ctl_remove() frees the element */
2955
if (mixer->id_elems) {
2956
for (id = 0; id < MAX_ID_ELEMS; id++) {
2957
for (list = mixer->id_elems[id]; list; list = next) {
2958
next = list->next_id_elem;
2959
if (list->kctl)
2960
snd_ctl_remove(mixer->chip->card, list->kctl);
2961
}
2962
}
2963
kfree(mixer->id_elems);
2964
}
2965
if (mixer->urb) {
2966
kfree(mixer->urb->transfer_buffer);
2967
usb_free_urb(mixer->urb);
2968
}
2969
usb_free_urb(mixer->rc_urb);
2970
kfree(mixer->rc_setup_packet);
2971
kfree(mixer);
2972
}
2973
2974
static int snd_usb_mixer_dev_free(struct snd_device *device)
2975
{
2976
struct usb_mixer_interface *mixer = device->device_data;
2977
snd_usb_mixer_free(mixer);
2978
return 0;
2979
}
2980
2981
/* UAC3 predefined channels configuration */
2982
struct uac3_badd_profile {
2983
int subclass;
2984
const char *name;
2985
int c_chmask; /* capture channels mask */
2986
int p_chmask; /* playback channels mask */
2987
int st_chmask; /* side tone mixing channel mask */
2988
};
2989
2990
static const struct uac3_badd_profile uac3_badd_profiles[] = {
2991
{
2992
/*
2993
* BAIF, BAOF or combination of both
2994
* IN: Mono or Stereo cfg, Mono alt possible
2995
* OUT: Mono or Stereo cfg, Mono alt possible
2996
*/
2997
.subclass = UAC3_FUNCTION_SUBCLASS_GENERIC_IO,
2998
.name = "GENERIC IO",
2999
.c_chmask = -1, /* dynamic channels */
3000
.p_chmask = -1, /* dynamic channels */
3001
},
3002
{
3003
/* BAOF; Stereo only cfg, Mono alt possible */
3004
.subclass = UAC3_FUNCTION_SUBCLASS_HEADPHONE,
3005
.name = "HEADPHONE",
3006
.p_chmask = 3,
3007
},
3008
{
3009
/* BAOF; Mono or Stereo cfg, Mono alt possible */
3010
.subclass = UAC3_FUNCTION_SUBCLASS_SPEAKER,
3011
.name = "SPEAKER",
3012
.p_chmask = -1, /* dynamic channels */
3013
},
3014
{
3015
/* BAIF; Mono or Stereo cfg, Mono alt possible */
3016
.subclass = UAC3_FUNCTION_SUBCLASS_MICROPHONE,
3017
.name = "MICROPHONE",
3018
.c_chmask = -1, /* dynamic channels */
3019
},
3020
{
3021
/*
3022
* BAIOF topology
3023
* IN: Mono only
3024
* OUT: Mono or Stereo cfg, Mono alt possible
3025
*/
3026
.subclass = UAC3_FUNCTION_SUBCLASS_HEADSET,
3027
.name = "HEADSET",
3028
.c_chmask = 1,
3029
.p_chmask = -1, /* dynamic channels */
3030
.st_chmask = 1,
3031
},
3032
{
3033
/* BAIOF; IN: Mono only; OUT: Stereo only, Mono alt possible */
3034
.subclass = UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER,
3035
.name = "HEADSET ADAPTER",
3036
.c_chmask = 1,
3037
.p_chmask = 3,
3038
.st_chmask = 1,
3039
},
3040
{
3041
/* BAIF + BAOF; IN: Mono only; OUT: Mono only */
3042
.subclass = UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE,
3043
.name = "SPEAKERPHONE",
3044
.c_chmask = 1,
3045
.p_chmask = 1,
3046
},
3047
{ 0 } /* terminator */
3048
};
3049
3050
static bool uac3_badd_func_has_valid_channels(struct usb_mixer_interface *mixer,
3051
const struct uac3_badd_profile *f,
3052
int c_chmask, int p_chmask)
3053
{
3054
/*
3055
* If both playback/capture channels are dynamic, make sure
3056
* at least one channel is present
3057
*/
3058
if (f->c_chmask < 0 && f->p_chmask < 0) {
3059
if (!c_chmask && !p_chmask) {
3060
usb_audio_warn(mixer->chip, "BAAD %s: no channels?",
3061
f->name);
3062
return false;
3063
}
3064
return true;
3065
}
3066
3067
if ((f->c_chmask < 0 && !c_chmask) ||
3068
(f->c_chmask >= 0 && f->c_chmask != c_chmask)) {
3069
usb_audio_warn(mixer->chip, "BAAD %s c_chmask mismatch",
3070
f->name);
3071
return false;
3072
}
3073
if ((f->p_chmask < 0 && !p_chmask) ||
3074
(f->p_chmask >= 0 && f->p_chmask != p_chmask)) {
3075
usb_audio_warn(mixer->chip, "BAAD %s p_chmask mismatch",
3076
f->name);
3077
return false;
3078
}
3079
return true;
3080
}
3081
3082
/*
3083
* create mixer controls for UAC3 BADD profiles
3084
*
3085
* UAC3 BADD device doesn't contain CS descriptors thus we will guess everything
3086
*
3087
* BADD device may contain Mixer Unit, which doesn't have any controls, skip it
3088
*/
3089
static int snd_usb_mixer_controls_badd(struct usb_mixer_interface *mixer,
3090
int ctrlif)
3091
{
3092
struct usb_device *dev = mixer->chip->dev;
3093
struct usb_interface_assoc_descriptor *assoc;
3094
int badd_profile = mixer->chip->badd_profile;
3095
const struct uac3_badd_profile *f;
3096
const struct usbmix_ctl_map *map;
3097
int p_chmask = 0, c_chmask = 0, st_chmask = 0;
3098
int i;
3099
3100
assoc = usb_ifnum_to_if(dev, ctrlif)->intf_assoc;
3101
if (!assoc)
3102
return -EINVAL;
3103
3104
/* Detect BADD capture/playback channels from AS EP descriptors */
3105
for (i = 0; i < assoc->bInterfaceCount; i++) {
3106
int intf = assoc->bFirstInterface + i;
3107
3108
struct usb_interface *iface;
3109
struct usb_host_interface *alts;
3110
struct usb_interface_descriptor *altsd;
3111
unsigned int maxpacksize;
3112
char dir_in;
3113
int chmask, num;
3114
3115
if (intf == ctrlif)
3116
continue;
3117
3118
iface = usb_ifnum_to_if(dev, intf);
3119
if (!iface)
3120
continue;
3121
3122
num = iface->num_altsetting;
3123
3124
if (num < 2)
3125
return -EINVAL;
3126
3127
/*
3128
* The number of Channels in an AudioStreaming interface
3129
* and the audio sample bit resolution (16 bits or 24
3130
* bits) can be derived from the wMaxPacketSize field in
3131
* the Standard AS Audio Data Endpoint descriptor in
3132
* Alternate Setting 1
3133
*/
3134
alts = &iface->altsetting[1];
3135
altsd = get_iface_desc(alts);
3136
3137
if (altsd->bNumEndpoints < 1)
3138
return -EINVAL;
3139
3140
/* check direction */
3141
dir_in = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN);
3142
maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
3143
3144
switch (maxpacksize) {
3145
default:
3146
usb_audio_err(mixer->chip,
3147
"incorrect wMaxPacketSize 0x%x for BADD profile\n",
3148
maxpacksize);
3149
return -EINVAL;
3150
case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16:
3151
case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16:
3152
case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24:
3153
case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24:
3154
chmask = 1;
3155
break;
3156
case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16:
3157
case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16:
3158
case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24:
3159
case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24:
3160
chmask = 3;
3161
break;
3162
}
3163
3164
if (dir_in)
3165
c_chmask = chmask;
3166
else
3167
p_chmask = chmask;
3168
}
3169
3170
usb_audio_dbg(mixer->chip,
3171
"UAC3 BADD profile 0x%x: detected c_chmask=%d p_chmask=%d\n",
3172
badd_profile, c_chmask, p_chmask);
3173
3174
/* check the mapping table */
3175
for (map = uac3_badd_usbmix_ctl_maps; map->id; map++) {
3176
if (map->id == badd_profile)
3177
break;
3178
}
3179
3180
if (!map->id)
3181
return -EINVAL;
3182
3183
for (f = uac3_badd_profiles; f->name; f++) {
3184
if (badd_profile == f->subclass)
3185
break;
3186
}
3187
if (!f->name)
3188
return -EINVAL;
3189
if (!uac3_badd_func_has_valid_channels(mixer, f, c_chmask, p_chmask))
3190
return -EINVAL;
3191
st_chmask = f->st_chmask;
3192
3193
/* Playback */
3194
if (p_chmask) {
3195
/* Master channel, always writable */
3196
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3197
UAC3_BADD_FU_ID2, map->map);
3198
/* Mono/Stereo volume channels, always writable */
3199
build_feature_ctl_badd(mixer, p_chmask, UAC_FU_VOLUME,
3200
UAC3_BADD_FU_ID2, map->map);
3201
}
3202
3203
/* Capture */
3204
if (c_chmask) {
3205
/* Master channel, always writable */
3206
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3207
UAC3_BADD_FU_ID5, map->map);
3208
/* Mono/Stereo volume channels, always writable */
3209
build_feature_ctl_badd(mixer, c_chmask, UAC_FU_VOLUME,
3210
UAC3_BADD_FU_ID5, map->map);
3211
}
3212
3213
/* Side tone-mixing */
3214
if (st_chmask) {
3215
/* Master channel, always writable */
3216
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3217
UAC3_BADD_FU_ID7, map->map);
3218
/* Mono volume channel, always writable */
3219
build_feature_ctl_badd(mixer, 1, UAC_FU_VOLUME,
3220
UAC3_BADD_FU_ID7, map->map);
3221
}
3222
3223
/* Insertion Control */
3224
if (f->subclass == UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER) {
3225
struct usb_audio_term iterm, oterm;
3226
3227
/* Input Term - Insertion control */
3228
memset(&iterm, 0, sizeof(iterm));
3229
iterm.id = UAC3_BADD_IT_ID4;
3230
iterm.type = UAC_BIDIR_TERMINAL_HEADSET;
3231
build_connector_control(mixer, map->map, &iterm, true);
3232
3233
/* Output Term - Insertion control */
3234
memset(&oterm, 0, sizeof(oterm));
3235
oterm.id = UAC3_BADD_OT_ID3;
3236
oterm.type = UAC_BIDIR_TERMINAL_HEADSET;
3237
build_connector_control(mixer, map->map, &oterm, false);
3238
}
3239
3240
return 0;
3241
}
3242
3243
/*
3244
* create mixer controls
3245
*
3246
* walk through all UAC_OUTPUT_TERMINAL descriptors to search for mixers
3247
*/
3248
static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer)
3249
{
3250
struct mixer_build state;
3251
int err;
3252
const struct usbmix_ctl_map *map;
3253
void *p;
3254
3255
memset(&state, 0, sizeof(state));
3256
state.chip = mixer->chip;
3257
state.mixer = mixer;
3258
state.buffer = mixer->hostif->extra;
3259
state.buflen = mixer->hostif->extralen;
3260
3261
/* check the mapping table */
3262
for (map = usbmix_ctl_maps; map->id; map++) {
3263
if (map->id == state.chip->usb_id) {
3264
state.map = map->map;
3265
state.selector_map = map->selector_map;
3266
mixer->connector_map = map->connector_map;
3267
break;
3268
}
3269
}
3270
3271
p = NULL;
3272
while ((p = snd_usb_find_csint_desc(mixer->hostif->extra,
3273
mixer->hostif->extralen,
3274
p, UAC_OUTPUT_TERMINAL)) != NULL) {
3275
if (!snd_usb_validate_audio_desc(p, mixer->protocol))
3276
continue; /* skip invalid descriptor */
3277
3278
if (mixer->protocol == UAC_VERSION_1) {
3279
struct uac1_output_terminal_descriptor *desc = p;
3280
3281
/* mark terminal ID as visited */
3282
set_bit(desc->bTerminalID, state.unitbitmap);
3283
state.oterm.id = desc->bTerminalID;
3284
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3285
state.oterm.name = desc->iTerminal;
3286
err = parse_audio_unit(&state, desc->bSourceID);
3287
if (err < 0 && err != -EINVAL)
3288
return err;
3289
} else if (mixer->protocol == UAC_VERSION_2) {
3290
struct uac2_output_terminal_descriptor *desc = p;
3291
3292
/* mark terminal ID as visited */
3293
set_bit(desc->bTerminalID, state.unitbitmap);
3294
state.oterm.id = desc->bTerminalID;
3295
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3296
state.oterm.name = desc->iTerminal;
3297
err = parse_audio_unit(&state, desc->bSourceID);
3298
if (err < 0 && err != -EINVAL)
3299
return err;
3300
3301
/*
3302
* For UAC2, use the same approach to also add the
3303
* clock selectors
3304
*/
3305
err = parse_audio_unit(&state, desc->bCSourceID);
3306
if (err < 0 && err != -EINVAL)
3307
return err;
3308
3309
if ((state.oterm.type & 0xff00) != 0x0100 &&
3310
uac_v2v3_control_is_readable(le16_to_cpu(desc->bmControls),
3311
UAC2_TE_CONNECTOR)) {
3312
build_connector_control(state.mixer, state.map,
3313
&state.oterm, false);
3314
}
3315
} else { /* UAC_VERSION_3 */
3316
struct uac3_output_terminal_descriptor *desc = p;
3317
3318
/* mark terminal ID as visited */
3319
set_bit(desc->bTerminalID, state.unitbitmap);
3320
state.oterm.id = desc->bTerminalID;
3321
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3322
state.oterm.name = le16_to_cpu(desc->wTerminalDescrStr);
3323
err = parse_audio_unit(&state, desc->bSourceID);
3324
if (err < 0 && err != -EINVAL)
3325
return err;
3326
3327
/*
3328
* For UAC3, use the same approach to also add the
3329
* clock selectors
3330
*/
3331
err = parse_audio_unit(&state, desc->bCSourceID);
3332
if (err < 0 && err != -EINVAL)
3333
return err;
3334
3335
if ((state.oterm.type & 0xff00) != 0x0100 &&
3336
uac_v2v3_control_is_readable(le32_to_cpu(desc->bmControls),
3337
UAC3_TE_INSERTION)) {
3338
build_connector_control(state.mixer, state.map,
3339
&state.oterm, false);
3340
}
3341
}
3342
}
3343
3344
return 0;
3345
}
3346
3347
static int delegate_notify(struct usb_mixer_interface *mixer, int unitid,
3348
u8 *control, u8 *channel)
3349
{
3350
const struct usbmix_connector_map *map = mixer->connector_map;
3351
3352
if (!map)
3353
return unitid;
3354
3355
for (; map->id; map++) {
3356
if (map->id == unitid) {
3357
if (control && map->control)
3358
*control = map->control;
3359
if (channel && map->channel)
3360
*channel = map->channel;
3361
return map->delegated_id;
3362
}
3363
}
3364
return unitid;
3365
}
3366
3367
void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
3368
{
3369
struct usb_mixer_elem_list *list;
3370
3371
unitid = delegate_notify(mixer, unitid, NULL, NULL);
3372
3373
for_each_mixer_elem(list, mixer, unitid) {
3374
struct usb_mixer_elem_info *info;
3375
3376
if (!list->is_std_info)
3377
continue;
3378
info = mixer_elem_list_to_info(list);
3379
/* invalidate cache, so the value is read from the device */
3380
info->cached = 0;
3381
snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3382
&list->kctl->id);
3383
}
3384
}
3385
3386
static void snd_usb_mixer_dump_cval(struct snd_info_buffer *buffer,
3387
struct usb_mixer_elem_list *list)
3388
{
3389
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
3390
static const char * const val_types[] = {
3391
[USB_MIXER_BOOLEAN] = "BOOLEAN",
3392
[USB_MIXER_INV_BOOLEAN] = "INV_BOOLEAN",
3393
[USB_MIXER_S8] = "S8",
3394
[USB_MIXER_U8] = "U8",
3395
[USB_MIXER_S16] = "S16",
3396
[USB_MIXER_U16] = "U16",
3397
[USB_MIXER_S32] = "S32",
3398
[USB_MIXER_U32] = "U32",
3399
[USB_MIXER_BESPOKEN] = "BESPOKEN",
3400
};
3401
snd_iprintf(buffer, " Info: id=%i, control=%i, cmask=0x%x, "
3402
"channels=%i, type=\"%s\"\n", cval->head.id,
3403
cval->control, cval->cmask, cval->channels,
3404
val_types[cval->val_type]);
3405
snd_iprintf(buffer, " Volume: min=%i, max=%i, dBmin=%i, dBmax=%i\n",
3406
cval->min, cval->max, cval->dBmin, cval->dBmax);
3407
}
3408
3409
static void snd_usb_mixer_proc_read(struct snd_info_entry *entry,
3410
struct snd_info_buffer *buffer)
3411
{
3412
struct snd_usb_audio *chip = entry->private_data;
3413
struct usb_mixer_interface *mixer;
3414
struct usb_mixer_elem_list *list;
3415
int unitid;
3416
3417
list_for_each_entry(mixer, &chip->mixer_list, list) {
3418
snd_iprintf(buffer,
3419
"USB Mixer: usb_id=0x%08x, ctrlif=%i, ctlerr=%i\n",
3420
chip->usb_id, mixer_ctrl_intf(mixer),
3421
mixer->ignore_ctl_error);
3422
snd_iprintf(buffer, "Card: %s\n", chip->card->longname);
3423
for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) {
3424
for_each_mixer_elem(list, mixer, unitid) {
3425
snd_iprintf(buffer, " Unit: %i\n", list->id);
3426
if (list->kctl)
3427
snd_iprintf(buffer,
3428
" Control: name=\"%s\", index=%i\n",
3429
list->kctl->id.name,
3430
list->kctl->id.index);
3431
if (list->dump)
3432
list->dump(buffer, list);
3433
}
3434
}
3435
}
3436
}
3437
3438
static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
3439
int attribute, int value, int index)
3440
{
3441
struct usb_mixer_elem_list *list;
3442
__u8 unitid = (index >> 8) & 0xff;
3443
__u8 control = (value >> 8) & 0xff;
3444
__u8 channel = value & 0xff;
3445
unsigned int count = 0;
3446
3447
if (channel >= MAX_CHANNELS) {
3448
usb_audio_dbg(mixer->chip,
3449
"%s(): bogus channel number %d\n",
3450
__func__, channel);
3451
return;
3452
}
3453
3454
unitid = delegate_notify(mixer, unitid, &control, &channel);
3455
3456
for_each_mixer_elem(list, mixer, unitid)
3457
count++;
3458
3459
if (count == 0)
3460
return;
3461
3462
for_each_mixer_elem(list, mixer, unitid) {
3463
struct usb_mixer_elem_info *info;
3464
3465
if (!list->kctl)
3466
continue;
3467
if (!list->is_std_info)
3468
continue;
3469
3470
info = mixer_elem_list_to_info(list);
3471
if (count > 1 && info->control != control)
3472
continue;
3473
3474
switch (attribute) {
3475
case UAC2_CS_CUR:
3476
/* invalidate cache, so the value is read from the device */
3477
if (channel)
3478
info->cached &= ~BIT(channel);
3479
else /* master channel */
3480
info->cached = 0;
3481
3482
snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3483
&info->head.kctl->id);
3484
break;
3485
3486
case UAC2_CS_RANGE:
3487
/* TODO */
3488
break;
3489
3490
case UAC2_CS_MEM:
3491
/* TODO */
3492
break;
3493
3494
default:
3495
usb_audio_dbg(mixer->chip,
3496
"unknown attribute %d in interrupt\n",
3497
attribute);
3498
break;
3499
} /* switch */
3500
}
3501
}
3502
3503
static void snd_usb_mixer_interrupt(struct urb *urb)
3504
{
3505
struct usb_mixer_interface *mixer = urb->context;
3506
int len = urb->actual_length;
3507
int ustatus = urb->status;
3508
3509
if (ustatus != 0)
3510
goto requeue;
3511
3512
if (mixer->protocol == UAC_VERSION_1) {
3513
struct uac1_status_word *status;
3514
3515
for (status = urb->transfer_buffer;
3516
len >= sizeof(*status);
3517
len -= sizeof(*status), status++) {
3518
dev_dbg(&urb->dev->dev, "status interrupt: %02x %02x\n",
3519
status->bStatusType,
3520
status->bOriginator);
3521
3522
/* ignore any notifications not from the control interface */
3523
if ((status->bStatusType & UAC1_STATUS_TYPE_ORIG_MASK) !=
3524
UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF)
3525
continue;
3526
3527
if (status->bStatusType & UAC1_STATUS_TYPE_MEM_CHANGED)
3528
snd_usb_mixer_rc_memory_change(mixer, status->bOriginator);
3529
else
3530
snd_usb_mixer_notify_id(mixer, status->bOriginator);
3531
}
3532
} else { /* UAC_VERSION_2 */
3533
struct uac2_interrupt_data_msg *msg;
3534
3535
for (msg = urb->transfer_buffer;
3536
len >= sizeof(*msg);
3537
len -= sizeof(*msg), msg++) {
3538
/* drop vendor specific and endpoint requests */
3539
if ((msg->bInfo & UAC2_INTERRUPT_DATA_MSG_VENDOR) ||
3540
(msg->bInfo & UAC2_INTERRUPT_DATA_MSG_EP))
3541
continue;
3542
3543
snd_usb_mixer_interrupt_v2(mixer, msg->bAttribute,
3544
le16_to_cpu(msg->wValue),
3545
le16_to_cpu(msg->wIndex));
3546
}
3547
}
3548
3549
requeue:
3550
if (ustatus != -ENOENT &&
3551
ustatus != -ECONNRESET &&
3552
ustatus != -ESHUTDOWN) {
3553
urb->dev = mixer->chip->dev;
3554
usb_submit_urb(urb, GFP_ATOMIC);
3555
}
3556
}
3557
3558
/* create the handler for the optional status interrupt endpoint */
3559
static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer)
3560
{
3561
struct usb_endpoint_descriptor *ep;
3562
void *transfer_buffer;
3563
int buffer_length;
3564
unsigned int epnum;
3565
3566
/* we need one interrupt input endpoint */
3567
if (get_iface_desc(mixer->hostif)->bNumEndpoints < 1)
3568
return 0;
3569
ep = get_endpoint(mixer->hostif, 0);
3570
if (!usb_endpoint_dir_in(ep) || !usb_endpoint_xfer_int(ep))
3571
return 0;
3572
3573
epnum = usb_endpoint_num(ep);
3574
buffer_length = le16_to_cpu(ep->wMaxPacketSize);
3575
transfer_buffer = kmalloc(buffer_length, GFP_KERNEL);
3576
if (!transfer_buffer)
3577
return -ENOMEM;
3578
mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
3579
if (!mixer->urb) {
3580
kfree(transfer_buffer);
3581
return -ENOMEM;
3582
}
3583
usb_fill_int_urb(mixer->urb, mixer->chip->dev,
3584
usb_rcvintpipe(mixer->chip->dev, epnum),
3585
transfer_buffer, buffer_length,
3586
snd_usb_mixer_interrupt, mixer, ep->bInterval);
3587
usb_submit_urb(mixer->urb, GFP_KERNEL);
3588
return 0;
3589
}
3590
3591
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
3592
{
3593
static const struct snd_device_ops dev_ops = {
3594
.dev_free = snd_usb_mixer_dev_free
3595
};
3596
struct usb_mixer_interface *mixer;
3597
int err;
3598
3599
strscpy(chip->card->mixername, "USB Mixer");
3600
3601
mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
3602
if (!mixer)
3603
return -ENOMEM;
3604
mixer->chip = chip;
3605
mixer->ignore_ctl_error = !!(chip->quirk_flags & QUIRK_FLAG_IGNORE_CTL_ERROR);
3606
mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems),
3607
GFP_KERNEL);
3608
if (!mixer->id_elems) {
3609
kfree(mixer);
3610
return -ENOMEM;
3611
}
3612
3613
mixer->hostif = &usb_ifnum_to_if(chip->dev, ctrlif)->altsetting[0];
3614
switch (get_iface_desc(mixer->hostif)->bInterfaceProtocol) {
3615
case UAC_VERSION_1:
3616
default:
3617
mixer->protocol = UAC_VERSION_1;
3618
break;
3619
case UAC_VERSION_2:
3620
mixer->protocol = UAC_VERSION_2;
3621
break;
3622
case UAC_VERSION_3:
3623
mixer->protocol = UAC_VERSION_3;
3624
break;
3625
}
3626
3627
if (mixer->protocol == UAC_VERSION_3 &&
3628
chip->badd_profile >= UAC3_FUNCTION_SUBCLASS_GENERIC_IO) {
3629
err = snd_usb_mixer_controls_badd(mixer, ctrlif);
3630
if (err < 0)
3631
goto _error;
3632
} else {
3633
err = snd_usb_mixer_controls(mixer);
3634
if (err < 0)
3635
goto _error;
3636
}
3637
3638
err = snd_usb_mixer_status_create(mixer);
3639
if (err < 0)
3640
goto _error;
3641
3642
err = snd_usb_mixer_apply_create_quirk(mixer);
3643
if (err < 0)
3644
goto _error;
3645
3646
err = snd_device_new(chip->card, SNDRV_DEV_CODEC, mixer, &dev_ops);
3647
if (err < 0)
3648
goto _error;
3649
3650
if (list_empty(&chip->mixer_list))
3651
snd_card_ro_proc_new(chip->card, "usbmixer", chip,
3652
snd_usb_mixer_proc_read);
3653
3654
list_add(&mixer->list, &chip->mixer_list);
3655
return 0;
3656
3657
_error:
3658
snd_usb_mixer_free(mixer);
3659
return err;
3660
}
3661
3662
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer)
3663
{
3664
if (mixer->disconnected)
3665
return;
3666
if (mixer->urb)
3667
usb_kill_urb(mixer->urb);
3668
if (mixer->rc_urb)
3669
usb_kill_urb(mixer->rc_urb);
3670
if (mixer->private_free)
3671
mixer->private_free(mixer);
3672
mixer->disconnected = true;
3673
}
3674
3675
/* stop any bus activity of a mixer */
3676
static void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer)
3677
{
3678
usb_kill_urb(mixer->urb);
3679
usb_kill_urb(mixer->rc_urb);
3680
}
3681
3682
static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer)
3683
{
3684
int err;
3685
3686
if (mixer->urb) {
3687
err = usb_submit_urb(mixer->urb, GFP_NOIO);
3688
if (err < 0)
3689
return err;
3690
}
3691
3692
return 0;
3693
}
3694
3695
int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer)
3696
{
3697
snd_usb_mixer_inactivate(mixer);
3698
if (mixer->private_suspend)
3699
mixer->private_suspend(mixer);
3700
return 0;
3701
}
3702
3703
static int restore_mixer_value(struct usb_mixer_elem_list *list)
3704
{
3705
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
3706
int c, err, idx;
3707
3708
if (cval->val_type == USB_MIXER_BESPOKEN)
3709
return 0;
3710
3711
if (cval->cmask) {
3712
idx = 0;
3713
for (c = 0; c < MAX_CHANNELS; c++) {
3714
if (!(cval->cmask & BIT(c)))
3715
continue;
3716
if (cval->cached & BIT(c + 1)) {
3717
err = snd_usb_set_cur_mix_value(cval, c + 1, idx,
3718
cval->cache_val[idx]);
3719
if (err < 0)
3720
break;
3721
}
3722
idx++;
3723
}
3724
} else {
3725
/* master */
3726
if (cval->cached)
3727
snd_usb_set_cur_mix_value(cval, 0, 0, *cval->cache_val);
3728
}
3729
3730
return 0;
3731
}
3732
3733
int snd_usb_mixer_resume(struct usb_mixer_interface *mixer)
3734
{
3735
struct usb_mixer_elem_list *list;
3736
int id, err;
3737
3738
/* restore cached mixer values */
3739
for (id = 0; id < MAX_ID_ELEMS; id++) {
3740
for_each_mixer_elem(list, mixer, id) {
3741
if (list->resume) {
3742
err = list->resume(list);
3743
if (err < 0)
3744
return err;
3745
}
3746
}
3747
}
3748
3749
snd_usb_mixer_resume_quirk(mixer);
3750
3751
return snd_usb_mixer_activate(mixer);
3752
}
3753
3754
void snd_usb_mixer_elem_init_std(struct usb_mixer_elem_list *list,
3755
struct usb_mixer_interface *mixer,
3756
int unitid)
3757
{
3758
list->mixer = mixer;
3759
list->id = unitid;
3760
list->dump = snd_usb_mixer_dump_cval;
3761
list->resume = restore_mixer_value;
3762
}
3763
3764