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()
561 if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD || in snd_usb_extigy_boot_quirk()
562 le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) { in snd_usb_extigy_boot_quirk()
563 dev_dbg(&dev->dev, "sending Extigy boot sequence...\n"); in snd_usb_extigy_boot_quirk()
568 dev_dbg(&dev->dev, "error sending boot message: %d\n", err); in snd_usb_extigy_boot_quirk()
572 return -ENOMEM; in snd_usb_extigy_boot_quirk()
576 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_extigy_boot_quirk()
577 if (new_device_descriptor->bNumConfigurations > dev->descriptor.bNumConfigurations) in snd_usb_extigy_boot_quirk()
578 dev_dbg(&dev->dev, "error too large bNumConfigurations: %d\n", in snd_usb_extigy_boot_quirk()
579 new_device_descriptor->bNumConfigurations); in snd_usb_extigy_boot_quirk()
581 memcpy(&dev->descriptor, new_device_descriptor, sizeof(dev->descriptor)); in snd_usb_extigy_boot_quirk()
584 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_extigy_boot_quirk()
585 dev_dbg(&dev->dev, "extigy_boot: new boot length = %d\n", in snd_usb_extigy_boot_quirk()
586 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_extigy_boot_quirk()
587 return -ENODEV; /* quit this anyway */ in snd_usb_extigy_boot_quirk()
603 return -ENODEV; in snd_usb_audigy2nx_boot_quirk()
612 if (dev->actconfig->desc.bConfigurationValue == 1) { in snd_usb_fasttrackpro_boot_quirk()
613 dev_info(&dev->dev, in snd_usb_fasttrackpro_boot_quirk()
622 dev_dbg(&dev->dev, in snd_usb_fasttrackpro_boot_quirk()
628 return -ENODEV; in snd_usb_fasttrackpro_boot_quirk()
630 dev_info(&dev->dev, "Fast Track Pro config OK\n"); in snd_usb_fasttrackpro_boot_quirk()
636 * C-Media CM106/CM106+ have four 16-bit internal registers that are nicely
654 * Enable line-out driver mode, set headphone source to front in snd_usb_cm106_boot_quirk()
785 /* REG5: de-assert AD/DA reset signals */ in snd_usb_cm6206_boot_quirk()
837 return -EINVAL; in snd_usb_accessmusic_boot_quirk()
840 return -ENOMEM; in snd_usb_accessmusic_boot_quirk()
853 * they come up as vendor-specific device when first connected.
874 /* return -EAGAIN, so the creation of an audio interface for this in snd_usb_nativeinstruments_boot_quirk()
877 return -EAGAIN; in snd_usb_nativeinstruments_boot_quirk()
912 struct usb_host_config *config = dev->actconfig; in snd_usb_mbox2_boot_quirk()
919 fwsize = le16_to_cpu(get_cfg_desc(config)->wTotalLength); in snd_usb_mbox2_boot_quirk()
922 dev_err(&dev->dev, "Invalid firmware size=%d.\n", fwsize); in snd_usb_mbox2_boot_quirk()
923 return -ENODEV; in snd_usb_mbox2_boot_quirk()
926 dev_dbg(&dev->dev, "Sending Digidesign Mbox 2 boot sequence...\n"); in snd_usb_mbox2_boot_quirk()
933 /* Control magic - load onboard firmware */ in snd_usb_mbox2_boot_quirk()
937 dev_dbg(&dev->dev, "device not ready, resending boot sequence...\n"); in snd_usb_mbox2_boot_quirk()
942 dev_err(&dev->dev, "Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse[0]); in snd_usb_mbox2_boot_quirk()
943 return -ENODEV; in snd_usb_mbox2_boot_quirk()
946 dev_dbg(&dev->dev, "device initialised!\n"); in snd_usb_mbox2_boot_quirk()
950 return -ENOMEM; in snd_usb_mbox2_boot_quirk()
955 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_mbox2_boot_quirk()
956 if (new_device_descriptor->bNumConfigurations > dev->descriptor.bNumConfigurations) in snd_usb_mbox2_boot_quirk()
957 dev_dbg(&dev->dev, "error too large bNumConfigurations: %d\n", in snd_usb_mbox2_boot_quirk()
958 new_device_descriptor->bNumConfigurations); in snd_usb_mbox2_boot_quirk()
960 memcpy(&dev->descriptor, new_device_descriptor, sizeof(dev->descriptor)); in snd_usb_mbox2_boot_quirk()
964 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_mbox2_boot_quirk()
965 dev_dbg(&dev->dev, "mbox2_boot: new boot length = %d\n", in snd_usb_mbox2_boot_quirk()
966 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_mbox2_boot_quirk()
970 dev_info(&dev->dev, "Digidesign Mbox 2: 24bit 48kHz"); in snd_usb_mbox2_boot_quirk()
979 dev_dbg(&dev->dev, "Waiting for Axe-Fx III to boot up...\n"); in snd_usb_axefx3_boot_quirk()
981 /* If the Axe-Fx III has not fully booted, it will timeout when trying in snd_usb_axefx3_boot_quirk()
983 * used here to detect when the Axe-Fx III has finished booting as the in snd_usb_axefx3_boot_quirk()
990 dev_err(&dev->dev, in snd_usb_axefx3_boot_quirk()
991 "failed waiting for Axe-Fx III to boot: %d\n", err); in snd_usb_axefx3_boot_quirk()
995 dev_dbg(&dev->dev, "Axe-Fx III is now ready\n"); in snd_usb_axefx3_boot_quirk()
999 dev_dbg(&dev->dev, in snd_usb_axefx3_boot_quirk()
1000 "error stopping Axe-Fx III interface: %d\n", err); in snd_usb_axefx3_boot_quirk()
1036 /* Analogue input 1 left channel: */ in mbox3_setup_48_24_magic()
1039 /* Analogue input 1 right channel: */ in mbox3_setup_48_24_magic()
1042 /* Analogue input 2 left channel: */ in mbox3_setup_48_24_magic()
1045 /* Analogue input 2 right channel: */ in mbox3_setup_48_24_magic()
1048 /* Analogue input 3 left channel: */ in mbox3_setup_48_24_magic()
1051 /* Analogue input 3 right channel: */ in mbox3_setup_48_24_magic()
1054 /* Analogue input 4 left channel: */ in mbox3_setup_48_24_magic()
1057 /* Analogue input 4 right channel: */ in mbox3_setup_48_24_magic()
1064 /* Analogue software return 1 left channel: */ in mbox3_setup_48_24_magic()
1069 /* Analogue software return 1 right channel: */ in mbox3_setup_48_24_magic()
1074 /* Analogue software return 2 left channel: */ in mbox3_setup_48_24_magic()
1079 /* Analogue software return 2 right channel: */ in mbox3_setup_48_24_magic()
1085 /* Analogue software return 3 left channel: */ in mbox3_setup_48_24_magic()
1088 /* Analogue software return 3 right channel: */ in mbox3_setup_48_24_magic()
1091 /* Analogue software return 4 left channel: */ in mbox3_setup_48_24_magic()
1094 /* Analogue software return 4 right channel: */ in mbox3_setup_48_24_magic()
1101 /* Analogue fx return left channel: */ in mbox3_setup_48_24_magic()
1104 /* Analogue fx return right channel: */ in mbox3_setup_48_24_magic()
1153 /* S/PDIF hardware input 1 left channel */ in mbox3_setup_48_24_magic()
1156 /* S/PDIF hardware input 1 right channel */ in mbox3_setup_48_24_magic()
1159 /* S/PDIF hardware input 2 left channel */ in mbox3_setup_48_24_magic()
1162 /* S/PDIF hardware input 2 right channel */ in mbox3_setup_48_24_magic()
1165 /* S/PDIF hardware input 3 left channel */ in mbox3_setup_48_24_magic()
1168 /* S/PDIF hardware input 3 right channel */ in mbox3_setup_48_24_magic()
1171 /* S/PDIF hardware input 4 left channel */ in mbox3_setup_48_24_magic()
1174 /* S/PDIF hardware input 4 right channel */ in mbox3_setup_48_24_magic()
1177 /* S/PDIF software return 1 left channel */ in mbox3_setup_48_24_magic()
1180 /* S/PDIF software return 1 right channel */ in mbox3_setup_48_24_magic()
1183 /* S/PDIF software return 2 left channel */ in mbox3_setup_48_24_magic()
1186 /* S/PDIF software return 2 right channel */ in mbox3_setup_48_24_magic()
1192 /* S/PDIF software return 3 left channel */ in mbox3_setup_48_24_magic()
1198 /* S/PDIF software return 3 right channel */ in mbox3_setup_48_24_magic()
1201 /* S/PDIF software return 4 left channel */ in mbox3_setup_48_24_magic()
1207 /* S/PDIF software return 4 right channel */ in mbox3_setup_48_24_magic()
1213 /* S/PDIF fx returns left channel */ in mbox3_setup_48_24_magic()
1216 /* S/PDIF fx returns right channel */ in mbox3_setup_48_24_magic()
1224 /* Hall 1 = 0x03 */ in mbox3_setup_48_24_magic()
1225 /* Hall 2 = 0x04 */ in mbox3_setup_48_24_magic()
1273 struct usb_host_config *config = dev->actconfig; in snd_usb_mbox3_boot_quirk()
1278 descriptor_size = le16_to_cpu(get_cfg_desc(config)->wTotalLength); in snd_usb_mbox3_boot_quirk()
1281 dev_err(&dev->dev, "Invalid descriptor size=%d.\n", descriptor_size); in snd_usb_mbox3_boot_quirk()
1282 return -ENODEV; in snd_usb_mbox3_boot_quirk()
1285 dev_dbg(&dev->dev, "device initialised!\n"); in snd_usb_mbox3_boot_quirk()
1289 return -ENOMEM; in snd_usb_mbox3_boot_quirk()
1294 dev_dbg(&dev->dev, "error usb_get_descriptor: %d\n", err); in snd_usb_mbox3_boot_quirk()
1295 if (new_device_descriptor->bNumConfigurations > dev->descriptor.bNumConfigurations) in snd_usb_mbox3_boot_quirk()
1296 dev_dbg(&dev->dev, "error too large bNumConfigurations: %d\n", in snd_usb_mbox3_boot_quirk()
1297 new_device_descriptor->bNumConfigurations); in snd_usb_mbox3_boot_quirk()
1299 memcpy(&dev->descriptor, new_device_descriptor, sizeof(dev->descriptor)); in snd_usb_mbox3_boot_quirk()
1303 dev_dbg(&dev->dev, "error usb_reset_configuration: %d\n", err); in snd_usb_mbox3_boot_quirk()
1304 dev_dbg(&dev->dev, "mbox3_boot: new boot length = %d\n", in snd_usb_mbox3_boot_quirk()
1305 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_mbox3_boot_quirk()
1308 dev_info(&dev->dev, "Digidesign Mbox 3: 24bit 48kHz"); in snd_usb_mbox3_boot_quirk()
1321 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1333 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1357 return -ENOMEM; in snd_usb_motu_microbookii_boot_quirk()
1359 dev_info(&dev->dev, "Waiting for MOTU Microbook II to boot up...\n"); in snd_usb_motu_microbookii_boot_quirk()
1368 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1377 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1379 err = -ENODEV; in snd_usb_motu_microbookii_boot_quirk()
1390 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1402 if (actual_length == 12 && buf[actual_length - 1] == 1) in snd_usb_motu_microbookii_boot_quirk()
1408 dev_info(&dev->dev, "MOTU MicroBook II ready\n"); in snd_usb_motu_microbookii_boot_quirk()
1426 #define MAUDIO_SET_COMPATIBLE 0x80 /* use only "win-compatible" interfaces */
1428 #define MAUDIO_SET_96K 0x04 /* 48-96kHz rate if set, 8-48kHz otherwise */
1443 usb_set_interface(chip->dev, iface, 0); in quattro_skip_setting_quirk()
1444 if (chip->setup & MAUDIO_SET) { in quattro_skip_setting_quirk()
1445 if (chip->setup & MAUDIO_SET_COMPATIBLE) { in quattro_skip_setting_quirk()
1452 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in quattro_skip_setting_quirk()
1454 mask = chip->setup & MAUDIO_SET_MASK; in quattro_skip_setting_quirk()
1465 altno, iface, chip->setup); in quattro_skip_setting_quirk()
1476 usb_set_interface(chip->dev, iface, 0); in audiophile_skip_setting_quirk()
1478 if (chip->setup & MAUDIO_SET) { in audiophile_skip_setting_quirk()
1480 if ((chip->setup & MAUDIO_SET_DTS) && altno != 6) in audiophile_skip_setting_quirk()
1482 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in audiophile_skip_setting_quirk()
1484 mask = chip->setup & MAUDIO_SET_MASK; in audiophile_skip_setting_quirk()
1504 usb_set_interface(chip->dev, iface, 0); in fasttrackpro_skip_setting_quirk()
1509 if (chip->setup & (MAUDIO_SET | MAUDIO_SET_24B)) { in fasttrackpro_skip_setting_quirk()
1510 if (chip->setup & MAUDIO_SET_96K) { in fasttrackpro_skip_setting_quirk()
1513 } else if (chip->setup & MAUDIO_SET_DI) { in fasttrackpro_skip_setting_quirk()
1525 /* keep only 16-Bit mode */ in fasttrackpro_skip_setting_quirk()
1532 altno, iface, chip->setup); in fasttrackpro_skip_setting_quirk()
1558 if ((chip->setup == 0 || chip->setup > 2) && altno != 2) in s1810c_skip_setting_quirk()
1560 else if (chip->setup == 1 && altno != 1) in s1810c_skip_setting_quirk()
1562 else if (chip->setup == 2 && altno != 3) in s1810c_skip_setting_quirk()
1573 if (chip->usb_id == USB_ID(0x0763, 0x2003)) in snd_usb_apply_interface_quirk()
1576 if (chip->usb_id == USB_ID(0x0763, 0x2001)) in snd_usb_apply_interface_quirk()
1579 if (chip->usb_id == USB_ID(0x0763, 0x2012)) in snd_usb_apply_interface_quirk()
1582 if (chip->usb_id == USB_ID(0x194f, 0x010c)) in snd_usb_apply_interface_quirk()
1596 /* SB Extigy needs special boot-up sequence */ in snd_usb_apply_boot_quirk()
1601 /* SB Audigy 2 NX needs its own boot-up magic, too */ in snd_usb_apply_boot_quirk()
1605 /* C-Media CM106 / Turtle Beach Audio Advantage Roadie */ in snd_usb_apply_boot_quirk()
1609 /* C-Media CM6206 / CM106-Like Sound Device */ in snd_usb_apply_boot_quirk()
1633 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_apply_boot_quirk()
1637 case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */ in snd_usb_apply_boot_quirk()
1641 * For some reason interface 3 with vendor-spec class is in snd_usb_apply_boot_quirk()
1644 if (get_iface_desc(intf->altsetting)->bInterfaceClass == in snd_usb_apply_boot_quirk()
1646 get_iface_desc(intf->altsetting)->bInterfaceNumber < 3) in snd_usb_apply_boot_quirk()
1668 * check if the device uses big-endian samples
1673 /* it depends on altsetting whether the device is big-endian or not */ in snd_usb_is_big_endian_format()
1674 switch (chip->usb_id) { in snd_usb_is_big_endian_format()
1675 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */ in snd_usb_is_big_endian_format()
1676 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1677 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1680 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_is_big_endian_format()
1681 if (chip->setup == 0x00 || in snd_usb_is_big_endian_format()
1682 fp->altsetting == 1 || fp->altsetting == 2 || in snd_usb_is_big_endian_format()
1683 fp->altsetting == 3) in snd_usb_is_big_endian_format()
1686 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro */ in snd_usb_is_big_endian_format()
1687 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1688 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1696 * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
1718 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { in set_format_emu_quirk()
1719 if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].cur_audiofmt) in set_format_emu_quirk()
1723 switch (fmt->rate_min) { in set_format_emu_quirk()
1743 snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id); in set_format_emu_quirk()
1744 subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0; in set_format_emu_quirk()
1750 unsigned int cur_rate = subs->data_endpoint->cur_rate; in pioneer_djm_set_format_quirk()
1756 usb_set_interface(subs->dev, 0, 1); in pioneer_djm_set_format_quirk()
1757 // we should derive windex from fmt-sync_ep but it's not set in pioneer_djm_set_format_quirk()
1758 snd_usb_ctl_msg(subs->stream->chip->dev, in pioneer_djm_set_format_quirk()
1759 usb_sndctrlpipe(subs->stream->chip->dev, 0), in pioneer_djm_set_format_quirk()
1767 switch (subs->stream->chip->usb_id) { in snd_usb_set_format_quirk()
1768 case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ in snd_usb_set_format_quirk()
1769 case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ in snd_usb_set_format_quirk()
1770 case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ in snd_usb_set_format_quirk()
1771 case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ in snd_usb_set_format_quirk()
1776 subs->stream_offset_adj = 2; in snd_usb_set_format_quirk()
1778 case USB_ID(0x2b73, 0x000a): /* Pioneer DJM-900NXS2 */ in snd_usb_set_format_quirk()
1779 case USB_ID(0x2b73, 0x0013): /* Pioneer DJM-450 */ in snd_usb_set_format_quirk()
1782 case USB_ID(0x08e4, 0x017f): /* Pioneer DJM-750 */ in snd_usb_set_format_quirk()
1783 case USB_ID(0x08e4, 0x0163): /* Pioneer DJM-850 */ in snd_usb_set_format_quirk()
1792 struct usb_device *dev = chip->dev; in snd_usb_select_mode_quirk()
1795 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_select_mode_quirk()
1799 err = usb_set_interface(dev, fmt->iface, 0); in snd_usb_select_mode_quirk()
1806 if (fmt->formats & SNDRV_PCM_FMTBIT_DSD_U32_BE) { in snd_usb_select_mode_quirk()
1835 if (USB_ID_VENDOR(ep->chip->usb_id) == 0x23ba && in snd_usb_endpoint_start_quirk()
1836 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) in snd_usb_endpoint_start_quirk()
1837 ep->skip_packets = 4; in snd_usb_endpoint_start_quirk()
1840 * M-Audio Fast Track C400/C600 - when packets are not skipped, real in snd_usb_endpoint_start_quirk()
1841 * world latency varies by approx. +/- 50 frames (at 96kHz) each time in snd_usb_endpoint_start_quirk()
1843 * start up, the real world latency is stable within +/- 1 frame (also in snd_usb_endpoint_start_quirk()
1846 if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) || in snd_usb_endpoint_start_quirk()
1847 ep->chip->usb_id == USB_ID(0x0763, 0x2031)) && in snd_usb_endpoint_start_quirk()
1848 ep->type == SND_USB_ENDPOINT_TYPE_DATA) in snd_usb_endpoint_start_quirk()
1849 ep->skip_packets = 16; in snd_usb_endpoint_start_quirk()
1852 if ((ep->chip->usb_id == USB_ID(0x0644, 0x8038) || /* TEAC UD-H01 */ in snd_usb_endpoint_start_quirk()
1853 ep->chip->usb_id == USB_ID(0x1852, 0x5034)) && /* T+A Dac8 */ in snd_usb_endpoint_start_quirk()
1854 ep->syncmaxsize == 4) in snd_usb_endpoint_start_quirk()
1855 ep->tenor_fb_quirk = 1; in snd_usb_endpoint_start_quirk()
1863 struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev); in snd_usb_ctl_msg_quirk()
1868 if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY) in snd_usb_ctl_msg_quirk()
1870 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_1M) in snd_usb_ctl_msg_quirk()
1872 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_5M) in snd_usb_ctl_msg_quirk()
1878 * augment the PCM format bit-field for DSD types. The UAC standards
1879 * don't have a designated bit field to denote DSD-capable interfaces,
1890 if (USB_ID_VENDOR(chip->usb_id) == 0x23ba && in snd_usb_interface_dsd_format_quirks()
1891 USB_ID_PRODUCT(chip->usb_id) < 0x0110) { in snd_usb_interface_dsd_format_quirks()
1892 switch (fp->altsetting) { in snd_usb_interface_dsd_format_quirks()
1894 fp->dsd_dop = true; in snd_usb_interface_dsd_format_quirks()
1897 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
1900 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
1906 switch (chip->usb_id) { in snd_usb_interface_dsd_format_quirks()
1908 case USB_ID(0x20b1, 0x3089): /* Mola-Mola DAC */ in snd_usb_interface_dsd_format_quirks()
1912 case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ in snd_usb_interface_dsd_format_quirks()
1913 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
1918 case USB_ID(0x10cb, 0x0103): /* The Bit Opus #3; with fp->dsd_raw */ in snd_usb_interface_dsd_format_quirks()
1919 case USB_ID(0x16d0, 0x06b2): /* NuPrime DAC-10 */ in snd_usb_interface_dsd_format_quirks()
1920 case USB_ID(0x16d0, 0x06b4): /* NuPrime Audio HD-AVP/AVA */ in snd_usb_interface_dsd_format_quirks()
1922 case USB_ID(0x16d0, 0x09d8): /* NuPrime IDA-8 */ in snd_usb_interface_dsd_format_quirks()
1923 case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */ in snd_usb_interface_dsd_format_quirks()
1930 case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */ in snd_usb_interface_dsd_format_quirks()
1931 case USB_ID(0x278b, 0x5100): /* Rotel RC-1590 */ in snd_usb_interface_dsd_format_quirks()
1932 case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */ in snd_usb_interface_dsd_format_quirks()
1935 if (fp->altsetting == 3) in snd_usb_interface_dsd_format_quirks()
1940 case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */ in snd_usb_interface_dsd_format_quirks()
1941 if (fp->altsetting == 2) { in snd_usb_interface_dsd_format_quirks()
1942 switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) { in snd_usb_interface_dsd_format_quirks()
1954 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
1962 /* ITF-USB DSD based DACs */ in snd_usb_interface_dsd_format_quirks()
1963 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_interface_dsd_format_quirks()
1964 iface = usb_ifnum_to_if(chip->dev, fp->iface); in snd_usb_interface_dsd_format_quirks()
1967 * three (0-2), in snd_usb_interface_dsd_format_quirks()
1969 * four (0-3). in snd_usb_interface_dsd_format_quirks()
1971 if (fp->altsetting == iface->num_altsetting - 1) in snd_usb_interface_dsd_format_quirks()
1975 /* Mostly generic method to detect many DSD-capable implementations */ in snd_usb_interface_dsd_format_quirks()
1976 if ((chip->quirk_flags & QUIRK_FLAG_DSD_RAW) && fp->dsd_raw) in snd_usb_interface_dsd_format_quirks()
1986 switch (chip->usb_id) { in snd_usb_audioformat_attributes_quirk()
1991 fp->attributes &= ~UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
1994 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_audioformat_attributes_quirk()
1996 fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
1998 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro USB */ in snd_usb_audioformat_attributes_quirk()
1999 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_audioformat_attributes_quirk()
2004 * plantronics headset and Griffin iMic have set adaptive-in in snd_usb_audioformat_attributes_quirk()
2007 fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE; in snd_usb_audioformat_attributes_quirk()
2009 fp->ep_attr |= USB_ENDPOINT_SYNC_ADAPTIVE; in snd_usb_audioformat_attributes_quirk()
2011 fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC; in snd_usb_audioformat_attributes_quirk()
2019 fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
2023 fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
2028 fp->attributes &= ~UAC_EP_CS_ATTR_PITCH_CONTROL; in snd_usb_audioformat_attributes_quirk()
2087 DEVICE_FLG(0x0499, 0x3108, /* Yamaha YIT-W12TX */
2095 DEVICE_FLG(0x054c, 0x0b8c, /* Sony WALKMAN NW-A45 DAC */
2107 DEVICE_FLG(0x0644, 0x8043, /* TEAC UD-501/UD-501V2/UD-503/NT-503 */
2110 DEVICE_FLG(0x0644, 0x8044, /* Esoteric D-05X */
2113 DEVICE_FLG(0x0644, 0x804a, /* TEAC UD-301 */
2118 DEVICE_FLG(0x0644, 0x806b, /* TEAC UD-701 */
2125 DEVICE_FLG(0x0711, 0x5800, /* MCT Trigger 5 USB-to-HDMI */
2129 DEVICE_FLG(0x0763, 0x2030, /* M-Audio Fast Track C400 */
2131 DEVICE_FLG(0x0763, 0x2031, /* M-Audio Fast Track C600 */
2151 DEVICE_FLG(0x0fd9, 0x0008, /* Hauppauge HVR-950Q */
2167 DEVICE_FLG(0x154e, 0x1002, /* Denon DCD-1500RE */
2169 DEVICE_FLG(0x154e, 0x1003, /* Denon DA-300USB */
2171 DEVICE_FLG(0x154e, 0x3005, /* Marantz HD-DAC1 */
2173 DEVICE_FLG(0x154e, 0x3006, /* Marantz SA-14S1 */
2175 DEVICE_FLG(0x154e, 0x300b, /* Marantz SA-KI RUBY / SA-12 */
2177 DEVICE_FLG(0x154e, 0x500e, /* Denon DN-X1600 */
2181 DEVICE_FLG(0x17aa, 0x1046, /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2187 DEVICE_FLG(0x1852, 0x5062, /* Luxman D-08u */
2189 DEVICE_FLG(0x1852, 0x5065, /* Luxman DA-06 */
2193 DEVICE_FLG(0x19f7, 0x0035, /* RODE NT-USB+ */
2199 DEVICE_FLG(0x2040, 0x7200, /* Hauppauge HVR-950Q */
2201 DEVICE_FLG(0x2040, 0x7201, /* Hauppauge HVR-950Q-MXL */
2203 DEVICE_FLG(0x2040, 0x7210, /* Hauppauge HVR-950Q */
2205 DEVICE_FLG(0x2040, 0x7211, /* Hauppauge HVR-950Q-MXL */
2207 DEVICE_FLG(0x2040, 0x7213, /* Hauppauge HVR-950Q */
2209 DEVICE_FLG(0x2040, 0x7217, /* Hauppauge HVR-950Q */
2211 DEVICE_FLG(0x2040, 0x721b, /* Hauppauge HVR-950Q */
2213 DEVICE_FLG(0x2040, 0x721e, /* Hauppauge HVR-950Q */
2215 DEVICE_FLG(0x2040, 0x721f, /* Hauppauge HVR-950Q */
2217 DEVICE_FLG(0x2040, 0x7240, /* Hauppauge HVR-850 */
2219 DEVICE_FLG(0x2040, 0x7260, /* Hauppauge HVR-950Q */
2221 DEVICE_FLG(0x2040, 0x7270, /* Hauppauge HVR-950Q */
2223 DEVICE_FLG(0x2040, 0x7280, /* Hauppauge HVR-950Q */
2225 DEVICE_FLG(0x2040, 0x7281, /* Hauppauge HVR-950Q-MXL */
2231 DEVICE_FLG(0x21b4, 0x0230, /* Ayre QB-9 Twenty */
2233 DEVICE_FLG(0x21b4, 0x0232, /* Ayre QX-5 Twenty */
2243 DEVICE_FLG(0x2b53, 0x0023, /* Fiero SC-01 (firmware v1.0.0 @ 48 kHz) */
2245 DEVICE_FLG(0x2b53, 0x0024, /* Fiero SC-01 (firmware v1.0.0 @ 96 kHz) */
2247 DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
2249 DEVICE_FLG(0x2d95, 0x8011, /* VIVO USB-C HEADSET */
2251 DEVICE_FLG(0x2d95, 0x8021, /* VIVO USB-C-XE710 HEADSET */
2326 for (p = quirk_flags_table; p->id; p++) { in snd_usb_init_quirk_flags()
2327 if (chip->usb_id == p->id || in snd_usb_init_quirk_flags()
2328 (!USB_ID_PRODUCT(p->id) && in snd_usb_init_quirk_flags()
2329 USB_ID_VENDOR(chip->usb_id) == USB_ID_VENDOR(p->id))) { in snd_usb_init_quirk_flags()
2332 p->flags, USB_ID_VENDOR(chip->usb_id), in snd_usb_init_quirk_flags()
2333 USB_ID_PRODUCT(chip->usb_id)); in snd_usb_init_quirk_flags()
2334 chip->quirk_flags |= p->flags; in snd_usb_init_quirk_flags()