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