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