Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/usb/mixer.c
29265 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 = UAC3_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(0x0471, 0x0101):
1151
case USB_ID(0x0471, 0x0104):
1152
case USB_ID(0x0471, 0x0105):
1153
case USB_ID(0x0672, 0x1041):
1154
/* quirk for UDA1321/N101.
1155
* note that detection between firmware 2.1.1.7 (N101)
1156
* and later 2.1.1.21 is not very clear from datasheets.
1157
* I hope that the min value is -15360 for newer firmware --jk
1158
*/
1159
if (!strcmp(kctl->id.name, "PCM Playback Volume") &&
1160
cval->min == -15616) {
1161
usb_audio_info(chip,
1162
"set volume quirk for UDA1321/N101 chip\n");
1163
cval->max = -256;
1164
}
1165
break;
1166
1167
case USB_ID(0x046d, 0x09a4):
1168
if (!strcmp(kctl->id.name, "Mic Capture Volume")) {
1169
usb_audio_info(chip,
1170
"set volume quirk for QuickCam E3500\n");
1171
cval->min = 6080;
1172
cval->max = 8768;
1173
cval->res = 192;
1174
}
1175
break;
1176
1177
case USB_ID(0x0495, 0x3042): /* ESS Technology Asus USB DAC */
1178
if ((strstr(kctl->id.name, "Playback Volume") != NULL) ||
1179
strstr(kctl->id.name, "Capture Volume") != NULL) {
1180
cval->min >>= 8;
1181
cval->max = 0;
1182
cval->res = 1;
1183
}
1184
break;
1185
case USB_ID(0x3302, 0x12db): /* MOONDROP Quark2 */
1186
if (!strcmp(kctl->id.name, "PCM Playback Volume")) {
1187
usb_audio_info(chip,
1188
"set volume quirk for MOONDROP Quark2\n");
1189
cval->min = -14208; /* Mute under it */
1190
}
1191
break;
1192
}
1193
}
1194
1195
/* forcibly initialize the current mixer value; if GET_CUR fails, set to
1196
* the minimum as default
1197
*/
1198
static void init_cur_mix_raw(struct usb_mixer_elem_info *cval, int ch, int idx)
1199
{
1200
int val, err;
1201
1202
err = snd_usb_get_cur_mix_value(cval, ch, idx, &val);
1203
if (!err)
1204
return;
1205
if (!cval->head.mixer->ignore_ctl_error)
1206
usb_audio_warn(cval->head.mixer->chip,
1207
"%d:%d: failed to get current value for ch %d (%d)\n",
1208
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1209
ch, err);
1210
snd_usb_set_cur_mix_value(cval, ch, idx, cval->min);
1211
}
1212
1213
/*
1214
* retrieve the minimum and maximum values for the specified control
1215
*/
1216
static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval,
1217
int default_min, struct snd_kcontrol *kctl)
1218
{
1219
int i, idx;
1220
1221
/* for failsafe */
1222
cval->min = default_min;
1223
cval->max = cval->min + 1;
1224
cval->res = 1;
1225
cval->dBmin = cval->dBmax = 0;
1226
1227
if (cval->val_type == USB_MIXER_BOOLEAN ||
1228
cval->val_type == USB_MIXER_INV_BOOLEAN) {
1229
cval->initialized = 1;
1230
} else {
1231
int minchn = 0;
1232
if (cval->cmask) {
1233
for (i = 0; i < MAX_CHANNELS; i++)
1234
if (cval->cmask & BIT(i)) {
1235
minchn = i + 1;
1236
break;
1237
}
1238
}
1239
if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 ||
1240
get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) {
1241
usb_audio_err(cval->head.mixer->chip,
1242
"%d:%d: cannot get min/max values for control %d (id %d)\n",
1243
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1244
cval->control, cval->head.id);
1245
return -EINVAL;
1246
}
1247
if (get_ctl_value(cval, UAC_GET_RES,
1248
(cval->control << 8) | minchn,
1249
&cval->res) < 0) {
1250
cval->res = 1;
1251
} else if (cval->head.mixer->protocol == UAC_VERSION_1) {
1252
int last_valid_res = cval->res;
1253
1254
while (cval->res > 1) {
1255
if (snd_usb_mixer_set_ctl_value(cval, UAC_SET_RES,
1256
(cval->control << 8) | minchn,
1257
cval->res / 2) < 0)
1258
break;
1259
cval->res /= 2;
1260
}
1261
if (get_ctl_value(cval, UAC_GET_RES,
1262
(cval->control << 8) | minchn, &cval->res) < 0)
1263
cval->res = last_valid_res;
1264
}
1265
if (cval->res == 0)
1266
cval->res = 1;
1267
1268
/* Additional checks for the proper resolution
1269
*
1270
* Some devices report smaller resolutions than actually
1271
* reacting. They don't return errors but simply clip
1272
* to the lower aligned value.
1273
*/
1274
if (cval->min + cval->res < cval->max) {
1275
int last_valid_res = cval->res;
1276
int saved, test, check;
1277
if (get_cur_mix_raw(cval, minchn, &saved) < 0)
1278
goto no_res_check;
1279
for (;;) {
1280
test = saved;
1281
if (test < cval->max)
1282
test += cval->res;
1283
else
1284
test -= cval->res;
1285
if (test < cval->min || test > cval->max ||
1286
snd_usb_set_cur_mix_value(cval, minchn, 0, test) ||
1287
get_cur_mix_raw(cval, minchn, &check)) {
1288
cval->res = last_valid_res;
1289
break;
1290
}
1291
if (test == check)
1292
break;
1293
cval->res *= 2;
1294
}
1295
snd_usb_set_cur_mix_value(cval, minchn, 0, saved);
1296
}
1297
1298
no_res_check:
1299
cval->initialized = 1;
1300
}
1301
1302
if (kctl)
1303
volume_control_quirks(cval, kctl);
1304
1305
/* USB descriptions contain the dB scale in 1/256 dB unit
1306
* while ALSA TLV contains in 1/100 dB unit
1307
*/
1308
cval->dBmin = (convert_signed_value(cval, cval->min) * 100) / 256;
1309
cval->dBmax = (convert_signed_value(cval, cval->max) * 100) / 256;
1310
if (cval->dBmin > cval->dBmax) {
1311
/* something is wrong; assume it's either from/to 0dB */
1312
if (cval->dBmin < 0)
1313
cval->dBmax = 0;
1314
else if (cval->dBmin > 0)
1315
cval->dBmin = 0;
1316
if (cval->dBmin > cval->dBmax) {
1317
/* totally crap, return an error */
1318
return -EINVAL;
1319
}
1320
} else {
1321
/* if the max volume is too low, it's likely a bogus range;
1322
* here we use -96dB as the threshold
1323
*/
1324
if (cval->dBmax <= -9600) {
1325
usb_audio_info(cval->head.mixer->chip,
1326
"%d:%d: bogus dB values (%d/%d), disabling dB reporting\n",
1327
cval->head.id, mixer_ctrl_intf(cval->head.mixer),
1328
cval->dBmin, cval->dBmax);
1329
cval->dBmin = cval->dBmax = 0;
1330
}
1331
}
1332
1333
/* initialize all elements */
1334
if (!cval->cmask) {
1335
init_cur_mix_raw(cval, 0, 0);
1336
} else {
1337
idx = 0;
1338
for (i = 0; i < MAX_CHANNELS; i++) {
1339
if (cval->cmask & BIT(i)) {
1340
init_cur_mix_raw(cval, i + 1, idx);
1341
idx++;
1342
}
1343
}
1344
}
1345
1346
return 0;
1347
}
1348
1349
#define get_min_max(cval, def) get_min_max_with_quirks(cval, def, NULL)
1350
1351
/* get the max value advertised via control API */
1352
static int get_max_exposed(struct usb_mixer_elem_info *cval)
1353
{
1354
if (!cval->max_exposed) {
1355
if (cval->res)
1356
cval->max_exposed =
1357
DIV_ROUND_UP(cval->max - cval->min, cval->res);
1358
else
1359
cval->max_exposed = cval->max - cval->min;
1360
}
1361
return cval->max_exposed;
1362
}
1363
1364
/* get a feature/mixer unit info */
1365
static int mixer_ctl_feature_info(struct snd_kcontrol *kcontrol,
1366
struct snd_ctl_elem_info *uinfo)
1367
{
1368
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1369
1370
if (cval->val_type == USB_MIXER_BOOLEAN ||
1371
cval->val_type == USB_MIXER_INV_BOOLEAN)
1372
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1373
else
1374
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1375
uinfo->count = cval->channels;
1376
if (cval->val_type != USB_MIXER_BOOLEAN &&
1377
cval->val_type != USB_MIXER_INV_BOOLEAN) {
1378
if (!cval->initialized) {
1379
get_min_max_with_quirks(cval, 0, kcontrol);
1380
if (cval->initialized && cval->dBmin >= cval->dBmax) {
1381
kcontrol->vd[0].access &=
1382
~(SNDRV_CTL_ELEM_ACCESS_TLV_READ |
1383
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK);
1384
snd_ctl_notify(cval->head.mixer->chip->card,
1385
SNDRV_CTL_EVENT_MASK_INFO,
1386
&kcontrol->id);
1387
}
1388
}
1389
}
1390
1391
uinfo->value.integer.min = 0;
1392
uinfo->value.integer.max = get_max_exposed(cval);
1393
return 0;
1394
}
1395
1396
/* get the current value from feature/mixer unit */
1397
static int mixer_ctl_feature_get(struct snd_kcontrol *kcontrol,
1398
struct snd_ctl_elem_value *ucontrol)
1399
{
1400
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1401
int c, cnt, val, err;
1402
1403
ucontrol->value.integer.value[0] = cval->min;
1404
if (cval->cmask) {
1405
cnt = 0;
1406
for (c = 0; c < MAX_CHANNELS; c++) {
1407
if (!(cval->cmask & BIT(c)))
1408
continue;
1409
err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &val);
1410
if (err < 0)
1411
return filter_error(cval, err);
1412
val = get_relative_value(cval, val);
1413
ucontrol->value.integer.value[cnt] = val;
1414
cnt++;
1415
}
1416
return 0;
1417
} else {
1418
/* master channel */
1419
err = snd_usb_get_cur_mix_value(cval, 0, 0, &val);
1420
if (err < 0)
1421
return filter_error(cval, err);
1422
val = get_relative_value(cval, val);
1423
ucontrol->value.integer.value[0] = val;
1424
}
1425
return 0;
1426
}
1427
1428
/* put the current value to feature/mixer unit */
1429
static int mixer_ctl_feature_put(struct snd_kcontrol *kcontrol,
1430
struct snd_ctl_elem_value *ucontrol)
1431
{
1432
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1433
int max_val = get_max_exposed(cval);
1434
int c, cnt, val, oval, err;
1435
int changed = 0;
1436
1437
if (cval->cmask) {
1438
cnt = 0;
1439
for (c = 0; c < MAX_CHANNELS; c++) {
1440
if (!(cval->cmask & BIT(c)))
1441
continue;
1442
err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &oval);
1443
if (err < 0)
1444
return filter_error(cval, err);
1445
val = ucontrol->value.integer.value[cnt];
1446
if (val < 0 || val > max_val)
1447
return -EINVAL;
1448
val = get_abs_value(cval, val);
1449
if (oval != val) {
1450
snd_usb_set_cur_mix_value(cval, c + 1, cnt, val);
1451
changed = 1;
1452
}
1453
cnt++;
1454
}
1455
} else {
1456
/* master channel */
1457
err = snd_usb_get_cur_mix_value(cval, 0, 0, &oval);
1458
if (err < 0)
1459
return filter_error(cval, err);
1460
val = ucontrol->value.integer.value[0];
1461
if (val < 0 || val > max_val)
1462
return -EINVAL;
1463
val = get_abs_value(cval, val);
1464
if (val != oval) {
1465
snd_usb_set_cur_mix_value(cval, 0, 0, val);
1466
changed = 1;
1467
}
1468
}
1469
return changed;
1470
}
1471
1472
/* get the boolean value from the master channel of a UAC control */
1473
static int mixer_ctl_master_bool_get(struct snd_kcontrol *kcontrol,
1474
struct snd_ctl_elem_value *ucontrol)
1475
{
1476
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1477
int val, err;
1478
1479
err = snd_usb_get_cur_mix_value(cval, 0, 0, &val);
1480
if (err < 0)
1481
return filter_error(cval, err);
1482
val = (val != 0);
1483
ucontrol->value.integer.value[0] = val;
1484
return 0;
1485
}
1486
1487
static int get_connector_value(struct usb_mixer_elem_info *cval,
1488
char *name, int *val)
1489
{
1490
struct snd_usb_audio *chip = cval->head.mixer->chip;
1491
int idx = 0, validx, ret;
1492
1493
validx = cval->control << 8 | 0;
1494
1495
CLASS(snd_usb_lock, pm)(chip);
1496
if (pm.err) {
1497
ret = -EIO;
1498
goto error;
1499
}
1500
1501
idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8);
1502
if (cval->head.mixer->protocol == UAC_VERSION_2) {
1503
struct uac2_connectors_ctl_blk uac2_conn;
1504
1505
ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), UAC2_CS_CUR,
1506
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1507
validx, idx, &uac2_conn, sizeof(uac2_conn));
1508
if (val)
1509
*val = !!uac2_conn.bNrChannels;
1510
} else { /* UAC_VERSION_3 */
1511
struct uac3_insertion_ctl_blk uac3_conn;
1512
1513
ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), UAC2_CS_CUR,
1514
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
1515
validx, idx, &uac3_conn, sizeof(uac3_conn));
1516
if (val)
1517
*val = !!uac3_conn.bmConInserted;
1518
}
1519
1520
if (ret < 0) {
1521
if (name && strstr(name, "Speaker")) {
1522
if (val)
1523
*val = 1;
1524
return 0;
1525
}
1526
error:
1527
usb_audio_err(chip,
1528
"cannot get connectors status: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
1529
UAC_GET_CUR, validx, idx, cval->val_type);
1530
1531
if (val)
1532
*val = 0;
1533
1534
return filter_error(cval, ret);
1535
}
1536
1537
return ret;
1538
}
1539
1540
/* get the connectors status and report it as boolean type */
1541
static int mixer_ctl_connector_get(struct snd_kcontrol *kcontrol,
1542
struct snd_ctl_elem_value *ucontrol)
1543
{
1544
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
1545
int ret, val;
1546
1547
ret = get_connector_value(cval, kcontrol->id.name, &val);
1548
1549
if (ret < 0)
1550
return ret;
1551
1552
ucontrol->value.integer.value[0] = val;
1553
return 0;
1554
}
1555
1556
static const struct snd_kcontrol_new usb_feature_unit_ctl = {
1557
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1558
.name = "", /* will be filled later manually */
1559
.info = mixer_ctl_feature_info,
1560
.get = mixer_ctl_feature_get,
1561
.put = mixer_ctl_feature_put,
1562
};
1563
1564
/* the read-only variant */
1565
static const struct snd_kcontrol_new usb_feature_unit_ctl_ro = {
1566
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1567
.name = "", /* will be filled later manually */
1568
.info = mixer_ctl_feature_info,
1569
.get = mixer_ctl_feature_get,
1570
.put = NULL,
1571
};
1572
1573
/*
1574
* A control which shows the boolean value from reading a UAC control on
1575
* the master channel.
1576
*/
1577
static const struct snd_kcontrol_new usb_bool_master_control_ctl_ro = {
1578
.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1579
.name = "", /* will be filled later manually */
1580
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1581
.info = snd_ctl_boolean_mono_info,
1582
.get = mixer_ctl_master_bool_get,
1583
.put = NULL,
1584
};
1585
1586
static const struct snd_kcontrol_new usb_connector_ctl_ro = {
1587
.iface = SNDRV_CTL_ELEM_IFACE_CARD,
1588
.name = "", /* will be filled later manually */
1589
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1590
.info = snd_ctl_boolean_mono_info,
1591
.get = mixer_ctl_connector_get,
1592
.put = NULL,
1593
};
1594
1595
/*
1596
* This symbol is exported in order to allow the mixer quirks to
1597
* hook up to the standard feature unit control mechanism
1598
*/
1599
const struct snd_kcontrol_new *snd_usb_feature_unit_ctl = &usb_feature_unit_ctl;
1600
1601
/*
1602
* build a feature control
1603
*/
1604
static size_t append_ctl_name(struct snd_kcontrol *kctl, const char *str)
1605
{
1606
return strlcat(kctl->id.name, str, sizeof(kctl->id.name));
1607
}
1608
1609
/*
1610
* A lot of headsets/headphones have a "Speaker" mixer. Make sure we
1611
* rename it to "Headphone". We determine if something is a headphone
1612
* similar to how udev determines form factor.
1613
*/
1614
static void check_no_speaker_on_headset(struct snd_kcontrol *kctl,
1615
struct snd_card *card)
1616
{
1617
static const char * const names_to_check[] = {
1618
"Headset", "headset", "Headphone", "headphone", NULL};
1619
const char * const *s;
1620
bool found = false;
1621
1622
if (strcmp("Speaker", kctl->id.name))
1623
return;
1624
1625
for (s = names_to_check; *s; s++)
1626
if (strstr(card->shortname, *s)) {
1627
found = true;
1628
break;
1629
}
1630
1631
if (!found)
1632
return;
1633
1634
snd_ctl_rename(card, kctl, "Headphone");
1635
}
1636
1637
static const struct usb_feature_control_info *get_feature_control_info(int control)
1638
{
1639
int i;
1640
1641
for (i = 0; i < ARRAY_SIZE(audio_feature_info); ++i) {
1642
if (audio_feature_info[i].control == control)
1643
return &audio_feature_info[i];
1644
}
1645
return NULL;
1646
}
1647
1648
static void __build_feature_ctl(struct usb_mixer_interface *mixer,
1649
const struct usbmix_name_map *imap,
1650
unsigned int ctl_mask, int control,
1651
struct usb_audio_term *iterm,
1652
struct usb_audio_term *oterm,
1653
int unitid, int nameid, int readonly_mask)
1654
{
1655
const struct usb_feature_control_info *ctl_info;
1656
unsigned int len = 0;
1657
int mapped_name = 0;
1658
struct snd_kcontrol *kctl;
1659
struct usb_mixer_elem_info *cval;
1660
const struct usbmix_name_map *map;
1661
unsigned int range;
1662
1663
if (control == UAC_FU_GRAPHIC_EQUALIZER) {
1664
/* FIXME: not supported yet */
1665
return;
1666
}
1667
1668
map = find_map(imap, unitid, control);
1669
if (check_ignored_ctl(map))
1670
return;
1671
1672
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1673
if (!cval)
1674
return;
1675
snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid);
1676
cval->control = control;
1677
cval->cmask = ctl_mask;
1678
1679
ctl_info = get_feature_control_info(control);
1680
if (!ctl_info) {
1681
usb_mixer_elem_info_free(cval);
1682
return;
1683
}
1684
if (mixer->protocol == UAC_VERSION_1)
1685
cval->val_type = ctl_info->type;
1686
else /* UAC_VERSION_2 */
1687
cval->val_type = ctl_info->type_uac2 >= 0 ?
1688
ctl_info->type_uac2 : ctl_info->type;
1689
1690
if (ctl_mask == 0) {
1691
cval->channels = 1; /* master channel */
1692
cval->master_readonly = readonly_mask;
1693
} else {
1694
int i, c = 0;
1695
for (i = 0; i < 16; i++)
1696
if (ctl_mask & BIT(i))
1697
c++;
1698
cval->channels = c;
1699
cval->ch_readonly = readonly_mask;
1700
}
1701
1702
/*
1703
* If all channels in the mask are marked read-only, make the control
1704
* read-only. snd_usb_set_cur_mix_value() will check the mask again and won't
1705
* issue write commands to read-only channels.
1706
*/
1707
if (cval->channels == readonly_mask)
1708
kctl = snd_ctl_new1(&usb_feature_unit_ctl_ro, cval);
1709
else
1710
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
1711
1712
if (!kctl) {
1713
usb_audio_err(mixer->chip, "cannot malloc kcontrol\n");
1714
usb_mixer_elem_info_free(cval);
1715
return;
1716
}
1717
kctl->private_free = snd_usb_mixer_elem_free;
1718
1719
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
1720
mapped_name = len != 0;
1721
if (!len && nameid)
1722
len = snd_usb_copy_string_desc(mixer->chip, nameid,
1723
kctl->id.name, sizeof(kctl->id.name));
1724
1725
switch (control) {
1726
case UAC_FU_MUTE:
1727
case UAC_FU_VOLUME:
1728
/*
1729
* determine the control name. the rule is:
1730
* - if a name id is given in descriptor, use it.
1731
* - if the connected input can be determined, then use the name
1732
* of terminal type.
1733
* - if the connected output can be determined, use it.
1734
* - otherwise, anonymous name.
1735
*/
1736
if (!len) {
1737
if (iterm)
1738
len = get_term_name(mixer->chip, iterm,
1739
kctl->id.name,
1740
sizeof(kctl->id.name), 1);
1741
if (!len && oterm)
1742
len = get_term_name(mixer->chip, oterm,
1743
kctl->id.name,
1744
sizeof(kctl->id.name), 1);
1745
if (!len)
1746
snprintf(kctl->id.name, sizeof(kctl->id.name),
1747
"Feature %d", unitid);
1748
}
1749
1750
if (!mapped_name)
1751
check_no_speaker_on_headset(kctl, mixer->chip->card);
1752
1753
/*
1754
* determine the stream direction:
1755
* if the connected output is USB stream, then it's likely a
1756
* capture stream. otherwise it should be playback (hopefully :)
1757
*/
1758
if (!mapped_name && oterm && !(oterm->type >> 16)) {
1759
if ((oterm->type & 0xff00) == 0x0100)
1760
append_ctl_name(kctl, " Capture");
1761
else
1762
append_ctl_name(kctl, " Playback");
1763
}
1764
append_ctl_name(kctl, control == UAC_FU_MUTE ?
1765
" Switch" : " Volume");
1766
break;
1767
default:
1768
if (!len)
1769
strscpy(kctl->id.name, audio_feature_info[control-1].name,
1770
sizeof(kctl->id.name));
1771
break;
1772
}
1773
1774
/* get min/max values */
1775
get_min_max_with_quirks(cval, 0, kctl);
1776
1777
/* skip a bogus volume range */
1778
if (cval->max <= cval->min) {
1779
usb_audio_dbg(mixer->chip,
1780
"[%d] FU [%s] skipped due to invalid volume\n",
1781
cval->head.id, kctl->id.name);
1782
snd_ctl_free_one(kctl);
1783
return;
1784
}
1785
1786
1787
if (control == UAC_FU_VOLUME) {
1788
check_mapped_dB(map, cval);
1789
if (cval->dBmin < cval->dBmax || !cval->initialized) {
1790
kctl->tlv.c = snd_usb_mixer_vol_tlv;
1791
kctl->vd[0].access |=
1792
SNDRV_CTL_ELEM_ACCESS_TLV_READ |
1793
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
1794
}
1795
}
1796
1797
snd_usb_mixer_fu_apply_quirk(mixer, cval, unitid, kctl);
1798
1799
range = (cval->max - cval->min) / cval->res;
1800
/*
1801
* Are there devices with volume range more than 255? I use a bit more
1802
* to be sure. 384 is a resolution magic number found on Logitech
1803
* devices. It will definitively catch all buggy Logitech devices.
1804
*/
1805
if (range > 384) {
1806
usb_audio_warn(mixer->chip,
1807
"Warning! Unlikely big volume range (=%u), cval->res is probably wrong.",
1808
range);
1809
usb_audio_warn(mixer->chip,
1810
"[%d] FU [%s] ch = %d, val = %d/%d/%d",
1811
cval->head.id, kctl->id.name, cval->channels,
1812
cval->min, cval->max, cval->res);
1813
}
1814
1815
usb_audio_dbg(mixer->chip, "[%d] FU [%s] ch = %d, val = %d/%d/%d\n",
1816
cval->head.id, kctl->id.name, cval->channels,
1817
cval->min, cval->max, cval->res);
1818
snd_usb_mixer_add_control(&cval->head, kctl);
1819
}
1820
1821
static void build_feature_ctl(struct mixer_build *state, void *raw_desc,
1822
unsigned int ctl_mask, int control,
1823
struct usb_audio_term *iterm, int unitid,
1824
int readonly_mask)
1825
{
1826
struct uac_feature_unit_descriptor *desc = raw_desc;
1827
int nameid = uac_feature_unit_iFeature(desc);
1828
1829
__build_feature_ctl(state->mixer, state->map, ctl_mask, control,
1830
iterm, &state->oterm, unitid, nameid, readonly_mask);
1831
}
1832
1833
static void build_feature_ctl_badd(struct usb_mixer_interface *mixer,
1834
unsigned int ctl_mask, int control, int unitid,
1835
const struct usbmix_name_map *badd_map)
1836
{
1837
__build_feature_ctl(mixer, badd_map, ctl_mask, control,
1838
NULL, NULL, unitid, 0, 0);
1839
}
1840
1841
static void get_connector_control_name(struct usb_mixer_interface *mixer,
1842
struct usb_audio_term *term,
1843
bool is_input, char *name, int name_size)
1844
{
1845
int name_len = get_term_name(mixer->chip, term, name, name_size, 0);
1846
1847
if (name_len == 0)
1848
strscpy(name, "Unknown", name_size);
1849
1850
/*
1851
* sound/core/ctljack.c has a convention of naming jack controls
1852
* by ending in " Jack". Make it slightly more useful by
1853
* indicating Input or Output after the terminal name.
1854
*/
1855
if (is_input)
1856
strlcat(name, " - Input Jack", name_size);
1857
else
1858
strlcat(name, " - Output Jack", name_size);
1859
}
1860
1861
/* get connector value to "wake up" the USB audio */
1862
static int connector_mixer_resume(struct usb_mixer_elem_list *list)
1863
{
1864
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
1865
1866
get_connector_value(cval, NULL, NULL);
1867
return 0;
1868
}
1869
1870
/* Build a mixer control for a UAC connector control (jack-detect) */
1871
static void build_connector_control(struct usb_mixer_interface *mixer,
1872
const struct usbmix_name_map *imap,
1873
struct usb_audio_term *term, bool is_input)
1874
{
1875
struct snd_kcontrol *kctl;
1876
struct usb_mixer_elem_info *cval;
1877
const struct usbmix_name_map *map;
1878
1879
map = find_map(imap, term->id, 0);
1880
if (check_ignored_ctl(map))
1881
return;
1882
1883
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1884
if (!cval)
1885
return;
1886
snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id);
1887
1888
/* set up a specific resume callback */
1889
cval->head.resume = connector_mixer_resume;
1890
1891
/*
1892
* UAC2: The first byte from reading the UAC2_TE_CONNECTOR control returns the
1893
* number of channels connected.
1894
*
1895
* UAC3: The first byte specifies size of bitmap for the inserted controls. The
1896
* following byte(s) specifies which connectors are inserted.
1897
*
1898
* This boolean ctl will simply report if any channels are connected
1899
* or not.
1900
*/
1901
if (mixer->protocol == UAC_VERSION_2)
1902
cval->control = UAC2_TE_CONNECTOR;
1903
else /* UAC_VERSION_3 */
1904
cval->control = UAC3_TE_INSERTION;
1905
1906
cval->val_type = USB_MIXER_BOOLEAN;
1907
cval->channels = 1; /* report true if any channel is connected */
1908
cval->min = 0;
1909
cval->max = 1;
1910
kctl = snd_ctl_new1(&usb_connector_ctl_ro, cval);
1911
if (!kctl) {
1912
usb_audio_err(mixer->chip, "cannot malloc kcontrol\n");
1913
usb_mixer_elem_info_free(cval);
1914
return;
1915
}
1916
1917
if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name)))
1918
strlcat(kctl->id.name, " Jack", sizeof(kctl->id.name));
1919
else
1920
get_connector_control_name(mixer, term, is_input, kctl->id.name,
1921
sizeof(kctl->id.name));
1922
kctl->private_free = snd_usb_mixer_elem_free;
1923
snd_usb_mixer_add_control(&cval->head, kctl);
1924
}
1925
1926
static int parse_clock_source_unit(struct mixer_build *state, int unitid,
1927
void *_ftr)
1928
{
1929
struct uac_clock_source_descriptor *hdr = _ftr;
1930
struct usb_mixer_elem_info *cval;
1931
struct snd_kcontrol *kctl;
1932
int ret;
1933
1934
if (state->mixer->protocol != UAC_VERSION_2)
1935
return -EINVAL;
1936
1937
/*
1938
* The only property of this unit we are interested in is the
1939
* clock source validity. If that isn't readable, just bail out.
1940
*/
1941
if (!uac_v2v3_control_is_readable(hdr->bmControls,
1942
UAC2_CS_CONTROL_CLOCK_VALID))
1943
return 0;
1944
1945
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
1946
if (!cval)
1947
return -ENOMEM;
1948
1949
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, hdr->bClockID);
1950
1951
cval->min = 0;
1952
cval->max = 1;
1953
cval->channels = 1;
1954
cval->val_type = USB_MIXER_BOOLEAN;
1955
cval->control = UAC2_CS_CONTROL_CLOCK_VALID;
1956
1957
cval->master_readonly = 1;
1958
/* From UAC2 5.2.5.1.2 "Only the get request is supported." */
1959
kctl = snd_ctl_new1(&usb_bool_master_control_ctl_ro, cval);
1960
1961
if (!kctl) {
1962
usb_mixer_elem_info_free(cval);
1963
return -ENOMEM;
1964
}
1965
1966
kctl->private_free = snd_usb_mixer_elem_free;
1967
ret = snd_usb_copy_string_desc(state->chip, hdr->iClockSource,
1968
kctl->id.name, sizeof(kctl->id.name));
1969
if (ret > 0)
1970
append_ctl_name(kctl, " Validity");
1971
else
1972
snprintf(kctl->id.name, sizeof(kctl->id.name),
1973
"Clock Source %d Validity", hdr->bClockID);
1974
1975
return snd_usb_mixer_add_control(&cval->head, kctl);
1976
}
1977
1978
/*
1979
* parse a feature unit
1980
*
1981
* most of controls are defined here.
1982
*/
1983
static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
1984
void *_ftr)
1985
{
1986
int channels, i, j;
1987
struct usb_audio_term iterm;
1988
unsigned int master_bits;
1989
int err, csize;
1990
struct uac_feature_unit_descriptor *hdr = _ftr;
1991
__u8 *bmaControls;
1992
1993
if (state->mixer->protocol == UAC_VERSION_1) {
1994
csize = hdr->bControlSize;
1995
channels = (hdr->bLength - 7) / csize - 1;
1996
bmaControls = hdr->bmaControls;
1997
} else if (state->mixer->protocol == UAC_VERSION_2) {
1998
struct uac2_feature_unit_descriptor *ftr = _ftr;
1999
csize = 4;
2000
channels = (hdr->bLength - 6) / 4 - 1;
2001
bmaControls = ftr->bmaControls;
2002
} else { /* UAC_VERSION_3 */
2003
struct uac3_feature_unit_descriptor *ftr = _ftr;
2004
2005
csize = 4;
2006
channels = (ftr->bLength - 7) / 4 - 1;
2007
bmaControls = ftr->bmaControls;
2008
}
2009
2010
if (channels > 32) {
2011
usb_audio_info(state->chip,
2012
"usbmixer: too many channels (%d) in unit %d\n",
2013
channels, unitid);
2014
return -EINVAL;
2015
}
2016
2017
/* parse the source unit */
2018
err = parse_audio_unit(state, hdr->bSourceID);
2019
if (err < 0)
2020
return err;
2021
2022
/* determine the input source type and name */
2023
err = check_input_term(state, hdr->bSourceID, &iterm);
2024
if (err < 0)
2025
return err;
2026
2027
master_bits = snd_usb_combine_bytes(bmaControls, csize);
2028
/* master configuration quirks */
2029
switch (state->chip->usb_id) {
2030
case USB_ID(0x08bb, 0x2702):
2031
usb_audio_info(state->chip,
2032
"usbmixer: master volume quirk for PCM2702 chip\n");
2033
/* disable non-functional volume control */
2034
master_bits &= ~UAC_CONTROL_BIT(UAC_FU_VOLUME);
2035
break;
2036
case USB_ID(0x1130, 0xf211):
2037
usb_audio_info(state->chip,
2038
"usbmixer: volume control quirk for Tenx TP6911 Audio Headset\n");
2039
/* disable non-functional volume control */
2040
channels = 0;
2041
break;
2042
2043
}
2044
2045
if (state->mixer->protocol == UAC_VERSION_1) {
2046
/* check all control types */
2047
for (i = 0; i < 10; i++) {
2048
unsigned int ch_bits = 0;
2049
int control = audio_feature_info[i].control;
2050
2051
for (j = 0; j < channels; j++) {
2052
unsigned int mask;
2053
2054
mask = snd_usb_combine_bytes(bmaControls +
2055
csize * (j+1), csize);
2056
if (mask & BIT(i))
2057
ch_bits |= BIT(j);
2058
}
2059
/* audio class v1 controls are never read-only */
2060
2061
/*
2062
* The first channel must be set
2063
* (for ease of programming).
2064
*/
2065
if (ch_bits & 1)
2066
build_feature_ctl(state, _ftr, ch_bits, control,
2067
&iterm, unitid, 0);
2068
if (master_bits & BIT(i))
2069
build_feature_ctl(state, _ftr, 0, control,
2070
&iterm, unitid, 0);
2071
}
2072
} else { /* UAC_VERSION_2/3 */
2073
for (i = 0; i < ARRAY_SIZE(audio_feature_info); i++) {
2074
unsigned int ch_bits = 0;
2075
unsigned int ch_read_only = 0;
2076
int control = audio_feature_info[i].control;
2077
2078
for (j = 0; j < channels; j++) {
2079
unsigned int mask;
2080
2081
mask = snd_usb_combine_bytes(bmaControls +
2082
csize * (j+1), csize);
2083
if (uac_v2v3_control_is_readable(mask, control)) {
2084
ch_bits |= BIT(j);
2085
if (!uac_v2v3_control_is_writeable(mask, control))
2086
ch_read_only |= BIT(j);
2087
}
2088
}
2089
2090
/*
2091
* NOTE: build_feature_ctl() will mark the control
2092
* read-only if all channels are marked read-only in
2093
* the descriptors. Otherwise, the control will be
2094
* reported as writeable, but the driver will not
2095
* actually issue a write command for read-only
2096
* channels.
2097
*/
2098
2099
/*
2100
* The first channel must be set
2101
* (for ease of programming).
2102
*/
2103
if (ch_bits & 1)
2104
build_feature_ctl(state, _ftr, ch_bits, control,
2105
&iterm, unitid, ch_read_only);
2106
if (uac_v2v3_control_is_readable(master_bits, control))
2107
build_feature_ctl(state, _ftr, 0, control,
2108
&iterm, unitid,
2109
!uac_v2v3_control_is_writeable(master_bits,
2110
control));
2111
}
2112
}
2113
2114
return 0;
2115
}
2116
2117
/*
2118
* Mixer Unit
2119
*/
2120
2121
/* check whether the given in/out overflows bmMixerControls matrix */
2122
static bool mixer_bitmap_overflow(struct uac_mixer_unit_descriptor *desc,
2123
int protocol, int num_ins, int num_outs)
2124
{
2125
u8 *hdr = (u8 *)desc;
2126
u8 *c = uac_mixer_unit_bmControls(desc, protocol);
2127
size_t rest; /* remaining bytes after bmMixerControls */
2128
2129
switch (protocol) {
2130
case UAC_VERSION_1:
2131
default:
2132
rest = 1; /* iMixer */
2133
break;
2134
case UAC_VERSION_2:
2135
rest = 2; /* bmControls + iMixer */
2136
break;
2137
case UAC_VERSION_3:
2138
rest = 6; /* bmControls + wMixerDescrStr */
2139
break;
2140
}
2141
2142
/* overflow? */
2143
return c + (num_ins * num_outs + 7) / 8 + rest > hdr + hdr[0];
2144
}
2145
2146
/*
2147
* build a mixer unit control
2148
*
2149
* the callbacks are identical with feature unit.
2150
* input channel number (zero based) is given in control field instead.
2151
*/
2152
static void build_mixer_unit_ctl(struct mixer_build *state,
2153
struct uac_mixer_unit_descriptor *desc,
2154
int in_pin, int in_ch, int num_outs,
2155
int unitid, struct usb_audio_term *iterm)
2156
{
2157
struct usb_mixer_elem_info *cval;
2158
unsigned int i, len;
2159
struct snd_kcontrol *kctl;
2160
const struct usbmix_name_map *map;
2161
2162
map = find_map(state->map, unitid, 0);
2163
if (check_ignored_ctl(map))
2164
return;
2165
2166
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2167
if (!cval)
2168
return;
2169
2170
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2171
cval->control = in_ch + 1; /* based on 1 */
2172
cval->val_type = USB_MIXER_S16;
2173
for (i = 0; i < num_outs; i++) {
2174
__u8 *c = uac_mixer_unit_bmControls(desc, state->mixer->protocol);
2175
2176
if (check_matrix_bitmap(c, in_ch, i, num_outs)) {
2177
cval->cmask |= BIT(i);
2178
cval->channels++;
2179
}
2180
}
2181
2182
/* get min/max values */
2183
get_min_max(cval, 0);
2184
2185
kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
2186
if (!kctl) {
2187
usb_audio_err(state->chip, "cannot malloc kcontrol\n");
2188
usb_mixer_elem_info_free(cval);
2189
return;
2190
}
2191
kctl->private_free = snd_usb_mixer_elem_free;
2192
2193
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
2194
if (!len)
2195
len = get_term_name(state->chip, iterm, kctl->id.name,
2196
sizeof(kctl->id.name), 0);
2197
if (!len)
2198
snprintf(kctl->id.name, sizeof(kctl->id.name), "Mixer Source %d", in_ch + 1);
2199
2200
append_ctl_name(kctl, " Volume");
2201
2202
usb_audio_dbg(state->chip, "[%d] MU [%s] ch = %d, val = %d/%d\n",
2203
cval->head.id, kctl->id.name, cval->channels, cval->min, cval->max);
2204
snd_usb_mixer_add_control(&cval->head, kctl);
2205
}
2206
2207
static int parse_audio_input_terminal(struct mixer_build *state, int unitid,
2208
void *raw_desc)
2209
{
2210
struct usb_audio_term iterm;
2211
unsigned int control, bmctls, term_id;
2212
2213
if (state->mixer->protocol == UAC_VERSION_2) {
2214
struct uac2_input_terminal_descriptor *d_v2 = raw_desc;
2215
control = UAC2_TE_CONNECTOR;
2216
term_id = d_v2->bTerminalID;
2217
bmctls = le16_to_cpu(d_v2->bmControls);
2218
} else if (state->mixer->protocol == UAC_VERSION_3) {
2219
struct uac3_input_terminal_descriptor *d_v3 = raw_desc;
2220
control = UAC3_TE_INSERTION;
2221
term_id = d_v3->bTerminalID;
2222
bmctls = le32_to_cpu(d_v3->bmControls);
2223
} else {
2224
return 0; /* UAC1. No Insertion control */
2225
}
2226
2227
check_input_term(state, term_id, &iterm);
2228
2229
/* Check for jack detection. */
2230
if ((iterm.type & 0xff00) != 0x0100 &&
2231
uac_v2v3_control_is_readable(bmctls, control))
2232
build_connector_control(state->mixer, state->map, &iterm, true);
2233
2234
return 0;
2235
}
2236
2237
/*
2238
* parse a mixer unit
2239
*/
2240
static int parse_audio_mixer_unit(struct mixer_build *state, int unitid,
2241
void *raw_desc)
2242
{
2243
struct uac_mixer_unit_descriptor *desc = raw_desc;
2244
struct usb_audio_term iterm;
2245
int input_pins, num_ins, num_outs;
2246
int pin, ich, err;
2247
2248
err = uac_mixer_unit_get_channels(state, desc);
2249
if (err < 0) {
2250
usb_audio_err(state->chip,
2251
"invalid MIXER UNIT descriptor %d\n",
2252
unitid);
2253
return err;
2254
}
2255
2256
num_outs = err;
2257
input_pins = desc->bNrInPins;
2258
2259
num_ins = 0;
2260
ich = 0;
2261
for (pin = 0; pin < input_pins; pin++) {
2262
err = parse_audio_unit(state, desc->baSourceID[pin]);
2263
if (err < 0)
2264
continue;
2265
/* no bmControls field (e.g. Maya44) -> ignore */
2266
if (!num_outs)
2267
continue;
2268
err = check_input_term(state, desc->baSourceID[pin], &iterm);
2269
if (err < 0)
2270
return err;
2271
num_ins += iterm.channels;
2272
if (mixer_bitmap_overflow(desc, state->mixer->protocol,
2273
num_ins, num_outs))
2274
break;
2275
for (; ich < num_ins; ich++) {
2276
int och, ich_has_controls = 0;
2277
2278
for (och = 0; och < num_outs; och++) {
2279
__u8 *c = uac_mixer_unit_bmControls(desc,
2280
state->mixer->protocol);
2281
2282
if (check_matrix_bitmap(c, ich, och, num_outs)) {
2283
ich_has_controls = 1;
2284
break;
2285
}
2286
}
2287
if (ich_has_controls)
2288
build_mixer_unit_ctl(state, desc, pin, ich, num_outs,
2289
unitid, &iterm);
2290
}
2291
}
2292
return 0;
2293
}
2294
2295
/*
2296
* Processing Unit / Extension Unit
2297
*/
2298
2299
/* get callback for processing/extension unit */
2300
static int mixer_ctl_procunit_get(struct snd_kcontrol *kcontrol,
2301
struct snd_ctl_elem_value *ucontrol)
2302
{
2303
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2304
int err, val;
2305
2306
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2307
if (err < 0) {
2308
ucontrol->value.integer.value[0] = cval->min;
2309
return filter_error(cval, err);
2310
}
2311
val = get_relative_value(cval, val);
2312
ucontrol->value.integer.value[0] = val;
2313
return 0;
2314
}
2315
2316
/* put callback for processing/extension unit */
2317
static int mixer_ctl_procunit_put(struct snd_kcontrol *kcontrol,
2318
struct snd_ctl_elem_value *ucontrol)
2319
{
2320
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2321
int val, oval, err;
2322
2323
err = get_cur_ctl_value(cval, cval->control << 8, &oval);
2324
if (err < 0)
2325
return filter_error(cval, err);
2326
val = ucontrol->value.integer.value[0];
2327
if (val < 0 || val > get_max_exposed(cval))
2328
return -EINVAL;
2329
val = get_abs_value(cval, val);
2330
if (val != oval) {
2331
set_cur_ctl_value(cval, cval->control << 8, val);
2332
return 1;
2333
}
2334
return 0;
2335
}
2336
2337
/* alsa control interface for processing/extension unit */
2338
static const struct snd_kcontrol_new mixer_procunit_ctl = {
2339
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2340
.name = "", /* will be filled later */
2341
.info = mixer_ctl_feature_info,
2342
.get = mixer_ctl_procunit_get,
2343
.put = mixer_ctl_procunit_put,
2344
};
2345
2346
/*
2347
* predefined data for processing units
2348
*/
2349
struct procunit_value_info {
2350
int control;
2351
const char *suffix;
2352
int val_type;
2353
int min_value;
2354
};
2355
2356
struct procunit_info {
2357
int type;
2358
char *name;
2359
const struct procunit_value_info *values;
2360
};
2361
2362
static const struct procunit_value_info undefined_proc_info[] = {
2363
{ 0x00, "Control Undefined", 0 },
2364
{ 0 }
2365
};
2366
2367
static const struct procunit_value_info updown_proc_info[] = {
2368
{ UAC_UD_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2369
{ UAC_UD_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2370
{ 0 }
2371
};
2372
static const struct procunit_value_info prologic_proc_info[] = {
2373
{ UAC_DP_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2374
{ UAC_DP_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2375
{ 0 }
2376
};
2377
static const struct procunit_value_info threed_enh_proc_info[] = {
2378
{ UAC_3D_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2379
{ UAC_3D_SPACE, "Spaciousness", USB_MIXER_U8 },
2380
{ 0 }
2381
};
2382
static const struct procunit_value_info reverb_proc_info[] = {
2383
{ UAC_REVERB_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2384
{ UAC_REVERB_LEVEL, "Level", USB_MIXER_U8 },
2385
{ UAC_REVERB_TIME, "Time", USB_MIXER_U16 },
2386
{ UAC_REVERB_FEEDBACK, "Feedback", USB_MIXER_U8 },
2387
{ 0 }
2388
};
2389
static const struct procunit_value_info chorus_proc_info[] = {
2390
{ UAC_CHORUS_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2391
{ UAC_CHORUS_LEVEL, "Level", USB_MIXER_U8 },
2392
{ UAC_CHORUS_RATE, "Rate", USB_MIXER_U16 },
2393
{ UAC_CHORUS_DEPTH, "Depth", USB_MIXER_U16 },
2394
{ 0 }
2395
};
2396
static const struct procunit_value_info dcr_proc_info[] = {
2397
{ UAC_DCR_ENABLE, "Switch", USB_MIXER_BOOLEAN },
2398
{ UAC_DCR_RATE, "Ratio", USB_MIXER_U16 },
2399
{ UAC_DCR_MAXAMPL, "Max Amp", USB_MIXER_S16 },
2400
{ UAC_DCR_THRESHOLD, "Threshold", USB_MIXER_S16 },
2401
{ UAC_DCR_ATTACK_TIME, "Attack Time", USB_MIXER_U16 },
2402
{ UAC_DCR_RELEASE_TIME, "Release Time", USB_MIXER_U16 },
2403
{ 0 }
2404
};
2405
2406
static const struct procunit_info procunits[] = {
2407
{ UAC_PROCESS_UP_DOWNMIX, "Up Down", updown_proc_info },
2408
{ UAC_PROCESS_DOLBY_PROLOGIC, "Dolby Prologic", prologic_proc_info },
2409
{ UAC_PROCESS_STEREO_EXTENDER, "3D Stereo Extender", threed_enh_proc_info },
2410
{ UAC_PROCESS_REVERB, "Reverb", reverb_proc_info },
2411
{ UAC_PROCESS_CHORUS, "Chorus", chorus_proc_info },
2412
{ UAC_PROCESS_DYN_RANGE_COMP, "DCR", dcr_proc_info },
2413
{ 0 },
2414
};
2415
2416
static const struct procunit_value_info uac3_updown_proc_info[] = {
2417
{ UAC3_UD_MODE_SELECT, "Mode Select", USB_MIXER_U8, 1 },
2418
{ 0 }
2419
};
2420
static const struct procunit_value_info uac3_stereo_ext_proc_info[] = {
2421
{ UAC3_EXT_WIDTH_CONTROL, "Width Control", USB_MIXER_U8 },
2422
{ 0 }
2423
};
2424
2425
static const struct procunit_info uac3_procunits[] = {
2426
{ UAC3_PROCESS_UP_DOWNMIX, "Up Down", uac3_updown_proc_info },
2427
{ UAC3_PROCESS_STEREO_EXTENDER, "3D Stereo Extender", uac3_stereo_ext_proc_info },
2428
{ UAC3_PROCESS_MULTI_FUNCTION, "Multi-Function", undefined_proc_info },
2429
{ 0 },
2430
};
2431
2432
/*
2433
* predefined data for extension units
2434
*/
2435
static const struct procunit_value_info clock_rate_xu_info[] = {
2436
{ USB_XU_CLOCK_RATE_SELECTOR, "Selector", USB_MIXER_U8, 0 },
2437
{ 0 }
2438
};
2439
static const struct procunit_value_info clock_source_xu_info[] = {
2440
{ USB_XU_CLOCK_SOURCE_SELECTOR, "External", USB_MIXER_BOOLEAN },
2441
{ 0 }
2442
};
2443
static const struct procunit_value_info spdif_format_xu_info[] = {
2444
{ USB_XU_DIGITAL_FORMAT_SELECTOR, "SPDIF/AC3", USB_MIXER_BOOLEAN },
2445
{ 0 }
2446
};
2447
static const struct procunit_value_info soft_limit_xu_info[] = {
2448
{ USB_XU_SOFT_LIMIT_SELECTOR, " ", USB_MIXER_BOOLEAN },
2449
{ 0 }
2450
};
2451
static const struct procunit_info extunits[] = {
2452
{ USB_XU_CLOCK_RATE, "Clock rate", clock_rate_xu_info },
2453
{ USB_XU_CLOCK_SOURCE, "DigitalIn CLK source", clock_source_xu_info },
2454
{ USB_XU_DIGITAL_IO_STATUS, "DigitalOut format:", spdif_format_xu_info },
2455
{ USB_XU_DEVICE_OPTIONS, "AnalogueIn Soft Limit", soft_limit_xu_info },
2456
{ 0 }
2457
};
2458
2459
/*
2460
* build a processing/extension unit
2461
*/
2462
static int build_audio_procunit(struct mixer_build *state, int unitid,
2463
void *raw_desc, const struct procunit_info *list,
2464
bool extension_unit)
2465
{
2466
struct uac_processing_unit_descriptor *desc = raw_desc;
2467
int num_ins;
2468
struct usb_mixer_elem_info *cval;
2469
struct snd_kcontrol *kctl;
2470
int i, err, nameid, type, len, val;
2471
const struct procunit_info *info;
2472
const struct procunit_value_info *valinfo;
2473
const struct usbmix_name_map *map;
2474
static const struct procunit_value_info default_value_info[] = {
2475
{ 0x01, "Switch", USB_MIXER_BOOLEAN },
2476
{ 0 }
2477
};
2478
static const struct procunit_info default_info = {
2479
0, NULL, default_value_info
2480
};
2481
const char *name = extension_unit ?
2482
"Extension Unit" : "Processing Unit";
2483
2484
num_ins = desc->bNrInPins;
2485
for (i = 0; i < num_ins; i++) {
2486
err = parse_audio_unit(state, desc->baSourceID[i]);
2487
if (err < 0)
2488
return err;
2489
}
2490
2491
type = le16_to_cpu(desc->wProcessType);
2492
for (info = list; info && info->type; info++)
2493
if (info->type == type)
2494
break;
2495
if (!info || !info->type)
2496
info = &default_info;
2497
2498
for (valinfo = info->values; valinfo->control; valinfo++) {
2499
__u8 *controls = uac_processing_unit_bmControls(desc, state->mixer->protocol);
2500
2501
if (state->mixer->protocol == UAC_VERSION_1) {
2502
if (!(controls[valinfo->control / 8] &
2503
BIT((valinfo->control % 8) - 1)))
2504
continue;
2505
} else { /* UAC_VERSION_2/3 */
2506
if (!uac_v2v3_control_is_readable(controls[valinfo->control / 8],
2507
valinfo->control))
2508
continue;
2509
}
2510
2511
map = find_map(state->map, unitid, valinfo->control);
2512
if (check_ignored_ctl(map))
2513
continue;
2514
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2515
if (!cval)
2516
return -ENOMEM;
2517
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2518
cval->control = valinfo->control;
2519
cval->val_type = valinfo->val_type;
2520
cval->channels = 1;
2521
2522
if (state->mixer->protocol > UAC_VERSION_1 &&
2523
!uac_v2v3_control_is_writeable(controls[valinfo->control / 8],
2524
valinfo->control))
2525
cval->master_readonly = 1;
2526
2527
/* get min/max values */
2528
switch (type) {
2529
case UAC_PROCESS_UP_DOWNMIX: {
2530
bool mode_sel = false;
2531
2532
switch (state->mixer->protocol) {
2533
case UAC_VERSION_1:
2534
case UAC_VERSION_2:
2535
default:
2536
if (cval->control == UAC_UD_MODE_SELECT)
2537
mode_sel = true;
2538
break;
2539
case UAC_VERSION_3:
2540
if (cval->control == UAC3_UD_MODE_SELECT)
2541
mode_sel = true;
2542
break;
2543
}
2544
2545
if (mode_sel) {
2546
__u8 *control_spec = uac_processing_unit_specific(desc,
2547
state->mixer->protocol);
2548
cval->min = 1;
2549
cval->max = control_spec[0];
2550
cval->res = 1;
2551
cval->initialized = 1;
2552
break;
2553
}
2554
2555
get_min_max(cval, valinfo->min_value);
2556
break;
2557
}
2558
case USB_XU_CLOCK_RATE:
2559
/*
2560
* E-Mu USB 0404/0202/TrackerPre/0204
2561
* samplerate control quirk
2562
*/
2563
cval->min = 0;
2564
cval->max = 5;
2565
cval->res = 1;
2566
cval->initialized = 1;
2567
break;
2568
default:
2569
get_min_max(cval, valinfo->min_value);
2570
break;
2571
}
2572
2573
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2574
if (err < 0) {
2575
usb_mixer_elem_info_free(cval);
2576
return -EINVAL;
2577
}
2578
2579
kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
2580
if (!kctl) {
2581
usb_mixer_elem_info_free(cval);
2582
return -ENOMEM;
2583
}
2584
kctl->private_free = snd_usb_mixer_elem_free;
2585
2586
if (check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name))) {
2587
/* nothing */ ;
2588
} else if (info->name) {
2589
strscpy(kctl->id.name, info->name, sizeof(kctl->id.name));
2590
} else {
2591
if (extension_unit)
2592
nameid = uac_extension_unit_iExtension(desc, state->mixer->protocol);
2593
else
2594
nameid = uac_processing_unit_iProcessing(desc, state->mixer->protocol);
2595
len = 0;
2596
if (nameid)
2597
len = snd_usb_copy_string_desc(state->chip,
2598
nameid,
2599
kctl->id.name,
2600
sizeof(kctl->id.name));
2601
if (!len)
2602
strscpy(kctl->id.name, name, sizeof(kctl->id.name));
2603
}
2604
append_ctl_name(kctl, " ");
2605
append_ctl_name(kctl, valinfo->suffix);
2606
2607
usb_audio_dbg(state->chip,
2608
"[%d] PU [%s] ch = %d, val = %d/%d\n",
2609
cval->head.id, kctl->id.name, cval->channels,
2610
cval->min, cval->max);
2611
2612
err = snd_usb_mixer_add_control(&cval->head, kctl);
2613
if (err < 0)
2614
return err;
2615
}
2616
return 0;
2617
}
2618
2619
static int parse_audio_processing_unit(struct mixer_build *state, int unitid,
2620
void *raw_desc)
2621
{
2622
switch (state->mixer->protocol) {
2623
case UAC_VERSION_1:
2624
case UAC_VERSION_2:
2625
default:
2626
return build_audio_procunit(state, unitid, raw_desc,
2627
procunits, false);
2628
case UAC_VERSION_3:
2629
return build_audio_procunit(state, unitid, raw_desc,
2630
uac3_procunits, false);
2631
}
2632
}
2633
2634
static int parse_audio_extension_unit(struct mixer_build *state, int unitid,
2635
void *raw_desc)
2636
{
2637
/*
2638
* Note that we parse extension units with processing unit descriptors.
2639
* That's ok as the layout is the same.
2640
*/
2641
return build_audio_procunit(state, unitid, raw_desc, extunits, true);
2642
}
2643
2644
/*
2645
* Selector Unit
2646
*/
2647
2648
/*
2649
* info callback for selector unit
2650
* use an enumerator type for routing
2651
*/
2652
static int mixer_ctl_selector_info(struct snd_kcontrol *kcontrol,
2653
struct snd_ctl_elem_info *uinfo)
2654
{
2655
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2656
const char **itemlist = (const char **)kcontrol->private_value;
2657
2658
if (snd_BUG_ON(!itemlist))
2659
return -EINVAL;
2660
return snd_ctl_enum_info(uinfo, 1, cval->max, itemlist);
2661
}
2662
2663
/* get callback for selector unit */
2664
static int mixer_ctl_selector_get(struct snd_kcontrol *kcontrol,
2665
struct snd_ctl_elem_value *ucontrol)
2666
{
2667
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2668
int val, err;
2669
2670
err = get_cur_ctl_value(cval, cval->control << 8, &val);
2671
if (err < 0) {
2672
ucontrol->value.enumerated.item[0] = 0;
2673
return filter_error(cval, err);
2674
}
2675
val = get_relative_value(cval, val);
2676
ucontrol->value.enumerated.item[0] = val;
2677
return 0;
2678
}
2679
2680
/* put callback for selector unit */
2681
static int mixer_ctl_selector_put(struct snd_kcontrol *kcontrol,
2682
struct snd_ctl_elem_value *ucontrol)
2683
{
2684
struct usb_mixer_elem_info *cval = snd_kcontrol_chip(kcontrol);
2685
int val, oval, err;
2686
2687
err = get_cur_ctl_value(cval, cval->control << 8, &oval);
2688
if (err < 0)
2689
return filter_error(cval, err);
2690
val = ucontrol->value.enumerated.item[0];
2691
if (val < 0 || val >= cval->max) /* here cval->max = # elements */
2692
return -EINVAL;
2693
val = get_abs_value(cval, val);
2694
if (val != oval) {
2695
set_cur_ctl_value(cval, cval->control << 8, val);
2696
return 1;
2697
}
2698
return 0;
2699
}
2700
2701
/* alsa control interface for selector unit */
2702
static const struct snd_kcontrol_new mixer_selectunit_ctl = {
2703
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2704
.name = "", /* will be filled later */
2705
.info = mixer_ctl_selector_info,
2706
.get = mixer_ctl_selector_get,
2707
.put = mixer_ctl_selector_put,
2708
};
2709
2710
/*
2711
* private free callback.
2712
* free both private_data and private_value
2713
*/
2714
static void usb_mixer_selector_elem_free(struct snd_kcontrol *kctl)
2715
{
2716
int i, num_ins = 0;
2717
2718
if (kctl->private_data) {
2719
struct usb_mixer_elem_info *cval = kctl->private_data;
2720
num_ins = cval->max;
2721
usb_mixer_elem_info_free(cval);
2722
kctl->private_data = NULL;
2723
}
2724
if (kctl->private_value) {
2725
char **itemlist = (char **)kctl->private_value;
2726
for (i = 0; i < num_ins; i++)
2727
kfree(itemlist[i]);
2728
kfree(itemlist);
2729
kctl->private_value = 0;
2730
}
2731
}
2732
2733
/*
2734
* parse a selector unit
2735
*/
2736
static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
2737
void *raw_desc)
2738
{
2739
struct uac_selector_unit_descriptor *desc = raw_desc;
2740
unsigned int i, nameid, len;
2741
int err;
2742
struct usb_mixer_elem_info *cval;
2743
struct snd_kcontrol *kctl;
2744
const struct usbmix_name_map *map;
2745
char **namelist;
2746
2747
for (i = 0; i < desc->bNrInPins; i++) {
2748
err = parse_audio_unit(state, desc->baSourceID[i]);
2749
if (err < 0)
2750
return err;
2751
}
2752
2753
if (desc->bNrInPins == 1) /* only one ? nonsense! */
2754
return 0;
2755
2756
map = find_map(state->map, unitid, 0);
2757
if (check_ignored_ctl(map))
2758
return 0;
2759
2760
cval = kzalloc(sizeof(*cval), GFP_KERNEL);
2761
if (!cval)
2762
return -ENOMEM;
2763
snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid);
2764
cval->val_type = USB_MIXER_U8;
2765
cval->channels = 1;
2766
cval->min = 1;
2767
cval->max = desc->bNrInPins;
2768
cval->res = 1;
2769
cval->initialized = 1;
2770
2771
switch (state->mixer->protocol) {
2772
case UAC_VERSION_1:
2773
default:
2774
cval->control = 0;
2775
break;
2776
case UAC_VERSION_2:
2777
case UAC_VERSION_3:
2778
if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR ||
2779
desc->bDescriptorSubtype == UAC3_CLOCK_SELECTOR)
2780
cval->control = UAC2_CX_CLOCK_SELECTOR;
2781
else /* UAC2/3_SELECTOR_UNIT */
2782
cval->control = UAC2_SU_SELECTOR;
2783
break;
2784
}
2785
2786
namelist = kcalloc(desc->bNrInPins, sizeof(char *), GFP_KERNEL);
2787
if (!namelist) {
2788
err = -ENOMEM;
2789
goto error_cval;
2790
}
2791
#define MAX_ITEM_NAME_LEN 64
2792
for (i = 0; i < desc->bNrInPins; i++) {
2793
struct usb_audio_term iterm;
2794
namelist[i] = kmalloc(MAX_ITEM_NAME_LEN, GFP_KERNEL);
2795
if (!namelist[i]) {
2796
err = -ENOMEM;
2797
goto error_name;
2798
}
2799
len = check_mapped_selector_name(state, unitid, i, namelist[i],
2800
MAX_ITEM_NAME_LEN);
2801
if (! len && check_input_term(state, desc->baSourceID[i], &iterm) >= 0)
2802
len = get_term_name(state->chip, &iterm, namelist[i],
2803
MAX_ITEM_NAME_LEN, 0);
2804
if (! len)
2805
scnprintf(namelist[i], MAX_ITEM_NAME_LEN, "Input %u", i);
2806
}
2807
2808
kctl = snd_ctl_new1(&mixer_selectunit_ctl, cval);
2809
if (! kctl) {
2810
usb_audio_err(state->chip, "cannot malloc kcontrol\n");
2811
err = -ENOMEM;
2812
goto error_name;
2813
}
2814
kctl->private_value = (unsigned long)namelist;
2815
kctl->private_free = usb_mixer_selector_elem_free;
2816
2817
/* check the static mapping table at first */
2818
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
2819
if (!len) {
2820
/* no mapping ? */
2821
switch (state->mixer->protocol) {
2822
case UAC_VERSION_1:
2823
case UAC_VERSION_2:
2824
default:
2825
/* if iSelector is given, use it */
2826
nameid = uac_selector_unit_iSelector(desc);
2827
if (nameid)
2828
len = snd_usb_copy_string_desc(state->chip,
2829
nameid, kctl->id.name,
2830
sizeof(kctl->id.name));
2831
break;
2832
case UAC_VERSION_3:
2833
/* TODO: Class-Specific strings not yet supported */
2834
break;
2835
}
2836
2837
/* ... or pick up the terminal name at next */
2838
if (!len)
2839
len = get_term_name(state->chip, &state->oterm,
2840
kctl->id.name, sizeof(kctl->id.name), 0);
2841
/* ... or use the fixed string "USB" as the last resort */
2842
if (!len)
2843
strscpy(kctl->id.name, "USB", sizeof(kctl->id.name));
2844
2845
/* and add the proper suffix */
2846
if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR ||
2847
desc->bDescriptorSubtype == UAC3_CLOCK_SELECTOR)
2848
append_ctl_name(kctl, " Clock Source");
2849
else if ((state->oterm.type & 0xff00) == 0x0100)
2850
append_ctl_name(kctl, " Capture Source");
2851
else
2852
append_ctl_name(kctl, " Playback Source");
2853
}
2854
2855
usb_audio_dbg(state->chip, "[%d] SU [%s] items = %d\n",
2856
cval->head.id, kctl->id.name, desc->bNrInPins);
2857
return snd_usb_mixer_add_control(&cval->head, kctl);
2858
2859
error_name:
2860
for (i = 0; i < desc->bNrInPins; i++)
2861
kfree(namelist[i]);
2862
kfree(namelist);
2863
error_cval:
2864
usb_mixer_elem_info_free(cval);
2865
return err;
2866
}
2867
2868
/*
2869
* parse an audio unit recursively
2870
*/
2871
2872
static int parse_audio_unit(struct mixer_build *state, int unitid)
2873
{
2874
unsigned char *p1;
2875
int protocol = state->mixer->protocol;
2876
2877
if (test_and_set_bit(unitid, state->unitbitmap))
2878
return 0; /* the unit already visited */
2879
2880
p1 = find_audio_control_unit(state, unitid);
2881
if (!p1) {
2882
usb_audio_err(state->chip, "unit %d not found!\n", unitid);
2883
return -EINVAL;
2884
}
2885
2886
if (!snd_usb_validate_audio_desc(p1, protocol)) {
2887
usb_audio_dbg(state->chip, "invalid unit %d\n", unitid);
2888
return 0; /* skip invalid unit */
2889
}
2890
2891
switch (PTYPE(protocol, p1[2])) {
2892
case PTYPE(UAC_VERSION_1, UAC_INPUT_TERMINAL):
2893
case PTYPE(UAC_VERSION_2, UAC_INPUT_TERMINAL):
2894
case PTYPE(UAC_VERSION_3, UAC_INPUT_TERMINAL):
2895
return parse_audio_input_terminal(state, unitid, p1);
2896
case PTYPE(UAC_VERSION_1, UAC_MIXER_UNIT):
2897
case PTYPE(UAC_VERSION_2, UAC_MIXER_UNIT):
2898
case PTYPE(UAC_VERSION_3, UAC3_MIXER_UNIT):
2899
return parse_audio_mixer_unit(state, unitid, p1);
2900
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SOURCE):
2901
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SOURCE):
2902
return parse_clock_source_unit(state, unitid, p1);
2903
case PTYPE(UAC_VERSION_1, UAC_SELECTOR_UNIT):
2904
case PTYPE(UAC_VERSION_2, UAC_SELECTOR_UNIT):
2905
case PTYPE(UAC_VERSION_3, UAC3_SELECTOR_UNIT):
2906
case PTYPE(UAC_VERSION_2, UAC2_CLOCK_SELECTOR):
2907
case PTYPE(UAC_VERSION_3, UAC3_CLOCK_SELECTOR):
2908
return parse_audio_selector_unit(state, unitid, p1);
2909
case PTYPE(UAC_VERSION_1, UAC_FEATURE_UNIT):
2910
case PTYPE(UAC_VERSION_2, UAC_FEATURE_UNIT):
2911
case PTYPE(UAC_VERSION_3, UAC3_FEATURE_UNIT):
2912
return parse_audio_feature_unit(state, unitid, p1);
2913
case PTYPE(UAC_VERSION_1, UAC1_PROCESSING_UNIT):
2914
case PTYPE(UAC_VERSION_2, UAC2_PROCESSING_UNIT_V2):
2915
case PTYPE(UAC_VERSION_3, UAC3_PROCESSING_UNIT):
2916
return parse_audio_processing_unit(state, unitid, p1);
2917
case PTYPE(UAC_VERSION_1, UAC1_EXTENSION_UNIT):
2918
case PTYPE(UAC_VERSION_2, UAC2_EXTENSION_UNIT_V2):
2919
case PTYPE(UAC_VERSION_3, UAC3_EXTENSION_UNIT):
2920
return parse_audio_extension_unit(state, unitid, p1);
2921
case PTYPE(UAC_VERSION_2, UAC2_EFFECT_UNIT):
2922
case PTYPE(UAC_VERSION_3, UAC3_EFFECT_UNIT):
2923
return 0; /* FIXME - effect units not implemented yet */
2924
default:
2925
usb_audio_err(state->chip,
2926
"unit %u: unexpected type 0x%02x\n",
2927
unitid, p1[2]);
2928
return -EINVAL;
2929
}
2930
}
2931
2932
static void snd_usb_mixer_free(struct usb_mixer_interface *mixer)
2933
{
2934
/* kill pending URBs */
2935
snd_usb_mixer_disconnect(mixer);
2936
2937
kfree(mixer->id_elems);
2938
if (mixer->urb) {
2939
kfree(mixer->urb->transfer_buffer);
2940
usb_free_urb(mixer->urb);
2941
}
2942
usb_free_urb(mixer->rc_urb);
2943
kfree(mixer->rc_setup_packet);
2944
kfree(mixer);
2945
}
2946
2947
static int snd_usb_mixer_dev_free(struct snd_device *device)
2948
{
2949
struct usb_mixer_interface *mixer = device->device_data;
2950
snd_usb_mixer_free(mixer);
2951
return 0;
2952
}
2953
2954
/* UAC3 predefined channels configuration */
2955
struct uac3_badd_profile {
2956
int subclass;
2957
const char *name;
2958
int c_chmask; /* capture channels mask */
2959
int p_chmask; /* playback channels mask */
2960
int st_chmask; /* side tone mixing channel mask */
2961
};
2962
2963
static const struct uac3_badd_profile uac3_badd_profiles[] = {
2964
{
2965
/*
2966
* BAIF, BAOF or combination of both
2967
* IN: Mono or Stereo cfg, Mono alt possible
2968
* OUT: Mono or Stereo cfg, Mono alt possible
2969
*/
2970
.subclass = UAC3_FUNCTION_SUBCLASS_GENERIC_IO,
2971
.name = "GENERIC IO",
2972
.c_chmask = -1, /* dynamic channels */
2973
.p_chmask = -1, /* dynamic channels */
2974
},
2975
{
2976
/* BAOF; Stereo only cfg, Mono alt possible */
2977
.subclass = UAC3_FUNCTION_SUBCLASS_HEADPHONE,
2978
.name = "HEADPHONE",
2979
.p_chmask = 3,
2980
},
2981
{
2982
/* BAOF; Mono or Stereo cfg, Mono alt possible */
2983
.subclass = UAC3_FUNCTION_SUBCLASS_SPEAKER,
2984
.name = "SPEAKER",
2985
.p_chmask = -1, /* dynamic channels */
2986
},
2987
{
2988
/* BAIF; Mono or Stereo cfg, Mono alt possible */
2989
.subclass = UAC3_FUNCTION_SUBCLASS_MICROPHONE,
2990
.name = "MICROPHONE",
2991
.c_chmask = -1, /* dynamic channels */
2992
},
2993
{
2994
/*
2995
* BAIOF topology
2996
* IN: Mono only
2997
* OUT: Mono or Stereo cfg, Mono alt possible
2998
*/
2999
.subclass = UAC3_FUNCTION_SUBCLASS_HEADSET,
3000
.name = "HEADSET",
3001
.c_chmask = 1,
3002
.p_chmask = -1, /* dynamic channels */
3003
.st_chmask = 1,
3004
},
3005
{
3006
/* BAIOF; IN: Mono only; OUT: Stereo only, Mono alt possible */
3007
.subclass = UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER,
3008
.name = "HEADSET ADAPTER",
3009
.c_chmask = 1,
3010
.p_chmask = 3,
3011
.st_chmask = 1,
3012
},
3013
{
3014
/* BAIF + BAOF; IN: Mono only; OUT: Mono only */
3015
.subclass = UAC3_FUNCTION_SUBCLASS_SPEAKERPHONE,
3016
.name = "SPEAKERPHONE",
3017
.c_chmask = 1,
3018
.p_chmask = 1,
3019
},
3020
{ 0 } /* terminator */
3021
};
3022
3023
static bool uac3_badd_func_has_valid_channels(struct usb_mixer_interface *mixer,
3024
const struct uac3_badd_profile *f,
3025
int c_chmask, int p_chmask)
3026
{
3027
/*
3028
* If both playback/capture channels are dynamic, make sure
3029
* at least one channel is present
3030
*/
3031
if (f->c_chmask < 0 && f->p_chmask < 0) {
3032
if (!c_chmask && !p_chmask) {
3033
usb_audio_warn(mixer->chip, "BAAD %s: no channels?",
3034
f->name);
3035
return false;
3036
}
3037
return true;
3038
}
3039
3040
if ((f->c_chmask < 0 && !c_chmask) ||
3041
(f->c_chmask >= 0 && f->c_chmask != c_chmask)) {
3042
usb_audio_warn(mixer->chip, "BAAD %s c_chmask mismatch",
3043
f->name);
3044
return false;
3045
}
3046
if ((f->p_chmask < 0 && !p_chmask) ||
3047
(f->p_chmask >= 0 && f->p_chmask != p_chmask)) {
3048
usb_audio_warn(mixer->chip, "BAAD %s p_chmask mismatch",
3049
f->name);
3050
return false;
3051
}
3052
return true;
3053
}
3054
3055
/*
3056
* create mixer controls for UAC3 BADD profiles
3057
*
3058
* UAC3 BADD device doesn't contain CS descriptors thus we will guess everything
3059
*
3060
* BADD device may contain Mixer Unit, which doesn't have any controls, skip it
3061
*/
3062
static int snd_usb_mixer_controls_badd(struct usb_mixer_interface *mixer,
3063
int ctrlif)
3064
{
3065
struct usb_device *dev = mixer->chip->dev;
3066
struct usb_interface_assoc_descriptor *assoc;
3067
int badd_profile = mixer->chip->badd_profile;
3068
const struct uac3_badd_profile *f;
3069
const struct usbmix_ctl_map *map;
3070
int p_chmask = 0, c_chmask = 0, st_chmask = 0;
3071
int i;
3072
3073
assoc = usb_ifnum_to_if(dev, ctrlif)->intf_assoc;
3074
3075
/* Detect BADD capture/playback channels from AS EP descriptors */
3076
for (i = 0; i < assoc->bInterfaceCount; i++) {
3077
int intf = assoc->bFirstInterface + i;
3078
3079
struct usb_interface *iface;
3080
struct usb_host_interface *alts;
3081
struct usb_interface_descriptor *altsd;
3082
unsigned int maxpacksize;
3083
char dir_in;
3084
int chmask, num;
3085
3086
if (intf == ctrlif)
3087
continue;
3088
3089
iface = usb_ifnum_to_if(dev, intf);
3090
if (!iface)
3091
continue;
3092
3093
num = iface->num_altsetting;
3094
3095
if (num < 2)
3096
return -EINVAL;
3097
3098
/*
3099
* The number of Channels in an AudioStreaming interface
3100
* and the audio sample bit resolution (16 bits or 24
3101
* bits) can be derived from the wMaxPacketSize field in
3102
* the Standard AS Audio Data Endpoint descriptor in
3103
* Alternate Setting 1
3104
*/
3105
alts = &iface->altsetting[1];
3106
altsd = get_iface_desc(alts);
3107
3108
if (altsd->bNumEndpoints < 1)
3109
return -EINVAL;
3110
3111
/* check direction */
3112
dir_in = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN);
3113
maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
3114
3115
switch (maxpacksize) {
3116
default:
3117
usb_audio_err(mixer->chip,
3118
"incorrect wMaxPacketSize 0x%x for BADD profile\n",
3119
maxpacksize);
3120
return -EINVAL;
3121
case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16:
3122
case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16:
3123
case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24:
3124
case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24:
3125
chmask = 1;
3126
break;
3127
case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16:
3128
case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16:
3129
case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24:
3130
case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24:
3131
chmask = 3;
3132
break;
3133
}
3134
3135
if (dir_in)
3136
c_chmask = chmask;
3137
else
3138
p_chmask = chmask;
3139
}
3140
3141
usb_audio_dbg(mixer->chip,
3142
"UAC3 BADD profile 0x%x: detected c_chmask=%d p_chmask=%d\n",
3143
badd_profile, c_chmask, p_chmask);
3144
3145
/* check the mapping table */
3146
for (map = uac3_badd_usbmix_ctl_maps; map->id; map++) {
3147
if (map->id == badd_profile)
3148
break;
3149
}
3150
3151
if (!map->id)
3152
return -EINVAL;
3153
3154
for (f = uac3_badd_profiles; f->name; f++) {
3155
if (badd_profile == f->subclass)
3156
break;
3157
}
3158
if (!f->name)
3159
return -EINVAL;
3160
if (!uac3_badd_func_has_valid_channels(mixer, f, c_chmask, p_chmask))
3161
return -EINVAL;
3162
st_chmask = f->st_chmask;
3163
3164
/* Playback */
3165
if (p_chmask) {
3166
/* Master channel, always writable */
3167
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3168
UAC3_BADD_FU_ID2, map->map);
3169
/* Mono/Stereo volume channels, always writable */
3170
build_feature_ctl_badd(mixer, p_chmask, UAC_FU_VOLUME,
3171
UAC3_BADD_FU_ID2, map->map);
3172
}
3173
3174
/* Capture */
3175
if (c_chmask) {
3176
/* Master channel, always writable */
3177
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3178
UAC3_BADD_FU_ID5, map->map);
3179
/* Mono/Stereo volume channels, always writable */
3180
build_feature_ctl_badd(mixer, c_chmask, UAC_FU_VOLUME,
3181
UAC3_BADD_FU_ID5, map->map);
3182
}
3183
3184
/* Side tone-mixing */
3185
if (st_chmask) {
3186
/* Master channel, always writable */
3187
build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE,
3188
UAC3_BADD_FU_ID7, map->map);
3189
/* Mono volume channel, always writable */
3190
build_feature_ctl_badd(mixer, 1, UAC_FU_VOLUME,
3191
UAC3_BADD_FU_ID7, map->map);
3192
}
3193
3194
/* Insertion Control */
3195
if (f->subclass == UAC3_FUNCTION_SUBCLASS_HEADSET_ADAPTER) {
3196
struct usb_audio_term iterm, oterm;
3197
3198
/* Input Term - Insertion control */
3199
memset(&iterm, 0, sizeof(iterm));
3200
iterm.id = UAC3_BADD_IT_ID4;
3201
iterm.type = UAC_BIDIR_TERMINAL_HEADSET;
3202
build_connector_control(mixer, map->map, &iterm, true);
3203
3204
/* Output Term - Insertion control */
3205
memset(&oterm, 0, sizeof(oterm));
3206
oterm.id = UAC3_BADD_OT_ID3;
3207
oterm.type = UAC_BIDIR_TERMINAL_HEADSET;
3208
build_connector_control(mixer, map->map, &oterm, false);
3209
}
3210
3211
return 0;
3212
}
3213
3214
/*
3215
* create mixer controls
3216
*
3217
* walk through all UAC_OUTPUT_TERMINAL descriptors to search for mixers
3218
*/
3219
static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer)
3220
{
3221
struct mixer_build state;
3222
int err;
3223
const struct usbmix_ctl_map *map;
3224
void *p;
3225
3226
memset(&state, 0, sizeof(state));
3227
state.chip = mixer->chip;
3228
state.mixer = mixer;
3229
state.buffer = mixer->hostif->extra;
3230
state.buflen = mixer->hostif->extralen;
3231
3232
/* check the mapping table */
3233
for (map = usbmix_ctl_maps; map->id; map++) {
3234
if (map->id == state.chip->usb_id) {
3235
state.map = map->map;
3236
state.selector_map = map->selector_map;
3237
mixer->connector_map = map->connector_map;
3238
break;
3239
}
3240
}
3241
3242
p = NULL;
3243
while ((p = snd_usb_find_csint_desc(mixer->hostif->extra,
3244
mixer->hostif->extralen,
3245
p, UAC_OUTPUT_TERMINAL)) != NULL) {
3246
if (!snd_usb_validate_audio_desc(p, mixer->protocol))
3247
continue; /* skip invalid descriptor */
3248
3249
if (mixer->protocol == UAC_VERSION_1) {
3250
struct uac1_output_terminal_descriptor *desc = p;
3251
3252
/* mark terminal ID as visited */
3253
set_bit(desc->bTerminalID, state.unitbitmap);
3254
state.oterm.id = desc->bTerminalID;
3255
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3256
state.oterm.name = desc->iTerminal;
3257
err = parse_audio_unit(&state, desc->bSourceID);
3258
if (err < 0 && err != -EINVAL)
3259
return err;
3260
} else if (mixer->protocol == UAC_VERSION_2) {
3261
struct uac2_output_terminal_descriptor *desc = p;
3262
3263
/* mark terminal ID as visited */
3264
set_bit(desc->bTerminalID, state.unitbitmap);
3265
state.oterm.id = desc->bTerminalID;
3266
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3267
state.oterm.name = desc->iTerminal;
3268
err = parse_audio_unit(&state, desc->bSourceID);
3269
if (err < 0 && err != -EINVAL)
3270
return err;
3271
3272
/*
3273
* For UAC2, use the same approach to also add the
3274
* clock selectors
3275
*/
3276
err = parse_audio_unit(&state, desc->bCSourceID);
3277
if (err < 0 && err != -EINVAL)
3278
return err;
3279
3280
if ((state.oterm.type & 0xff00) != 0x0100 &&
3281
uac_v2v3_control_is_readable(le16_to_cpu(desc->bmControls),
3282
UAC2_TE_CONNECTOR)) {
3283
build_connector_control(state.mixer, state.map,
3284
&state.oterm, false);
3285
}
3286
} else { /* UAC_VERSION_3 */
3287
struct uac3_output_terminal_descriptor *desc = p;
3288
3289
/* mark terminal ID as visited */
3290
set_bit(desc->bTerminalID, state.unitbitmap);
3291
state.oterm.id = desc->bTerminalID;
3292
state.oterm.type = le16_to_cpu(desc->wTerminalType);
3293
state.oterm.name = le16_to_cpu(desc->wTerminalDescrStr);
3294
err = parse_audio_unit(&state, desc->bSourceID);
3295
if (err < 0 && err != -EINVAL)
3296
return err;
3297
3298
/*
3299
* For UAC3, use the same approach to also add the
3300
* clock selectors
3301
*/
3302
err = parse_audio_unit(&state, desc->bCSourceID);
3303
if (err < 0 && err != -EINVAL)
3304
return err;
3305
3306
if ((state.oterm.type & 0xff00) != 0x0100 &&
3307
uac_v2v3_control_is_readable(le32_to_cpu(desc->bmControls),
3308
UAC3_TE_INSERTION)) {
3309
build_connector_control(state.mixer, state.map,
3310
&state.oterm, false);
3311
}
3312
}
3313
}
3314
3315
return 0;
3316
}
3317
3318
static int delegate_notify(struct usb_mixer_interface *mixer, int unitid,
3319
u8 *control, u8 *channel)
3320
{
3321
const struct usbmix_connector_map *map = mixer->connector_map;
3322
3323
if (!map)
3324
return unitid;
3325
3326
for (; map->id; map++) {
3327
if (map->id == unitid) {
3328
if (control && map->control)
3329
*control = map->control;
3330
if (channel && map->channel)
3331
*channel = map->channel;
3332
return map->delegated_id;
3333
}
3334
}
3335
return unitid;
3336
}
3337
3338
void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
3339
{
3340
struct usb_mixer_elem_list *list;
3341
3342
unitid = delegate_notify(mixer, unitid, NULL, NULL);
3343
3344
for_each_mixer_elem(list, mixer, unitid) {
3345
struct usb_mixer_elem_info *info;
3346
3347
if (!list->is_std_info)
3348
continue;
3349
info = mixer_elem_list_to_info(list);
3350
/* invalidate cache, so the value is read from the device */
3351
info->cached = 0;
3352
snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3353
&list->kctl->id);
3354
}
3355
}
3356
3357
static void snd_usb_mixer_dump_cval(struct snd_info_buffer *buffer,
3358
struct usb_mixer_elem_list *list)
3359
{
3360
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
3361
static const char * const val_types[] = {
3362
[USB_MIXER_BOOLEAN] = "BOOLEAN",
3363
[USB_MIXER_INV_BOOLEAN] = "INV_BOOLEAN",
3364
[USB_MIXER_S8] = "S8",
3365
[USB_MIXER_U8] = "U8",
3366
[USB_MIXER_S16] = "S16",
3367
[USB_MIXER_U16] = "U16",
3368
[USB_MIXER_S32] = "S32",
3369
[USB_MIXER_U32] = "U32",
3370
[USB_MIXER_BESPOKEN] = "BESPOKEN",
3371
};
3372
snd_iprintf(buffer, " Info: id=%i, control=%i, cmask=0x%x, "
3373
"channels=%i, type=\"%s\"\n", cval->head.id,
3374
cval->control, cval->cmask, cval->channels,
3375
val_types[cval->val_type]);
3376
snd_iprintf(buffer, " Volume: min=%i, max=%i, dBmin=%i, dBmax=%i\n",
3377
cval->min, cval->max, cval->dBmin, cval->dBmax);
3378
}
3379
3380
static void snd_usb_mixer_proc_read(struct snd_info_entry *entry,
3381
struct snd_info_buffer *buffer)
3382
{
3383
struct snd_usb_audio *chip = entry->private_data;
3384
struct usb_mixer_interface *mixer;
3385
struct usb_mixer_elem_list *list;
3386
int unitid;
3387
3388
list_for_each_entry(mixer, &chip->mixer_list, list) {
3389
snd_iprintf(buffer,
3390
"USB Mixer: usb_id=0x%08x, ctrlif=%i, ctlerr=%i\n",
3391
chip->usb_id, mixer_ctrl_intf(mixer),
3392
mixer->ignore_ctl_error);
3393
snd_iprintf(buffer, "Card: %s\n", chip->card->longname);
3394
for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) {
3395
for_each_mixer_elem(list, mixer, unitid) {
3396
snd_iprintf(buffer, " Unit: %i\n", list->id);
3397
if (list->kctl)
3398
snd_iprintf(buffer,
3399
" Control: name=\"%s\", index=%i\n",
3400
list->kctl->id.name,
3401
list->kctl->id.index);
3402
if (list->dump)
3403
list->dump(buffer, list);
3404
}
3405
}
3406
}
3407
}
3408
3409
static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
3410
int attribute, int value, int index)
3411
{
3412
struct usb_mixer_elem_list *list;
3413
__u8 unitid = (index >> 8) & 0xff;
3414
__u8 control = (value >> 8) & 0xff;
3415
__u8 channel = value & 0xff;
3416
unsigned int count = 0;
3417
3418
if (channel >= MAX_CHANNELS) {
3419
usb_audio_dbg(mixer->chip,
3420
"%s(): bogus channel number %d\n",
3421
__func__, channel);
3422
return;
3423
}
3424
3425
unitid = delegate_notify(mixer, unitid, &control, &channel);
3426
3427
for_each_mixer_elem(list, mixer, unitid)
3428
count++;
3429
3430
if (count == 0)
3431
return;
3432
3433
for_each_mixer_elem(list, mixer, unitid) {
3434
struct usb_mixer_elem_info *info;
3435
3436
if (!list->kctl)
3437
continue;
3438
if (!list->is_std_info)
3439
continue;
3440
3441
info = mixer_elem_list_to_info(list);
3442
if (count > 1 && info->control != control)
3443
continue;
3444
3445
switch (attribute) {
3446
case UAC2_CS_CUR:
3447
/* invalidate cache, so the value is read from the device */
3448
if (channel)
3449
info->cached &= ~BIT(channel);
3450
else /* master channel */
3451
info->cached = 0;
3452
3453
snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3454
&info->head.kctl->id);
3455
break;
3456
3457
case UAC2_CS_RANGE:
3458
/* TODO */
3459
break;
3460
3461
case UAC2_CS_MEM:
3462
/* TODO */
3463
break;
3464
3465
default:
3466
usb_audio_dbg(mixer->chip,
3467
"unknown attribute %d in interrupt\n",
3468
attribute);
3469
break;
3470
} /* switch */
3471
}
3472
}
3473
3474
static void snd_usb_mixer_interrupt(struct urb *urb)
3475
{
3476
struct usb_mixer_interface *mixer = urb->context;
3477
int len = urb->actual_length;
3478
int ustatus = urb->status;
3479
3480
if (ustatus != 0)
3481
goto requeue;
3482
3483
if (mixer->protocol == UAC_VERSION_1) {
3484
struct uac1_status_word *status;
3485
3486
for (status = urb->transfer_buffer;
3487
len >= sizeof(*status);
3488
len -= sizeof(*status), status++) {
3489
dev_dbg(&urb->dev->dev, "status interrupt: %02x %02x\n",
3490
status->bStatusType,
3491
status->bOriginator);
3492
3493
/* ignore any notifications not from the control interface */
3494
if ((status->bStatusType & UAC1_STATUS_TYPE_ORIG_MASK) !=
3495
UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF)
3496
continue;
3497
3498
if (status->bStatusType & UAC1_STATUS_TYPE_MEM_CHANGED)
3499
snd_usb_mixer_rc_memory_change(mixer, status->bOriginator);
3500
else
3501
snd_usb_mixer_notify_id(mixer, status->bOriginator);
3502
}
3503
} else { /* UAC_VERSION_2 */
3504
struct uac2_interrupt_data_msg *msg;
3505
3506
for (msg = urb->transfer_buffer;
3507
len >= sizeof(*msg);
3508
len -= sizeof(*msg), msg++) {
3509
/* drop vendor specific and endpoint requests */
3510
if ((msg->bInfo & UAC2_INTERRUPT_DATA_MSG_VENDOR) ||
3511
(msg->bInfo & UAC2_INTERRUPT_DATA_MSG_EP))
3512
continue;
3513
3514
snd_usb_mixer_interrupt_v2(mixer, msg->bAttribute,
3515
le16_to_cpu(msg->wValue),
3516
le16_to_cpu(msg->wIndex));
3517
}
3518
}
3519
3520
requeue:
3521
if (ustatus != -ENOENT &&
3522
ustatus != -ECONNRESET &&
3523
ustatus != -ESHUTDOWN) {
3524
urb->dev = mixer->chip->dev;
3525
usb_submit_urb(urb, GFP_ATOMIC);
3526
}
3527
}
3528
3529
/* create the handler for the optional status interrupt endpoint */
3530
static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer)
3531
{
3532
struct usb_endpoint_descriptor *ep;
3533
void *transfer_buffer;
3534
int buffer_length;
3535
unsigned int epnum;
3536
3537
/* we need one interrupt input endpoint */
3538
if (get_iface_desc(mixer->hostif)->bNumEndpoints < 1)
3539
return 0;
3540
ep = get_endpoint(mixer->hostif, 0);
3541
if (!usb_endpoint_dir_in(ep) || !usb_endpoint_xfer_int(ep))
3542
return 0;
3543
3544
epnum = usb_endpoint_num(ep);
3545
buffer_length = le16_to_cpu(ep->wMaxPacketSize);
3546
transfer_buffer = kmalloc(buffer_length, GFP_KERNEL);
3547
if (!transfer_buffer)
3548
return -ENOMEM;
3549
mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
3550
if (!mixer->urb) {
3551
kfree(transfer_buffer);
3552
return -ENOMEM;
3553
}
3554
usb_fill_int_urb(mixer->urb, mixer->chip->dev,
3555
usb_rcvintpipe(mixer->chip->dev, epnum),
3556
transfer_buffer, buffer_length,
3557
snd_usb_mixer_interrupt, mixer, ep->bInterval);
3558
usb_submit_urb(mixer->urb, GFP_KERNEL);
3559
return 0;
3560
}
3561
3562
int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif)
3563
{
3564
static const struct snd_device_ops dev_ops = {
3565
.dev_free = snd_usb_mixer_dev_free
3566
};
3567
struct usb_mixer_interface *mixer;
3568
int err;
3569
3570
strscpy(chip->card->mixername, "USB Mixer");
3571
3572
mixer = kzalloc(sizeof(*mixer), GFP_KERNEL);
3573
if (!mixer)
3574
return -ENOMEM;
3575
mixer->chip = chip;
3576
mixer->ignore_ctl_error = !!(chip->quirk_flags & QUIRK_FLAG_IGNORE_CTL_ERROR);
3577
mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems),
3578
GFP_KERNEL);
3579
if (!mixer->id_elems) {
3580
kfree(mixer);
3581
return -ENOMEM;
3582
}
3583
3584
mixer->hostif = &usb_ifnum_to_if(chip->dev, ctrlif)->altsetting[0];
3585
switch (get_iface_desc(mixer->hostif)->bInterfaceProtocol) {
3586
case UAC_VERSION_1:
3587
default:
3588
mixer->protocol = UAC_VERSION_1;
3589
break;
3590
case UAC_VERSION_2:
3591
mixer->protocol = UAC_VERSION_2;
3592
break;
3593
case UAC_VERSION_3:
3594
mixer->protocol = UAC_VERSION_3;
3595
break;
3596
}
3597
3598
if (mixer->protocol == UAC_VERSION_3 &&
3599
chip->badd_profile >= UAC3_FUNCTION_SUBCLASS_GENERIC_IO) {
3600
err = snd_usb_mixer_controls_badd(mixer, ctrlif);
3601
if (err < 0)
3602
goto _error;
3603
} else {
3604
err = snd_usb_mixer_controls(mixer);
3605
if (err < 0)
3606
goto _error;
3607
}
3608
3609
err = snd_usb_mixer_status_create(mixer);
3610
if (err < 0)
3611
goto _error;
3612
3613
err = snd_usb_mixer_apply_create_quirk(mixer);
3614
if (err < 0)
3615
goto _error;
3616
3617
err = snd_device_new(chip->card, SNDRV_DEV_CODEC, mixer, &dev_ops);
3618
if (err < 0)
3619
goto _error;
3620
3621
if (list_empty(&chip->mixer_list))
3622
snd_card_ro_proc_new(chip->card, "usbmixer", chip,
3623
snd_usb_mixer_proc_read);
3624
3625
list_add(&mixer->list, &chip->mixer_list);
3626
return 0;
3627
3628
_error:
3629
snd_usb_mixer_free(mixer);
3630
return err;
3631
}
3632
3633
void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer)
3634
{
3635
if (mixer->disconnected)
3636
return;
3637
if (mixer->urb)
3638
usb_kill_urb(mixer->urb);
3639
if (mixer->rc_urb)
3640
usb_kill_urb(mixer->rc_urb);
3641
if (mixer->private_free)
3642
mixer->private_free(mixer);
3643
mixer->disconnected = true;
3644
}
3645
3646
/* stop any bus activity of a mixer */
3647
static void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer)
3648
{
3649
usb_kill_urb(mixer->urb);
3650
usb_kill_urb(mixer->rc_urb);
3651
}
3652
3653
static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer)
3654
{
3655
int err;
3656
3657
if (mixer->urb) {
3658
err = usb_submit_urb(mixer->urb, GFP_NOIO);
3659
if (err < 0)
3660
return err;
3661
}
3662
3663
return 0;
3664
}
3665
3666
int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer)
3667
{
3668
snd_usb_mixer_inactivate(mixer);
3669
if (mixer->private_suspend)
3670
mixer->private_suspend(mixer);
3671
return 0;
3672
}
3673
3674
static int restore_mixer_value(struct usb_mixer_elem_list *list)
3675
{
3676
struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list);
3677
int c, err, idx;
3678
3679
if (cval->val_type == USB_MIXER_BESPOKEN)
3680
return 0;
3681
3682
if (cval->cmask) {
3683
idx = 0;
3684
for (c = 0; c < MAX_CHANNELS; c++) {
3685
if (!(cval->cmask & BIT(c)))
3686
continue;
3687
if (cval->cached & BIT(c + 1)) {
3688
err = snd_usb_set_cur_mix_value(cval, c + 1, idx,
3689
cval->cache_val[idx]);
3690
if (err < 0)
3691
break;
3692
}
3693
idx++;
3694
}
3695
} else {
3696
/* master */
3697
if (cval->cached)
3698
snd_usb_set_cur_mix_value(cval, 0, 0, *cval->cache_val);
3699
}
3700
3701
return 0;
3702
}
3703
3704
int snd_usb_mixer_resume(struct usb_mixer_interface *mixer)
3705
{
3706
struct usb_mixer_elem_list *list;
3707
int id, err;
3708
3709
/* restore cached mixer values */
3710
for (id = 0; id < MAX_ID_ELEMS; id++) {
3711
for_each_mixer_elem(list, mixer, id) {
3712
if (list->resume) {
3713
err = list->resume(list);
3714
if (err < 0)
3715
return err;
3716
}
3717
}
3718
}
3719
3720
snd_usb_mixer_resume_quirk(mixer);
3721
3722
return snd_usb_mixer_activate(mixer);
3723
}
3724
3725
void snd_usb_mixer_elem_init_std(struct usb_mixer_elem_list *list,
3726
struct usb_mixer_interface *mixer,
3727
int unitid)
3728
{
3729
list->mixer = mixer;
3730
list->id = unitid;
3731
list->dump = snd_usb_mixer_dump_cval;
3732
list->resume = restore_mixer_value;
3733
}
3734
3735