Lines Matching +full:hall +full:- +full:channel
1 // SPDX-License-Identifier: GPL-2.0-or-later
38 int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber; in create_composite_quirk()
42 for (quirk = quirk_comp->data; quirk->ifnum >= 0; ++quirk) { in create_composite_quirk()
43 iface = usb_ifnum_to_if(chip->dev, quirk->ifnum); in create_composite_quirk()
46 if (quirk->ifnum != probed_ifnum && in create_composite_quirk()
54 for (quirk = quirk_comp->data; quirk->ifnum >= 0; ++quirk) { in create_composite_quirk()
55 iface = usb_ifnum_to_if(chip->dev, quirk->ifnum); in create_composite_quirk()
58 if (quirk->ifnum != probed_ifnum && in create_composite_quirk()
99 alts = &iface->altsetting[0]; in create_standard_audio_quirk()
101 err = snd_usb_parse_audio_interface(chip, altsd->bInterfaceNumber); in create_standard_audio_quirk()
104 altsd->bInterfaceNumber, err); in create_standard_audio_quirk()
108 usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0); in create_standard_audio_quirk()
120 stream = (fp->endpoint & USB_DIR_IN) ? in add_audio_stream_from_fixed_fmt()
129 err = snd_usb_add_endpoint(chip, fp->endpoint, in add_audio_stream_from_fixed_fmt()
134 if (fp->sync_ep) { in add_audio_stream_from_fixed_fmt()
135 err = snd_usb_add_endpoint(chip, fp->sync_ep, in add_audio_stream_from_fixed_fmt()
136 fp->implicit_fb ? in add_audio_stream_from_fixed_fmt()
160 fp = kmemdup(quirk->data, sizeof(*fp), GFP_KERNEL); in create_fixed_stream_quirk()
162 return -ENOMEM; in create_fixed_stream_quirk()
164 INIT_LIST_HEAD(&fp->list); in create_fixed_stream_quirk()
165 if (fp->nr_rates > MAX_NR_RATES) { in create_fixed_stream_quirk()
167 return -EINVAL; in create_fixed_stream_quirk()
169 if (fp->nr_rates > 0) { in create_fixed_stream_quirk()
170 rate_table = kmemdup(fp->rate_table, in create_fixed_stream_quirk()
171 sizeof(int) * fp->nr_rates, GFP_KERNEL); in create_fixed_stream_quirk()
174 return -ENOMEM; in create_fixed_stream_quirk()
176 fp->rate_table = rate_table; in create_fixed_stream_quirk()
179 if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber || in create_fixed_stream_quirk()
180 fp->altset_idx >= iface->num_altsetting) { in create_fixed_stream_quirk()
181 err = -EINVAL; in create_fixed_stream_quirk()
184 alts = &iface->altsetting[fp->altset_idx]; in create_fixed_stream_quirk()
186 if (altsd->bNumEndpoints <= fp->ep_idx) { in create_fixed_stream_quirk()
187 err = -EINVAL; in create_fixed_stream_quirk()
191 fp->protocol = altsd->bInterfaceProtocol; in create_fixed_stream_quirk()
193 if (fp->datainterval == 0) in create_fixed_stream_quirk()
194 fp->datainterval = snd_usb_parse_datainterval(chip, alts); in create_fixed_stream_quirk()
195 if (fp->maxpacksize == 0) in create_fixed_stream_quirk()
196 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, fp->ep_idx)->wMaxPacketSize); in create_fixed_stream_quirk()
197 if (!fp->fmt_type) in create_fixed_stream_quirk()
198 fp->fmt_type = UAC_FORMAT_TYPE_I; in create_fixed_stream_quirk()
204 usb_set_interface(chip->dev, fp->iface, 0); in create_fixed_stream_quirk()
206 snd_usb_init_sample_rate(chip, fp, fp->rate_max); in create_fixed_stream_quirk()
210 list_del(&fp->list); /* unlink for avoiding double-free */ in create_fixed_stream_quirk()
233 /* must have a non-zero altsetting for streaming */ in create_auto_pcm_quirk()
234 if (iface->num_altsetting < 2) in create_auto_pcm_quirk()
235 return -ENODEV; in create_auto_pcm_quirk()
236 alts = &iface->altsetting[1]; in create_auto_pcm_quirk()
240 if (altsd->bNumEndpoints < 1) in create_auto_pcm_quirk()
241 return -ENODEV; in create_auto_pcm_quirk()
244 return -ENODEV; in create_auto_pcm_quirk()
247 ashd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, in create_auto_pcm_quirk()
249 fmtd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, in create_auto_pcm_quirk()
251 if (!ashd || ashd->bLength < 7 || in create_auto_pcm_quirk()
252 !fmtd || fmtd->bLength < 8) in create_auto_pcm_quirk()
253 return -ENODEV; in create_auto_pcm_quirk()
270 injd = snd_usb_find_csint_desc(alts->extra, alts->extralen, in create_yamaha_midi_quirk()
272 outjd = snd_usb_find_csint_desc(alts->extra, alts->extralen, in create_yamaha_midi_quirk()
275 return -ENODEV; in create_yamaha_midi_quirk()
278 return -ENODEV; in create_yamaha_midi_quirk()
279 if (injd && (injd->bLength < 5 || in create_yamaha_midi_quirk()
280 (injd->bJackType != USB_MS_EMBEDDED && in create_yamaha_midi_quirk()
281 injd->bJackType != USB_MS_EXTERNAL))) in create_yamaha_midi_quirk()
282 return -ENODEV; in create_yamaha_midi_quirk()
283 if (outjd && (outjd->bLength < 6 || in create_yamaha_midi_quirk()
284 (outjd->bJackType != USB_MS_EMBEDDED && in create_yamaha_midi_quirk()
285 outjd->bJackType != USB_MS_EXTERNAL))) in create_yamaha_midi_quirk()
286 return -ENODEV; in create_yamaha_midi_quirk()
300 /* might have a vendor-specific descriptor <06 24 F1 02 ...> */ in create_roland_midi_quirk()
302 roland_desc = snd_usb_find_csint_desc(alts->extra, in create_roland_midi_quirk()
303 alts->extralen, in create_roland_midi_quirk()
306 return -ENODEV; in create_roland_midi_quirk()
323 mshd = (struct usb_ms_header_descriptor *)alts->extra; in create_std_midi_quirk()
324 if (alts->extralen < 7 || in create_std_midi_quirk()
325 mshd->bLength < 7 || in create_std_midi_quirk()
326 mshd->bDescriptorType != USB_DT_CS_INTERFACE || in create_std_midi_quirk()
327 mshd->bDescriptorSubtype != USB_MS_HEADER) in create_std_midi_quirk()
328 return -ENODEV; in create_std_midi_quirk()
330 msepd = (struct usb_ms_endpoint_descriptor *)alts->endpoint[0].extra; in create_std_midi_quirk()
331 if (alts->endpoint[0].extralen < 4 || in create_std_midi_quirk()
332 msepd->bLength < 4 || in create_std_midi_quirk()
333 msepd->bDescriptorType != USB_DT_CS_ENDPOINT || in create_std_midi_quirk()
334 msepd->bDescriptorSubtype != UAC_MS_GENERAL || in create_std_midi_quirk()
335 msepd->bNumEmbMIDIJack < 1 || in create_std_midi_quirk()
336 msepd->bNumEmbMIDIJack > 16) in create_std_midi_quirk()
337 return -ENODEV; in create_std_midi_quirk()
351 alts = &iface->altsetting[0]; in create_auto_midi_quirk()
355 if (altsd->bNumEndpoints < 1) in create_auto_midi_quirk()
356 return -ENODEV; in create_auto_midi_quirk()
360 return -ENODEV; in create_auto_midi_quirk()
362 switch (USB_ID_VENDOR(chip->usb_id)) { in create_auto_midi_quirk()
365 if (err != -ENODEV) in create_auto_midi_quirk()
370 if (err != -ENODEV) in create_auto_midi_quirk()
386 if (err == -ENODEV) in create_autodetect_quirk()
392 * Create a stream for an Edirol UA-700/UA-25/UA-4FX interface.
414 if (iface->num_altsetting < 2) in create_uaxx_quirk()
415 return -ENXIO; in create_uaxx_quirk()
416 alts = &iface->altsetting[1]; in create_uaxx_quirk()
419 if (altsd->bNumEndpoints == 2) { in create_uaxx_quirk()
437 chip->usb_id == USB_ID(0x0582, 0x002b) in create_uaxx_quirk()
439 return __snd_usbmidi_create(chip->card, iface, in create_uaxx_quirk()
440 &chip->midi_list, quirk, in create_uaxx_quirk()
441 chip->usb_id, in create_uaxx_quirk()
442 &chip->num_rawmidis); in create_uaxx_quirk()
445 if (altsd->bNumEndpoints != 1) in create_uaxx_quirk()
446 return -ENXIO; in create_uaxx_quirk()
450 return -ENOMEM; in create_uaxx_quirk()
452 fp->iface = altsd->bInterfaceNumber; in create_uaxx_quirk()
453 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress; in create_uaxx_quirk()
454 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes; in create_uaxx_quirk()
455 fp->datainterval = 0; in create_uaxx_quirk()
456 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); in create_uaxx_quirk()
457 INIT_LIST_HEAD(&fp->list); in create_uaxx_quirk()
459 switch (fp->maxpacksize) { in create_uaxx_quirk()
461 fp->rate_max = fp->rate_min = 44100; in create_uaxx_quirk()
465 fp->rate_max = fp->rate_min = 48000; in create_uaxx_quirk()
469 fp->rate_max = fp->rate_min = 96000; in create_uaxx_quirk()
474 return -ENXIO; in create_uaxx_quirk()
479 list_del(&fp->list); /* unlink for avoiding double-free */ in create_uaxx_quirk()
483 usb_set_interface(chip->dev, fp->iface, 0); in create_uaxx_quirk()
495 if (quirk->ifnum < 0) in create_standard_mixer_quirk()
498 return snd_usb_create_mixer(chip, quirk->ifnum); in create_standard_mixer_quirk()
502 * audio-interface quirks
540 if (quirk->type < QUIRK_TYPE_COUNT) { in snd_usb_create_quirk()
541 return quirk_funcs[quirk->type](chip, iface, driver, quirk); in snd_usb_create_quirk()
543 usb_audio_err(chip, "invalid quirk type %d\n", quirk->type); in snd_usb_create_quirk()
544 return -ENXIO; in snd_usb_create_quirk()
557 struct usb_host_config *config = dev->actconfig; in snd_usb_extigy_boot_quirk()
560 if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD || in snd_usb_extigy_boot_quirk()
561 le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) { in snd_usb_extigy_boot_quirk()
562 dev_dbg(&dev->dev, "sending Extigy boot sequence...\n"); in snd_usb_extigy_boot_quirk()
567 dev_dbg(&dev->dev, "error sending boot message: %d\n", err); in snd_usb_extigy_boot_quirk()
569 &dev->descriptor, sizeof(dev->descriptor)); in snd_usb_extigy_boot_quirk()
570 config = dev->actconfig; in snd_usb_extigy_boot_quirk()
572 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_extigy_boot_quirk()
575 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_extigy_boot_quirk()
576 dev_dbg(&dev->dev, "extigy_boot: new boot length = %d\n", in snd_usb_extigy_boot_quirk()
577 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_extigy_boot_quirk()
578 return -ENODEV; /* quit this anyway */ in snd_usb_extigy_boot_quirk()
594 return -ENODEV; in snd_usb_audigy2nx_boot_quirk()
603 if (dev->actconfig->desc.bConfigurationValue == 1) { in snd_usb_fasttrackpro_boot_quirk()
604 dev_info(&dev->dev, in snd_usb_fasttrackpro_boot_quirk()
613 dev_dbg(&dev->dev, in snd_usb_fasttrackpro_boot_quirk()
619 return -ENODEV; in snd_usb_fasttrackpro_boot_quirk()
621 dev_info(&dev->dev, "Fast Track Pro config OK\n"); in snd_usb_fasttrackpro_boot_quirk()
627 * C-Media CM106/CM106+ have four 16-bit internal registers that are nicely
645 * Enable line-out driver mode, set headphone source to front in snd_usb_cm106_boot_quirk()
776 /* REG5: de-assert AD/DA reset signals */ in snd_usb_cm6206_boot_quirk()
828 return -EINVAL; in snd_usb_accessmusic_boot_quirk()
831 return -ENOMEM; in snd_usb_accessmusic_boot_quirk()
844 * they come up as vendor-specific device when first connected.
865 /* return -EAGAIN, so the creation of an audio interface for this in snd_usb_nativeinstruments_boot_quirk()
868 return -EAGAIN; in snd_usb_nativeinstruments_boot_quirk()
903 struct usb_host_config *config = dev->actconfig; in snd_usb_mbox2_boot_quirk()
909 fwsize = le16_to_cpu(get_cfg_desc(config)->wTotalLength); in snd_usb_mbox2_boot_quirk()
912 dev_err(&dev->dev, "Invalid firmware size=%d.\n", fwsize); in snd_usb_mbox2_boot_quirk()
913 return -ENODEV; in snd_usb_mbox2_boot_quirk()
916 dev_dbg(&dev->dev, "Sending Digidesign Mbox 2 boot sequence...\n"); in snd_usb_mbox2_boot_quirk()
923 /* Control magic - load onboard firmware */ in snd_usb_mbox2_boot_quirk()
927 dev_dbg(&dev->dev, "device not ready, resending boot sequence...\n"); in snd_usb_mbox2_boot_quirk()
932 dev_err(&dev->dev, "Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse[0]); in snd_usb_mbox2_boot_quirk()
933 return -ENODEV; in snd_usb_mbox2_boot_quirk()
936 dev_dbg(&dev->dev, "device initialised!\n"); in snd_usb_mbox2_boot_quirk()
939 &dev->descriptor, sizeof(dev->descriptor)); in snd_usb_mbox2_boot_quirk()
940 config = dev->actconfig; in snd_usb_mbox2_boot_quirk()
942 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_mbox2_boot_quirk()
946 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_mbox2_boot_quirk()
947 dev_dbg(&dev->dev, "mbox2_boot: new boot length = %d\n", in snd_usb_mbox2_boot_quirk()
948 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_mbox2_boot_quirk()
952 dev_info(&dev->dev, "Digidesign Mbox 2: 24bit 48kHz"); in snd_usb_mbox2_boot_quirk()
961 dev_dbg(&dev->dev, "Waiting for Axe-Fx III to boot up...\n"); in snd_usb_axefx3_boot_quirk()
963 /* If the Axe-Fx III has not fully booted, it will timeout when trying in snd_usb_axefx3_boot_quirk()
965 * used here to detect when the Axe-Fx III has finished booting as the in snd_usb_axefx3_boot_quirk()
972 dev_err(&dev->dev, in snd_usb_axefx3_boot_quirk()
973 "failed waiting for Axe-Fx III to boot: %d\n", err); in snd_usb_axefx3_boot_quirk()
977 dev_dbg(&dev->dev, "Axe-Fx III is now ready\n"); in snd_usb_axefx3_boot_quirk()
981 dev_dbg(&dev->dev, in snd_usb_axefx3_boot_quirk()
982 "error stopping Axe-Fx III interface: %d\n", err); in snd_usb_axefx3_boot_quirk()
1018 /* Analogue input 1 left channel: */ in mbox3_setup_48_24_magic()
1021 /* Analogue input 1 right channel: */ in mbox3_setup_48_24_magic()
1024 /* Analogue input 2 left channel: */ in mbox3_setup_48_24_magic()
1027 /* Analogue input 2 right channel: */ in mbox3_setup_48_24_magic()
1030 /* Analogue input 3 left channel: */ in mbox3_setup_48_24_magic()
1033 /* Analogue input 3 right channel: */ in mbox3_setup_48_24_magic()
1036 /* Analogue input 4 left channel: */ in mbox3_setup_48_24_magic()
1039 /* Analogue input 4 right channel: */ in mbox3_setup_48_24_magic()
1046 /* Analogue software return 1 left channel: */ in mbox3_setup_48_24_magic()
1051 /* Analogue software return 1 right channel: */ in mbox3_setup_48_24_magic()
1056 /* Analogue software return 2 left channel: */ in mbox3_setup_48_24_magic()
1061 /* Analogue software return 2 right channel: */ in mbox3_setup_48_24_magic()
1067 /* Analogue software return 3 left channel: */ in mbox3_setup_48_24_magic()
1070 /* Analogue software return 3 right channel: */ in mbox3_setup_48_24_magic()
1073 /* Analogue software return 4 left channel: */ in mbox3_setup_48_24_magic()
1076 /* Analogue software return 4 right channel: */ in mbox3_setup_48_24_magic()
1083 /* Analogue fx return left channel: */ in mbox3_setup_48_24_magic()
1086 /* Analogue fx return right channel: */ in mbox3_setup_48_24_magic()
1135 /* S/PDIF hardware input 1 left channel */ in mbox3_setup_48_24_magic()
1138 /* S/PDIF hardware input 1 right channel */ in mbox3_setup_48_24_magic()
1141 /* S/PDIF hardware input 2 left channel */ in mbox3_setup_48_24_magic()
1144 /* S/PDIF hardware input 2 right channel */ in mbox3_setup_48_24_magic()
1147 /* S/PDIF hardware input 3 left channel */ in mbox3_setup_48_24_magic()
1150 /* S/PDIF hardware input 3 right channel */ in mbox3_setup_48_24_magic()
1153 /* S/PDIF hardware input 4 left channel */ in mbox3_setup_48_24_magic()
1156 /* S/PDIF hardware input 4 right channel */ in mbox3_setup_48_24_magic()
1159 /* S/PDIF software return 1 left channel */ in mbox3_setup_48_24_magic()
1162 /* S/PDIF software return 1 right channel */ in mbox3_setup_48_24_magic()
1165 /* S/PDIF software return 2 left channel */ in mbox3_setup_48_24_magic()
1168 /* S/PDIF software return 2 right channel */ in mbox3_setup_48_24_magic()
1174 /* S/PDIF software return 3 left channel */ in mbox3_setup_48_24_magic()
1180 /* S/PDIF software return 3 right channel */ in mbox3_setup_48_24_magic()
1183 /* S/PDIF software return 4 left channel */ in mbox3_setup_48_24_magic()
1189 /* S/PDIF software return 4 right channel */ in mbox3_setup_48_24_magic()
1195 /* S/PDIF fx returns left channel */ in mbox3_setup_48_24_magic()
1198 /* S/PDIF fx returns right channel */ in mbox3_setup_48_24_magic()
1206 /* Hall 1 = 0x03 */ in mbox3_setup_48_24_magic()
1207 /* Hall 2 = 0x04 */ in mbox3_setup_48_24_magic()
1255 struct usb_host_config *config = dev->actconfig; in snd_usb_mbox3_boot_quirk()
1259 descriptor_size = le16_to_cpu(get_cfg_desc(config)->wTotalLength); in snd_usb_mbox3_boot_quirk()
1262 dev_err(&dev->dev, "Invalid descriptor size=%d.\n", descriptor_size); in snd_usb_mbox3_boot_quirk()
1263 return -ENODEV; in snd_usb_mbox3_boot_quirk()
1266 dev_dbg(&dev->dev, "device initialised!\n"); in snd_usb_mbox3_boot_quirk()
1269 &dev->descriptor, sizeof(dev->descriptor)); in snd_usb_mbox3_boot_quirk()
1270 config = dev->actconfig; in snd_usb_mbox3_boot_quirk()
1272 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_mbox3_boot_quirk()
1276 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_mbox3_boot_quirk()
1277 dev_dbg(&dev->dev, "mbox3_boot: new boot length = %d\n", in snd_usb_mbox3_boot_quirk()
1278 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_mbox3_boot_quirk()
1281 dev_info(&dev->dev, "Digidesign Mbox 3: 24bit 48kHz"); in snd_usb_mbox3_boot_quirk()
1294 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1306 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1330 return -ENOMEM; in snd_usb_motu_microbookii_boot_quirk()
1332 dev_info(&dev->dev, "Waiting for MOTU Microbook II to boot up...\n"); in snd_usb_motu_microbookii_boot_quirk()
1341 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1350 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1352 err = -ENODEV; in snd_usb_motu_microbookii_boot_quirk()
1363 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1375 if (actual_length == 12 && buf[actual_length - 1] == 1) in snd_usb_motu_microbookii_boot_quirk()
1381 dev_info(&dev->dev, "MOTU MicroBook II ready\n"); in snd_usb_motu_microbookii_boot_quirk()
1399 #define MAUDIO_SET_COMPATIBLE 0x80 /* use only "win-compatible" interfaces */
1401 #define MAUDIO_SET_96K 0x04 /* 48-96kHz rate if set, 8-48kHz otherwise */
1416 usb_set_interface(chip->dev, iface, 0); in quattro_skip_setting_quirk()
1417 if (chip->setup & MAUDIO_SET) { in quattro_skip_setting_quirk()
1418 if (chip->setup & MAUDIO_SET_COMPATIBLE) { in quattro_skip_setting_quirk()
1425 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in quattro_skip_setting_quirk()
1427 mask = chip->setup & MAUDIO_SET_MASK; in quattro_skip_setting_quirk()
1438 altno, iface, chip->setup); in quattro_skip_setting_quirk()
1449 usb_set_interface(chip->dev, iface, 0); in audiophile_skip_setting_quirk()
1451 if (chip->setup & MAUDIO_SET) { in audiophile_skip_setting_quirk()
1453 if ((chip->setup & MAUDIO_SET_DTS) && altno != 6) in audiophile_skip_setting_quirk()
1455 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in audiophile_skip_setting_quirk()
1457 mask = chip->setup & MAUDIO_SET_MASK; in audiophile_skip_setting_quirk()
1477 usb_set_interface(chip->dev, iface, 0); in fasttrackpro_skip_setting_quirk()
1482 if (chip->setup & (MAUDIO_SET | MAUDIO_SET_24B)) { in fasttrackpro_skip_setting_quirk()
1483 if (chip->setup & MAUDIO_SET_96K) { in fasttrackpro_skip_setting_quirk()
1486 } else if (chip->setup & MAUDIO_SET_DI) { in fasttrackpro_skip_setting_quirk()
1498 /* keep only 16-Bit mode */ in fasttrackpro_skip_setting_quirk()
1505 altno, iface, chip->setup); in fasttrackpro_skip_setting_quirk()
1531 if ((chip->setup == 0 || chip->setup > 2) && altno != 2) in s1810c_skip_setting_quirk()
1533 else if (chip->setup == 1 && altno != 1) in s1810c_skip_setting_quirk()
1535 else if (chip->setup == 2 && altno != 3) in s1810c_skip_setting_quirk()
1546 if (chip->usb_id == USB_ID(0x0763, 0x2003)) in snd_usb_apply_interface_quirk()
1549 if (chip->usb_id == USB_ID(0x0763, 0x2001)) in snd_usb_apply_interface_quirk()
1552 if (chip->usb_id == USB_ID(0x0763, 0x2012)) in snd_usb_apply_interface_quirk()
1555 if (chip->usb_id == USB_ID(0x194f, 0x010c)) in snd_usb_apply_interface_quirk()
1569 /* SB Extigy needs special boot-up sequence */ in snd_usb_apply_boot_quirk()
1574 /* SB Audigy 2 NX needs its own boot-up magic, too */ in snd_usb_apply_boot_quirk()
1578 /* C-Media CM106 / Turtle Beach Audio Advantage Roadie */ in snd_usb_apply_boot_quirk()
1582 /* C-Media CM6206 / CM106-Like Sound Device */ in snd_usb_apply_boot_quirk()
1606 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_apply_boot_quirk()
1610 case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */ in snd_usb_apply_boot_quirk()
1614 * For some reason interface 3 with vendor-spec class is in snd_usb_apply_boot_quirk()
1617 if (get_iface_desc(intf->altsetting)->bInterfaceClass == in snd_usb_apply_boot_quirk()
1619 get_iface_desc(intf->altsetting)->bInterfaceNumber < 3) in snd_usb_apply_boot_quirk()
1641 * check if the device uses big-endian samples
1646 /* it depends on altsetting whether the device is big-endian or not */ in snd_usb_is_big_endian_format()
1647 switch (chip->usb_id) { in snd_usb_is_big_endian_format()
1648 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */ in snd_usb_is_big_endian_format()
1649 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1650 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1653 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_is_big_endian_format()
1654 if (chip->setup == 0x00 || in snd_usb_is_big_endian_format()
1655 fp->altsetting == 1 || fp->altsetting == 2 || in snd_usb_is_big_endian_format()
1656 fp->altsetting == 3) in snd_usb_is_big_endian_format()
1659 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro */ in snd_usb_is_big_endian_format()
1660 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1661 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1669 * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
1691 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { in set_format_emu_quirk()
1692 if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].cur_audiofmt) in set_format_emu_quirk()
1696 switch (fmt->rate_min) { in set_format_emu_quirk()
1716 snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id); in set_format_emu_quirk()
1717 subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0; in set_format_emu_quirk()
1723 unsigned int cur_rate = subs->data_endpoint->cur_rate; in pioneer_djm_set_format_quirk()
1729 usb_set_interface(subs->dev, 0, 1); in pioneer_djm_set_format_quirk()
1730 // we should derive windex from fmt-sync_ep but it's not set in pioneer_djm_set_format_quirk()
1731 snd_usb_ctl_msg(subs->stream->chip->dev, in pioneer_djm_set_format_quirk()
1732 usb_sndctrlpipe(subs->stream->chip->dev, 0), in pioneer_djm_set_format_quirk()
1740 switch (subs->stream->chip->usb_id) { in snd_usb_set_format_quirk()
1741 case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ in snd_usb_set_format_quirk()
1742 case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ in snd_usb_set_format_quirk()
1743 case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ in snd_usb_set_format_quirk()
1744 case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ in snd_usb_set_format_quirk()
1749 subs->stream_offset_adj = 2; in snd_usb_set_format_quirk()
1751 case USB_ID(0x2b73, 0x0013): /* Pioneer DJM-450 */ in snd_usb_set_format_quirk()
1754 case USB_ID(0x08e4, 0x017f): /* Pioneer DJM-750 */ in snd_usb_set_format_quirk()
1755 case USB_ID(0x08e4, 0x0163): /* Pioneer DJM-850 */ in snd_usb_set_format_quirk()
1764 struct usb_device *dev = chip->dev; in snd_usb_select_mode_quirk()
1767 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_select_mode_quirk()
1771 err = usb_set_interface(dev, fmt->iface, 0); in snd_usb_select_mode_quirk()
1778 if (fmt->formats & SNDRV_PCM_FMTBIT_DSD_U32_BE) { in snd_usb_select_mode_quirk()
1807 if (USB_ID_VENDOR(ep->chip->usb_id) == 0x23ba && in snd_usb_endpoint_start_quirk()
1808 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) in snd_usb_endpoint_start_quirk()
1809 ep->skip_packets = 4; in snd_usb_endpoint_start_quirk()
1812 * M-Audio Fast Track C400/C600 - when packets are not skipped, real in snd_usb_endpoint_start_quirk()
1813 * world latency varies by approx. +/- 50 frames (at 96kHz) each time in snd_usb_endpoint_start_quirk()
1815 * start up, the real world latency is stable within +/- 1 frame (also in snd_usb_endpoint_start_quirk()
1818 if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) || in snd_usb_endpoint_start_quirk()
1819 ep->chip->usb_id == USB_ID(0x0763, 0x2031)) && in snd_usb_endpoint_start_quirk()
1820 ep->type == SND_USB_ENDPOINT_TYPE_DATA) in snd_usb_endpoint_start_quirk()
1821 ep->skip_packets = 16; in snd_usb_endpoint_start_quirk()
1824 if ((ep->chip->usb_id == USB_ID(0x0644, 0x8038) || /* TEAC UD-H01 */ in snd_usb_endpoint_start_quirk()
1825 ep->chip->usb_id == USB_ID(0x1852, 0x5034)) && /* T+A Dac8 */ in snd_usb_endpoint_start_quirk()
1826 ep->syncmaxsize == 4) in snd_usb_endpoint_start_quirk()
1827 ep->tenor_fb_quirk = 1; in snd_usb_endpoint_start_quirk()
1835 struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev); in snd_usb_ctl_msg_quirk()
1840 if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY) in snd_usb_ctl_msg_quirk()
1842 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_1M) in snd_usb_ctl_msg_quirk()
1844 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_5M) in snd_usb_ctl_msg_quirk()
1850 * augment the PCM format bit-field for DSD types. The UAC standards
1851 * don't have a designated bit field to denote DSD-capable interfaces,
1862 if (USB_ID_VENDOR(chip->usb_id) == 0x23ba && in snd_usb_interface_dsd_format_quirks()
1863 USB_ID_PRODUCT(chip->usb_id) < 0x0110) { in snd_usb_interface_dsd_format_quirks()
1864 switch (fp->altsetting) { in snd_usb_interface_dsd_format_quirks()
1866 fp->dsd_dop = true; in snd_usb_interface_dsd_format_quirks()
1869 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
1872 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
1878 switch (chip->usb_id) { in snd_usb_interface_dsd_format_quirks()
1880 case USB_ID(0x20b1, 0x3089): /* Mola-Mola DAC */ in snd_usb_interface_dsd_format_quirks()
1884 case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ in snd_usb_interface_dsd_format_quirks()
1885 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
1890 case USB_ID(0x10cb, 0x0103): /* The Bit Opus #3; with fp->dsd_raw */ in snd_usb_interface_dsd_format_quirks()
1891 case USB_ID(0x16d0, 0x06b2): /* NuPrime DAC-10 */ in snd_usb_interface_dsd_format_quirks()
1892 case USB_ID(0x16d0, 0x06b4): /* NuPrime Audio HD-AVP/AVA */ in snd_usb_interface_dsd_format_quirks()
1894 case USB_ID(0x16d0, 0x09d8): /* NuPrime IDA-8 */ in snd_usb_interface_dsd_format_quirks()
1895 case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */ in snd_usb_interface_dsd_format_quirks()
1902 case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */ in snd_usb_interface_dsd_format_quirks()
1903 case USB_ID(0x278b, 0x5100): /* Rotel RC-1590 */ in snd_usb_interface_dsd_format_quirks()
1904 case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */ in snd_usb_interface_dsd_format_quirks()
1907 if (fp->altsetting == 3) in snd_usb_interface_dsd_format_quirks()
1912 case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */ in snd_usb_interface_dsd_format_quirks()
1913 if (fp->altsetting == 2) { in snd_usb_interface_dsd_format_quirks()
1914 switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) { in snd_usb_interface_dsd_format_quirks()
1926 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
1934 /* ITF-USB DSD based DACs */ in snd_usb_interface_dsd_format_quirks()
1935 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_interface_dsd_format_quirks()
1936 iface = usb_ifnum_to_if(chip->dev, fp->iface); in snd_usb_interface_dsd_format_quirks()
1939 * three (0-2), in snd_usb_interface_dsd_format_quirks()
1941 * four (0-3). in snd_usb_interface_dsd_format_quirks()
1943 if (fp->altsetting == iface->num_altsetting - 1) in snd_usb_interface_dsd_format_quirks()
1947 /* Mostly generic method to detect many DSD-capable implementations */ in snd_usb_interface_dsd_format_quirks()
1948 if ((chip->quirk_flags & QUIRK_FLAG_DSD_RAW) && fp->dsd_raw) in snd_usb_interface_dsd_format_quirks()
1958 switch (chip->usb_id) { in snd_usb_audioformat_attributes_quirk()
1963 fp->attributes &= ~UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
1966 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_audioformat_attributes_quirk()
1968 fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
1970 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro USB */ in snd_usb_audioformat_attributes_quirk()
1971 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_audioformat_attributes_quirk()
1976 * plantronics headset and Griffin iMic have set adaptive-in in snd_usb_audioformat_attributes_quirk()
1979 fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE; in snd_usb_audioformat_attributes_quirk()
1981 fp->ep_attr |= USB_ENDPOINT_SYNC_ADAPTIVE; in snd_usb_audioformat_attributes_quirk()
1983 fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC; in snd_usb_audioformat_attributes_quirk()
1991 fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
1995 fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
2000 fp->attributes &= ~UAC_EP_CS_ATTR_PITCH_CONTROL; in snd_usb_audioformat_attributes_quirk()
2034 DEVICE_FLG(0x0499, 0x3108, /* Yamaha YIT-W12TX */
2042 DEVICE_FLG(0x054c, 0x0b8c, /* Sony WALKMAN NW-A45 DAC */
2054 DEVICE_FLG(0x0644, 0x8043, /* TEAC UD-501/UD-501V2/UD-503/NT-503 */
2057 DEVICE_FLG(0x0644, 0x8044, /* Esoteric D-05X */
2060 DEVICE_FLG(0x0644, 0x804a, /* TEAC UD-301 */
2065 DEVICE_FLG(0x0644, 0x806b, /* TEAC UD-701 */
2072 DEVICE_FLG(0x0711, 0x5800, /* MCT Trigger 5 USB-to-HDMI */
2076 DEVICE_FLG(0x0763, 0x2030, /* M-Audio Fast Track C400 */
2078 DEVICE_FLG(0x0763, 0x2031, /* M-Audio Fast Track C600 */
2092 DEVICE_FLG(0x0fd9, 0x0008, /* Hauppauge HVR-950Q */
2106 DEVICE_FLG(0x154e, 0x1002, /* Denon DCD-1500RE */
2108 DEVICE_FLG(0x154e, 0x1003, /* Denon DA-300USB */
2110 DEVICE_FLG(0x154e, 0x3005, /* Marantz HD-DAC1 */
2112 DEVICE_FLG(0x154e, 0x3006, /* Marantz SA-14S1 */
2114 DEVICE_FLG(0x154e, 0x300b, /* Marantz SA-KI RUBY / SA-12 */
2116 DEVICE_FLG(0x154e, 0x500e, /* Denon DN-X1600 */
2120 DEVICE_FLG(0x17aa, 0x1046, /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2124 DEVICE_FLG(0x1852, 0x5065, /* Luxman DA-06 */
2128 DEVICE_FLG(0x19f7, 0x0035, /* RODE NT-USB+ */
2132 DEVICE_FLG(0x2040, 0x7200, /* Hauppauge HVR-950Q */
2134 DEVICE_FLG(0x2040, 0x7201, /* Hauppauge HVR-950Q-MXL */
2136 DEVICE_FLG(0x2040, 0x7210, /* Hauppauge HVR-950Q */
2138 DEVICE_FLG(0x2040, 0x7211, /* Hauppauge HVR-950Q-MXL */
2140 DEVICE_FLG(0x2040, 0x7213, /* Hauppauge HVR-950Q */
2142 DEVICE_FLG(0x2040, 0x7217, /* Hauppauge HVR-950Q */
2144 DEVICE_FLG(0x2040, 0x721b, /* Hauppauge HVR-950Q */
2146 DEVICE_FLG(0x2040, 0x721e, /* Hauppauge HVR-950Q */
2148 DEVICE_FLG(0x2040, 0x721f, /* Hauppauge HVR-950Q */
2150 DEVICE_FLG(0x2040, 0x7240, /* Hauppauge HVR-850 */
2152 DEVICE_FLG(0x2040, 0x7260, /* Hauppauge HVR-950Q */
2154 DEVICE_FLG(0x2040, 0x7270, /* Hauppauge HVR-950Q */
2156 DEVICE_FLG(0x2040, 0x7280, /* Hauppauge HVR-950Q */
2158 DEVICE_FLG(0x2040, 0x7281, /* Hauppauge HVR-950Q-MXL */
2164 DEVICE_FLG(0x21b4, 0x0230, /* Ayre QB-9 Twenty */
2166 DEVICE_FLG(0x21b4, 0x0232, /* Ayre QX-5 Twenty */
2174 DEVICE_FLG(0x2b53, 0x0023, /* Fiero SC-01 (firmware v1.0.0 @ 48 kHz) */
2176 DEVICE_FLG(0x2b53, 0x0024, /* Fiero SC-01 (firmware v1.0.0 @ 96 kHz) */
2178 DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
2251 for (p = quirk_flags_table; p->id; p++) { in snd_usb_init_quirk_flags()
2252 if (chip->usb_id == p->id || in snd_usb_init_quirk_flags()
2253 (!USB_ID_PRODUCT(p->id) && in snd_usb_init_quirk_flags()
2254 USB_ID_VENDOR(chip->usb_id) == USB_ID_VENDOR(p->id))) { in snd_usb_init_quirk_flags()
2257 p->flags, USB_ID_VENDOR(chip->usb_id), in snd_usb_init_quirk_flags()
2258 USB_ID_PRODUCT(chip->usb_id)); in snd_usb_init_quirk_flags()
2259 chip->quirk_flags |= p->flags; in snd_usb_init_quirk_flags()