Lines Matching +full:conf +full:- +full:pd
1 // SPDX-License-Identifier: GPL-2.0-or-later
10 #include <linux/usb/audio-v2.h>
11 #include <linux/usb/audio-v3.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->rate_list.list); in free_substream()
51 kfree(subs->str_pd); in free_substream()
61 free_substream(&stream->substream[0]); in snd_usb_audio_stream_free()
62 free_substream(&stream->substream[1]); in snd_usb_audio_stream_free()
63 list_del(&stream->list); in snd_usb_audio_stream_free()
69 struct snd_usb_stream *stream = pcm->private_data; in snd_usb_audio_pcm_free()
71 stream->pcm = NULL; in snd_usb_audio_pcm_free()
83 struct snd_usb_power_domain *pd) in snd_usb_init_substream() argument
85 struct snd_usb_substream *subs = &as->substream[stream]; in snd_usb_init_substream()
87 INIT_LIST_HEAD(&subs->fmt_list); in snd_usb_init_substream()
88 spin_lock_init(&subs->lock); in snd_usb_init_substream()
90 subs->stream = as; in snd_usb_init_substream()
91 subs->direction = stream; in snd_usb_init_substream()
92 subs->dev = as->chip->dev; in snd_usb_init_substream()
93 subs->txfr_quirk = as->chip->txfr_quirk; in snd_usb_init_substream()
94 subs->tx_length_quirk = as->chip->tx_length_quirk; in snd_usb_init_substream()
95 subs->speed = snd_usb_get_speed(subs->dev); in snd_usb_init_substream()
96 subs->pkt_offset_adj = 0; in snd_usb_init_substream()
97 subs->stream_offset_adj = 0; in snd_usb_init_substream()
99 snd_usb_set_pcm_ops(as->pcm, stream); in snd_usb_init_substream()
101 list_add_tail(&fp->list, &subs->fmt_list); in snd_usb_init_substream()
102 subs->formats |= fp->formats; in snd_usb_init_substream()
103 subs->num_formats++; in snd_usb_init_substream()
104 subs->fmt_type = fp->fmt_type; in snd_usb_init_substream()
105 subs->ep_num = fp->endpoint; in snd_usb_init_substream()
106 if (fp->channels > subs->channels_max) in snd_usb_init_substream()
107 subs->channels_max = fp->channels; in snd_usb_init_substream()
109 if (pd) { in snd_usb_init_substream()
110 subs->str_pd = pd; in snd_usb_init_substream()
112 snd_usb_power_domain_set(subs->stream->chip, pd, in snd_usb_init_substream()
119 /* kctl callbacks for usb-audio channel maps */
124 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_info()
126 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; in usb_chmap_ctl_info()
127 uinfo->count = subs->channels_max; in usb_chmap_ctl_info()
128 uinfo->value.integer.min = 0; in usb_chmap_ctl_info()
129 uinfo->value.integer.max = SNDRV_CHMAP_LAST; in usb_chmap_ctl_info()
139 list_for_each_entry_continue_reverse(prev, &subs->fmt_list, list) { in have_dup_chmap()
140 if (prev->chmap && in have_dup_chmap()
141 !memcmp(prev->chmap, fp->chmap, sizeof(*fp->chmap))) in have_dup_chmap()
151 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_tlv()
157 return -ENOMEM; in usb_chmap_ctl_tlv()
159 return -EFAULT; in usb_chmap_ctl_tlv()
160 size -= 8; in usb_chmap_ctl_tlv()
162 list_for_each_entry(fp, &subs->fmt_list, list) { in usb_chmap_ctl_tlv()
165 if (!fp->chmap) in usb_chmap_ctl_tlv()
170 ch_bytes = fp->chmap->channels * 4; in usb_chmap_ctl_tlv()
172 return -ENOMEM; in usb_chmap_ctl_tlv()
175 return -EFAULT; in usb_chmap_ctl_tlv()
177 for (i = 0; i < fp->chmap->channels; i++, dst++) { in usb_chmap_ctl_tlv()
178 if (put_user(fp->chmap->map[i], dst)) in usb_chmap_ctl_tlv()
179 return -EFAULT; in usb_chmap_ctl_tlv()
183 size -= 8 + ch_bytes; in usb_chmap_ctl_tlv()
186 return -EFAULT; in usb_chmap_ctl_tlv()
194 struct snd_usb_substream *subs = info->private_data; in usb_chmap_ctl_get()
198 if (subs->cur_audiofmt) in usb_chmap_ctl_get()
199 chmap = subs->cur_audiofmt->chmap; in usb_chmap_ctl_get()
201 for (i = 0; i < chmap->channels; i++) in usb_chmap_ctl_get()
202 ucontrol->value.integer.value[i] = chmap->map[i]; in usb_chmap_ctl_get()
204 for (; i < subs->channels_max; i++) in usb_chmap_ctl_get()
205 ucontrol->value.integer.value[i] = 0; in usb_chmap_ctl_get()
218 list_for_each_entry(fp, &subs->fmt_list, list) in add_chmap()
219 if (fp->chmap) in add_chmap()
230 chmap->private_data = subs; in add_chmap()
231 kctl = chmap->kctl; in add_chmap()
232 kctl->info = usb_chmap_ctl_info; in add_chmap()
233 kctl->get = usb_chmap_ctl_get; in add_chmap()
234 kctl->tlv.c = usb_chmap_ctl_tlv; in add_chmap()
292 if (channels > ARRAY_SIZE(chmap->map)) in convert_chmap()
300 chmap->channels = channels; in convert_chmap()
306 chmap->map[c++] = *maps; in convert_chmap()
311 chmap->map[c++] = SNDRV_CHMAP_MONO; in convert_chmap()
314 chmap->map[c++] = *maps; in convert_chmap()
318 chmap->map[c] = SNDRV_CHMAP_UNKNOWN; in convert_chmap()
328 unsigned int channels = cluster->bNrChannels; in convert_chmap_v3()
333 if (channels > ARRAY_SIZE(chmap->map)) in convert_chmap_v3()
340 len = le16_to_cpu(cluster->wLength); in convert_chmap_v3()
344 while (((p - (void *)cluster) < len) && (c < channels)) { in convert_chmap_v3()
349 cs_len = le16_to_cpu(cs_desc->wLength); in convert_chmap_v3()
350 cs_type = cs_desc->bSegmentType; in convert_chmap_v3()
360 switch (is->bChRelationship) { in convert_chmap_v3()
454 chmap->map[c++] = map; in convert_chmap_v3()
462 chmap->channels = channels; in convert_chmap_v3()
465 chmap->map[c] = SNDRV_CHMAP_UNKNOWN; in convert_chmap_v3()
475 * fp or do remove it from the substream fmt_list to avoid double-free.
480 struct snd_usb_power_domain *pd) in __snd_usb_add_audio_stream() argument
488 list_for_each_entry(as, &chip->pcm_list, list) { in __snd_usb_add_audio_stream()
489 if (as->fmt_type != fp->fmt_type) in __snd_usb_add_audio_stream()
491 subs = &as->substream[stream]; in __snd_usb_add_audio_stream()
492 if (subs->ep_num == fp->endpoint) { in __snd_usb_add_audio_stream()
493 list_add_tail(&fp->list, &subs->fmt_list); in __snd_usb_add_audio_stream()
494 subs->num_formats++; in __snd_usb_add_audio_stream()
495 subs->formats |= fp->formats; in __snd_usb_add_audio_stream()
500 if (chip->card->registered) in __snd_usb_add_audio_stream()
501 chip->need_delayed_register = true; in __snd_usb_add_audio_stream()
504 list_for_each_entry(as, &chip->pcm_list, list) { in __snd_usb_add_audio_stream()
505 if (as->fmt_type != fp->fmt_type) in __snd_usb_add_audio_stream()
507 subs = &as->substream[stream]; in __snd_usb_add_audio_stream()
508 if (subs->ep_num) in __snd_usb_add_audio_stream()
510 err = snd_pcm_new_stream(as->pcm, stream, 1); in __snd_usb_add_audio_stream()
513 snd_usb_init_substream(as, stream, fp, pd); in __snd_usb_add_audio_stream()
514 return add_chmap(as->pcm, stream, subs); in __snd_usb_add_audio_stream()
520 return -ENOMEM; in __snd_usb_add_audio_stream()
521 as->pcm_index = chip->pcm_devs; in __snd_usb_add_audio_stream()
522 as->chip = chip; in __snd_usb_add_audio_stream()
523 as->fmt_type = fp->fmt_type; in __snd_usb_add_audio_stream()
524 err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs, in __snd_usb_add_audio_stream()
532 as->pcm = pcm; in __snd_usb_add_audio_stream()
533 pcm->private_data = as; in __snd_usb_add_audio_stream()
534 pcm->private_free = snd_usb_audio_pcm_free; in __snd_usb_add_audio_stream()
535 pcm->info_flags = 0; in __snd_usb_add_audio_stream()
536 if (chip->pcm_devs > 0) in __snd_usb_add_audio_stream()
537 sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs); in __snd_usb_add_audio_stream()
539 strcpy(pcm->name, "USB Audio"); in __snd_usb_add_audio_stream()
541 snd_usb_init_substream(as, stream, fp, pd); in __snd_usb_add_audio_stream()
544 * Keep using head insertion for M-Audio Audiophile USB (tm) which has a in __snd_usb_add_audio_stream()
545 * fix to swap capture stream order in conf/cards/USB-audio.conf in __snd_usb_add_audio_stream()
547 if (chip->usb_id == USB_ID(0x0763, 0x2003)) in __snd_usb_add_audio_stream()
548 list_add(&as->list, &chip->pcm_list); in __snd_usb_add_audio_stream()
550 list_add_tail(&as->list, &chip->pcm_list); in __snd_usb_add_audio_stream()
552 chip->pcm_devs++; in __snd_usb_add_audio_stream()
556 return add_chmap(pcm, stream, &as->substream[stream]); in __snd_usb_add_audio_stream()
569 struct snd_usb_power_domain *pd) in snd_usb_add_audio_stream_v3() argument
571 return __snd_usb_add_audio_stream(chip, stream, fp, pd); in snd_usb_add_audio_stream_v3()
584 …csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDP… in parse_uac_endpoint_attributes()
587 if (!csep && altsd->bNumEndpoints >= 2) in parse_uac_endpoint_attributes()
588 …csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDP… in parse_uac_endpoint_attributes()
596 csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT); in parse_uac_endpoint_attributes()
598 if (!csep || csep->bLength < 7 || in parse_uac_endpoint_attributes()
599 csep->bDescriptorSubtype != UAC_EP_GENERAL) in parse_uac_endpoint_attributes()
603 attributes = csep->bmAttributes; in parse_uac_endpoint_attributes()
608 if (csep2->bLength < sizeof(*csep2)) in parse_uac_endpoint_attributes()
610 attributes = csep->bmAttributes & UAC_EP_CS_ATTR_FILL_MAX; in parse_uac_endpoint_attributes()
613 if (csep2->bmControls & UAC2_CONTROL_PITCH) in parse_uac_endpoint_attributes()
619 if (csep3->bLength < sizeof(*csep3)) in parse_uac_endpoint_attributes()
622 if (le32_to_cpu(csep3->bmControls) & UAC2_CONTROL_PITCH) in parse_uac_endpoint_attributes()
631 iface_no, altsd->bAlternateSetting); in parse_uac_endpoint_attributes()
644 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, in snd_usb_find_input_terminal_descriptor()
645 ctrl_iface->extralen, in snd_usb_find_input_terminal_descriptor()
649 if (term->bTerminalID == terminal_id) in snd_usb_find_input_terminal_descriptor()
663 while ((term = snd_usb_find_csint_desc(ctrl_iface->extra, in snd_usb_find_output_terminal_descriptor()
664 ctrl_iface->extralen, in snd_usb_find_output_terminal_descriptor()
668 if (term->bTerminalID == terminal_id) in snd_usb_find_output_terminal_descriptor()
687 fp->iface = iface_no; in audio_format_alloc_init()
688 fp->altsetting = altno; in audio_format_alloc_init()
689 fp->altset_idx = altset_idx; in audio_format_alloc_init()
690 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; in audio_format_alloc_init()
691 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; in audio_format_alloc_init()
692 fp->datainterval = snd_usb_parse_datainterval(chip, alts); in audio_format_alloc_init()
693 fp->protocol = protocol; in audio_format_alloc_init()
694 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); in audio_format_alloc_init()
695 fp->channels = num_channels; in audio_format_alloc_init()
696 if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH) in audio_format_alloc_init()
697 fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1) in audio_format_alloc_init()
698 * (fp->maxpacksize & 0x7ff); in audio_format_alloc_init()
699 fp->clock = clock; in audio_format_alloc_init()
700 INIT_LIST_HEAD(&fp->list); in audio_format_alloc_init()
711 struct usb_device *dev = chip->dev; in snd_usb_get_audioformat_uac12()
721 snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
726 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
732 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac12()
733 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
739 format = le16_to_cpu(as->wFormatTag); /* remember the format value */ in snd_usb_get_audioformat_uac12()
741 iterm = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf, in snd_usb_get_audioformat_uac12()
742 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
745 num_channels = iterm->bNrChannels; in snd_usb_get_audioformat_uac12()
746 chconfig = le16_to_cpu(iterm->wChannelConfig); in snd_usb_get_audioformat_uac12()
752 snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
756 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
762 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac12()
763 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
769 num_channels = as->bNrChannels; in snd_usb_get_audioformat_uac12()
770 format = le32_to_cpu(as->bmFormats); in snd_usb_get_audioformat_uac12()
771 chconfig = le32_to_cpu(as->bmChannelConfig); in snd_usb_get_audioformat_uac12()
777 input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf, in snd_usb_get_audioformat_uac12()
778 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
781 clock = input_term->bCSourceID; in snd_usb_get_audioformat_uac12()
782 if (!chconfig && (num_channels == input_term->bNrChannels)) in snd_usb_get_audioformat_uac12()
783 chconfig = le32_to_cpu(input_term->bmChannelConfig); in snd_usb_get_audioformat_uac12()
787 output_term = snd_usb_find_output_terminal_descriptor(chip->ctrl_intf, in snd_usb_get_audioformat_uac12()
788 as->bTerminalLink, in snd_usb_get_audioformat_uac12()
791 clock = output_term->bCSourceID; in snd_usb_get_audioformat_uac12()
795 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
797 iface_no, altno, as->bTerminalLink); in snd_usb_get_audioformat_uac12()
803 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac12()
806 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
811 if (((protocol == UAC_VERSION_1) && (fmt->bLength < 8)) in snd_usb_get_audioformat_uac12()
813 (fmt->bLength < 6))) { in snd_usb_get_audioformat_uac12()
814 dev_err(&dev->dev, in snd_usb_get_audioformat_uac12()
823 * packet size, but is actually a mislabeled two-channel in snd_usb_get_audioformat_uac12()
828 if (bm_quirk && fmt->bNrChannels == 1 && fmt->bSubframeSize == 2) in snd_usb_get_audioformat_uac12()
834 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac12()
836 fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, in snd_usb_get_audioformat_uac12()
850 if (fp->channels != num_channels) in snd_usb_get_audioformat_uac12()
853 fp->chmap = convert_chmap(fp->channels, chconfig, protocol); in snd_usb_get_audioformat_uac12()
865 struct usb_device *dev = chip->dev; in snd_usb_get_audioformat_uac3()
872 struct snd_usb_power_domain *pd; in snd_usb_get_audioformat_uac3() local
881 badd_profile = chip->badd_profile; in snd_usb_get_audioformat_uac3()
885 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); in snd_usb_get_audioformat_uac3()
889 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
917 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
920 chmap->map[0] = SNDRV_CHMAP_MONO; in snd_usb_get_audioformat_uac3()
922 chmap->map[0] = SNDRV_CHMAP_FL; in snd_usb_get_audioformat_uac3()
923 chmap->map[1] = SNDRV_CHMAP_FR; in snd_usb_get_audioformat_uac3()
926 chmap->channels = num_channels; in snd_usb_get_audioformat_uac3()
931 as = snd_usb_find_csint_desc(alts->extra, alts->extralen, in snd_usb_get_audioformat_uac3()
934 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
940 if (as->bLength < sizeof(*as)) { in snd_usb_get_audioformat_uac3()
941 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
947 cluster_id = le16_to_cpu(as->wClusterDescrID); in snd_usb_get_audioformat_uac3()
949 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
962 err = snd_usb_ctl_msg(chip->dev, in snd_usb_get_audioformat_uac3()
963 usb_rcvctrlpipe(chip->dev, 0), in snd_usb_get_audioformat_uac3()
972 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
975 return ERR_PTR(-EIO); in snd_usb_get_audioformat_uac3()
985 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
986 err = snd_usb_ctl_msg(chip->dev, in snd_usb_get_audioformat_uac3()
987 usb_rcvctrlpipe(chip->dev, 0), in snd_usb_get_audioformat_uac3()
997 dev_err(&dev->dev, in snd_usb_get_audioformat_uac3()
1001 return ERR_PTR(-EIO); in snd_usb_get_audioformat_uac3()
1004 num_channels = cluster->bNrChannels; in snd_usb_get_audioformat_uac3()
1012 input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf, in snd_usb_get_audioformat_uac3()
1013 as->bTerminalLink, in snd_usb_get_audioformat_uac3()
1016 clock = input_term->bCSourceID; in snd_usb_get_audioformat_uac3()
1020 output_term = snd_usb_find_output_terminal_descriptor(chip->ctrl_intf, in snd_usb_get_audioformat_uac3()
1021 as->bTerminalLink, in snd_usb_get_audioformat_uac3()
1024 clock = output_term->bCSourceID; in snd_usb_get_audioformat_uac3()
1028 dev_err(&dev->dev, "%u:%d : bogus bTerminalLink %d\n", in snd_usb_get_audioformat_uac3()
1029 iface_no, altno, as->bTerminalLink); in snd_usb_get_audioformat_uac3()
1038 return ERR_PTR(-ENOMEM); in snd_usb_get_audioformat_uac3()
1041 fp->chmap = chmap; in snd_usb_get_audioformat_uac3()
1044 fp->attributes = 0; /* No attributes */ in snd_usb_get_audioformat_uac3()
1046 fp->fmt_type = UAC_FORMAT_TYPE_I; in snd_usb_get_audioformat_uac3()
1047 fp->formats = badd_formats; in snd_usb_get_audioformat_uac3()
1049 fp->nr_rates = 0; /* SNDRV_PCM_RATE_CONTINUOUS */ in snd_usb_get_audioformat_uac3()
1050 fp->rate_min = UAC3_BADD_SAMPLING_RATE; in snd_usb_get_audioformat_uac3()
1051 fp->rate_max = UAC3_BADD_SAMPLING_RATE; in snd_usb_get_audioformat_uac3()
1052 fp->rates = SNDRV_PCM_RATE_CONTINUOUS; in snd_usb_get_audioformat_uac3()
1054 pd = kzalloc(sizeof(*pd), GFP_KERNEL); in snd_usb_get_audioformat_uac3()
1055 if (!pd) { in snd_usb_get_audioformat_uac3()
1059 pd->pd_id = (stream == SNDRV_PCM_STREAM_PLAYBACK) ? in snd_usb_get_audioformat_uac3()
1061 pd->pd_d1d0_rec = UAC3_BADD_PD_RECOVER_D1D0; in snd_usb_get_audioformat_uac3()
1062 pd->pd_d2d0_rec = UAC3_BADD_PD_RECOVER_D2D0; in snd_usb_get_audioformat_uac3()
1065 fp->attributes = parse_uac_endpoint_attributes(chip, alts, in snd_usb_get_audioformat_uac3()
1069 pd = snd_usb_find_power_domain(chip->ctrl_intf, in snd_usb_get_audioformat_uac3()
1070 as->bTerminalLink); in snd_usb_get_audioformat_uac3()
1074 kfree(pd); in snd_usb_get_audioformat_uac3()
1080 if (pd) in snd_usb_get_audioformat_uac3()
1081 *pd_out = pd; in snd_usb_get_audioformat_uac3()
1096 struct snd_usb_power_domain *pd = NULL; in __snd_usb_parse_audio_interface() local
1099 dev = chip->dev; in __snd_usb_parse_audio_interface()
1104 num = iface->num_altsetting; in __snd_usb_parse_audio_interface()
1110 if (chip->usb_id == USB_ID(0x04fa, 0x4201) && num >= 4) in __snd_usb_parse_audio_interface()
1114 alts = &iface->altsetting[i]; in __snd_usb_parse_audio_interface()
1116 protocol = altsd->bInterfaceProtocol; in __snd_usb_parse_audio_interface()
1118 if (((altsd->bInterfaceClass != USB_CLASS_AUDIO || in __snd_usb_parse_audio_interface()
1119 (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING && in __snd_usb_parse_audio_interface()
1120 altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC)) && in __snd_usb_parse_audio_interface()
1121 altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) || in __snd_usb_parse_audio_interface()
1122 altsd->bNumEndpoints < 1 || in __snd_usb_parse_audio_interface()
1123 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0) in __snd_usb_parse_audio_interface()
1126 if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != in __snd_usb_parse_audio_interface()
1130 stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ? in __snd_usb_parse_audio_interface()
1132 altno = altsd->bAlternateSetting; in __snd_usb_parse_audio_interface()
1141 if (USB_ID_VENDOR(chip->usb_id) == 0x0582 && in __snd_usb_parse_audio_interface()
1142 altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && in __snd_usb_parse_audio_interface()
1148 dev_dbg(&dev->dev, "%u:%d: unknown interface protocol %#02x, assuming v1\n", in __snd_usb_parse_audio_interface()
1159 * packet size, but is actually a mislabeled two-channel in __snd_usb_parse_audio_interface()
1165 fp && fp->altsetting == 1 && fp->channels == 1 && in __snd_usb_parse_audio_interface()
1166 fp->formats == SNDRV_PCM_FMTBIT_S16_LE && in __snd_usb_parse_audio_interface()
1168 le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == in __snd_usb_parse_audio_interface()
1169 fp->maxpacksize * 2) in __snd_usb_parse_audio_interface()
1178 fp = snd_usb_get_audioformat_uac3(chip, alts, &pd, in __snd_usb_parse_audio_interface()
1188 if (fp->fmt_type != UAC_FORMAT_TYPE_I) in __snd_usb_parse_audio_interface()
1190 if ((fp->fmt_type == UAC_FORMAT_TYPE_I) == non_pcm) { in __snd_usb_parse_audio_interface()
1192 kfree(pd); in __snd_usb_parse_audio_interface()
1194 pd = NULL; in __snd_usb_parse_audio_interface()
1198 dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint); in __snd_usb_parse_audio_interface()
1200 err = snd_usb_add_audio_stream_v3(chip, stream, fp, pd); in __snd_usb_parse_audio_interface()
1206 kfree(pd); in __snd_usb_parse_audio_interface()
1210 usb_set_interface(chip->dev, iface_no, altno); in __snd_usb_parse_audio_interface()
1212 snd_usb_init_sample_rate(chip, iface_no, alts, fp, fp->rate_max); in __snd_usb_parse_audio_interface()
1228 /* parse non-PCM formats */ in snd_usb_parse_audio_interface()