1 // SPDX-License-Identifier: GPL-2.0-or-later
6 #include <linux/init.h>
7 #include <linux/slab.h>
9 #include <linux/usb/audio.h>
10 #include <linux/usb/audio-v2.h>
11 #include <linux/usb/audio-v3.h>
13 #include <sound/core.h>
14 #include <sound/pcm.h>
15 #include <sound/control.h>
16 #include <sound/tlv.h>
31 static void audioformat_free(struct audioformat
*fp
)
33 list_del(&fp
->list
); /* unlink for avoiding double-free */
34 kfree(fp
->rate_table
);
42 static void free_substream(struct snd_usb_substream
*subs
)
44 struct audioformat
*fp
, *n
;
46 if (!subs
->num_formats
)
47 return; /* not initialized */
48 list_for_each_entry_safe(fp
, n
, &subs
->fmt_list
, list
)
51 snd_media_stream_delete(subs
);
56 * free a usb stream instance
58 static void snd_usb_audio_stream_free(struct snd_usb_stream
*stream
)
60 free_substream(&stream
->substream
[0]);
61 free_substream(&stream
->substream
[1]);
62 list_del(&stream
->list
);
66 static void snd_usb_audio_pcm_free(struct snd_pcm
*pcm
)
68 struct snd_usb_stream
*stream
= pcm
->private_data
;
71 snd_usb_audio_stream_free(stream
);
76 * initialize the substream instance.
79 static void snd_usb_init_substream(struct snd_usb_stream
*as
,
81 struct audioformat
*fp
,
82 struct snd_usb_power_domain
*pd
)
84 struct snd_usb_substream
*subs
= &as
->substream
[stream
];
86 INIT_LIST_HEAD(&subs
->fmt_list
);
87 spin_lock_init(&subs
->lock
);
90 subs
->direction
= stream
;
91 subs
->dev
= as
->chip
->dev
;
92 subs
->txfr_quirk
= !!(as
->chip
->quirk_flags
& QUIRK_FLAG_ALIGN_TRANSFER
);
93 subs
->tx_length_quirk
= !!(as
->chip
->quirk_flags
& QUIRK_FLAG_TX_LENGTH
);
94 subs
->speed
= snd_usb_get_speed(subs
->dev
);
95 subs
->pkt_offset_adj
= 0;
96 subs
->stream_offset_adj
= 0;
98 snd_usb_set_pcm_ops(as
->pcm
, stream
);
100 list_add_tail(&fp
->list
, &subs
->fmt_list
);
101 subs
->formats
|= fp
->formats
;
103 subs
->fmt_type
= fp
->fmt_type
;
104 subs
->ep_num
= fp
->endpoint
;
105 if (fp
->channels
> subs
->channels_max
)
106 subs
->channels_max
= fp
->channels
;
110 /* Initialize Power Domain to idle status D1 */
111 snd_usb_power_domain_set(subs
->stream
->chip
, pd
,
115 snd_usb_preallocate_buffer(subs
);
118 /* kctl callbacks for usb-audio channel maps */
119 static int usb_chmap_ctl_info(struct snd_kcontrol
*kcontrol
,
120 struct snd_ctl_elem_info
*uinfo
)
122 struct snd_pcm_chmap
*info
= snd_kcontrol_chip(kcontrol
);
123 struct snd_usb_substream
*subs
= info
->private_data
;
125 uinfo
->type
= SNDRV_CTL_ELEM_TYPE_INTEGER
;
126 uinfo
->count
= subs
->channels_max
;
127 uinfo
->value
.integer
.min
= 0;
128 uinfo
->value
.integer
.max
= SNDRV_CHMAP_LAST
;
132 /* check whether a duplicated entry exists in the audiofmt list */
133 static bool have_dup_chmap(struct snd_usb_substream
*subs
,
134 struct audioformat
*fp
)
136 struct audioformat
*prev
= fp
;
138 list_for_each_entry_continue_reverse(prev
, &subs
->fmt_list
, list
) {
140 !memcmp(prev
->chmap
, fp
->chmap
, sizeof(*fp
->chmap
)))
146 static int usb_chmap_ctl_tlv(struct snd_kcontrol
*kcontrol
, int op_flag
,
147 unsigned int size
, unsigned int __user
*tlv
)
149 struct snd_pcm_chmap
*info
= snd_kcontrol_chip(kcontrol
);
150 struct snd_usb_substream
*subs
= info
->private_data
;
151 struct audioformat
*fp
;
152 unsigned int __user
*dst
;
157 if (put_user(SNDRV_CTL_TLVT_CONTAINER
, tlv
))
161 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
166 if (have_dup_chmap(subs
, fp
))
169 ch_bytes
= fp
->chmap
->channels
* 4;
170 if (size
< 8 + ch_bytes
)
172 if (put_user(SNDRV_CTL_TLVT_CHMAP_FIXED
, dst
) ||
173 put_user(ch_bytes
, dst
+ 1))
176 for (i
= 0; i
< fp
->chmap
->channels
; i
++, dst
++) {
177 if (put_user(fp
->chmap
->map
[i
], dst
))
181 count
+= 8 + ch_bytes
;
182 size
-= 8 + ch_bytes
;
184 if (put_user(count
, tlv
+ 1))
189 static int usb_chmap_ctl_get(struct snd_kcontrol
*kcontrol
,
190 struct snd_ctl_elem_value
*ucontrol
)
192 struct snd_pcm_chmap
*info
= snd_kcontrol_chip(kcontrol
);
193 struct snd_usb_substream
*subs
= info
->private_data
;
194 struct snd_pcm_chmap_elem
*chmap
= NULL
;
197 if (subs
->cur_audiofmt
)
198 chmap
= subs
->cur_audiofmt
->chmap
;
200 for (i
= 0; i
< chmap
->channels
; i
++)
201 ucontrol
->value
.integer
.value
[i
] = chmap
->map
[i
];
203 for (; i
< subs
->channels_max
; i
++)
204 ucontrol
->value
.integer
.value
[i
] = 0;
208 /* create a chmap kctl assigned to the given USB substream */
209 static int add_chmap(struct snd_pcm
*pcm
, int stream
,
210 struct snd_usb_substream
*subs
)
212 struct audioformat
*fp
;
213 struct snd_pcm_chmap
*chmap
;
214 struct snd_kcontrol
*kctl
;
217 list_for_each_entry(fp
, &subs
->fmt_list
, list
)
220 /* no chmap is found */
224 err
= snd_pcm_add_chmap_ctls(pcm
, stream
, NULL
, 0, 0, &chmap
);
228 /* override handlers */
229 chmap
->private_data
= subs
;
231 kctl
->info
= usb_chmap_ctl_info
;
232 kctl
->get
= usb_chmap_ctl_get
;
233 kctl
->tlv
.c
= usb_chmap_ctl_tlv
;
238 /* convert from USB ChannelConfig bits to ALSA chmap element */
239 static struct snd_pcm_chmap_elem
*convert_chmap(int channels
, unsigned int bits
,
242 static const unsigned int uac1_maps
[] = {
243 SNDRV_CHMAP_FL
, /* left front */
244 SNDRV_CHMAP_FR
, /* right front */
245 SNDRV_CHMAP_FC
, /* center front */
246 SNDRV_CHMAP_LFE
, /* LFE */
247 SNDRV_CHMAP_RL
, /* left surround */
248 SNDRV_CHMAP_RR
, /* right surround */
249 SNDRV_CHMAP_FLC
, /* left of center */
250 SNDRV_CHMAP_FRC
, /* right of center */
251 SNDRV_CHMAP_RC
, /* surround */
252 SNDRV_CHMAP_SL
, /* side left */
253 SNDRV_CHMAP_SR
, /* side right */
254 SNDRV_CHMAP_TC
, /* top */
257 static const unsigned int uac2_maps
[] = {
258 SNDRV_CHMAP_FL
, /* front left */
259 SNDRV_CHMAP_FR
, /* front right */
260 SNDRV_CHMAP_FC
, /* front center */
261 SNDRV_CHMAP_LFE
, /* LFE */
262 SNDRV_CHMAP_RL
, /* back left */
263 SNDRV_CHMAP_RR
, /* back right */
264 SNDRV_CHMAP_FLC
, /* front left of center */
265 SNDRV_CHMAP_FRC
, /* front right of center */
266 SNDRV_CHMAP_RC
, /* back center */
267 SNDRV_CHMAP_SL
, /* side left */
268 SNDRV_CHMAP_SR
, /* side right */
269 SNDRV_CHMAP_TC
, /* top center */
270 SNDRV_CHMAP_TFL
, /* top front left */
271 SNDRV_CHMAP_TFC
, /* top front center */
272 SNDRV_CHMAP_TFR
, /* top front right */
273 SNDRV_CHMAP_TRL
, /* top back left */
274 SNDRV_CHMAP_TRC
, /* top back center */
275 SNDRV_CHMAP_TRR
, /* top back right */
276 SNDRV_CHMAP_TFLC
, /* top front left of center */
277 SNDRV_CHMAP_TFRC
, /* top front right of center */
278 SNDRV_CHMAP_LLFE
, /* left LFE */
279 SNDRV_CHMAP_RLFE
, /* right LFE */
280 SNDRV_CHMAP_TSL
, /* top side left */
281 SNDRV_CHMAP_TSR
, /* top side right */
282 SNDRV_CHMAP_BC
, /* bottom center */
283 SNDRV_CHMAP_RLC
, /* back left of center */
284 SNDRV_CHMAP_RRC
, /* back right of center */
287 struct snd_pcm_chmap_elem
*chmap
;
288 const unsigned int *maps
;
291 if (channels
> ARRAY_SIZE(chmap
->map
))
294 chmap
= kzalloc(sizeof(*chmap
), GFP_KERNEL
);
298 maps
= protocol
== UAC_VERSION_2
? uac2_maps
: uac1_maps
;
299 chmap
->channels
= channels
;
303 for (; bits
&& *maps
; maps
++, bits
>>= 1) {
305 chmap
->map
[c
++] = *maps
;
306 if (c
== chmap
->channels
)
310 /* If we're missing wChannelConfig, then guess something
311 to make sure the channel map is not skipped entirely */
313 chmap
->map
[c
++] = SNDRV_CHMAP_MONO
;
315 for (; c
< channels
&& *maps
; maps
++)
316 chmap
->map
[c
++] = *maps
;
319 for (; c
< channels
; c
++)
320 chmap
->map
[c
] = SNDRV_CHMAP_UNKNOWN
;
325 /* UAC3 device stores channels information in Cluster Descriptors */
327 snd_pcm_chmap_elem
*convert_chmap_v3(struct uac3_cluster_header_descriptor
330 unsigned int channels
= cluster
->bNrChannels
;
331 struct snd_pcm_chmap_elem
*chmap
;
335 if (channels
> ARRAY_SIZE(chmap
->map
))
338 chmap
= kzalloc(sizeof(*chmap
), GFP_KERNEL
);
342 len
= le16_to_cpu(cluster
->wLength
);
344 p
+= sizeof(struct uac3_cluster_header_descriptor
);
346 while (((p
- (void *)cluster
) < len
) && (c
< channels
)) {
347 struct uac3_cluster_segment_descriptor
*cs_desc
= p
;
351 cs_len
= le16_to_cpu(cs_desc
->wLength
);
352 cs_type
= cs_desc
->bSegmentType
;
354 if (cs_type
== UAC3_CHANNEL_INFORMATION
) {
355 struct uac3_cluster_information_segment_descriptor
*is
= p
;
359 * TODO: this conversion is not complete, update it
360 * after adding UAC3 values to asound.h
362 switch (is
->bChRelationship
) {
364 map
= SNDRV_CHMAP_MONO
;
367 case UAC3_CH_FRONT_LEFT
:
368 case UAC3_CH_HEADPHONE_LEFT
:
369 map
= SNDRV_CHMAP_FL
;
372 case UAC3_CH_FRONT_RIGHT
:
373 case UAC3_CH_HEADPHONE_RIGHT
:
374 map
= SNDRV_CHMAP_FR
;
376 case UAC3_CH_FRONT_CENTER
:
377 map
= SNDRV_CHMAP_FC
;
379 case UAC3_CH_FRONT_LEFT_OF_CENTER
:
380 map
= SNDRV_CHMAP_FLC
;
382 case UAC3_CH_FRONT_RIGHT_OF_CENTER
:
383 map
= SNDRV_CHMAP_FRC
;
385 case UAC3_CH_SIDE_LEFT
:
386 map
= SNDRV_CHMAP_SL
;
388 case UAC3_CH_SIDE_RIGHT
:
389 map
= SNDRV_CHMAP_SR
;
391 case UAC3_CH_BACK_LEFT
:
392 map
= SNDRV_CHMAP_RL
;
394 case UAC3_CH_BACK_RIGHT
:
395 map
= SNDRV_CHMAP_RR
;
397 case UAC3_CH_BACK_CENTER
:
398 map
= SNDRV_CHMAP_RC
;
400 case UAC3_CH_BACK_LEFT_OF_CENTER
:
401 map
= SNDRV_CHMAP_RLC
;
403 case UAC3_CH_BACK_RIGHT_OF_CENTER
:
404 map
= SNDRV_CHMAP_RRC
;
406 case UAC3_CH_TOP_CENTER
:
407 map
= SNDRV_CHMAP_TC
;
409 case UAC3_CH_TOP_FRONT_LEFT
:
410 map
= SNDRV_CHMAP_TFL
;
412 case UAC3_CH_TOP_FRONT_RIGHT
:
413 map
= SNDRV_CHMAP_TFR
;
415 case UAC3_CH_TOP_FRONT_CENTER
:
416 map
= SNDRV_CHMAP_TFC
;
418 case UAC3_CH_TOP_FRONT_LOC
:
419 map
= SNDRV_CHMAP_TFLC
;
421 case UAC3_CH_TOP_FRONT_ROC
:
422 map
= SNDRV_CHMAP_TFRC
;
424 case UAC3_CH_TOP_SIDE_LEFT
:
425 map
= SNDRV_CHMAP_TSL
;
427 case UAC3_CH_TOP_SIDE_RIGHT
:
428 map
= SNDRV_CHMAP_TSR
;
430 case UAC3_CH_TOP_BACK_LEFT
:
431 map
= SNDRV_CHMAP_TRL
;
433 case UAC3_CH_TOP_BACK_RIGHT
:
434 map
= SNDRV_CHMAP_TRR
;
436 case UAC3_CH_TOP_BACK_CENTER
:
437 map
= SNDRV_CHMAP_TRC
;
439 case UAC3_CH_BOTTOM_CENTER
:
440 map
= SNDRV_CHMAP_BC
;
442 case UAC3_CH_LOW_FREQUENCY_EFFECTS
:
443 map
= SNDRV_CHMAP_LFE
;
445 case UAC3_CH_LFE_LEFT
:
446 map
= SNDRV_CHMAP_LLFE
;
448 case UAC3_CH_LFE_RIGHT
:
449 map
= SNDRV_CHMAP_RLFE
;
451 case UAC3_CH_RELATIONSHIP_UNDEFINED
:
453 map
= SNDRV_CHMAP_UNKNOWN
;
456 chmap
->map
[c
++] = map
;
462 pr_err("%s: channel number mismatch\n", __func__
);
464 chmap
->channels
= channels
;
466 for (; c
< channels
; c
++)
467 chmap
->map
[c
] = SNDRV_CHMAP_UNKNOWN
;
473 * add this endpoint to the chip instance.
474 * if a stream with the same endpoint already exists, append to it.
475 * if not, create a new pcm stream. note, fp is added to the substream
476 * fmt_list and will be freed on the chip instance release. do not free
477 * fp or do remove it from the substream fmt_list to avoid double-free.
479 static int __snd_usb_add_audio_stream(struct snd_usb_audio
*chip
,
481 struct audioformat
*fp
,
482 struct snd_usb_power_domain
*pd
)
485 struct snd_usb_stream
*as
;
486 struct snd_usb_substream
*subs
;
490 list_for_each_entry(as
, &chip
->pcm_list
, list
) {
491 if (as
->fmt_type
!= fp
->fmt_type
)
493 subs
= &as
->substream
[stream
];
494 if (subs
->ep_num
== fp
->endpoint
) {
495 list_add_tail(&fp
->list
, &subs
->fmt_list
);
497 subs
->formats
|= fp
->formats
;
502 if (chip
->card
->registered
)
503 chip
->need_delayed_register
= true;
505 /* look for an empty stream */
506 list_for_each_entry(as
, &chip
->pcm_list
, list
) {
507 if (as
->fmt_type
!= fp
->fmt_type
)
509 subs
= &as
->substream
[stream
];
512 err
= snd_pcm_new_stream(as
->pcm
, stream
, 1);
515 snd_usb_init_substream(as
, stream
, fp
, pd
);
516 return add_chmap(as
->pcm
, stream
, subs
);
519 /* create a new pcm */
520 as
= kzalloc(sizeof(*as
), GFP_KERNEL
);
523 as
->pcm_index
= chip
->pcm_devs
;
525 as
->fmt_type
= fp
->fmt_type
;
526 err
= snd_pcm_new(chip
->card
, "USB Audio", chip
->pcm_devs
,
527 stream
== SNDRV_PCM_STREAM_PLAYBACK
? 1 : 0,
528 stream
== SNDRV_PCM_STREAM_PLAYBACK
? 0 : 1,
535 pcm
->private_data
= as
;
536 pcm
->private_free
= snd_usb_audio_pcm_free
;
538 if (chip
->pcm_devs
> 0)
539 sprintf(pcm
->name
, "USB Audio #%d", chip
->pcm_devs
);
541 strcpy(pcm
->name
, "USB Audio");
543 snd_usb_init_substream(as
, stream
, fp
, pd
);
546 * Keep using head insertion for M-Audio Audiophile USB (tm) which has a
547 * fix to swap capture stream order in conf/cards/USB-audio.conf
549 if (chip
->usb_id
== USB_ID(0x0763, 0x2003))
550 list_add(&as
->list
, &chip
->pcm_list
);
552 list_add_tail(&as
->list
, &chip
->pcm_list
);
556 snd_usb_proc_pcm_format_add(as
);
558 return add_chmap(pcm
, stream
, &as
->substream
[stream
]);
561 int snd_usb_add_audio_stream(struct snd_usb_audio
*chip
,
563 struct audioformat
*fp
)
565 return __snd_usb_add_audio_stream(chip
, stream
, fp
, NULL
);
568 static int snd_usb_add_audio_stream_v3(struct snd_usb_audio
*chip
,
570 struct audioformat
*fp
,
571 struct snd_usb_power_domain
*pd
)
573 return __snd_usb_add_audio_stream(chip
, stream
, fp
, pd
);
576 static int parse_uac_endpoint_attributes(struct snd_usb_audio
*chip
,
577 struct usb_host_interface
*alts
,
578 int protocol
, int iface_no
)
580 /* parsed with a v1 header here. that's ok as we only look at the
581 * header first which is the same for both versions */
582 struct uac_iso_endpoint_descriptor
*csep
;
583 struct usb_interface_descriptor
*altsd
= get_iface_desc(alts
);
586 csep
= snd_usb_find_desc(alts
->endpoint
[0].extra
, alts
->endpoint
[0].extralen
, NULL
, USB_DT_CS_ENDPOINT
);
588 /* Creamware Noah has this descriptor after the 2nd endpoint */
589 if (!csep
&& altsd
->bNumEndpoints
>= 2)
590 csep
= snd_usb_find_desc(alts
->endpoint
[1].extra
, alts
->endpoint
[1].extralen
, NULL
, USB_DT_CS_ENDPOINT
);
593 * If we can't locate the USB_DT_CS_ENDPOINT descriptor in the extra
594 * bytes after the first endpoint, go search the entire interface.
595 * Some devices have it directly *before* the standard endpoint.
598 csep
= snd_usb_find_desc(alts
->extra
, alts
->extralen
, NULL
, USB_DT_CS_ENDPOINT
);
600 if (!csep
|| csep
->bLength
< 7 ||
601 csep
->bDescriptorSubtype
!= UAC_EP_GENERAL
)
604 if (protocol
== UAC_VERSION_1
) {
605 attributes
= csep
->bmAttributes
;
606 } else if (protocol
== UAC_VERSION_2
) {
607 struct uac2_iso_endpoint_descriptor
*csep2
=
608 (struct uac2_iso_endpoint_descriptor
*) csep
;
610 if (csep2
->bLength
< sizeof(*csep2
))
612 attributes
= csep
->bmAttributes
& UAC_EP_CS_ATTR_FILL_MAX
;
614 /* emulate the endpoint attributes of a v1 device */
615 if (csep2
->bmControls
& UAC2_CONTROL_PITCH
)
616 attributes
|= UAC_EP_CS_ATTR_PITCH_CONTROL
;
617 } else { /* UAC_VERSION_3 */
618 struct uac3_iso_endpoint_descriptor
*csep3
=
619 (struct uac3_iso_endpoint_descriptor
*) csep
;
621 if (csep3
->bLength
< sizeof(*csep3
))
623 /* emulate the endpoint attributes of a v1 device */
624 if (le32_to_cpu(csep3
->bmControls
) & UAC2_CONTROL_PITCH
)
625 attributes
|= UAC_EP_CS_ATTR_PITCH_CONTROL
;
632 "%u:%d : no or invalid class specific endpoint descriptor\n",
633 iface_no
, altsd
->bAlternateSetting
);
637 /* find an input terminal descriptor (either UAC1 or UAC2) with the given
641 snd_usb_find_input_terminal_descriptor(struct usb_host_interface
*ctrl_iface
,
642 int terminal_id
, int protocol
)
644 struct uac2_input_terminal_descriptor
*term
= NULL
;
646 while ((term
= snd_usb_find_csint_desc(ctrl_iface
->extra
,
647 ctrl_iface
->extralen
,
648 term
, UAC_INPUT_TERMINAL
))) {
649 if (!snd_usb_validate_audio_desc(term
, protocol
))
651 if (term
->bTerminalID
== terminal_id
)
659 snd_usb_find_output_terminal_descriptor(struct usb_host_interface
*ctrl_iface
,
660 int terminal_id
, int protocol
)
662 /* OK to use with both UAC2 and UAC3 */
663 struct uac2_output_terminal_descriptor
*term
= NULL
;
665 while ((term
= snd_usb_find_csint_desc(ctrl_iface
->extra
,
666 ctrl_iface
->extralen
,
667 term
, UAC_OUTPUT_TERMINAL
))) {
668 if (!snd_usb_validate_audio_desc(term
, protocol
))
670 if (term
->bTerminalID
== terminal_id
)
677 static struct audioformat
*
678 audio_format_alloc_init(struct snd_usb_audio
*chip
,
679 struct usb_host_interface
*alts
,
680 int protocol
, int iface_no
, int altset_idx
,
681 int altno
, int num_channels
, int clock
)
683 struct audioformat
*fp
;
685 fp
= kzalloc(sizeof(*fp
), GFP_KERNEL
);
689 fp
->iface
= iface_no
;
690 fp
->altsetting
= altno
;
691 fp
->altset_idx
= altset_idx
;
692 fp
->endpoint
= get_endpoint(alts
, 0)->bEndpointAddress
;
693 fp
->ep_attr
= get_endpoint(alts
, 0)->bmAttributes
;
694 fp
->datainterval
= snd_usb_parse_datainterval(chip
, alts
);
695 fp
->protocol
= protocol
;
696 fp
->maxpacksize
= le16_to_cpu(get_endpoint(alts
, 0)->wMaxPacketSize
);
697 fp
->channels
= num_channels
;
698 if (snd_usb_get_speed(chip
->dev
) == USB_SPEED_HIGH
)
699 fp
->maxpacksize
= (((fp
->maxpacksize
>> 11) & 3) + 1)
700 * (fp
->maxpacksize
& 0x7ff);
702 INIT_LIST_HEAD(&fp
->list
);
707 static struct audioformat
*
708 snd_usb_get_audioformat_uac12(struct snd_usb_audio
*chip
,
709 struct usb_host_interface
*alts
,
710 int protocol
, int iface_no
, int altset_idx
,
711 int altno
, int stream
, int bm_quirk
)
713 struct usb_device
*dev
= chip
->dev
;
714 struct uac_format_type_i_continuous_descriptor
*fmt
;
715 unsigned int num_channels
= 0, chconfig
= 0;
716 struct usb_host_interface
*ctrl_intf
;
717 struct audioformat
*fp
;
721 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, iface_no
);
723 /* get audio formats */
724 if (protocol
== UAC_VERSION_1
) {
725 struct uac1_as_header_descriptor
*as
=
726 snd_usb_find_csint_desc(alts
->extra
, alts
->extralen
,
727 NULL
, UAC_AS_GENERAL
);
728 struct uac_input_terminal_descriptor
*iterm
;
732 "%u:%d : UAC_AS_GENERAL descriptor not found\n",
737 if (as
->bLength
< sizeof(*as
)) {
739 "%u:%d : invalid UAC_AS_GENERAL desc\n",
744 format
= le16_to_cpu(as
->wFormatTag
); /* remember the format value */
746 iterm
= snd_usb_find_input_terminal_descriptor(ctrl_intf
,
750 num_channels
= iterm
->bNrChannels
;
751 chconfig
= le16_to_cpu(iterm
->wChannelConfig
);
753 } else { /* UAC_VERSION_2 */
754 struct uac2_input_terminal_descriptor
*input_term
;
755 struct uac2_output_terminal_descriptor
*output_term
;
756 struct uac2_as_header_descriptor
*as
=
757 snd_usb_find_csint_desc(alts
->extra
, alts
->extralen
,
758 NULL
, UAC_AS_GENERAL
);
762 "%u:%d : UAC_AS_GENERAL descriptor not found\n",
767 if (as
->bLength
< sizeof(*as
)) {
769 "%u:%d : invalid UAC_AS_GENERAL desc\n",
774 num_channels
= as
->bNrChannels
;
775 format
= le32_to_cpu(as
->bmFormats
);
776 chconfig
= le32_to_cpu(as
->bmChannelConfig
);
779 * lookup the terminal associated to this interface
780 * to extract the clock
782 input_term
= snd_usb_find_input_terminal_descriptor(ctrl_intf
,
786 clock
= input_term
->bCSourceID
;
787 if (!chconfig
&& (num_channels
== input_term
->bNrChannels
))
788 chconfig
= le32_to_cpu(input_term
->bmChannelConfig
);
792 output_term
= snd_usb_find_output_terminal_descriptor(ctrl_intf
,
796 clock
= output_term
->bCSourceID
;
801 "%u:%d : bogus bTerminalLink %d\n",
802 iface_no
, altno
, as
->bTerminalLink
);
807 /* get format type */
808 fmt
= snd_usb_find_csint_desc(alts
->extra
, alts
->extralen
,
809 NULL
, UAC_FORMAT_TYPE
);
812 "%u:%d : no UAC_FORMAT_TYPE desc\n",
816 if (((protocol
== UAC_VERSION_1
) && (fmt
->bLength
< 8))
817 || ((protocol
== UAC_VERSION_2
) &&
818 (fmt
->bLength
< 6))) {
820 "%u:%d : invalid UAC_FORMAT_TYPE desc\n",
826 * Blue Microphones workaround: The last altsetting is
827 * identical with the previous one, except for a larger
828 * packet size, but is actually a mislabeled two-channel
829 * setting; ignore it.
831 * Part 2: analyze quirk flag and format
833 if (bm_quirk
&& fmt
->bNrChannels
== 1 && fmt
->bSubframeSize
== 2)
836 fp
= audio_format_alloc_init(chip
, alts
, protocol
, iface_no
,
837 altset_idx
, altno
, num_channels
, clock
);
839 return ERR_PTR(-ENOMEM
);
841 fp
->attributes
= parse_uac_endpoint_attributes(chip
, alts
, protocol
,
844 /* some quirks for attributes here */
845 snd_usb_audioformat_attributes_quirk(chip
, fp
, stream
);
847 /* ok, let's parse further... */
848 if (snd_usb_parse_audio_format(chip
, fp
, format
,
850 audioformat_free(fp
);
855 if (fp
->channels
!= num_channels
)
858 fp
->chmap
= convert_chmap(fp
->channels
, chconfig
, protocol
);
863 static struct audioformat
*
864 snd_usb_get_audioformat_uac3(struct snd_usb_audio
*chip
,
865 struct usb_host_interface
*alts
,
866 struct snd_usb_power_domain
**pd_out
,
867 int iface_no
, int altset_idx
,
868 int altno
, int stream
)
870 struct usb_device
*dev
= chip
->dev
;
871 struct uac3_input_terminal_descriptor
*input_term
;
872 struct uac3_output_terminal_descriptor
*output_term
;
873 struct uac3_cluster_header_descriptor
*cluster
;
874 struct uac3_as_header_descriptor
*as
= NULL
;
875 struct uac3_hc_descriptor_header hc_header
;
876 struct usb_host_interface
*ctrl_intf
;
877 struct snd_pcm_chmap_elem
*chmap
;
878 struct snd_usb_power_domain
*pd
;
879 unsigned char badd_profile
;
880 u64 badd_formats
= 0;
881 unsigned int num_channels
;
882 struct audioformat
*fp
;
883 u16 cluster_id
, wLength
;
887 badd_profile
= chip
->badd_profile
;
888 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, iface_no
);
890 if (badd_profile
>= UAC3_FUNCTION_SUBCLASS_GENERIC_IO
) {
891 unsigned int maxpacksize
=
892 le16_to_cpu(get_endpoint(alts
, 0)->wMaxPacketSize
);
894 switch (maxpacksize
) {
897 "%u:%d : incorrect wMaxPacketSize for BADD profile\n",
900 case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_16
:
901 case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_16
:
902 badd_formats
= SNDRV_PCM_FMTBIT_S16_LE
;
905 case UAC3_BADD_EP_MAXPSIZE_SYNC_MONO_24
:
906 case UAC3_BADD_EP_MAXPSIZE_ASYNC_MONO_24
:
907 badd_formats
= SNDRV_PCM_FMTBIT_S24_3LE
;
910 case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_16
:
911 case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_16
:
912 badd_formats
= SNDRV_PCM_FMTBIT_S16_LE
;
915 case UAC3_BADD_EP_MAXPSIZE_SYNC_STEREO_24
:
916 case UAC3_BADD_EP_MAXPSIZE_ASYNC_STEREO_24
:
917 badd_formats
= SNDRV_PCM_FMTBIT_S24_3LE
;
922 chmap
= kzalloc(sizeof(*chmap
), GFP_KERNEL
);
924 return ERR_PTR(-ENOMEM
);
926 if (num_channels
== 1) {
927 chmap
->map
[0] = SNDRV_CHMAP_MONO
;
929 chmap
->map
[0] = SNDRV_CHMAP_FL
;
930 chmap
->map
[1] = SNDRV_CHMAP_FR
;
933 chmap
->channels
= num_channels
;
934 clock
= UAC3_BADD_CS_ID9
;
938 as
= snd_usb_find_csint_desc(alts
->extra
, alts
->extralen
,
939 NULL
, UAC_AS_GENERAL
);
942 "%u:%d : UAC_AS_GENERAL descriptor not found\n",
947 if (as
->bLength
< sizeof(*as
)) {
949 "%u:%d : invalid UAC_AS_GENERAL desc\n",
954 cluster_id
= le16_to_cpu(as
->wClusterDescrID
);
957 "%u:%d : no cluster descriptor\n",
963 * Get number of channels and channel map through
964 * High Capability Cluster Descriptor
966 * First step: get High Capability header and
967 * read size of Cluster Descriptor
969 err
= snd_usb_ctl_msg(chip
->dev
,
970 usb_rcvctrlpipe(chip
->dev
, 0),
971 UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR
,
972 USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
974 snd_usb_ctrl_intf(ctrl_intf
),
975 &hc_header
, sizeof(hc_header
));
978 else if (err
!= sizeof(hc_header
)) {
980 "%u:%d : can't get High Capability descriptor\n",
982 return ERR_PTR(-EIO
);
986 * Second step: allocate needed amount of memory
987 * and request Cluster Descriptor
989 wLength
= le16_to_cpu(hc_header
.wLength
);
990 cluster
= kzalloc(wLength
, GFP_KERNEL
);
992 return ERR_PTR(-ENOMEM
);
993 err
= snd_usb_ctl_msg(chip
->dev
,
994 usb_rcvctrlpipe(chip
->dev
, 0),
995 UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR
,
996 USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
998 snd_usb_ctrl_intf(ctrl_intf
),
1002 return ERR_PTR(err
);
1003 } else if (err
!= wLength
) {
1005 "%u:%d : can't get Cluster Descriptor\n",
1008 return ERR_PTR(-EIO
);
1011 num_channels
= cluster
->bNrChannels
;
1012 chmap
= convert_chmap_v3(cluster
);
1016 * lookup the terminal associated to this interface
1017 * to extract the clock
1019 input_term
= snd_usb_find_input_terminal_descriptor(ctrl_intf
,
1023 clock
= input_term
->bCSourceID
;
1027 output_term
= snd_usb_find_output_terminal_descriptor(ctrl_intf
,
1031 clock
= output_term
->bCSourceID
;
1035 dev_err(&dev
->dev
, "%u:%d : bogus bTerminalLink %d\n",
1036 iface_no
, altno
, as
->bTerminalLink
);
1041 fp
= audio_format_alloc_init(chip
, alts
, UAC_VERSION_3
, iface_no
,
1042 altset_idx
, altno
, num_channels
, clock
);
1045 return ERR_PTR(-ENOMEM
);
1050 if (badd_profile
>= UAC3_FUNCTION_SUBCLASS_GENERIC_IO
) {
1051 fp
->attributes
= 0; /* No attributes */
1053 fp
->fmt_type
= UAC_FORMAT_TYPE_I
;
1054 fp
->formats
= badd_formats
;
1056 fp
->nr_rates
= 0; /* SNDRV_PCM_RATE_CONTINUOUS */
1057 fp
->rate_min
= UAC3_BADD_SAMPLING_RATE
;
1058 fp
->rate_max
= UAC3_BADD_SAMPLING_RATE
;
1059 fp
->rates
= SNDRV_PCM_RATE_CONTINUOUS
;
1061 pd
= kzalloc(sizeof(*pd
), GFP_KERNEL
);
1063 audioformat_free(fp
);
1066 pd
->pd_id
= (stream
== SNDRV_PCM_STREAM_PLAYBACK
) ?
1067 UAC3_BADD_PD_ID10
: UAC3_BADD_PD_ID11
;
1068 pd
->pd_d1d0_rec
= UAC3_BADD_PD_RECOVER_D1D0
;
1069 pd
->pd_d2d0_rec
= UAC3_BADD_PD_RECOVER_D2D0
;
1070 pd
->ctrl_iface
= ctrl_intf
;
1073 fp
->attributes
= parse_uac_endpoint_attributes(chip
, alts
,
1077 pd
= snd_usb_find_power_domain(ctrl_intf
,
1080 /* ok, let's parse further... */
1081 if (snd_usb_parse_audio_format_v3(chip
, fp
, as
, stream
) < 0) {
1083 audioformat_free(fp
);
1094 static int __snd_usb_parse_audio_interface(struct snd_usb_audio
*chip
,
1096 bool *has_non_pcm
, bool non_pcm
)
1098 struct usb_device
*dev
;
1099 struct usb_interface
*iface
;
1100 struct usb_host_interface
*alts
;
1101 struct usb_interface_descriptor
*altsd
;
1102 int i
, altno
, err
, stream
;
1103 struct audioformat
*fp
= NULL
;
1104 struct snd_usb_power_domain
*pd
= NULL
;
1105 bool set_iface_first
;
1110 /* parse the interface's altsettings */
1111 iface
= usb_ifnum_to_if(dev
, iface_no
);
1113 num
= iface
->num_altsetting
;
1116 * Dallas DS4201 workaround: It presents 5 altsettings, but the last
1117 * one misses syncpipe, and does not produce any sound.
1119 if (chip
->usb_id
== USB_ID(0x04fa, 0x4201) && num
>= 4)
1122 for (i
= 0; i
< num
; i
++) {
1123 alts
= &iface
->altsetting
[i
];
1124 altsd
= get_iface_desc(alts
);
1125 protocol
= altsd
->bInterfaceProtocol
;
1126 /* skip invalid one */
1127 if (((altsd
->bInterfaceClass
!= USB_CLASS_AUDIO
||
1128 (altsd
->bInterfaceSubClass
!= USB_SUBCLASS_AUDIOSTREAMING
&&
1129 altsd
->bInterfaceSubClass
!= USB_SUBCLASS_VENDOR_SPEC
)) &&
1130 altsd
->bInterfaceClass
!= USB_CLASS_VENDOR_SPEC
) ||
1131 altsd
->bNumEndpoints
< 1 ||
1132 le16_to_cpu(get_endpoint(alts
, 0)->wMaxPacketSize
) == 0)
1134 /* must be isochronous */
1135 if ((get_endpoint(alts
, 0)->bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
) !=
1136 USB_ENDPOINT_XFER_ISOC
)
1138 /* check direction */
1139 stream
= (get_endpoint(alts
, 0)->bEndpointAddress
& USB_DIR_IN
) ?
1140 SNDRV_PCM_STREAM_CAPTURE
: SNDRV_PCM_STREAM_PLAYBACK
;
1141 altno
= altsd
->bAlternateSetting
;
1143 if (snd_usb_apply_interface_quirk(chip
, iface_no
, altno
))
1147 * Roland audio streaming interfaces are marked with protocols
1148 * 0/1/2, but are UAC 1 compatible.
1150 if (USB_ID_VENDOR(chip
->usb_id
) == 0x0582 &&
1151 altsd
->bInterfaceClass
== USB_CLASS_VENDOR_SPEC
&&
1153 protocol
= UAC_VERSION_1
;
1157 dev_dbg(&dev
->dev
, "%u:%d: unknown interface protocol %#02x, assuming v1\n",
1158 iface_no
, altno
, protocol
);
1159 protocol
= UAC_VERSION_1
;
1162 case UAC_VERSION_2
: {
1166 * Blue Microphones workaround: The last altsetting is
1167 * identical with the previous one, except for a larger
1168 * packet size, but is actually a mislabeled two-channel
1169 * setting; ignore it.
1171 * Part 1: prepare quirk flag
1173 if (altno
== 2 && num
== 3 &&
1174 fp
&& fp
->altsetting
== 1 && fp
->channels
== 1 &&
1175 fp
->formats
== SNDRV_PCM_FMTBIT_S16_LE
&&
1176 protocol
== UAC_VERSION_1
&&
1177 le16_to_cpu(get_endpoint(alts
, 0)->wMaxPacketSize
) ==
1178 fp
->maxpacksize
* 2)
1181 fp
= snd_usb_get_audioformat_uac12(chip
, alts
, protocol
,
1187 fp
= snd_usb_get_audioformat_uac3(chip
, alts
, &pd
,
1188 iface_no
, i
, altno
, stream
);
1194 else if (IS_ERR(fp
))
1197 if (fp
->fmt_type
!= UAC_FORMAT_TYPE_I
)
1198 *has_non_pcm
= true;
1199 if ((fp
->fmt_type
== UAC_FORMAT_TYPE_I
) == non_pcm
) {
1200 audioformat_free(fp
);
1207 snd_usb_audioformat_set_sync_ep(chip
, fp
);
1209 dev_dbg(&dev
->dev
, "%u:%d: add audio endpoint %#x\n", iface_no
, altno
, fp
->endpoint
);
1210 if (protocol
== UAC_VERSION_3
)
1211 err
= snd_usb_add_audio_stream_v3(chip
, stream
, fp
, pd
);
1213 err
= snd_usb_add_audio_stream(chip
, stream
, fp
);
1216 audioformat_free(fp
);
1222 err
= snd_usb_add_endpoint(chip
, fp
->endpoint
,
1223 SND_USB_ENDPOINT_TYPE_DATA
);
1228 err
= snd_usb_add_endpoint(chip
, fp
->sync_ep
,
1230 SND_USB_ENDPOINT_TYPE_DATA
:
1231 SND_USB_ENDPOINT_TYPE_SYNC
);
1236 set_iface_first
= false;
1237 if (protocol
== UAC_VERSION_1
||
1238 (chip
->quirk_flags
& QUIRK_FLAG_SET_IFACE_FIRST
))
1239 set_iface_first
= true;
1241 /* try to set the interface... */
1242 usb_set_interface(chip
->dev
, iface_no
, 0);
1243 if (set_iface_first
)
1244 usb_set_interface(chip
->dev
, iface_no
, altno
);
1245 snd_usb_init_pitch(chip
, fp
);
1246 snd_usb_init_sample_rate(chip
, fp
, fp
->rate_max
);
1247 if (!set_iface_first
)
1248 usb_set_interface(chip
->dev
, iface_no
, altno
);
1253 int snd_usb_parse_audio_interface(struct snd_usb_audio
*chip
, int iface_no
)
1256 bool has_non_pcm
= false;
1258 /* parse PCM formats */
1259 err
= __snd_usb_parse_audio_interface(chip
, iface_no
, &has_non_pcm
, false);
1264 /* parse non-PCM formats */
1265 err
= __snd_usb_parse_audio_interface(chip
, iface_no
, &has_non_pcm
, true);