Lines Matching +full:dac +full:- +full:full +full:- +full:bias +full:- +full:current

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()
107 /* reset the current interface */ 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_array(fp->rate_table, fp->nr_rates, sizeof(int), 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()
564 /* Send message to force it to reconnect with full interface. */ 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()
752 * REG0: DAC is master, sample rate 48kHz, no copyright in snd_usb_cm6206_boot_quirk()
772 * REG3: default flyspeed, set 2.5V mic bias in snd_usb_cm6206_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()
1269 struct usb_host_config *config = dev->actconfig; in snd_usb_mbox3_boot_quirk()
1274 descriptor_size = le16_to_cpu(get_cfg_desc(config)->wTotalLength); in snd_usb_mbox3_boot_quirk()
1277 dev_err(&dev->dev, "MBOX3: Invalid descriptor size=%d.\n", descriptor_size); in snd_usb_mbox3_boot_quirk()
1278 return -ENODEV; in snd_usb_mbox3_boot_quirk()
1281 dev_dbg(&dev->dev, "MBOX3: device initialised!\n"); in snd_usb_mbox3_boot_quirk()
1285 return -ENOMEM; in snd_usb_mbox3_boot_quirk()
1290 dev_dbg(&dev->dev, "MBOX3: error usb_get_descriptor: %d\n", err); in snd_usb_mbox3_boot_quirk()
1291 if (new_device_descriptor->bNumConfigurations > dev->descriptor.bNumConfigurations) in snd_usb_mbox3_boot_quirk()
1292 dev_dbg(&dev->dev, "MBOX3: error too large bNumConfigurations: %d\n", in snd_usb_mbox3_boot_quirk()
1293 new_device_descriptor->bNumConfigurations); in snd_usb_mbox3_boot_quirk()
1295 memcpy(&dev->descriptor, new_device_descriptor, sizeof(dev->descriptor)); in snd_usb_mbox3_boot_quirk()
1299 dev_dbg(&dev->dev, "MBOX3: error usb_reset_configuration: %d\n", err); in snd_usb_mbox3_boot_quirk()
1301 dev_dbg(&dev->dev, "MBOX3: new boot length = %d\n", in snd_usb_mbox3_boot_quirk()
1302 le16_to_cpu(get_cfg_desc(config)->wTotalLength)); in snd_usb_mbox3_boot_quirk()
1305 dev_info(&dev->dev, "MBOX3: Initialized."); in snd_usb_mbox3_boot_quirk()
1318 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1330 return -EINVAL; in snd_usb_motu_microbookii_communicate()
1354 return -ENOMEM; in snd_usb_motu_microbookii_boot_quirk()
1356 dev_info(&dev->dev, "Waiting for MOTU Microbook II to boot up...\n"); in snd_usb_motu_microbookii_boot_quirk()
1365 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1374 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1376 err = -ENODEV; in snd_usb_motu_microbookii_boot_quirk()
1387 dev_err(&dev->dev, in snd_usb_motu_microbookii_boot_quirk()
1399 if (actual_length == 12 && buf[actual_length - 1] == 1) in snd_usb_motu_microbookii_boot_quirk()
1405 dev_info(&dev->dev, "MOTU MicroBook II ready\n"); in snd_usb_motu_microbookii_boot_quirk()
1444 #define MAUDIO_SET_COMPATIBLE 0x80 /* use only "win-compatible" interfaces */
1446 #define MAUDIO_SET_96K 0x04 /* 48-96kHz rate if set, 8-48kHz otherwise */
1461 usb_set_interface(chip->dev, iface, 0); in quattro_skip_setting_quirk()
1462 if (chip->setup & MAUDIO_SET) { in quattro_skip_setting_quirk()
1463 if (chip->setup & MAUDIO_SET_COMPATIBLE) { in quattro_skip_setting_quirk()
1470 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in quattro_skip_setting_quirk()
1472 mask = chip->setup & MAUDIO_SET_MASK; in quattro_skip_setting_quirk()
1483 altno, iface, chip->setup); in quattro_skip_setting_quirk()
1494 usb_set_interface(chip->dev, iface, 0); in audiophile_skip_setting_quirk()
1496 if (chip->setup & MAUDIO_SET) { in audiophile_skip_setting_quirk()
1498 if ((chip->setup & MAUDIO_SET_DTS) && altno != 6) in audiophile_skip_setting_quirk()
1500 if ((chip->setup & MAUDIO_SET_96K) && altno != 1) in audiophile_skip_setting_quirk()
1502 mask = chip->setup & MAUDIO_SET_MASK; in audiophile_skip_setting_quirk()
1522 usb_set_interface(chip->dev, iface, 0); in fasttrackpro_skip_setting_quirk()
1525 *used is not supported by the current setup in fasttrackpro_skip_setting_quirk()
1527 if (chip->setup & (MAUDIO_SET | MAUDIO_SET_24B)) { in fasttrackpro_skip_setting_quirk()
1528 if (chip->setup & MAUDIO_SET_96K) { in fasttrackpro_skip_setting_quirk()
1531 } else if (chip->setup & MAUDIO_SET_DI) { in fasttrackpro_skip_setting_quirk()
1543 /* keep only 16-Bit mode */ in fasttrackpro_skip_setting_quirk()
1550 altno, iface, chip->setup); in fasttrackpro_skip_setting_quirk()
1576 if ((chip->setup == 0 || chip->setup > 2) && altno != 2) in s1810c_skip_setting_quirk()
1578 else if (chip->setup == 1 && altno != 1) in s1810c_skip_setting_quirk()
1580 else if (chip->setup == 2 && altno != 3) in s1810c_skip_setting_quirk()
1591 if (chip->usb_id == USB_ID(0x0763, 0x2003)) in snd_usb_apply_interface_quirk()
1594 if (chip->usb_id == USB_ID(0x0763, 0x2001)) in snd_usb_apply_interface_quirk()
1597 if (chip->usb_id == USB_ID(0x0763, 0x2012)) in snd_usb_apply_interface_quirk()
1600 if (chip->usb_id == USB_ID(0x194f, 0x010c)) in snd_usb_apply_interface_quirk()
1603 if (chip->usb_id == USB_ID(0x194f, 0x010d)) in snd_usb_apply_interface_quirk()
1616 /* SB Extigy needs special boot-up sequence */ in snd_usb_apply_boot_quirk()
1621 /* SB Audigy 2 NX needs its own boot-up magic, too */ in snd_usb_apply_boot_quirk()
1625 /* C-Media CM106 / Turtle Beach Audio Advantage Roadie */ in snd_usb_apply_boot_quirk()
1629 /* C-Media CM6206 / CM106-Like Sound Device */ in snd_usb_apply_boot_quirk()
1653 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_apply_boot_quirk()
1657 case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */ in snd_usb_apply_boot_quirk()
1661 * For some reason interface 3 with vendor-spec class is in snd_usb_apply_boot_quirk()
1664 if (get_iface_desc(intf->altsetting)->bInterfaceClass == in snd_usb_apply_boot_quirk()
1666 get_iface_desc(intf->altsetting)->bInterfaceNumber < 3) in snd_usb_apply_boot_quirk()
1691 * check if the device uses big-endian samples
1696 /* it depends on altsetting whether the device is big-endian or not */ in snd_usb_is_big_endian_format()
1697 switch (chip->usb_id) { in snd_usb_is_big_endian_format()
1698 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */ in snd_usb_is_big_endian_format()
1699 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1700 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1703 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_is_big_endian_format()
1704 if (chip->setup == 0x00 || in snd_usb_is_big_endian_format()
1705 fp->altsetting == 1 || fp->altsetting == 2 || in snd_usb_is_big_endian_format()
1706 fp->altsetting == 3) in snd_usb_is_big_endian_format()
1709 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro */ in snd_usb_is_big_endian_format()
1710 if (fp->altsetting == 2 || fp->altsetting == 3 || in snd_usb_is_big_endian_format()
1711 fp->altsetting == 5 || fp->altsetting == 6) in snd_usb_is_big_endian_format()
1719 * For E-Mu 0404USB/0202USB/TrackerPre/0204 sample rate should be set for device,
1741 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { in set_format_emu_quirk()
1742 if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].cur_audiofmt) in set_format_emu_quirk()
1746 switch (fmt->rate_min) { in set_format_emu_quirk()
1766 snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id); in set_format_emu_quirk()
1767 subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0; in set_format_emu_quirk()
1773 unsigned int cur_rate = subs->data_endpoint->cur_rate; in pioneer_djm_set_format_quirk()
1779 usb_set_interface(subs->dev, 0, 1); in pioneer_djm_set_format_quirk()
1780 // we should derive windex from fmt-sync_ep but it's not set in pioneer_djm_set_format_quirk()
1781 snd_usb_ctl_msg(subs->stream->chip->dev, in pioneer_djm_set_format_quirk()
1782 usb_sndctrlpipe(subs->stream->chip->dev, 0), in pioneer_djm_set_format_quirk()
1792 u32 new_rate = subs->data_endpoint->cur_rate; in mbox3_set_format_quirk()
1795 // Get current rate from card and check if changing it is needed in mbox3_set_format_quirk()
1796 snd_usb_ctl_msg(subs->dev, usb_rcvctrlpipe(subs->dev, 0), in mbox3_set_format_quirk()
1799 dev_dbg(&subs->dev->dev, in mbox3_set_format_quirk()
1800 "MBOX3: Current configured sample rate: %d", current_rate); in mbox3_set_format_quirk()
1802 dev_dbg(&subs->dev->dev, in mbox3_set_format_quirk()
1803 "MBOX3: No change needed (current rate:%d == new rate:%d)", in mbox3_set_format_quirk()
1809 dev_info(&subs->dev->dev, in mbox3_set_format_quirk()
1812 snd_usb_ctl_msg(subs->dev, usb_sndctrlpipe(subs->dev, 0), in mbox3_set_format_quirk()
1816 snd_usb_ctl_msg(subs->dev, usb_sndctrlpipe(subs->dev, 0), in mbox3_set_format_quirk()
1821 snd_usb_ctl_msg(subs->dev, usb_rcvctrlpipe(subs->dev, 0), in mbox3_set_format_quirk()
1824 dev_warn(&subs->dev->dev, "MBOX3: Couldn't set the sample rate"); in mbox3_set_format_quirk()
1835 unsigned int cur_rate = subs->data_endpoint->cur_rate; in rme_digiface_set_format_quirk()
1846 return -EINVAL; in rme_digiface_set_format_quirk()
1853 snd_usb_ctl_msg(subs->stream->chip->dev, in rme_digiface_set_format_quirk()
1854 usb_sndctrlpipe(subs->stream->chip->dev, 0), in rme_digiface_set_format_quirk()
1862 switch (subs->stream->chip->usb_id) { in snd_usb_set_format_quirk()
1863 case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ in snd_usb_set_format_quirk()
1864 case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ in snd_usb_set_format_quirk()
1865 case USB_ID(0x041e, 0x3f0a): /* E-Mu Tracker Pre */ in snd_usb_set_format_quirk()
1866 case USB_ID(0x041e, 0x3f19): /* E-Mu 0204 USB */ in snd_usb_set_format_quirk()
1871 subs->stream_offset_adj = 2; in snd_usb_set_format_quirk()
1873 case USB_ID(0x2b73, 0x000a): /* Pioneer DJM-900NXS2 */ in snd_usb_set_format_quirk()
1874 case USB_ID(0x2b73, 0x0013): /* Pioneer DJM-450 */ in snd_usb_set_format_quirk()
1877 case USB_ID(0x08e4, 0x017f): /* Pioneer DJM-750 */ in snd_usb_set_format_quirk()
1878 case USB_ID(0x08e4, 0x0163): /* Pioneer DJM-850 */ in snd_usb_set_format_quirk()
1894 struct usb_device *dev = chip->dev; in snd_usb_select_mode_quirk()
1897 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_select_mode_quirk()
1899 * will not be accepted by the DAC in snd_usb_select_mode_quirk()
1901 err = usb_set_interface(dev, fmt->iface, 0); in snd_usb_select_mode_quirk()
1908 if (fmt->formats & SNDRV_PCM_FMTBIT_DSD_U32_BE) { in snd_usb_select_mode_quirk()
1937 if (USB_ID_VENDOR(ep->chip->usb_id) == 0x23ba && in snd_usb_endpoint_start_quirk()
1938 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) in snd_usb_endpoint_start_quirk()
1939 ep->skip_packets = 4; in snd_usb_endpoint_start_quirk()
1942 * M-Audio Fast Track C400/C600 - when packets are not skipped, real in snd_usb_endpoint_start_quirk()
1943 * world latency varies by approx. +/- 50 frames (at 96kHz) each time in snd_usb_endpoint_start_quirk()
1945 * start up, the real world latency is stable within +/- 1 frame (also in snd_usb_endpoint_start_quirk()
1948 if ((ep->chip->usb_id == USB_ID(0x0763, 0x2030) || in snd_usb_endpoint_start_quirk()
1949 ep->chip->usb_id == USB_ID(0x0763, 0x2031)) && in snd_usb_endpoint_start_quirk()
1950 ep->type == SND_USB_ENDPOINT_TYPE_DATA) in snd_usb_endpoint_start_quirk()
1951 ep->skip_packets = 16; in snd_usb_endpoint_start_quirk()
1954 if ((ep->chip->usb_id == USB_ID(0x0644, 0x8038) || /* TEAC UD-H01 */ in snd_usb_endpoint_start_quirk()
1955 ep->chip->usb_id == USB_ID(0x1852, 0x5034)) && /* T+A Dac8 */ in snd_usb_endpoint_start_quirk()
1956 ep->syncmaxsize == 4) in snd_usb_endpoint_start_quirk()
1957 ep->tenor_fb_quirk = 1; in snd_usb_endpoint_start_quirk()
1965 struct snd_usb_audio *chip = dev_get_drvdata(&dev->dev); in snd_usb_ctl_msg_quirk()
1970 if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY) in snd_usb_ctl_msg_quirk()
1972 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_1M) in snd_usb_ctl_msg_quirk()
1974 else if (chip->quirk_flags & QUIRK_FLAG_CTL_MSG_DELAY_5M) in snd_usb_ctl_msg_quirk()
1980 * augment the PCM format bit-field for DSD types. The UAC standards
1981 * don't have a designated bit field to denote DSD-capable interfaces,
1992 if (USB_ID_VENDOR(chip->usb_id) == 0x23ba && in snd_usb_interface_dsd_format_quirks()
1993 USB_ID_PRODUCT(chip->usb_id) < 0x0110) { in snd_usb_interface_dsd_format_quirks()
1994 switch (fp->altsetting) { in snd_usb_interface_dsd_format_quirks()
1996 fp->dsd_dop = true; in snd_usb_interface_dsd_format_quirks()
1999 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
2002 fp->dsd_bitrev = true; in snd_usb_interface_dsd_format_quirks()
2008 switch (chip->usb_id) { in snd_usb_interface_dsd_format_quirks()
2009 case USB_ID(0x139f, 0x5504): /* Nagra DAC */ in snd_usb_interface_dsd_format_quirks()
2010 case USB_ID(0x20b1, 0x3089): /* Mola-Mola DAC */ in snd_usb_interface_dsd_format_quirks()
2013 case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity */ in snd_usb_interface_dsd_format_quirks()
2014 case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ in snd_usb_interface_dsd_format_quirks()
2015 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
2020 case USB_ID(0x10cb, 0x0103): /* The Bit Opus #3; with fp->dsd_raw */ in snd_usb_interface_dsd_format_quirks()
2021 case USB_ID(0x16d0, 0x06b2): /* NuPrime DAC-10 */ in snd_usb_interface_dsd_format_quirks()
2022 case USB_ID(0x16d0, 0x06b4): /* NuPrime Audio HD-AVP/AVA */ in snd_usb_interface_dsd_format_quirks()
2024 case USB_ID(0x16d0, 0x09d8): /* NuPrime IDA-8 */ in snd_usb_interface_dsd_format_quirks()
2025 case USB_ID(0x16d0, 0x09db): /* NuPrime Audio DAC-9 */ in snd_usb_interface_dsd_format_quirks()
2031 case USB_ID(0x2616, 0x0106): /* PS Audio NuWave DAC */ in snd_usb_interface_dsd_format_quirks()
2032 case USB_ID(0x2622, 0x0041): /* Audiolab M-DAC+ */ in snd_usb_interface_dsd_format_quirks()
2033 case USB_ID(0x278b, 0x5100): /* Rotel RC-1590 */ in snd_usb_interface_dsd_format_quirks()
2034 case USB_ID(0x27f7, 0x3002): /* W4S DAC-2v2SE */ in snd_usb_interface_dsd_format_quirks()
2037 if (fp->altsetting == 3) in snd_usb_interface_dsd_format_quirks()
2042 case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */ in snd_usb_interface_dsd_format_quirks()
2043 if (fp->altsetting == 2) { in snd_usb_interface_dsd_format_quirks()
2044 switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) { in snd_usb_interface_dsd_format_quirks()
2056 if (fp->altsetting == 2) in snd_usb_interface_dsd_format_quirks()
2064 /* ITF-USB DSD based DACs */ in snd_usb_interface_dsd_format_quirks()
2065 if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { in snd_usb_interface_dsd_format_quirks()
2066 iface = usb_ifnum_to_if(chip->dev, fp->iface); in snd_usb_interface_dsd_format_quirks()
2069 * three (0-2), in snd_usb_interface_dsd_format_quirks()
2071 * four (0-3). in snd_usb_interface_dsd_format_quirks()
2073 if (fp->altsetting == iface->num_altsetting - 1) in snd_usb_interface_dsd_format_quirks()
2077 /* Mostly generic method to detect many DSD-capable implementations */ in snd_usb_interface_dsd_format_quirks()
2078 if ((chip->quirk_flags & QUIRK_FLAG_DSD_RAW) && fp->dsd_raw) in snd_usb_interface_dsd_format_quirks()
2088 switch (chip->usb_id) { in snd_usb_audioformat_attributes_quirk()
2093 fp->attributes &= ~UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
2096 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ in snd_usb_audioformat_attributes_quirk()
2098 fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE; in snd_usb_audioformat_attributes_quirk()
2100 case USB_ID(0x0763, 0x2001): /* M-Audio Quattro USB */ in snd_usb_audioformat_attributes_quirk()
2101 case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ in snd_usb_audioformat_attributes_quirk()
2106 * plantronics headset and Griffin iMic have set adaptive-in in snd_usb_audioformat_attributes_quirk()
2109 fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE; in snd_usb_audioformat_attributes_quirk()
2111 fp->ep_attr |= USB_ENDPOINT_SYNC_ADAPTIVE; in snd_usb_audioformat_attributes_quirk()
2113 fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC; in snd_usb_audioformat_attributes_quirk()
2121 fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
2125 fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX; in snd_usb_audioformat_attributes_quirk()
2130 fp->attributes &= ~UAC_EP_CS_ATTR_PITCH_CONTROL; in snd_usb_audioformat_attributes_quirk()
2189 DEVICE_FLG(0x0499, 0x3108, /* Yamaha YIT-W12TX */
2197 DEVICE_FLG(0x054c, 0x0b8c, /* Sony WALKMAN NW-A45 DAC */
2209 DEVICE_FLG(0x0644, 0x8043, /* TEAC UD-501/UD-501V2/UD-503/NT-503 */
2212 DEVICE_FLG(0x0644, 0x8044, /* Esoteric D-05X */
2215 DEVICE_FLG(0x0644, 0x804a, /* TEAC UD-301 */
2220 DEVICE_FLG(0x0644, 0x806b, /* TEAC UD-701 */
2227 DEVICE_FLG(0x0711, 0x5800, /* MCT Trigger 5 USB-to-HDMI */
2231 DEVICE_FLG(0x0763, 0x2030, /* M-Audio Fast Track C400 */
2233 DEVICE_FLG(0x0763, 0x2031, /* M-Audio Fast Track C600 */
2253 DEVICE_FLG(0x0fd9, 0x0008, /* Hauppauge HVR-950Q */
2269 DEVICE_FLG(0x154e, 0x1002, /* Denon DCD-1500RE */
2271 DEVICE_FLG(0x154e, 0x1003, /* Denon DA-300USB */
2273 DEVICE_FLG(0x154e, 0x3005, /* Marantz HD-DAC1 */
2275 DEVICE_FLG(0x154e, 0x3006, /* Marantz SA-14S1 */
2277 DEVICE_FLG(0x154e, 0x300b, /* Marantz SA-KI RUBY / SA-12 */
2279 DEVICE_FLG(0x154e, 0x500e, /* Denon DN-X1600 */
2283 DEVICE_FLG(0x17aa, 0x1046, /* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
2287 DEVICE_FLG(0x1852, 0x5062, /* Luxman D-08u */
2289 DEVICE_FLG(0x1852, 0x5065, /* Luxman DA-06 */
2293 DEVICE_FLG(0x19f7, 0x0035, /* RODE NT-USB+ */
2299 DEVICE_FLG(0x2040, 0x7200, /* Hauppauge HVR-950Q */
2301 DEVICE_FLG(0x2040, 0x7201, /* Hauppauge HVR-950Q-MXL */
2303 DEVICE_FLG(0x2040, 0x7210, /* Hauppauge HVR-950Q */
2305 DEVICE_FLG(0x2040, 0x7211, /* Hauppauge HVR-950Q-MXL */
2307 DEVICE_FLG(0x2040, 0x7213, /* Hauppauge HVR-950Q */
2309 DEVICE_FLG(0x2040, 0x7217, /* Hauppauge HVR-950Q */
2311 DEVICE_FLG(0x2040, 0x721b, /* Hauppauge HVR-950Q */
2313 DEVICE_FLG(0x2040, 0x721e, /* Hauppauge HVR-950Q */
2315 DEVICE_FLG(0x2040, 0x721f, /* Hauppauge HVR-950Q */
2317 DEVICE_FLG(0x2040, 0x7240, /* Hauppauge HVR-850 */
2319 DEVICE_FLG(0x2040, 0x7260, /* Hauppauge HVR-950Q */
2321 DEVICE_FLG(0x2040, 0x7270, /* Hauppauge HVR-950Q */
2323 DEVICE_FLG(0x2040, 0x7280, /* Hauppauge HVR-950Q */
2325 DEVICE_FLG(0x2040, 0x7281, /* Hauppauge HVR-950Q-MXL */
2331 DEVICE_FLG(0x21b4, 0x0230, /* Ayre QB-9 Twenty */
2333 DEVICE_FLG(0x21b4, 0x0232, /* Ayre QX-5 Twenty */
2343 DEVICE_FLG(0x2b53, 0x0023, /* Fiero SC-01 (firmware v1.0.0 @ 48 kHz) */
2345 DEVICE_FLG(0x2b53, 0x0024, /* Fiero SC-01 (firmware v1.0.0 @ 96 kHz) */
2347 DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */
2349 DEVICE_FLG(0x2d95, 0x8011, /* VIVO USB-C HEADSET */
2351 DEVICE_FLG(0x2d95, 0x8021, /* VIVO USB-C-XE710 HEADSET */
2426 for (p = quirk_flags_table; p->id; p++) { in snd_usb_init_quirk_flags()
2427 if (chip->usb_id == p->id || in snd_usb_init_quirk_flags()
2428 (!USB_ID_PRODUCT(p->id) && in snd_usb_init_quirk_flags()
2429 USB_ID_VENDOR(chip->usb_id) == USB_ID_VENDOR(p->id))) { in snd_usb_init_quirk_flags()
2432 p->flags, USB_ID_VENDOR(chip->usb_id), in snd_usb_init_quirk_flags()
2433 USB_ID_PRODUCT(chip->usb_id)); in snd_usb_init_quirk_flags()
2434 chip->quirk_flags |= p->flags; in snd_usb_init_quirk_flags()