19 #include <linux/slab.h>
21 #include <linux/usb/audio.h>
59 static void snd_usb_audio_stream_free(
struct snd_usb_stream *stream)
67 static void snd_usb_audio_pcm_free(
struct snd_pcm *pcm)
72 snd_usb_audio_stream_free(stream);
142 snd_usb_init_substream(as, stream, fp);
170 snd_usb_init_substream(as, stream, fp);
181 struct usb_host_interface *alts,
196 if (!csep || csep->
bLength < 7 ||
199 " class specific endpoint descriptor\n",
200 chip->
dev->devnum, iface_no,
222 snd_usb_find_input_terminal_descriptor(
struct usb_host_interface *ctrl_iface,
228 ctrl_iface->extralen,
238 snd_usb_find_output_terminal_descriptor(
struct usb_host_interface *ctrl_iface,
244 ctrl_iface->extralen,
255 struct usb_device *
dev;
257 struct usb_host_interface *alts;
259 int i, altno,
err, stream;
270 num = iface->num_altsetting;
279 for (i = 0; i < num; i++) {
280 alts = &iface->altsetting[
i];
307 dev->devnum, iface_no, altno, protocol);
317 dev->devnum, iface_no, altno);
321 if (as->
bLength <
sizeof(*as)) {
323 dev->devnum, iface_no, altno);
339 dev->devnum, iface_no, altno);
343 if (as->
bLength <
sizeof(*as)) {
345 dev->devnum, iface_no, altno);
354 input_term = snd_usb_find_input_terminal_descriptor(chip->
ctrl_intf,
361 output_term = snd_usb_find_output_terminal_descriptor(chip->
ctrl_intf,
378 dev->devnum, iface_no, altno);
384 dev->devnum, iface_no, altno);
395 altno == 2 && num == 3 &&
409 fp->
iface = iface_no;
421 fp->
attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
427 case USB_ID(0x0a92, 0x0053):
433 case USB_ID(0x041e, 0x3020):
434 case USB_ID(0x0763, 0x2003):
438 case USB_ID(0x0763, 0x2001):
439 case USB_ID(0x0763, 0x2012):
440 case USB_ID(0x047f, 0x0ca1):
441 case USB_ID(0x077d, 0x07af):