xref: /kernel/linux/linux-5.10/sound/usb/stream.c (revision 8c2ecf20)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 */
4
5
6#include <linux/init.h>
7#include <linux/slab.h>
8#include <linux/usb.h>
9#include <linux/usb/audio.h>
10#include <linux/usb/audio-v2.h>
11#include <linux/usb/audio-v3.h>
12
13#include <sound/core.h>
14#include <sound/pcm.h>
15#include <sound/control.h>
16#include <sound/tlv.h>
17
18#include "usbaudio.h"
19#include "card.h"
20#include "proc.h"
21#include "quirks.h"
22#include "endpoint.h"
23#include "pcm.h"
24#include "helper.h"
25#include "format.h"
26#include "clock.h"
27#include "stream.h"
28#include "power.h"
29#include "media.h"
30
31static void audioformat_free(struct audioformat *fp)
32{
33	list_del(&fp->list); /* unlink for avoiding double-free */
34	kfree(fp->rate_table);
35	kfree(fp->chmap);
36	kfree(fp);
37}
38
39/*
40 * free a substream
41 */
42static void free_substream(struct snd_usb_substream *subs)
43{
44	struct audioformat *fp, *n;
45
46	if (!subs->num_formats)
47		return; /* not initialized */
48	list_for_each_entry_safe(fp, n, &subs->fmt_list, list)
49		audioformat_free(fp);
50	kfree(subs->rate_list.list);
51	kfree(subs->str_pd);
52	snd_media_stream_delete(subs);
53}
54
55
56/*
57 * free a usb stream instance
58 */
59static void snd_usb_audio_stream_free(struct snd_usb_stream *stream)
60{
61	free_substream(&stream->substream[0]);
62	free_substream(&stream->substream[1]);
63	list_del(&stream->list);
64	kfree(stream);
65}
66
67static void snd_usb_audio_pcm_free(struct snd_pcm *pcm)
68{
69	struct snd_usb_stream *stream = pcm->private_data;
70	if (stream) {
71		stream->pcm = NULL;
72		snd_usb_audio_stream_free(stream);
73	}
74}
75
76/*
77 * initialize the substream instance.
78 */
79
80static void snd_usb_init_substream(struct snd_usb_stream *as,
81				   int stream,
82				   struct audioformat *fp,
83				   struct snd_usb_power_domain *pd)
84{
85	struct snd_usb_substream *subs = &as->substream[stream];
86
87	INIT_LIST_HEAD(&subs->fmt_list);
88	spin_lock_init(&subs->lock);
89
90	subs->stream = as;
91	subs->direction = stream;
92	subs->dev = as->chip->dev;
93	subs->txfr_quirk = as->chip->txfr_quirk;
94	subs->tx_length_quirk = as->chip->tx_length_quirk;
95	subs->speed = snd_usb_get_speed(subs->dev);
96	subs->pkt_offset_adj = 0;
97	subs->stream_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	if (pd) {
110		subs->str_pd = pd;
111		/* Initialize Power Domain to idle status D1 */
112		snd_usb_power_domain_set(subs->stream->chip, pd,
113					 UAC3_PD_STATE_D1);
114	}
115
116	snd_usb_preallocate_buffer(subs);
117}
118
119/* kctl callbacks for usb-audio channel maps */
120static int usb_chmap_ctl_info(struct snd_kcontrol *kcontrol,
121			      struct snd_ctl_elem_info *uinfo)
122{
123	struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
124	struct snd_usb_substream *subs = info->private_data;
125
126	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
127	uinfo->count = subs->channels_max;
128	uinfo->value.integer.min = 0;
129	uinfo->value.integer.max = SNDRV_CHMAP_LAST;
130	return 0;
131}
132
133/* check whether a duplicated entry exists in the audiofmt list */
134static bool have_dup_chmap(struct snd_usb_substream *subs,
135			   struct audioformat *fp)
136{
137	struct audioformat *prev = fp;
138
139	list_for_each_entry_continue_reverse(prev, &subs->fmt_list, list) {
140		if (prev->chmap &&
141		    !memcmp(prev->chmap, fp->chmap, sizeof(*fp->chmap)))
142			return true;
143	}
144	return false;
145}
146
147static int usb_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, int op_flag,
148			     unsigned int size, unsigned int __user *tlv)
149{
150	struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
151	struct snd_usb_substream *subs = info->private_data;
152	struct audioformat *fp;
153	unsigned int __user *dst;
154	int count = 0;
155
156	if (size < 8)
157		return -ENOMEM;
158	if (put_user(SNDRV_CTL_TLVT_CONTAINER, tlv))
159		return -EFAULT;
160	size -= 8;
161	dst = tlv + 2;
162	list_for_each_entry(fp, &subs->fmt_list, list) {
163		int i, ch_bytes;
164
165		if (!fp->chmap)
166			continue;
167		if (have_dup_chmap(subs, fp))
168			continue;
169		/* copy the entry */
170		ch_bytes = fp->chmap->channels * 4;
171		if (size < 8 + ch_bytes)
172			return -ENOMEM;
173		if (put_user(SNDRV_CTL_TLVT_CHMAP_FIXED, dst) ||
174		    put_user(ch_bytes, dst + 1))
175			return -EFAULT;
176		dst += 2;
177		for (i = 0; i < fp->chmap->channels; i++, dst++) {
178			if (put_user(fp->chmap->map[i], dst))
179				return -EFAULT;
180		}
181
182		count += 8 + ch_bytes;
183		size -= 8 + ch_bytes;
184	}
185	if (put_user(count, tlv + 1))
186		return -EFAULT;
187	return 0;
188}
189
190static int usb_chmap_ctl_get(struct snd_kcontrol *kcontrol,
191			     struct snd_ctl_elem_value *ucontrol)
192{
193	struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
194	struct snd_usb_substream *subs = info->private_data;
195	struct snd_pcm_chmap_elem *chmap = NULL;
196	int i = 0;
197
198	if (subs->cur_audiofmt)
199		chmap = subs->cur_audiofmt->chmap;
200	if (chmap) {
201		for (i = 0; i < chmap->channels; i++)
202			ucontrol->value.integer.value[i] = chmap->map[i];
203	}
204	for (; i < subs->channels_max; i++)
205		ucontrol->value.integer.value[i] = 0;
206	return 0;
207}
208
209/* create a chmap kctl assigned to the given USB substream */
210static int add_chmap(struct snd_pcm *pcm, int stream,
211		     struct snd_usb_substream *subs)
212{
213	struct audioformat *fp;
214	struct snd_pcm_chmap *chmap;
215	struct snd_kcontrol *kctl;
216	int err;
217
218	list_for_each_entry(fp, &subs->fmt_list, list)
219		if (fp->chmap)
220			goto ok;
221	/* no chmap is found */
222	return 0;
223
224 ok:
225	err = snd_pcm_add_chmap_ctls(pcm, stream, NULL, 0, 0, &chmap);
226	if (err < 0)
227		return err;
228
229	/* override handlers */
230	chmap->private_data = subs;
231	kctl = chmap->kctl;
232	kctl->info = usb_chmap_ctl_info;
233	kctl->get = usb_chmap_ctl_get;
234	kctl->tlv.c = usb_chmap_ctl_tlv;
235
236	return 0;
237}
238
239/* convert from USB ChannelConfig bits to ALSA chmap element */
240static struct snd_pcm_chmap_elem *convert_chmap(int channels, unsigned int bits,
241						int protocol)
242{
243	static const unsigned int uac1_maps[] = {
244		SNDRV_CHMAP_FL,		/* left front */
245		SNDRV_CHMAP_FR,		/* right front */
246		SNDRV_CHMAP_FC,		/* center front */
247		SNDRV_CHMAP_LFE,	/* LFE */
248		SNDRV_CHMAP_SL,		/* left surround */
249		SNDRV_CHMAP_SR,		/* right surround */
250		SNDRV_CHMAP_FLC,	/* left of center */
251		SNDRV_CHMAP_FRC,	/* right of center */
252		SNDRV_CHMAP_RC,		/* surround */
253		SNDRV_CHMAP_SL,		/* side left */
254		SNDRV_CHMAP_SR,		/* side right */
255		SNDRV_CHMAP_TC,		/* top */
256		0 /* terminator */
257	};
258	static const unsigned int uac2_maps[] = {
259		SNDRV_CHMAP_FL,		/* front left */
260		SNDRV_CHMAP_FR,		/* front right */
261		SNDRV_CHMAP_FC,		/* front center */
262		SNDRV_CHMAP_LFE,	/* LFE */
263		SNDRV_CHMAP_RL,		/* back left */
264		SNDRV_CHMAP_RR,		/* back right */
265		SNDRV_CHMAP_FLC,	/* front left of center */
266		SNDRV_CHMAP_FRC,	/* front right of center */
267		SNDRV_CHMAP_RC,		/* back center */
268		SNDRV_CHMAP_SL,		/* side left */
269		SNDRV_CHMAP_SR,		/* side right */
270		SNDRV_CHMAP_TC,		/* top center */
271		SNDRV_CHMAP_TFL,	/* top front left */
272		SNDRV_CHMAP_TFC,	/* top front center */
273		SNDRV_CHMAP_TFR,	/* top front right */
274		SNDRV_CHMAP_TRL,	/* top back left */
275		SNDRV_CHMAP_TRC,	/* top back center */
276		SNDRV_CHMAP_TRR,	/* top back right */
277		SNDRV_CHMAP_TFLC,	/* top front left of center */
278		SNDRV_CHMAP_TFRC,	/* top front right of center */
279		SNDRV_CHMAP_LLFE,	/* left LFE */
280		SNDRV_CHMAP_RLFE,	/* right LFE */
281		SNDRV_CHMAP_TSL,	/* top side left */
282		SNDRV_CHMAP_TSR,	/* top side right */
283		SNDRV_CHMAP_BC,		/* bottom center */
284		SNDRV_CHMAP_RLC,	/* back left of center */
285		SNDRV_CHMAP_RRC,	/* back right of center */
286		0 /* terminator */
287	};
288	struct snd_pcm_chmap_elem *chmap;
289	const unsigned int *maps;
290	int c;
291
292	if (channels > ARRAY_SIZE(chmap->map))
293		return NULL;
294
295	chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
296	if (!chmap)
297		return NULL;
298
299	maps = protocol == UAC_VERSION_2 ? uac2_maps : uac1_maps;
300	chmap->channels = channels;
301	c = 0;
302
303	if (bits) {
304		for (; bits && *maps; maps++, bits >>= 1)
305			if (bits & 1)
306				chmap->map[c++] = *maps;
307	} else {
308		/* If we're missing wChannelConfig, then guess something
309		    to make sure the channel map is not skipped entirely */
310		if (channels == 1)
311			chmap->map[c++] = SNDRV_CHMAP_MONO;
312		else
313			for (; c < channels && *maps; maps++)
314				chmap->map[c++] = *maps;
315	}
316
317	for (; c < channels; c++)
318		chmap->map[c] = SNDRV_CHMAP_UNKNOWN;
319
320	return chmap;
321}
322
323/* UAC3 device stores channels information in Cluster Descriptors */
324static struct
325snd_pcm_chmap_elem *convert_chmap_v3(struct uac3_cluster_header_descriptor
326								*cluster)
327{
328	unsigned int channels = cluster->bNrChannels;
329	struct snd_pcm_chmap_elem *chmap;
330	void *p = cluster;
331	int len, c;
332
333	if (channels > ARRAY_SIZE(chmap->map))
334		return NULL;
335
336	chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
337	if (!chmap)
338		return NULL;
339
340	len = le16_to_cpu(cluster->wLength);
341	c = 0;
342	p += sizeof(struct uac3_cluster_header_descriptor);
343
344	while (((p - (void *)cluster) < len) && (c < channels)) {
345		struct uac3_cluster_segment_descriptor *cs_desc = p;
346		u16 cs_len;
347		u8 cs_type;
348
349		cs_len = le16_to_cpu(cs_desc->wLength);
350		cs_type = cs_desc->bSegmentType;
351
352		if (cs_type == UAC3_CHANNEL_INFORMATION) {
353			struct uac3_cluster_information_segment_descriptor *is = p;
354			unsigned char map;
355
356			/*
357			 * TODO: this conversion is not complete, update it
358			 * after adding UAC3 values to asound.h
359			 */
360			switch (is->bChRelationship) {
361			case UAC3_CH_MONO:
362				map = SNDRV_CHMAP_MONO;
363				break;
364			case UAC3_CH_LEFT:
365			case UAC3_CH_FRONT_LEFT:
366			case UAC3_CH_HEADPHONE_LEFT:
367				map = SNDRV_CHMAP_FL;
368				break;
369			case UAC3_CH_RIGHT:
370			case UAC3_CH_FRONT_RIGHT:
371			case UAC3_CH_HEADPHONE_RIGHT:
372				map = SNDRV_CHMAP_FR;
373				break;
374			case UAC3_CH_FRONT_CENTER:
375				map = SNDRV_CHMAP_FC;
376				break;
377			case UAC3_CH_FRONT_LEFT_OF_CENTER:
378				map = SNDRV_CHMAP_FLC;
379				break;
380			case UAC3_CH_FRONT_RIGHT_OF_CENTER:
381				map = SNDRV_CHMAP_FRC;
382				break;
383			case UAC3_CH_SIDE_LEFT:
384				map = SNDRV_CHMAP_SL;
385				break;
386			case UAC3_CH_SIDE_RIGHT:
387				map = SNDRV_CHMAP_SR;
388				break;
389			case UAC3_CH_BACK_LEFT:
390				map = SNDRV_CHMAP_RL;
391				break;
392			case UAC3_CH_BACK_RIGHT:
393				map = SNDRV_CHMAP_RR;
394				break;
395			case UAC3_CH_BACK_CENTER:
396				map = SNDRV_CHMAP_RC;
397				break;
398			case UAC3_CH_BACK_LEFT_OF_CENTER:
399				map = SNDRV_CHMAP_RLC;
400				break;
401			case UAC3_CH_BACK_RIGHT_OF_CENTER:
402				map = SNDRV_CHMAP_RRC;
403				break;
404			case UAC3_CH_TOP_CENTER:
405				map = SNDRV_CHMAP_TC;
406				break;
407			case UAC3_CH_TOP_FRONT_LEFT:
408				map = SNDRV_CHMAP_TFL;
409				break;
410			case UAC3_CH_TOP_FRONT_RIGHT:
411				map = SNDRV_CHMAP_TFR;
412				break;
413			case UAC3_CH_TOP_FRONT_CENTER:
414				map = SNDRV_CHMAP_TFC;
415				break;
416			case UAC3_CH_TOP_FRONT_LOC:
417				map = SNDRV_CHMAP_TFLC;
418				break;
419			case UAC3_CH_TOP_FRONT_ROC:
420				map = SNDRV_CHMAP_TFRC;
421				break;
422			case UAC3_CH_TOP_SIDE_LEFT:
423				map = SNDRV_CHMAP_TSL;
424				break;
425			case UAC3_CH_TOP_SIDE_RIGHT:
426				map = SNDRV_CHMAP_TSR;
427				break;
428			case UAC3_CH_TOP_BACK_LEFT:
429				map = SNDRV_CHMAP_TRL;
430				break;
431			case UAC3_CH_TOP_BACK_RIGHT:
432				map = SNDRV_CHMAP_TRR;
433				break;
434			case UAC3_CH_TOP_BACK_CENTER:
435				map = SNDRV_CHMAP_TRC;
436				break;
437			case UAC3_CH_BOTTOM_CENTER:
438				map = SNDRV_CHMAP_BC;
439				break;
440			case UAC3_CH_LOW_FREQUENCY_EFFECTS:
441				map = SNDRV_CHMAP_LFE;
442				break;
443			case UAC3_CH_LFE_LEFT:
444				map = SNDRV_CHMAP_LLFE;
445				break;
446			case UAC3_CH_LFE_RIGHT:
447				map = SNDRV_CHMAP_RLFE;
448				break;
449			case UAC3_CH_RELATIONSHIP_UNDEFINED:
450			default:
451				map = SNDRV_CHMAP_UNKNOWN;
452				break;
453			}
454			chmap->map[c++] = map;
455		}
456		p += cs_len;
457	}
458
459	if (channels < c)
460		pr_err("%s: channel number mismatch\n", __func__);
461
462	chmap->channels = channels;
463
464	for (; c < channels; c++)
465		chmap->map[c] = SNDRV_CHMAP_UNKNOWN;
466
467	return chmap;
468}
469
470/*
471 * add this endpoint to the chip instance.
472 * if a stream with the same endpoint already exists, append to it.
473 * if not, create a new pcm stream. note, fp is added to the substream
474 * fmt_list and will be freed on the chip instance release. do not free
475 * fp or do remove it from the substream fmt_list to avoid double-free.
476 */
477static int __snd_usb_add_audio_stream(struct snd_usb_audio *chip,
478				      int stream,
479				      struct audioformat *fp,
480				      struct snd_usb_power_domain *pd)
481
482{
483	struct snd_usb_stream *as;
484	struct snd_usb_substream *subs;
485	struct snd_pcm *pcm;
486	int err;
487
488	list_for_each_entry(as, &chip->pcm_list, list) {
489		if (as->fmt_type != fp->fmt_type)
490			continue;
491		subs = &as->substream[stream];
492		if (subs->ep_num == fp->endpoint) {
493			list_add_tail(&fp->list, &subs->fmt_list);
494			subs->num_formats++;
495			subs->formats |= fp->formats;
496			return 0;
497		}
498	}
499
500	if (chip->card->registered)
501		chip->need_delayed_register = true;
502
503	/* look for an empty stream */
504	list_for_each_entry(as, &chip->pcm_list, list) {
505		if (as->fmt_type != fp->fmt_type)
506			continue;
507		subs = &as->substream[stream];
508		if (subs->ep_num)
509			continue;
510		err = snd_pcm_new_stream(as->pcm, stream, 1);
511		if (err < 0)
512			return err;
513		snd_usb_init_substream(as, stream, fp, pd);
514		return add_chmap(as->pcm, stream, subs);
515	}
516
517	/* create a new pcm */
518	as = kzalloc(sizeof(*as), GFP_KERNEL);
519	if (!as)
520		return -ENOMEM;
521	as->pcm_index = chip->pcm_devs;
522	as->chip = chip;
523	as->fmt_type = fp->fmt_type;
524	err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs,
525			  stream == SNDRV_PCM_STREAM_PLAYBACK ? 1 : 0,
526			  stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1,
527			  &pcm);
528	if (err < 0) {
529		kfree(as);
530		return err;
531	}
532	as->pcm = pcm;
533	pcm->private_data = as;
534	pcm->private_free = snd_usb_audio_pcm_free;
535	pcm->info_flags = 0;
536	if (chip->pcm_devs > 0)
537		sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs);
538	else
539		strcpy(pcm->name, "USB Audio");
540
541	snd_usb_init_substream(as, stream, fp, pd);
542
543	/*
544	 * Keep using head insertion for M-Audio Audiophile USB (tm) which has a
545	 * fix to swap capture stream order in conf/cards/USB-audio.conf
546	 */
547	if (chip->usb_id == USB_ID(0x0763, 0x2003))
548		list_add(&as->list, &chip->pcm_list);
549	else
550		list_add_tail(&as->list, &chip->pcm_list);
551
552	chip->pcm_devs++;
553
554	snd_usb_proc_pcm_format_add(as);
555
556	return add_chmap(pcm, stream, &as->substream[stream]);
557}
558
559int snd_usb_add_audio_stream(struct snd_usb_audio *chip,
560			     int stream,
561			     struct audioformat *fp)
562{
563	return __snd_usb_add_audio_stream(chip, stream, fp, NULL);
564}
565
566static int snd_usb_add_audio_stream_v3(struct snd_usb_audio *chip,
567				       int stream,
568				       struct audioformat *fp,
569				       struct snd_usb_power_domain *pd)
570{
571	return __snd_usb_add_audio_stream(chip, stream, fp, pd);
572}
573
574static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
575					 struct usb_host_interface *alts,
576					 int protocol, int iface_no)
577{
578	/* parsed with a v1 header here. that's ok as we only look at the
579	 * header first which is the same for both versions */
580	struct uac_iso_endpoint_descriptor *csep;
581	struct usb_interface_descriptor *altsd = get_iface_desc(alts);
582	int attributes = 0;
583
584	csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT);
585
586	/* Creamware Noah has this descriptor after the 2nd endpoint */
587	if (!csep && altsd->bNumEndpoints >= 2)
588		csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
589
590	/*
591	 * If we can't locate the USB_DT_CS_ENDPOINT descriptor in the extra
592	 * bytes after the first endpoint, go search the entire interface.
593	 * Some devices have it directly *before* the standard endpoint.
594	 */
595	if (!csep)
596		csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT);
597
598	if (!csep || csep->bLength < 7 ||
599	    csep->bDescriptorSubtype != UAC_EP_GENERAL)
600		goto error;
601
602	if (protocol == UAC_VERSION_1) {
603		attributes = csep->bmAttributes;
604	} else if (protocol == UAC_VERSION_2) {
605		struct uac2_iso_endpoint_descriptor *csep2 =
606			(struct uac2_iso_endpoint_descriptor *) csep;
607
608		if (csep2->bLength < sizeof(*csep2))
609			goto error;
610		attributes = csep->bmAttributes & UAC_EP_CS_ATTR_FILL_MAX;
611
612		/* emulate the endpoint attributes of a v1 device */
613		if (csep2->bmControls & UAC2_CONTROL_PITCH)
614			attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL;
615	} else { /* UAC_VERSION_3 */
616		struct uac3_iso_endpoint_descriptor *csep3 =
617			(struct uac3_iso_endpoint_descriptor *) csep;
618
619		if (csep3->bLength < sizeof(*csep3))
620			goto error;
621		/* emulate the endpoint attributes of a v1 device */
622		if (le32_to_cpu(csep3->bmControls) & UAC2_CONTROL_PITCH)
623			attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL;
624	}
625
626	return attributes;
627
628 error:
629	usb_audio_warn(chip,
630		       "%u:%d : no or invalid class specific endpoint descriptor\n",
631		       iface_no, altsd->bAlternateSetting);
632	return 0;
633}
634
635/* find an input terminal descriptor (either UAC1 or UAC2) with the given
636 * terminal id
637 */
638static void *
639snd_usb_find_input_terminal_descriptor(struct usb_host_interface *ctrl_iface,
640				       int terminal_id, int protocol)
641{
642	struct uac2_input_terminal_descriptor *term = NULL;
643
644	while ((term = snd_usb_find_csint_desc(ctrl_iface->extra,
645					       ctrl_iface->extralen,
646					       term, UAC_INPUT_TERMINAL))) {
647		if (!snd_usb_validate_audio_desc(term, protocol))
648			continue;
649		if (term->bTerminalID == terminal_id)
650			return term;
651	}
652
653	return NULL;
654}
655
656static void *
657snd_usb_find_output_terminal_descriptor(struct usb_host_interface *ctrl_iface,
658					int terminal_id, int protocol)
659{
660	/* OK to use with both UAC2 and UAC3 */
661	struct uac2_output_terminal_descriptor *term = NULL;
662
663	while ((term = snd_usb_find_csint_desc(ctrl_iface->extra,
664					       ctrl_iface->extralen,
665					       term, UAC_OUTPUT_TERMINAL))) {
666		if (!snd_usb_validate_audio_desc(term, protocol))
667			continue;
668		if (term->bTerminalID == terminal_id)
669			return term;
670	}
671
672	return NULL;
673}
674
675static struct audioformat *
676audio_format_alloc_init(struct snd_usb_audio *chip,
677		       struct usb_host_interface *alts,
678		       int protocol, int iface_no, int altset_idx,
679		       int altno, int num_channels, int clock)
680{
681	struct audioformat *fp;
682
683	fp = kzalloc(sizeof(*fp), GFP_KERNEL);
684	if (!fp)
685		return NULL;
686
687	fp->iface = iface_no;
688	fp->altsetting = altno;
689	fp->altset_idx = altset_idx;
690	fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
691	fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
692	fp->datainterval = snd_usb_parse_datainterval(chip, alts);
693	fp->protocol = protocol;
694	fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
695	fp->channels = num_channels;
696	if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH)
697		fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
698				* (fp->maxpacksize & 0x7ff);
699	fp->clock = clock;
700	INIT_LIST_HEAD(&fp->list);
701
702	return fp;
703}
704
705static struct audioformat *
706snd_usb_get_audioformat_uac12(struct snd_usb_audio *chip,
707			      struct usb_host_interface *alts,
708			      int protocol, int iface_no, int altset_idx,
709			      int altno, int stream, int bm_quirk)
710{
711	struct usb_device *dev = chip->dev;
712	struct uac_format_type_i_continuous_descriptor *fmt;
713	unsigned int num_channels = 0, chconfig = 0;
714	struct audioformat *fp;
715	int clock = 0;
716	u64 format;
717
718	/* get audio formats */
719	if (protocol == UAC_VERSION_1) {
720		struct uac1_as_header_descriptor *as =
721			snd_usb_find_csint_desc(alts->extra, alts->extralen,
722						NULL, UAC_AS_GENERAL);
723		struct uac_input_terminal_descriptor *iterm;
724
725		if (!as) {
726			dev_err(&dev->dev,
727				"%u:%d : UAC_AS_GENERAL descriptor not found\n",
728				iface_no, altno);
729			return NULL;
730		}
731
732		if (as->bLength < sizeof(*as)) {
733			dev_err(&dev->dev,
734				"%u:%d : invalid UAC_AS_GENERAL desc\n",
735				iface_no, altno);
736			return NULL;
737		}
738
739		format = le16_to_cpu(as->wFormatTag); /* remember the format value */
740
741		iterm = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
742							       as->bTerminalLink,
743							       protocol);
744		if (iterm) {
745			num_channels = iterm->bNrChannels;
746			chconfig = le16_to_cpu(iterm->wChannelConfig);
747		}
748	} else { /* UAC_VERSION_2 */
749		struct uac2_input_terminal_descriptor *input_term;
750		struct uac2_output_terminal_descriptor *output_term;
751		struct uac2_as_header_descriptor *as =
752			snd_usb_find_csint_desc(alts->extra, alts->extralen,
753						NULL, UAC_AS_GENERAL);
754
755		if (!as) {
756			dev_err(&dev->dev,
757				"%u:%d : UAC_AS_GENERAL descriptor not found\n",
758				iface_no, altno);
759			return NULL;
760		}
761
762		if (as->bLength < sizeof(*as)) {
763			dev_err(&dev->dev,
764				"%u:%d : invalid UAC_AS_GENERAL desc\n",
765				iface_no, altno);
766			return NULL;
767		}
768
769		num_channels = as->bNrChannels;
770		format = le32_to_cpu(as->bmFormats);
771		chconfig = le32_to_cpu(as->bmChannelConfig);
772
773		/*
774		 * lookup the terminal associated to this interface
775		 * to extract the clock
776		 */
777		input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
778								    as->bTerminalLink,
779								    protocol);
780		if (input_term) {
781			clock = input_term->bCSourceID;
782			if (!chconfig && (num_channels == input_term->bNrChannels))
783				chconfig = le32_to_cpu(input_term->bmChannelConfig);
784			goto found_clock;
785		}
786
787		output_term = snd_usb_find_output_terminal_descriptor(chip->ctrl_intf,
788								      as->bTerminalLink,
789								      protocol);
790		if (output_term) {
791			clock = output_term->bCSourceID;
792			goto found_clock;
793		}
794
795		dev_err(&dev->dev,
796			"%u:%d : bogus bTerminalLink %d\n",
797			iface_no, altno, as->bTerminalLink);
798		return NULL;
799	}
800
801found_clock:
802	/* get format type */
803	fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen,
804				      NULL, UAC_FORMAT_TYPE);
805	if (!fmt) {
806		dev_err(&dev->dev,
807			"%u:%d : no UAC_FORMAT_TYPE desc\n",
808			iface_no, altno);
809		return NULL;
810	}
811	if (((protocol == UAC_VERSION_1) && (fmt->bLength < 8))
812			|| ((protocol == UAC_VERSION_2) &&
813					(fmt->bLength < 6))) {
814		dev_err(&dev->dev,
815			"%u:%d : invalid UAC_FORMAT_TYPE desc\n",
816			iface_no, altno);
817		return NULL;
818	}
819
820	/*
821	 * Blue Microphones workaround: The last altsetting is
822	 * identical with the previous one, except for a larger
823	 * packet size, but is actually a mislabeled two-channel
824	 * setting; ignore it.
825	 *
826	 * Part 2: analyze quirk flag and format
827	 */
828	if (bm_quirk && fmt->bNrChannels == 1 && fmt->bSubframeSize == 2)
829		return NULL;
830
831	fp = audio_format_alloc_init(chip, alts, protocol, iface_no,
832				     altset_idx, altno, num_channels, clock);
833	if (!fp)
834		return ERR_PTR(-ENOMEM);
835
836	fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol,
837						       iface_no);
838
839	/* some quirks for attributes here */
840	snd_usb_audioformat_attributes_quirk(chip, fp, stream);
841
842	/* ok, let's parse further... */
843	if (snd_usb_parse_audio_format(chip, fp, format,
844					fmt, stream) < 0) {
845		audioformat_free(fp);
846		return NULL;
847	}
848
849	/* Create chmap */
850	if (fp->channels != num_channels)
851		chconfig = 0;
852
853	fp->chmap = convert_chmap(fp->channels, chconfig, protocol);
854
855	return fp;
856}
857
858static struct audioformat *
859snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
860			     struct usb_host_interface *alts,
861			     struct snd_usb_power_domain **pd_out,
862			     int iface_no, int altset_idx,
863			     int altno, int stream)
864{
865	struct usb_device *dev = chip->dev;
866	struct uac3_input_terminal_descriptor *input_term;
867	struct uac3_output_terminal_descriptor *output_term;
868	struct uac3_cluster_header_descriptor *cluster;
869	struct uac3_as_header_descriptor *as = NULL;
870	struct uac3_hc_descriptor_header hc_header;
871	struct snd_pcm_chmap_elem *chmap;
872	struct snd_usb_power_domain *pd;
873	unsigned char badd_profile;
874	u64 badd_formats = 0;
875	unsigned int num_channels;
876	struct audioformat *fp;
877	u16 cluster_id, wLength;
878	int clock = 0;
879	int err;
880
881	badd_profile = chip->badd_profile;
882
883	if (badd_profile >= UAC3_FUNCTION_SUBCLASS_GENERIC_IO) {
884		unsigned int maxpacksize =
885			le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
886
887		switch (maxpacksize) {
888		default:
889			dev_err(&dev->dev,
890				"%u:%d : incorrect wMaxPacketSize for BADD profile\n",
891				iface_no, altno);
892			return NULL;
893		case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16:
894		case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16:
895			badd_formats = SNDRV_PCM_FMTBIT_S16_LE;
896			num_channels = 1;
897			break;
898		case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24:
899		case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24:
900			badd_formats = SNDRV_PCM_FMTBIT_S24_3LE;
901			num_channels = 1;
902			break;
903		case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16:
904		case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16:
905			badd_formats = SNDRV_PCM_FMTBIT_S16_LE;
906			num_channels = 2;
907			break;
908		case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24:
909		case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24:
910			badd_formats = SNDRV_PCM_FMTBIT_S24_3LE;
911			num_channels = 2;
912			break;
913		}
914
915		chmap = kzalloc(sizeof(*chmap), GFP_KERNEL);
916		if (!chmap)
917			return ERR_PTR(-ENOMEM);
918
919		if (num_channels == 1) {
920			chmap->map[0] = SNDRV_CHMAP_MONO;
921		} else {
922			chmap->map[0] = SNDRV_CHMAP_FL;
923			chmap->map[1] = SNDRV_CHMAP_FR;
924		}
925
926		chmap->channels = num_channels;
927		clock = UAC3_BADD_CS_ID9;
928		goto found_clock;
929	}
930
931	as = snd_usb_find_csint_desc(alts->extra, alts->extralen,
932				     NULL, UAC_AS_GENERAL);
933	if (!as) {
934		dev_err(&dev->dev,
935			"%u:%d : UAC_AS_GENERAL descriptor not found\n",
936			iface_no, altno);
937		return NULL;
938	}
939
940	if (as->bLength < sizeof(*as)) {
941		dev_err(&dev->dev,
942			"%u:%d : invalid UAC_AS_GENERAL desc\n",
943			iface_no, altno);
944		return NULL;
945	}
946
947	cluster_id = le16_to_cpu(as->wClusterDescrID);
948	if (!cluster_id) {
949		dev_err(&dev->dev,
950			"%u:%d : no cluster descriptor\n",
951			iface_no, altno);
952		return NULL;
953	}
954
955	/*
956	 * Get number of channels and channel map through
957	 * High Capability Cluster Descriptor
958	 *
959	 * First step: get High Capability header and
960	 * read size of Cluster Descriptor
961	 */
962	err = snd_usb_ctl_msg(chip->dev,
963			usb_rcvctrlpipe(chip->dev, 0),
964			UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR,
965			USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
966			cluster_id,
967			snd_usb_ctrl_intf(chip),
968			&hc_header, sizeof(hc_header));
969	if (err < 0)
970		return ERR_PTR(err);
971	else if (err != sizeof(hc_header)) {
972		dev_err(&dev->dev,
973			"%u:%d : can't get High Capability descriptor\n",
974			iface_no, altno);
975		return ERR_PTR(-EIO);
976	}
977
978	/*
979	 * Second step: allocate needed amount of memory
980	 * and request Cluster Descriptor
981	 */
982	wLength = le16_to_cpu(hc_header.wLength);
983	cluster = kzalloc(wLength, GFP_KERNEL);
984	if (!cluster)
985		return ERR_PTR(-ENOMEM);
986	err = snd_usb_ctl_msg(chip->dev,
987			usb_rcvctrlpipe(chip->dev, 0),
988			UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR,
989			USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
990			cluster_id,
991			snd_usb_ctrl_intf(chip),
992			cluster, wLength);
993	if (err < 0) {
994		kfree(cluster);
995		return ERR_PTR(err);
996	} else if (err != wLength) {
997		dev_err(&dev->dev,
998			"%u:%d : can't get Cluster Descriptor\n",
999			iface_no, altno);
1000		kfree(cluster);
1001		return ERR_PTR(-EIO);
1002	}
1003
1004	num_channels = cluster->bNrChannels;
1005	chmap = convert_chmap_v3(cluster);
1006	kfree(cluster);
1007
1008	/*
1009	 * lookup the terminal associated to this interface
1010	 * to extract the clock
1011	 */
1012	input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
1013							    as->bTerminalLink,
1014							    UAC_VERSION_3);
1015	if (input_term) {
1016		clock = input_term->bCSourceID;
1017		goto found_clock;
1018	}
1019
1020	output_term = snd_usb_find_output_terminal_descriptor(chip->ctrl_intf,
1021							      as->bTerminalLink,
1022							      UAC_VERSION_3);
1023	if (output_term) {
1024		clock = output_term->bCSourceID;
1025		goto found_clock;
1026	}
1027
1028	dev_err(&dev->dev, "%u:%d : bogus bTerminalLink %d\n",
1029			iface_no, altno, as->bTerminalLink);
1030	kfree(chmap);
1031	return NULL;
1032
1033found_clock:
1034	fp = audio_format_alloc_init(chip, alts, UAC_VERSION_3, iface_no,
1035				     altset_idx, altno, num_channels, clock);
1036	if (!fp) {
1037		kfree(chmap);
1038		return ERR_PTR(-ENOMEM);
1039	}
1040
1041	fp->chmap = chmap;
1042
1043	if (badd_profile >= UAC3_FUNCTION_SUBCLASS_GENERIC_IO) {
1044		fp->attributes = 0; /* No attributes */
1045
1046		fp->fmt_type = UAC_FORMAT_TYPE_I;
1047		fp->formats = badd_formats;
1048
1049		fp->nr_rates = 0;	/* SNDRV_PCM_RATE_CONTINUOUS */
1050		fp->rate_min = UAC3_BADD_SAMPLING_RATE;
1051		fp->rate_max = UAC3_BADD_SAMPLING_RATE;
1052		fp->rates = SNDRV_PCM_RATE_CONTINUOUS;
1053
1054		pd = kzalloc(sizeof(*pd), GFP_KERNEL);
1055		if (!pd) {
1056			audioformat_free(fp);
1057			return NULL;
1058		}
1059		pd->pd_id = (stream == SNDRV_PCM_STREAM_PLAYBACK) ?
1060					UAC3_BADD_PD_ID10 : UAC3_BADD_PD_ID11;
1061		pd->pd_d1d0_rec = UAC3_BADD_PD_RECOVER_D1D0;
1062		pd->pd_d2d0_rec = UAC3_BADD_PD_RECOVER_D2D0;
1063
1064	} else {
1065		fp->attributes = parse_uac_endpoint_attributes(chip, alts,
1066							       UAC_VERSION_3,
1067							       iface_no);
1068
1069		pd = snd_usb_find_power_domain(chip->ctrl_intf,
1070					       as->bTerminalLink);
1071
1072		/* ok, let's parse further... */
1073		if (snd_usb_parse_audio_format_v3(chip, fp, as, stream) < 0) {
1074			kfree(pd);
1075			audioformat_free(fp);
1076			return NULL;
1077		}
1078	}
1079
1080	if (pd)
1081		*pd_out = pd;
1082
1083	return fp;
1084}
1085
1086static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,
1087					   int iface_no,
1088					   bool *has_non_pcm, bool non_pcm)
1089{
1090	struct usb_device *dev;
1091	struct usb_interface *iface;
1092	struct usb_host_interface *alts;
1093	struct usb_interface_descriptor *altsd;
1094	int i, altno, err, stream;
1095	struct audioformat *fp = NULL;
1096	struct snd_usb_power_domain *pd = NULL;
1097	int num, protocol;
1098
1099	dev = chip->dev;
1100
1101	/* parse the interface's altsettings */
1102	iface = usb_ifnum_to_if(dev, iface_no);
1103
1104	num = iface->num_altsetting;
1105
1106	/*
1107	 * Dallas DS4201 workaround: It presents 5 altsettings, but the last
1108	 * one misses syncpipe, and does not produce any sound.
1109	 */
1110	if (chip->usb_id == USB_ID(0x04fa, 0x4201) && num >= 4)
1111		num = 4;
1112
1113	for (i = 0; i < num; i++) {
1114		alts = &iface->altsetting[i];
1115		altsd = get_iface_desc(alts);
1116		protocol = altsd->bInterfaceProtocol;
1117		/* skip invalid one */
1118		if (((altsd->bInterfaceClass != USB_CLASS_AUDIO ||
1119		      (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIOSTREAMING &&
1120		       altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC)) &&
1121		     altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
1122		    altsd->bNumEndpoints < 1 ||
1123		    le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0)
1124			continue;
1125		/* must be isochronous */
1126		if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
1127		    USB_ENDPOINT_XFER_ISOC)
1128			continue;
1129		/* check direction */
1130		stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ?
1131			SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
1132		altno = altsd->bAlternateSetting;
1133
1134		if (snd_usb_apply_interface_quirk(chip, iface_no, altno))
1135			continue;
1136
1137		/*
1138		 * Roland audio streaming interfaces are marked with protocols
1139		 * 0/1/2, but are UAC 1 compatible.
1140		 */
1141		if (USB_ID_VENDOR(chip->usb_id) == 0x0582 &&
1142		    altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC &&
1143		    protocol <= 2)
1144			protocol = UAC_VERSION_1;
1145
1146		switch (protocol) {
1147		default:
1148			dev_dbg(&dev->dev, "%u:%d: unknown interface protocol %#02x, assuming v1\n",
1149				iface_no, altno, protocol);
1150			protocol = UAC_VERSION_1;
1151			fallthrough;
1152		case UAC_VERSION_1:
1153		case UAC_VERSION_2: {
1154			int bm_quirk = 0;
1155
1156			/*
1157			 * Blue Microphones workaround: The last altsetting is
1158			 * identical with the previous one, except for a larger
1159			 * packet size, but is actually a mislabeled two-channel
1160			 * setting; ignore it.
1161			 *
1162			 * Part 1: prepare quirk flag
1163			 */
1164			if (altno == 2 && num == 3 &&
1165			    fp && fp->altsetting == 1 && fp->channels == 1 &&
1166			    fp->formats == SNDRV_PCM_FMTBIT_S16_LE &&
1167			    protocol == UAC_VERSION_1 &&
1168			    le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) ==
1169							fp->maxpacksize * 2)
1170				bm_quirk = 1;
1171
1172			fp = snd_usb_get_audioformat_uac12(chip, alts, protocol,
1173							   iface_no, i, altno,
1174							   stream, bm_quirk);
1175			break;
1176		}
1177		case UAC_VERSION_3:
1178			fp = snd_usb_get_audioformat_uac3(chip, alts, &pd,
1179						iface_no, i, altno, stream);
1180			break;
1181		}
1182
1183		if (!fp)
1184			continue;
1185		else if (IS_ERR(fp))
1186			return PTR_ERR(fp);
1187
1188		if (fp->fmt_type != UAC_FORMAT_TYPE_I)
1189			*has_non_pcm = true;
1190		if ((fp->fmt_type == UAC_FORMAT_TYPE_I) == non_pcm) {
1191			audioformat_free(fp);
1192			kfree(pd);
1193			fp = NULL;
1194			pd = NULL;
1195			continue;
1196		}
1197
1198		dev_dbg(&dev->dev, "%u:%d: add audio endpoint %#x\n", iface_no, altno, fp->endpoint);
1199		if (protocol == UAC_VERSION_3)
1200			err = snd_usb_add_audio_stream_v3(chip, stream, fp, pd);
1201		else
1202			err = snd_usb_add_audio_stream(chip, stream, fp);
1203
1204		if (err < 0) {
1205			audioformat_free(fp);
1206			kfree(pd);
1207			return err;
1208		}
1209		/* try to set the interface... */
1210		usb_set_interface(chip->dev, iface_no, altno);
1211		snd_usb_init_pitch(chip, iface_no, alts, fp);
1212		snd_usb_init_sample_rate(chip, iface_no, alts, fp, fp->rate_max);
1213	}
1214	return 0;
1215}
1216
1217int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
1218{
1219	int err;
1220	bool has_non_pcm = false;
1221
1222	/* parse PCM formats */
1223	err = __snd_usb_parse_audio_interface(chip, iface_no, &has_non_pcm, false);
1224	if (err < 0)
1225		return err;
1226
1227	if (has_non_pcm) {
1228		/* parse non-PCM formats */
1229		err = __snd_usb_parse_audio_interface(chip, iface_no, &has_non_pcm, true);
1230		if (err < 0)
1231			return err;
1232	}
1233
1234	return 0;
1235}
1236
1237