1 /* 2 * This program is free software; you can redistribute it and/or modify 3 * it under the terms of the GNU General Public License as published by 4 * the Free Software Foundation; either version 2 of the License, or 5 * (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 15 */ 16 17 18 #include <linux/init.h> 19 #include <linux/slab.h> 20 #include <linux/usb.h> 21 #include <linux/usb/audio.h> 22 #include <linux/usb/audio-v2.h> 23 24 #include <sound/core.h> 25 #include <sound/pcm.h> 26 #include <sound/control.h> 27 #include <sound/tlv.h> 28 29 #include "usbaudio.h" 30 #include "card.h" 31 #include "proc.h" 32 #include "quirks.h" 33 #include "endpoint.h" 34 #include "pcm.h" 35 #include "helper.h" 36 #include "format.h" 37 #include "clock.h" 38 #include "stream.h" 39 40 /* 41 * free a substream 42 */ 43 static void free_substream(struct snd_usb_substream *subs) 44 { 45 struct audioformat *fp, *n; 46 47 if (!subs->num_formats) 48 return; /* not initialized */ 49 list_for_each_entry_safe(fp, n, &subs->fmt_list, list) { 50 kfree(fp->rate_table); 51 kfree(fp->chmap); 52 kfree(fp); 53 } 54 kfree(subs->rate_list.list); 55 } 56 57 58 /* 59 * free a usb stream instance 60 */ 61 static void snd_usb_audio_stream_free(struct snd_usb_stream *stream) 62 { 63 free_substream(&stream->substream[0]); 64 free_substream(&stream->substream[1]); 65 list_del(&stream->list); 66 kfree(stream); 67 } 68 69 static void snd_usb_audio_pcm_free(struct snd_pcm *pcm) 70 { 71 struct snd_usb_stream *stream = pcm->private_data; 72 if (stream) { 73 stream->pcm = NULL; 74 snd_usb_audio_stream_free(stream); 75 } 76 } 77 78 /* 79 * initialize the substream instance. 80 */ 81 82 static void snd_usb_init_substream(struct snd_usb_stream *as, 83 int stream, 84 struct audioformat *fp) 85 { 86 struct snd_usb_substream *subs = &as->substream[stream]; 87 88 INIT_LIST_HEAD(&subs->fmt_list); 89 spin_lock_init(&subs->lock); 90 91 subs->stream = as; 92 subs->direction = stream; 93 subs->dev = as->chip->dev; 94 subs->txfr_quirk = as->chip->txfr_quirk; 95 subs->tx_length_quirk = as->chip->tx_length_quirk; 96 subs->speed = snd_usb_get_speed(subs->dev); 97 subs->pkt_offset_adj = 0; 98 99 snd_usb_set_pcm_ops(as->pcm, stream); 100 101 list_add_tail(&fp->list, &subs->fmt_list); 102 subs->formats |= fp->formats; 103 subs->num_formats++; 104 subs->fmt_type = fp->fmt_type; 105 subs->ep_num = fp->endpoint; 106 if (fp->channels > subs->channels_max) 107 subs->channels_max = fp->channels; 108 } 109 110 /* kctl callbacks for usb-audio channel maps */ 111 static int usb_chmap_ctl_info(struct snd_kcontrol *kcontrol, 112 struct snd_ctl_elem_info *uinfo) 113 { 114 struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol); 115 struct snd_usb_substream *subs = info->private_data; 116 117 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 118 uinfo->count = subs->channels_max; 119 uinfo->value.integer.min = 0; 120 uinfo->value.integer.max = SNDRV_CHMAP_LAST; 121 return 0; 122 } 123 124 /* check whether a duplicated entry exists in the audiofmt list */ 125 static bool have_dup_chmap(struct snd_usb_substream *subs, 126 struct audioformat *fp) 127 { 128 struct audioformat *prev = fp; 129 130 list_for_each_entry_continue_reverse(prev, &subs->fmt_list, list) { 131 if (prev->chmap && 132 !memcmp(prev->chmap, fp->chmap, sizeof(*fp->chmap))) 133 return true; 134 } 135 return false; 136 } 137 138 static int usb_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, int op_flag, 139 unsigned int size, unsigned int __user *tlv) 140 { 141 struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol); 142 struct snd_usb_substream *subs = info->private_data; 143 struct audioformat *fp; 144 unsigned int __user *dst; 145 int count = 0; 146 147 if (size < 8) 148 return -ENOMEM; 149 if (put_user(SNDRV_CTL_TLVT_CONTAINER, tlv)) 150 return -EFAULT; 151 size -= 8; 152 dst = tlv + 2; 153 list_for_each_entry(fp, &subs->fmt_list, list) { 154 int i, ch_bytes; 155 156 if (!fp->chmap) 157 continue; 158 if (have_dup_chmap(subs, fp)) 159 continue; 160 /* copy the entry */ 161 ch_bytes = fp->chmap->channels * 4; 162 if (size < 8 + ch_bytes) 163 return -ENOMEM; 164 if (put_user(SNDRV_CTL_TLVT_CHMAP_FIXED, dst) || 165 put_user(ch_bytes, dst + 1)) 166 return -EFAULT; 167 dst += 2; 168 for (i = 0; i < fp->chmap->channels; i++, dst++) { 169 if (put_user(fp->chmap->map[i], dst)) 170 return -EFAULT; 171 } 172 173 count += 8 + ch_bytes; 174 size -= 8 + ch_bytes; 175 } 176 if (put_user(count, tlv + 1)) 177 return -EFAULT; 178 return 0; 179 } 180 181 static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol, 182 struct snd_ctl_elem_value *ucontrol) 183 { 184 struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol); 185 struct snd_usb_substream *subs = info->private_data; 186 struct snd_pcm_chmap_elem *chmap = NULL; 187 int i; 188 189 memset(ucontrol->value.integer.value, 0, 190 sizeof(ucontrol->value.integer.value)); 191 if (subs->cur_audiofmt) 192 chmap = subs->cur_audiofmt->chmap; 193 if (chmap) { 194 for (i = 0; i < chmap->channels; i++) 195 ucontrol->value.integer.value[i] = chmap->map[i]; 196 } 197 return 0; 198 } 199 200 /* create a chmap kctl assigned to the given USB substream */ 201 static int add_chmap(struct snd_pcm *pcm, int stream, 202 struct snd_usb_substream *subs) 203 { 204 struct audioformat *fp; 205 struct snd_pcm_chmap *chmap; 206 struct snd_kcontrol *kctl; 207 int err; 208 209 list_for_each_entry(fp, &subs->fmt_list, list) 210 if (fp->chmap) 211 goto ok; 212 /* no chmap is found */ 213 return 0; 214 215 ok: 216 err = snd_pcm_add_chmap_ctls(pcm, stream, NULL, 0, 0, &chmap); 217 if (err < 0) 218 return err; 219 220 /* override handlers */ 221 chmap->private_data = subs; 222 kctl = chmap->kctl; 223 kctl->info = usb_chmap_ctl_info; 224 kctl->get = usb_chmap_ctl_get; 225 kctl->tlv.c = usb_chmap_ctl_tlv; 226 227 return 0; 228 } 229 230 /* convert from USB ChannelConfig bits to ALSA chmap element */ 231 static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits, 232 int protocol) 233 { 234 static unsigned int uac1_maps[] = { 235 SNDRV_CHMAP_FL, /* left front */ 236 SNDRV_CHMAP_FR, /* right front */ 237 SNDRV_CHMAP_FC, /* center front */ 238 SNDRV_CHMAP_LFE, /* LFE */ 239 SNDRV_CHMAP_SL, /* left surround */ 240 SNDRV_CHMAP_SR, /* right surround */ 241 SNDRV_CHMAP_FLC, /* left of center */ 242 SNDRV_CHMAP_FRC, /* right of center */ 243 SNDRV_CHMAP_RC, /* surround */ 244 SNDRV_CHMAP_SL, /* side left */ 245 SNDRV_CHMAP_SR, /* side right */ 246 SNDRV_CHMAP_TC, /* top */ 247 0 /* terminator */ 248 }; 249 static unsigned int uac2_maps[] = { 250 SNDRV_CHMAP_FL, /* front left */ 251 SNDRV_CHMAP_FR, /* front right */ 252 SNDRV_CHMAP_FC, /* front center */ 253 SNDRV_CHMAP_LFE, /* LFE */ 254 SNDRV_CHMAP_RL, /* back left */ 255 SNDRV_CHMAP_RR, /* back right */ 256 SNDRV_CHMAP_FLC, /* front left of center */ 257 SNDRV_CHMAP_FRC, /* front right of center */ 258 SNDRV_CHMAP_RC, /* back center */ 259 SNDRV_CHMAP_SL, /* side left */ 260 SNDRV_CHMAP_SR, /* side right */ 261 SNDRV_CHMAP_TC, /* top center */ 262 SNDRV_CHMAP_TFL, /* top front left */ 263 SNDRV_CHMAP_TFC, /* top front center */ 264 SNDRV_CHMAP_TFR, /* top front right */ 265 SNDRV_CHMAP_TRL, /* top back left */ 266 SNDRV_CHMAP_TRC, /* top back center */ 267 SNDRV_CHMAP_TRR, /* top back right */ 268 SNDRV_CHMAP_TFLC, /* top front left of center */ 269 SNDRV_CHMAP_TFRC, /* top front right of center */ 270 SNDRV_CHMAP_LLFE, /* left LFE */ 271 SNDRV_CHMAP_RLFE, /* right LFE */ 272 SNDRV_CHMAP_TSL, /* top side left */ 273 SNDRV_CHMAP_TSR, /* top side right */ 274 SNDRV_CHMAP_BC, /* bottom center */ 275 SNDRV_CHMAP_RLC, /* back left of center */ 276 SNDRV_CHMAP_RRC, /* back right of center */ 277 0 /* terminator */ 278 }; 279 struct snd_pcm_chmap_elem *chmap; 280 const unsigned int *maps; 281 int c; 282 283 if (channels > ARRAY_SIZE(chmap->map)) 284 return NULL; 285 286 chmap = kzalloc(sizeof(*chmap), GFP_KERNEL); 287 if (!chmap) 288 return NULL; 289 290 maps = protocol == UAC_VERSION_2 ? uac2_maps : uac1_maps; 291 chmap->channels = channels; 292 c = 0; 293 294 if (bits) { 295 for (; bits && *maps; maps++, bits >>= 1) 296 if (bits & 1) 297 chmap->map[c++] = *maps; 298 } else { 299 /* If we're missing wChannelConfig, then guess something 300 to make sure the channel map is not skipped entirely */ 301 if (channels == 1) 302 chmap->map[c++] = SNDRV_CHMAP_MONO; 303 else 304 for (; c < channels && *maps; maps++) 305 chmap->map[c++] = *maps; 306 } 307 308 for (; c < channels; c++) 309 chmap->map[c] = SNDRV_CHMAP_UNKNOWN; 310 311 return chmap; 312 } 313 314 /* 315 * add this endpoint to the chip instance. 316 * if a stream with the same endpoint already exists, append to it. 317 * if not, create a new pcm stream. 318 */ 319 int snd_usb_add_audio_stream(struct snd_usb_audio *chip, 320 int stream, 321 struct audioformat *fp) 322 { 323 struct snd_usb_stream *as; 324 struct snd_usb_substream *subs; 325 struct snd_pcm *pcm; 326 int err; 327 328 list_for_each_entry(as, &chip->pcm_list, list) { 329 if (as->fmt_type != fp->fmt_type) 330 continue; 331 subs = &as->substream[stream]; 332 if (subs->ep_num == fp->endpoint) { 333 list_add_tail(&fp->list, &subs->fmt_list); 334 subs->num_formats++; 335 subs->formats |= fp->formats; 336 return 0; 337 } 338 } 339 /* look for an empty stream */ 340 list_for_each_entry(as, &chip->pcm_list, list) { 341 if (as->fmt_type != fp->fmt_type) 342 continue; 343 subs = &as->substream[stream]; 344 if (subs->ep_num) 345 continue; 346 err = snd_pcm_new_stream(as->pcm, stream, 1); 347 if (err < 0) 348 return err; 349 snd_usb_init_substream(as, stream, fp); 350 return add_chmap(as->pcm, stream, subs); 351 } 352 353 /* create a new pcm */ 354 as = kzalloc(sizeof(*as), GFP_KERNEL); 355 if (!as) 356 return -ENOMEM; 357 as->pcm_index = chip->pcm_devs; 358 as->chip = chip; 359 as->fmt_type = fp->fmt_type; 360 err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs, 361 stream == SNDRV_PCM_STREAM_PLAYBACK ? 1 : 0, 362 stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1, 363 &pcm); 364 if (err < 0) { 365 kfree(as); 366 return err; 367 } 368 as->pcm = pcm; 369 pcm->private_data = as; 370 pcm->private_free = snd_usb_audio_pcm_free; 371 pcm->info_flags = 0; 372 if (chip->pcm_devs > 0) 373 sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs); 374 else 375 strcpy(pcm->name, "USB Audio"); 376 377 snd_usb_init_substream(as, stream, fp); 378 379 /* 380 * Keep using head insertion for M-Audio Audiophile USB (tm) which has a 381 * fix to swap capture stream order in conf/cards/USB-audio.conf 382 */ 383 if (chip->usb_id == USB_ID(0x0763, 0x2003)) 384 list_add(&as->list, &chip->pcm_list); 385 else 386 list_add_tail(&as->list, &chip->pcm_list); 387 388 chip->pcm_devs++; 389 390 snd_usb_proc_pcm_format_add(as); 391 392 return add_chmap(pcm, stream, &as->substream[stream]); 393 } 394 395 static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip, 396 struct usb_host_interface *alts, 397 int protocol, int iface_no) 398 { 399 /* parsed with a v1 header here. that's ok as we only look at the 400 * header first which is the same for both versions */ 401 struct uac_iso_endpoint_descriptor *csep; 402 struct usb_interface_descriptor *altsd = get_iface_desc(alts); 403 int attributes = 0; 404 405 csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT); 406 407 /* Creamware Noah has this descriptor after the 2nd endpoint */ 408 if (!csep && altsd->bNumEndpoints >= 2) 409 csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT); 410 411 /* 412 * If we can't locate the USB_DT_CS_ENDPOINT descriptor in the extra 413 * bytes after the first endpoint, go search the entire interface. 414 * Some devices have it directly *before* the standard endpoint. 415 */ 416 if (!csep) 417 csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT); 418 419 if (!csep || csep->bLength < 7 || 420 csep->bDescriptorSubtype != UAC_EP_GENERAL) { 421 usb_audio_warn(chip, 422 "%u:%d : no or invalid class specific endpoint descriptor\n", 423 iface_no, altsd->bAlternateSetting); 424 return 0; 425 } 426 427 if (protocol == UAC_VERSION_1) { 428 attributes = csep->bmAttributes; 429 } else { 430 struct uac2_iso_endpoint_descriptor *csep2 = 431 (struct uac2_iso_endpoint_descriptor *) csep; 432 433 attributes = csep->bmAttributes & UAC_EP_CS_ATTR_FILL_MAX; 434 435 /* emulate the endpoint attributes of a v1 device */ 436 if (csep2->bmControls & UAC2_CONTROL_PITCH) 437 attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL; 438 } 439 440 return attributes; 441 } 442 443 /* find an input terminal descriptor (either UAC1 or UAC2) with the given 444 * terminal id 445 */ 446 static void * 447 snd_usb_find_input_terminal_descriptor(struct usb_host_interface *ctrl_iface, 448 int terminal_id) 449 { 450 struct uac2_input_terminal_descriptor *term = NULL; 451 452 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, 453 ctrl_iface->extralen, 454 term, UAC_INPUT_TERMINAL))) { 455 if (term->bTerminalID == terminal_id) 456 return term; 457 } 458 459 return NULL; 460 } 461 462 static struct uac2_output_terminal_descriptor * 463 snd_usb_find_output_terminal_descriptor(struct usb_host_interface *ctrl_iface, 464 int terminal_id) 465 { 466 struct uac2_output_terminal_descriptor *term = NULL; 467 468 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, 469 ctrl_iface->extralen, 470 term, UAC_OUTPUT_TERMINAL))) { 471 if (term->bTerminalID == terminal_id) 472 return term; 473 } 474 475 return NULL; 476 } 477 478 int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no) 479 { 480 struct usb_device *dev; 481 struct usb_interface *iface; 482 struct usb_host_interface *alts; 483 struct usb_interface_descriptor *altsd; 484 int i, altno, err, stream; 485 unsigned int format = 0, num_channels = 0; 486 struct audioformat *fp = NULL; 487 int num, protocol, clock = 0; 488 struct uac_format_type_i_continuous_descriptor *fmt; 489 unsigned int chconfig; 490 491 dev = chip->dev; 492 493 /* parse the interface's altsettings */ 494 iface = usb_ifnum_to_if(dev, iface_no); 495 496 num = iface->num_altsetting; 497 498 /* 499 * Dallas DS4201 workaround: It presents 5 altsettings, but the last 500 * one misses syncpipe, and does not produce any sound. 501 */ 502 if (chip->usb_id == USB_ID(0x04fa, 0x4201)) 503 num = 4; 504 505 for (i = 0; i < num; i++) { 506 alts = &iface->altsetting[i]; 507 altsd = get_iface_desc(alts); 508 protocol = altsd->bInterfaceProtocol; 509 /* skip invalid one */ 510 if (((altsd->bInterfaceClass != USB_CLASS_AUDIO || 511 (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING && 512 altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC)) && 513 altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) || 514 altsd->bNumEndpoints < 1 || 515 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0) 516 continue; 517 /* must be isochronous */ 518 if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != 519 USB_ENDPOINT_XFER_ISOC) 520 continue; 521 /* check direction */ 522 stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ? 523 SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK; 524 altno = altsd->bAlternateSetting; 525 526 if (snd_usb_apply_interface_quirk(chip, iface_no, altno)) 527 continue; 528 529 /* 530 * Roland audio streaming interfaces are marked with protocols 531 * 0/1/2, but are UAC 1 compatible. 532 */ 533 if (USB_ID_VENDOR(chip->usb_id) == 0x0582 && 534 altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && 535 protocol <= 2) 536 protocol = UAC_VERSION_1; 537 538 chconfig = 0; 539 /* get audio formats */ 540 switch (protocol) { 541 default: 542 dev_dbg(&dev->dev, "%u:%d: unknown interface protocol %#02x, assuming v1\n", 543 iface_no, altno, protocol); 544 protocol = UAC_VERSION_1; 545 /* fall through */ 546 547 case UAC_VERSION_1: { 548 struct uac1_as_header_descriptor *as = 549 snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, UAC_AS_GENERAL); 550 struct uac_input_terminal_descriptor *iterm; 551 552 if (!as) { 553 dev_err(&dev->dev, 554 "%u:%d : UAC_AS_GENERAL descriptor not found\n", 555 iface_no, altno); 556 continue; 557 } 558 559 if (as->bLength < sizeof(*as)) { 560 dev_err(&dev->dev, 561 "%u:%d : invalid UAC_AS_GENERAL desc\n", 562 iface_no, altno); 563 continue; 564 } 565 566 format = le16_to_cpu(as->wFormatTag); /* remember the format value */ 567 568 iterm = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf, 569 as->bTerminalLink); 570 if (iterm) { 571 num_channels = iterm->bNrChannels; 572 chconfig = le16_to_cpu(iterm->wChannelConfig); 573 } 574 575 break; 576 } 577 578 case UAC_VERSION_2: { 579 struct uac2_input_terminal_descriptor *input_term; 580 struct uac2_output_terminal_descriptor *output_term; 581 struct uac2_as_header_descriptor *as = 582 snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, UAC_AS_GENERAL); 583 584 if (!as) { 585 dev_err(&dev->dev, 586 "%u:%d : UAC_AS_GENERAL descriptor not found\n", 587 iface_no, altno); 588 continue; 589 } 590 591 if (as->bLength < sizeof(*as)) { 592 dev_err(&dev->dev, 593 "%u:%d : invalid UAC_AS_GENERAL desc\n", 594 iface_no, altno); 595 continue; 596 } 597 598 num_channels = as->bNrChannels; 599 format = le32_to_cpu(as->bmFormats); 600 chconfig = le32_to_cpu(as->bmChannelConfig); 601 602 /* lookup the terminal associated to this interface 603 * to extract the clock */ 604 input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf, 605 as->bTerminalLink); 606 if (input_term) { 607 clock = input_term->bCSourceID; 608 if (!chconfig && (num_channels == input_term->bNrChannels)) 609 chconfig = le32_to_cpu(input_term->bmChannelConfig); 610 break; 611 } 612 613 output_term = snd_usb_find_output_terminal_descriptor(chip->ctrl_intf, 614 as->bTerminalLink); 615 if (output_term) { 616 clock = output_term->bCSourceID; 617 break; 618 } 619 620 dev_err(&dev->dev, 621 "%u:%d : bogus bTerminalLink %d\n", 622 iface_no, altno, as->bTerminalLink); 623 continue; 624 } 625 } 626 627 /* get format type */ 628 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, UAC_FORMAT_TYPE); 629 if (!fmt) { 630 dev_err(&dev->dev, 631 "%u:%d : no UAC_FORMAT_TYPE desc\n", 632 iface_no, altno); 633 continue; 634 } 635 if (((protocol == UAC_VERSION_1) && (fmt->bLength < 8)) || 636 ((protocol == UAC_VERSION_2) && (fmt->bLength < 6))) { 637 dev_err(&dev->dev, 638 "%u:%d : invalid UAC_FORMAT_TYPE desc\n", 639 iface_no, altno); 640 continue; 641 } 642 643 /* 644 * Blue Microphones workaround: The last altsetting is identical 645 * with the previous one, except for a larger packet size, but 646 * is actually a mislabeled two-channel setting; ignore it. 647 */ 648 if (fmt->bNrChannels == 1 && 649 fmt->bSubframeSize == 2 && 650 altno == 2 && num == 3 && 651 fp && fp->altsetting == 1 && fp->channels == 1 && 652 fp->formats == SNDRV_PCM_FMTBIT_S16_LE && 653 protocol == UAC_VERSION_1 && 654 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 655 fp->maxpacksize * 2) 656 continue; 657 658 fp = kzalloc(sizeof(*fp), GFP_KERNEL); 659 if (! fp) { 660 dev_err(&dev->dev, "cannot malloc\n"); 661 return -ENOMEM; 662 } 663 664 fp->iface = iface_no; 665 fp->altsetting = altno; 666 fp->altset_idx = i; 667 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; 668 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; 669 fp->datainterval = snd_usb_parse_datainterval(chip, alts); 670 fp->protocol = protocol; 671 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); 672 fp->channels = num_channels; 673 if (snd_usb_get_speed(dev) == USB_SPEED_HIGH) 674 fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1) 675 * (fp->maxpacksize & 0x7ff); 676 fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no); 677 fp->clock = clock; 678 679 /* some quirks for attributes here */ 680 681 switch (chip->usb_id) { 682 case USB_ID(0x0a92, 0x0053): /* AudioTrak Optoplay */ 683 /* Optoplay sets the sample rate attribute although 684 * it seems not supporting it in fact. 685 */ 686 fp->attributes &= ~UAC_EP_CS_ATTR_SAMPLE_RATE; 687 break; 688 case USB_ID(0x041e, 0x3020): /* Creative SB Audigy 2 NX */ 689 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ 690 /* doesn't set the sample rate attribute, but supports it */ 691 fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE; 692 break; 693 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro USB */ 694 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ 695 case USB_ID(0x047f, 0x0ca1): /* plantronics headset */ 696 case USB_ID(0x077d, 0x07af): /* Griffin iMic (note that there is 697 an older model 77d:223) */ 698 /* 699 * plantronics headset and Griffin iMic have set adaptive-in 700 * although it's really not... 701 */ 702 fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE; 703 if (stream == SNDRV_PCM_STREAM_PLAYBACK) 704 fp->ep_attr |= USB_ENDPOINT_SYNC_ADAPTIVE; 705 else 706 fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC; 707 break; 708 } 709 710 /* ok, let's parse further... */ 711 if (snd_usb_parse_audio_format(chip, fp, format, fmt, stream) < 0) { 712 kfree(fp->rate_table); 713 kfree(fp); 714 fp = NULL; 715 continue; 716 } 717 718 /* Create chmap */ 719 if (fp->channels != num_channels) 720 chconfig = 0; 721 fp->chmap = convert_chmap(fp->channels, chconfig, protocol); 722 723 dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint); 724 err = snd_usb_add_audio_stream(chip, stream, fp); 725 if (err < 0) { 726 kfree(fp->rate_table); 727 kfree(fp->chmap); 728 kfree(fp); 729 return err; 730 } 731 /* try to set the interface... */ 732 usb_set_interface(chip->dev, iface_no, altno); 733 snd_usb_init_pitch(chip, iface_no, alts, fp); 734 snd_usb_init_sample_rate(chip, iface_no, alts, fp, fp->rate_max); 735 } 736 return 0; 737 } 738 739