Lines Matching +full:assigned +full:- +full:clock +full:- +full:rates +full:- +full:u64
1 // SPDX-License-Identifier: GPL-2.0-or-later
10 #include <linux/usb/audio-v2.h>
11 #include <linux/usb/audio-v3.h>
26 #include "clock.h"
33 list_del(&fp->list); /* unlink for avoiding double-free */ in audioformat_free()
34 kfree(fp->rate_table); in audioformat_free()
35 kfree(fp->chmap); in audioformat_free()
46 if (!subs->num_formats) in free_substream()
48 list_for_each_entry_safe(fp, n, &subs->fmt_list, list) in free_substream()
50 kfree(subs->str_pd); in free_substream()
60 free_substream(&stream->substream[0]); in snd_usb_audio_stream_free()
61 free_substream(&stream->substream[1]); in snd_usb_audio_stream_free()
62 list_del(&stream->list); in snd_usb_audio_stream_free()
68 struct snd_usb_stream *stream = pcm->private_data; in snd_usb_audio_pcm_free()
70 stream->pcm = NULL; in snd_usb_audio_pcm_free()
84 struct snd_usb_substream *subs = &as->substream[stream]; in snd_usb_init_substream()
86 INIT_LIST_HEAD(&subs->fmt_list); in snd_usb_init_substream()
87 spin_lock_init(&subs->lock); in snd_usb_init_substream()
89 subs->stream = as; in snd_usb_init_substream()
90 subs->direction = stream; in snd_usb_init_substream()
91 subs->dev = as->chip->dev; in snd_usb_init_substream()
92 subs->txfr_quirk = !!(as->chip->quirk_flags & QUIRK_FLAG_ALIGN_TRANSFER); in snd_usb_init_substream()
93 subs->tx_length_quirk = !!(as->chip->quirk_flags & QUIRK_FLAG_TX_LENGTH); in snd_usb_init_substream()
94 subs->speed = snd_usb_get_speed(subs->dev); in snd_usb_init_substream()
95 subs->pkt_offset_adj = 0; in snd_usb_init_substream()
96 subs->stream_offset_adj = 0; in snd_usb_init_substream()
98 snd_usb_set_pcm_ops(as->pcm, stream); in snd_usb_init_substream()
100 list_add_tail(&fp->list, &subs->fmt_list); in snd_usb_init_substream()
101 subs->formats |= fp->formats; in snd_usb_init_substream()
102 subs->num_formats++; in snd_usb_init_substream()
103 subs->fmt_type = fp->fmt_type; in snd_usb_init_substream()
104 subs->ep_num = fp->endpoint; in snd_usb_init_substream()
105 if (fp->channels > subs->channels_max) in snd_usb_init_substream()
106 subs->channels_max = fp->channels; in snd_usb_init_substream()
109 subs->str_pd = pd; in snd_usb_init_substream()
111 snd_usb_power_domain_set(subs->stream->chip, pd, in snd_usb_init_substream()
118 /* kctl callbacks for usb-audio channel maps */
123 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_info()
125 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in usb_chmap_ctl_info()
126 uinfo->count = subs->channels_max; in usb_chmap_ctl_info()
127 uinfo->value.integer.min = 0; in usb_chmap_ctl_info()
128 uinfo->value.integer.max = SNDRV_CHMAP_LAST; in usb_chmap_ctl_info()
138 list_for_each_entry_continue_reverse(prev, &subs->fmt_list, list) { in have_dup_chmap()
139 if (prev->chmap && in have_dup_chmap()
140 !memcmp(prev->chmap, fp->chmap, sizeof(*fp->chmap))) in have_dup_chmap()
150 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_tlv()
156 return -ENOMEM; in usb_chmap_ctl_tlv()
158 return -EFAULT; in usb_chmap_ctl_tlv()
159 size -= 8; in usb_chmap_ctl_tlv()
161 list_for_each_entry(fp, &subs->fmt_list, list) { in usb_chmap_ctl_tlv()
164 if (!fp->chmap) in usb_chmap_ctl_tlv()
169 ch_bytes = fp->chmap->channels * 4; in usb_chmap_ctl_tlv()
171 return -ENOMEM; in usb_chmap_ctl_tlv()
174 return -EFAULT; in usb_chmap_ctl_tlv()
176 for (i = 0; i < fp->chmap->channels; i++, dst++) { in usb_chmap_ctl_tlv()
177 if (put_user(fp->chmap->map[i], dst)) in usb_chmap_ctl_tlv()
178 return -EFAULT; in usb_chmap_ctl_tlv()
182 size -= 8 + ch_bytes; in usb_chmap_ctl_tlv()
185 return -EFAULT; in usb_chmap_ctl_tlv()
193 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_get()
197 if (subs->cur_audiofmt) in usb_chmap_ctl_get()
198 chmap = subs->cur_audiofmt->chmap; in usb_chmap_ctl_get()
200 for (i = 0; i < chmap->channels; i++) in usb_chmap_ctl_get()
201 ucontrol->value.integer.value[i] = chmap->map[i]; in usb_chmap_ctl_get()
203 for (; i < subs->channels_max; i++) in usb_chmap_ctl_get()
204 ucontrol->value.integer.value[i] = 0; in usb_chmap_ctl_get()
208 /* create a chmap kctl assigned to the given USB substream */
217 list_for_each_entry(fp, &subs->fmt_list, list) in add_chmap()
218 if (fp->chmap) in add_chmap()
229 chmap->private_data = subs; in add_chmap()
230 kctl = chmap->kctl; in add_chmap()
231 kctl->info = usb_chmap_ctl_info; in add_chmap()
232 kctl->get = usb_chmap_ctl_get; in add_chmap()
233 kctl->tlv.c = usb_chmap_ctl_tlv; in add_chmap()
291 if (channels > ARRAY_SIZE(chmap->map)) in convert_chmap()
299 chmap->channels = channels; in convert_chmap()
305 chmap->map[c++] = *maps; in convert_chmap()
306 if (c == chmap->channels) in convert_chmap()
313 chmap->map[c++] = SNDRV_CHMAP_MONO; in convert_chmap()
316 chmap->map[c++] = *maps; in convert_chmap()
320 chmap->map[c] = SNDRV_CHMAP_UNKNOWN; in convert_chmap()
330 unsigned int channels = cluster->bNrChannels; in convert_chmap_v3()
335 if (channels > ARRAY_SIZE(chmap->map)) in convert_chmap_v3()
342 len = le16_to_cpu(cluster->wLength); in convert_chmap_v3()
346 while (((p - (void *)cluster) < len) && (c < channels)) { in convert_chmap_v3()
351 cs_len = le16_to_cpu(cs_desc->wLength); in convert_chmap_v3()
352 cs_type = cs_desc->bSegmentType; in convert_chmap_v3()
362 switch (is->bChRelationship) { in convert_chmap_v3()
456 chmap->map[c++] = map; in convert_chmap_v3()
464 chmap->channels = channels; in convert_chmap_v3()
467 chmap->map[c] = SNDRV_CHMAP_UNKNOWN; in convert_chmap_v3()
477 * fp or do remove it from the substream fmt_list to avoid double-free.
490 list_for_each_entry(as, &chip->pcm_list, list) { in __snd_usb_add_audio_stream()
491 if (as->fmt_type != fp->fmt_type) in __snd_usb_add_audio_stream()
493 subs = &as->substream[stream]; in __snd_usb_add_audio_stream()
494 if (subs->ep_num == fp->endpoint) { in __snd_usb_add_audio_stream()
495 list_add_tail(&fp->list, &subs->fmt_list); in __snd_usb_add_audio_stream()
496 subs->num_formats++; in __snd_usb_add_audio_stream()
497 subs->formats |= fp->formats; in __snd_usb_add_audio_stream()
502 if (chip->card->registered) in __snd_usb_add_audio_stream()
503 chip->need_delayed_register = true; in __snd_usb_add_audio_stream()
506 list_for_each_entry(as, &chip->pcm_list, list) { in __snd_usb_add_audio_stream()
507 if (as->fmt_type != fp->fmt_type) in __snd_usb_add_audio_stream()
509 subs = &as->substream[stream]; in __snd_usb_add_audio_stream()
510 if (subs->ep_num) in __snd_usb_add_audio_stream()
512 err = snd_pcm_new_stream(as->pcm, stream, 1); in __snd_usb_add_audio_stream()
516 return add_chmap(as->pcm, stream, subs); in __snd_usb_add_audio_stream()
522 return -ENOMEM; in __snd_usb_add_audio_stream()
523 as->pcm_index = chip->pcm_devs; in __snd_usb_add_audio_stream()
524 as->chip = chip; in __snd_usb_add_audio_stream()
525 as->fmt_type = fp->fmt_type; in __snd_usb_add_audio_stream()
526 err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs, in __snd_usb_add_audio_stream()
534 as->pcm = pcm; in __snd_usb_add_audio_stream()
535 pcm->private_data = as; in __snd_usb_add_audio_stream()
536 pcm->private_free = snd_usb_audio_pcm_free; in __snd_usb_add_audio_stream()
537 pcm->info_flags = 0; in __snd_usb_add_audio_stream()
538 if (chip->pcm_devs > 0) in __snd_usb_add_audio_stream()
539 sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs); in __snd_usb_add_audio_stream()
541 strcpy(pcm->name, "USB Audio"); in __snd_usb_add_audio_stream()
546 * Keep using head insertion for M-Audio Audiophile USB (tm) which has a in __snd_usb_add_audio_stream()
547 * fix to swap capture stream order in conf/cards/USB-audio.conf in __snd_usb_add_audio_stream()
549 if (chip->usb_id == USB_ID(0x0763, 0x2003)) in __snd_usb_add_audio_stream()
550 list_add(&as->list, &chip->pcm_list); in __snd_usb_add_audio_stream()
552 list_add_tail(&as->list, &chip->pcm_list); in __snd_usb_add_audio_stream()
554 chip->pcm_devs++; in __snd_usb_add_audio_stream()
558 return add_chmap(pcm, stream, &as->substream[stream]); in __snd_usb_add_audio_stream()
586 …csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDP… in parse_uac_endpoint_attributes()
589 if (!csep && altsd->bNumEndpoints >= 2) in parse_uac_endpoint_attributes()
590 …csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDP… in parse_uac_endpoint_attributes()
598 csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT); in parse_uac_endpoint_attributes()
600 if (!csep || csep->bLength < 7 || in parse_uac_endpoint_attributes()
601 csep->bDescriptorSubtype != UAC_EP_GENERAL) in parse_uac_endpoint_attributes()
605 attributes = csep->bmAttributes; in parse_uac_endpoint_attributes()
610 if (csep2->bLength < sizeof(*csep2)) in parse_uac_endpoint_attributes()
612 attributes = csep->bmAttributes & UAC_EP_CS_ATTR_FILL_MAX; in parse_uac_endpoint_attributes()
615 if (csep2->bmControls & UAC2_CONTROL_PITCH) in parse_uac_endpoint_attributes()
621 if (csep3->bLength < sizeof(*csep3)) in parse_uac_endpoint_attributes()
624 if (le32_to_cpu(csep3->bmControls) & UAC2_CONTROL_PITCH) in parse_uac_endpoint_attributes()
633 iface_no, altsd->bAlternateSetting); in parse_uac_endpoint_attributes()
646 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, in snd_usb_find_input_terminal_descriptor()
647 ctrl_iface->extralen, in snd_usb_find_input_terminal_descriptor()
651 if (term->bTerminalID == terminal_id) in snd_usb_find_input_terminal_descriptor()
665 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, in snd_usb_find_output_terminal_descriptor()
666 ctrl_iface->extralen, in snd_usb_find_output_terminal_descriptor()
670 if (term->bTerminalID == terminal_id) in snd_usb_find_output_terminal_descriptor()
681 int altno, int num_channels, int clock) in audio_format_alloc_init() argument
689 fp->iface = iface_no; in audio_format_alloc_init()
690 fp->altsetting = altno; in audio_format_alloc_init()
691 fp->altset_idx = altset_idx; in audio_format_alloc_init()
692 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; in audio_format_alloc_init()
693 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; in audio_format_alloc_init()
694 fp->datainterval = snd_usb_parse_datainterval(chip, alts); in audio_format_alloc_init()
695 fp->protocol = protocol; in audio_format_alloc_init()
696 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); in audio_format_alloc_init()
697 fp->channels = num_channels; in audio_format_alloc_init()
698 if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH) in audio_format_alloc_init()
699 fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1) in audio_format_alloc_init()
700 * (fp->maxpacksize & 0x7ff); in audio_format_alloc_init()
701 fp->clock = clock; in audio_format_alloc_init()
702 INIT_LIST_HEAD(&fp->list); in audio_format_alloc_init()
713 struct usb_device *dev = chip->dev; in snd_usb_get_audioformat_uac12()
718 int clock = 0; in snd_usb_get_audioformat_uac12() local
719 u64 format; in snd_usb_get_audioformat_uac12()
726 snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
731 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
737 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac12()
738 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
744 format = le16_to_cpu(as->wFormatTag); /* remember the format value */ in snd_usb_get_audioformat_uac12()
747 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
750 num_channels = iterm->bNrChannels; in snd_usb_get_audioformat_uac12()
751 chconfig = le16_to_cpu(iterm->wChannelConfig); in snd_usb_get_audioformat_uac12()
757 snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
761 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
767 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac12()
768 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
774 num_channels = as->bNrChannels; in snd_usb_get_audioformat_uac12()
775 format = le32_to_cpu(as->bmFormats); in snd_usb_get_audioformat_uac12()
776 chconfig = le32_to_cpu(as->bmChannelConfig); in snd_usb_get_audioformat_uac12()
780 * to extract the clock in snd_usb_get_audioformat_uac12()
783 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
786 clock = input_term->bCSourceID; in snd_usb_get_audioformat_uac12()
787 if (!chconfig && (num_channels == input_term->bNrChannels)) in snd_usb_get_audioformat_uac12()
788 chconfig = le32_to_cpu(input_term->bmChannelConfig); in snd_usb_get_audioformat_uac12()
793 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
796 clock = output_term->bCSourceID; in snd_usb_get_audioformat_uac12()
800 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
802 iface_no, altno, as->bTerminalLink); in snd_usb_get_audioformat_uac12()
808 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
811 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
816 if (((protocol == UAC_VERSION_1) && (fmt->bLength < 8)) in snd_usb_get_audioformat_uac12()
818 (fmt->bLength < 6))) { in snd_usb_get_audioformat_uac12()
819 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
828 * packet size, but is actually a mislabeled two-channel in snd_usb_get_audioformat_uac12()
833 if (bm_quirk && fmt->bNrChannels == 1 && fmt->bSubframeSize == 2) in snd_usb_get_audioformat_uac12()
837 altset_idx, altno, num_channels, clock); in snd_usb_get_audioformat_uac12()
839 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac12()
841 fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, in snd_usb_get_audioformat_uac12()
855 if (fp->channels != num_channels) in snd_usb_get_audioformat_uac12()
858 fp->chmap = convert_chmap(fp->channels, chconfig, protocol); in snd_usb_get_audioformat_uac12()
870 struct usb_device *dev = chip->dev; in snd_usb_get_audioformat_uac3()
880 u64 badd_formats = 0; in snd_usb_get_audioformat_uac3()
884 int clock = 0; in snd_usb_get_audioformat_uac3() local
887 badd_profile = chip->badd_profile; in snd_usb_get_audioformat_uac3()
892 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); in snd_usb_get_audioformat_uac3()
896 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
924 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
927 chmap->map[0] = SNDRV_CHMAP_MONO; in snd_usb_get_audioformat_uac3()
929 chmap->map[0] = SNDRV_CHMAP_FL; in snd_usb_get_audioformat_uac3()
930 chmap->map[1] = SNDRV_CHMAP_FR; in snd_usb_get_audioformat_uac3()
933 chmap->channels = num_channels; in snd_usb_get_audioformat_uac3()
934 clock = UAC3_BADD_CS_ID9; in snd_usb_get_audioformat_uac3()
938 as = snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac3()
941 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
947 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac3()
948 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
954 cluster_id = le16_to_cpu(as->wClusterDescrID); in snd_usb_get_audioformat_uac3()
956 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
969 err = snd_usb_ctl_msg(chip->dev, in snd_usb_get_audioformat_uac3()
970 usb_rcvctrlpipe(chip->dev, 0), in snd_usb_get_audioformat_uac3()
979 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
982 return ERR_PTR(-EIO); in snd_usb_get_audioformat_uac3()
992 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
993 err = snd_usb_ctl_msg(chip->dev, in snd_usb_get_audioformat_uac3()
994 usb_rcvctrlpipe(chip->dev, 0), in snd_usb_get_audioformat_uac3()
1004 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
1008 return ERR_PTR(-EIO); in snd_usb_get_audioformat_uac3()
1011 num_channels = cluster->bNrChannels; in snd_usb_get_audioformat_uac3()
1017 * to extract the clock in snd_usb_get_audioformat_uac3()
1020 as->bTerminalLink, in snd_usb_get_audioformat_uac3()
1023 clock = input_term->bCSourceID; in snd_usb_get_audioformat_uac3()
1028 as->bTerminalLink, in snd_usb_get_audioformat_uac3()
1031 clock = output_term->bCSourceID; in snd_usb_get_audioformat_uac3()
1035 dev_err(&dev->dev, "%u:%d : bogus bTerminalLink %d\n", in snd_usb_get_audioformat_uac3()
1036 iface_no, altno, as->bTerminalLink); in snd_usb_get_audioformat_uac3()
1042 altset_idx, altno, num_channels, clock); in snd_usb_get_audioformat_uac3()
1045 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
1048 fp->chmap = chmap; in snd_usb_get_audioformat_uac3()
1051 fp->attributes = 0; /* No attributes */ in snd_usb_get_audioformat_uac3()
1053 fp->fmt_type = UAC_FORMAT_TYPE_I; in snd_usb_get_audioformat_uac3()
1054 fp->formats = badd_formats; in snd_usb_get_audioformat_uac3()
1056 fp->nr_rates = 0; /* SNDRV_PCM_RATE_CONTINUOUS */ in snd_usb_get_audioformat_uac3()
1057 fp->rate_min = UAC3_BADD_SAMPLING_RATE; in snd_usb_get_audioformat_uac3()
1058 fp->rate_max = UAC3_BADD_SAMPLING_RATE; in snd_usb_get_audioformat_uac3()
1059 fp->rates = SNDRV_PCM_RATE_CONTINUOUS; in snd_usb_get_audioformat_uac3()
1066 pd->pd_id = (stream == SNDRV_PCM_STREAM_PLAYBACK) ? in snd_usb_get_audioformat_uac3()
1068 pd->pd_d1d0_rec = UAC3_BADD_PD_RECOVER_D1D0; in snd_usb_get_audioformat_uac3()
1069 pd->pd_d2d0_rec = UAC3_BADD_PD_RECOVER_D2D0; in snd_usb_get_audioformat_uac3()
1070 pd->ctrl_iface = ctrl_intf; in snd_usb_get_audioformat_uac3()
1073 fp->attributes = parse_uac_endpoint_attributes(chip, alts, in snd_usb_get_audioformat_uac3()
1078 as->bTerminalLink); in snd_usb_get_audioformat_uac3()
1108 dev = chip->dev; in __snd_usb_parse_audio_interface()
1113 num = iface->num_altsetting; in __snd_usb_parse_audio_interface()
1119 if (chip->usb_id == USB_ID(0x04fa, 0x4201) && num >= 4) in __snd_usb_parse_audio_interface()
1123 alts = &iface->altsetting[i]; in __snd_usb_parse_audio_interface()
1125 protocol = altsd->bInterfaceProtocol; in __snd_usb_parse_audio_interface()
1127 if (((altsd->bInterfaceClass != USB_CLASS_AUDIO || in __snd_usb_parse_audio_interface()
1128 (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING && in __snd_usb_parse_audio_interface()
1129 altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC)) && in __snd_usb_parse_audio_interface()
1130 altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) || in __snd_usb_parse_audio_interface()
1131 altsd->bNumEndpoints < 1 || in __snd_usb_parse_audio_interface()
1132 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0) in __snd_usb_parse_audio_interface()
1135 if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != in __snd_usb_parse_audio_interface()
1139 stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ? in __snd_usb_parse_audio_interface()
1141 altno = altsd->bAlternateSetting; in __snd_usb_parse_audio_interface()
1150 if (USB_ID_VENDOR(chip->usb_id) == 0x0582 && in __snd_usb_parse_audio_interface()
1151 altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && in __snd_usb_parse_audio_interface()
1157 dev_dbg(&dev->dev, "%u:%d: unknown interface protocol %#02x, assuming v1\n", in __snd_usb_parse_audio_interface()
1168 * packet size, but is actually a mislabeled two-channel in __snd_usb_parse_audio_interface()
1174 fp && fp->altsetting == 1 && fp->channels == 1 && in __snd_usb_parse_audio_interface()
1175 fp->formats == SNDRV_PCM_FMTBIT_S16_LE && in __snd_usb_parse_audio_interface()
1177 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == in __snd_usb_parse_audio_interface()
1178 fp->maxpacksize * 2) in __snd_usb_parse_audio_interface()
1197 if (fp->fmt_type != UAC_FORMAT_TYPE_I) in __snd_usb_parse_audio_interface()
1199 if ((fp->fmt_type == UAC_FORMAT_TYPE_I) == non_pcm) { in __snd_usb_parse_audio_interface()
1209 dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint); in __snd_usb_parse_audio_interface()
1222 err = snd_usb_add_endpoint(chip, fp->endpoint, in __snd_usb_parse_audio_interface()
1227 if (fp->sync_ep) { in __snd_usb_parse_audio_interface()
1228 err = snd_usb_add_endpoint(chip, fp->sync_ep, in __snd_usb_parse_audio_interface()
1229 fp->implicit_fb ? in __snd_usb_parse_audio_interface()
1238 (chip->quirk_flags & QUIRK_FLAG_SET_IFACE_FIRST)) in __snd_usb_parse_audio_interface()
1242 usb_set_interface(chip->dev, iface_no, 0); in __snd_usb_parse_audio_interface()
1244 usb_set_interface(chip->dev, iface_no, altno); in __snd_usb_parse_audio_interface()
1246 snd_usb_init_sample_rate(chip, fp, fp->rate_max); in __snd_usb_parse_audio_interface()
1248 usb_set_interface(chip->dev, iface_no, altno); in __snd_usb_parse_audio_interface()
1264 /* parse non-PCM formats */ in snd_usb_parse_audio_interface()