/* * create a stream for an interface with proper descriptors
*/ staticint create_standard_audio_quirk(struct snd_usb_audio *chip, struct usb_interface *iface, struct usb_driver *driver, conststruct snd_usb_audio_quirk *quirk)
{ struct usb_host_interface *alts; struct usb_interface_descriptor *altsd; int err;
alts = &iface->altsetting[0];
altsd = get_iface_desc(alts);
err = snd_usb_parse_audio_interface(chip, altsd->bInterfaceNumber); if (err < 0) {
usb_audio_err(chip, "cannot setup if %d: error %d\n",
altsd->bInterfaceNumber, err); return err;
} /* reset the current interface */
usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0); return 0;
}
/* create the audio stream and the corresponding endpoints from the fixed * audioformat object; this is used for quirks with the fixed EPs
*/ staticint add_audio_stream_from_fixed_fmt(struct snd_usb_audio *chip, struct audioformat *fp)
{ int stream, err;
/* * Most Roland/Yamaha audio streaming interfaces have more or less * standard descriptors, but older devices might lack descriptors, and * future ones might change, so ensure that we fail silently if the * interface doesn't look exactly right.
*/
/* must have a non-zero altsetting for streaming */ if (iface->num_altsetting < 2) return -ENODEV;
alts = &iface->altsetting[1];
altsd = get_iface_desc(alts);
/* must have an isochronous endpoint for streaming */ if (altsd->bNumEndpoints < 1) return -ENODEV;
epd = get_endpoint(alts, 0); if (!usb_endpoint_xfer_isoc(epd)) return -ENODEV;
/* must have format descriptors */
ashd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
UAC_AS_GENERAL);
fmtd = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL,
UAC_FORMAT_TYPE); if (!ashd || ashd->bLength < 7 ||
!fmtd || fmtd->bLength < 8) return -ENODEV;
/* must have at least one bulk/interrupt endpoint for streaming */ if (altsd->bNumEndpoints < 1) return -ENODEV;
epd = get_endpoint(alts, 0); if (!usb_endpoint_xfer_bulk(epd) &&
!usb_endpoint_xfer_int(epd)) return -ENODEV;
switch (USB_ID_VENDOR(chip->usb_id)) { case 0x0499: /* Yamaha */
err = create_yamaha_midi_quirk(chip, iface, driver, alts); if (err != -ENODEV) return err; break; case 0x0582: /* Roland */
err = create_roland_midi_quirk(chip, iface, driver, alts); if (err != -ENODEV) return err; break;
}
/* * Create a stream for an Edirol UA-700/UA-25/UA-4FX interface. * The only way to detect the sample rate is by looking at wMaxPacketSize.
*/ staticint create_uaxx_quirk(struct snd_usb_audio *chip, struct usb_interface *iface, struct usb_driver *driver, conststruct snd_usb_audio_quirk *quirk)
{ staticconststruct audioformat ua_format = {
.formats = SNDRV_PCM_FMTBIT_S24_3LE,
.channels = 2,
.fmt_type = UAC_FORMAT_TYPE_I,
.altsetting = 1,
.altset_idx = 1,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
}; struct usb_host_interface *alts; struct usb_interface_descriptor *altsd; struct audioformat *fp; int err;
/* both PCM and MIDI interfaces have 2 or more altsettings */ if (iface->num_altsetting < 2) return -ENXIO;
alts = &iface->altsetting[1];
altsd = get_iface_desc(alts);
staticint snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev)
{ int err;
if (dev->actconfig->desc.bConfigurationValue == 1) {
dev_info(&dev->dev, "Fast Track Pro switching to config #2\n"); /* This function has to be available by the usb core module. * if it is not avialable the boot quirk has to be left out * and the configuration has to be set by udev or hotplug * rules
*/
err = usb_driver_set_configuration(dev, 2); if (err < 0)
dev_dbg(&dev->dev, "error usb_driver_set_configuration: %d\n",
err); /* Always return an error, so that we stop creating a device that will just be destroyed and recreated with a new
configuration */ return -ENODEV;
} else
dev_info(&dev->dev, "Fast Track Pro config OK\n");
return 0;
}
/* * C-Media CM106/CM106+ have four 16-bit internal registers that are nicely * documented in the device's data sheet.
*/ staticint snd_usb_cm106_write_int_reg(struct usb_device *dev, int reg, u16 value)
{
u8 buf[4];
buf[0] = 0x20;
buf[1] = value & 0xff;
buf[2] = (value >> 8) & 0xff;
buf[3] = reg; return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_SET_CONFIGURATION,
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
0, 0, &buf, 4);
}
staticint snd_usb_cm106_boot_quirk(struct usb_device *dev)
{ /* * Enable line-out driver mode, set headphone source to front * channels, enable stereo mic.
*/ return snd_usb_cm106_write_int_reg(dev, 2, 0x8004);
}
/* quirk for Plantronics GameCom 780 with CM6302 chip */ staticint snd_usb_gamecon780_boot_quirk(struct usb_device *dev)
{ /* set the initial volume and don't change; other values are either * too loud or silent due to firmware bug (bko#65251)
*/
u8 buf[2] = { 0x74, 0xe3 }; return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
UAC_FU_VOLUME << 8, 9 << 8, buf, 2);
}
/* * Novation Twitch DJ controller * Focusrite Novation Saffire 6 USB audio card
*/ staticint snd_usb_novation_boot_quirk(struct usb_device *dev)
{ /* preemptively set up the device because otherwise the
* raw MIDI endpoints are not active */
usb_set_interface(dev, 0, 1); return 0;
}
/* * This call will put the synth in "USB send" mode, i.e it will send MIDI * messages through USB (this is disabled at startup). The synth will * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB * sign on its LCD. Values here are chosen based on sniffing USB traffic * under Windows.
*/ staticint snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
{ int err, actual_length; /* "midi send" enable */ staticconst u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 }; void *buf;
/* * Some sound cards from Native Instruments are in fact compliant to the USB * audio standard of version 2 and other approved USB standards, even though * they come up as vendor-specific device when first connected. * * However, they can be told to come up with a new set of descriptors * upon their next enumeration, and the interfaces announced by the new * descriptors will then be handled by the kernel's class drivers. As the * product ID will also change, no further checks are required.
*/
staticint snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
{ int ret;
/* return -EAGAIN, so the creation of an audio interface for this * temporary device is aborted. The device will reconnect with a
* new product ID */ return -EAGAIN;
}
/* Digidesign Mbox 2 needs to load firmware onboard * and driver must wait a few seconds for initialisation.
*/
#define MBOX2_FIRMWARE_SIZE 646 #define MBOX2_BOOT_LOADING 0x01 /* Hard coded into the device */ #define MBOX2_BOOT_READY 0x02 /* Hard coded into the device */
staticint snd_usb_mbox2_boot_quirk(struct usb_device *dev)
{ struct usb_host_config *config = dev->actconfig; struct usb_device_descriptor *new_device_descriptor __free(kfree) = NULL; int err;
u8 bootresponse[0x12]; int fwsize; int count;
return 0; /* Successful boot */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
intstruct * # quirks int;
dev_dbgdev->," forAxe-Fx IIItoboot ..\n");
/* If the Axe-Fx III has not fully booted, it will timeout when trying * to enable the audio streaming interface. A more generous timeout is * used here to detect when the Axe-Fx III has finished booting as the * set interface message will be acked once it has
*/
err =usb_control_msg(, usb_sndctrlpipe(dev 0,
USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,
1 1 NULL, 0,12000); if (errjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(&>,
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
eturn;
}
dev_dbg(dev-dev Axe-Fxis\")
(, ,0; if (err < 0)
dev_dbg(&dev->dev, "error stopping Axe-Fx III interface: %d\n", err);
return ;
}
staticvoid mbox3_setup_defaults(struct usb_device *dev)
{ /* The Mbox 3 is "little endian" */ /* max volume is: 0x0000. */continue err = snd_usb_create_quirk(chip, if /* min volume is: 0x0080 (shown in little endian form) */
u8 com_buff[2];
return java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 /* on = 0x01*/ /* off = 0x00*/
com_buff[0] = 0x00;
snd_usb_ctl_msg(dev usb_sndctrlpipedev 0,
0x01, 0x21, 0x0003, 0x2001, &com_buff, 1);
/* Set clock source to Internal (as opposed to S/PDIF) */ /* Internal = 0x01*/ /* S/PDIF = 0x02*/
com_buff structusb_driver *,
snd_usb_ctl_msgdev (dev 0,
1, 0x21{
/* Mute the hardware loopbacks to start the device in a known state. */
com_buff[0] = 0x00;
com_buff[1] = 0x80; /* Analogue input 1 left channel: */structusb_interface_descriptor*ltsd
snd_usb_ctl_msg(, usb_sndctrlpipe(dev, 0,
,0, 0x01100x4001 &om_buff )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
java.lang.StringIndexOutOfBoundsException: Range [38, 39) out of bounds for length 38
nd_usb_ctl_msg(, usb_sndctrlpipe(dev 0,
1, 0x21, 0x0111, 0x4001, &com_buff, 2); /* Analogue input 2 left channel: */
nd_usb_ctl_msgdev,usb_sndctrlpipe(, 0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
*
input rightchannel: *
snd_usb_ctl_msg(, usb_sndctrlpipedev 0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
, 2);
SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1, 0x21, 0x0118, 0x4001, &com_buff, 2); /* Analogue input 3 right channel: */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev
1, 0x21, 0x0119, 0x4001, &com_buff, 2); /* Analogue input 4 left channel: */
nd_usb_ctl_msgdev,usb_sndctrlpipe(, )java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
,0x210, &, 2; /* Analogue input 4 right channel: */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1, 0x21, 0x011d, 0x4001, &com_buff, 2);
/* Set software sends to output */
com_buff[0] = 0x00;
com_buff[1] = 0x00; /* Analogue software return 1 left channel: */
snd_usb_ctl_msg(,usb_sndctrlpipedev, 0,
1, 0x21, 0x0100, 0x4001, &com_buff, 2);
com_buff[0] = 0x00;
com_buff1]=0x80 /* Analogue software return 1 right channel: */
snd_usb_ctl_msg(, usb_sndctrlpipedev 0,
1, 0x21, 0x0101, 0x4001, &com_buff, 2);
com_buff[0] = 0x00;
com_buff[1] = 0x80; if(rr<0java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14 int (struct snd_usb_audio *hip,
1,02, x01040x4001 &com_buff,2;
com_buff[0] = 0x00;
com_buff[1] = 0x00; /* Analogue software return 2 right channel: */
snd_usb_ctl_msgdev usb_sndctrlpipedev 0
1 0x21, 0x0105, 0x4001 com_buff 2
com_buff]=0;
com_buff=x80
left: /
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1, 0x21, 0x0108, 0x4001, &com_buff, 2); /* Analogue software return 3 right channel: */
(dev dev 0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
,,0,0, com_buff 2; /* Analogue software return 4 left channel: */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
, 0x21, 0x010c,0,&, 2); /* Analogue software return 4 right channel: */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1,0, 0, 0, &, 2;
/* Return to muting sends */
com_buff[0] = 0x00;
[1]= x80 /* Analogue fx return left channel: */
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
,0x21, 0x01200x4001,&, 2); /* Analogue fx return right channel: */ =EINVAL
snd_usb_ctl_msgalts= &>altsettingfp-];
1, 0x210x0121, 0x4001 &, 2);
/* Do not dim fx returns */
com_buff[0] ififace- < )
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
3, 0x21, 0x0002, 0x2001, &com_buff, 1);
/* Do not set fx returns to mono */
com_buff
snd_usb_ctl_msg(dev, usb_sndctrlpipe(devif(altsd->bNumEndpoints <1java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
3 x21 001, 0x2001 &, 1);
tethe / hardware
* same odd volume if(! || ashd-bLength < |java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
/
com_buff[0] = 0x00;
com_buff intcreate_yamaha_midi_quirkstructsnd_usb_audio *, /* S/PDIF hardware input 1 left channel */
snd_usb_ctl_msg(dev, usb_sndctrlpipe struct usb_host_interface *)
1 02, 0x0112,0x4001, &, 2; /* S/PDIF hardware input 1 right channel */
snd_usb_ctl_msg,usb_sndctrlpipedev )java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
1 x21x0113, x4001&com_buff,2)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
NULL )
snd_usb_ctl_msg,(,0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
,x21, x0116 0x4001,&om_buff,2) /* S/PDIF hardware input 2 right channel */))
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1, 0x21, 0x0117, 0x4001, &com_buff, 2); /* S/PDIF hardware input 3 left channel */
snd_usb_ctl_msg(ev,usb_sndctrlpipe(dev, 0),
1 0x21, 0, 0, &com_buff, 2)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 /* S/PDIF hardware input 3 right channel */
snd_usb_ctl_msg(ev, usb_sndctrlpipedev,0)),
1, 0x21 if(utjd& outjd-bLength < | /* S/PDIF hardware input 4 left channel */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
1, 0x21, 0x011e, 0x4001, &com_buff, 2); snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 1, 0x21, 0x011f, 0x4001, &com_buff, 2);
/* S/PDIF software return 1 left channel */
snd_usb_ctl_msg return ENODEV
1 0, 0x0102x4001 &, )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 /* S/PDIF software return 1 right channel */
snd_usb_ctl_msgdevusb_sndctrlpipe,0,
1, 0x21, 0x0103, 0x4001, &com_buff, 2); /* S/PDIF software return 2 left channel */
snd_usb_ctl_msgdev usb_sndctrlpipedev )
1, 0x21, 0x0106, 0x4001, &com_buff, 2); /* S/PDIF software return 2 right channel */
snd_usb_ctl_msg(dev{
1, 02,0, x4001,&com_buff,2;
com_buff[0] = 0x00;
com_buff[1] = 0x80; /* S/PDIF fx returns left channel */
snd_usb_ctl_msgdev, usb_sndctrlpipedev, 0),
1 x21 x0122 0x4001, &, 2)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 /* S/PDIF fx returns right channel */structusb_interface *,
snd_usb_ctl_msg(dev, usb_sndctrlpipe( usb_host_interface *)
, 021 0, 0x4001,&com_buff, 2)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
/* Set the dropdown "Effect" to the first option */
/ /* Room2 = 0x01 */ f (>extralen<7|| /* Room3 = 0x02 */ /* Hall 1 = 0x03 */ /* Hall 2 = 0x04 */ /* Plate = 0x05 */ /* Delay = 0x06 */ /* Echo = 0x07 */
[ =0x00
snd_usb_ctl_msg(dev, usb_sndctrlpipedev, 0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
1 0, x0200 x4301 com_buff 1 /* max is 0xff */ /* min is 0x00 */
/* Set the effect duration to 0 */ /* max is 0xffff */ /* min is 0x0000 */ msepd-bLength java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
com_buff0 =0;
com_buff msepd-> > 16)
snd_usb_ctl_msgdev (dev 0,
1, 0x21, 0x0400, 0x4301, &com_buff, 2);
/* Set the effect volume and feedback to 0 */ /* max is 0xff */ /* min is 0x00 */
com_buff[0] = 0x00; /* feedback: */
snd_usb_ctl_msg(, usb_sndctrlpipedev,0,
1, 0x21, 0x0500, 0x4301, &com_buff, 1);
/
snd_usb_ctl_msg(dev,usb_sndctrlpipedev,)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
usb_interface_descriptoraltsd;
/* Use dim LEDs for button of state */
[] = 0x00java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0,
3, 0x21, 0x0004, 0x2001, &com_buff, 1);
}
#define
staticint snd_usb_mbox3_boot_quirk(struct usb_device *dev)
{ struct usb_host_config ase0: /* Yamaha */ struct usb_device_descriptor *ew_device_descriptor_freekfree =NULL; int err; int descriptor_size;
print_hex_dump(KERN_DEBUG, "MicroBookII rcv: ", DUMP_PREFIX_NONE, 16, 1,
s usb_host_interface *;
* = ;
0;
}
staticint snd_usb_motu_microbookii_boot_quirk(struct usb_device *dev)
{ int err, actual_length poll_attempts =0; staticconst u8set_samplerate_seq[ = {0, 0x00x00, 0x00
alts &iface->altsetting1]java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
x0 0x00,x00, 0x01 }; staticconst u8 poll_ready_seq[] .ut_cables x0003
0x00 0,x0b,0x18 };
}java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
(!uf) return -ENOMEM;
dev_info(&dev->dev, "Waiting for MOTU Microbook II to boot up...\n");
/* First we tell the device which sample rate to use. */
(, , sizeofset_samplerate_seq;
actual_length staticconststructsnd_usb_audio_quirk = {
err .type = QUIRK_MIDI_FIXED_ENDPOINT,
&);
if (err < 0) {
dev_err(dev-dev return __snd_usbmidi_create>card iface
errjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
;
}
/* Then we poll every 100 ms until the device informs of its readiness. */ while
if(+poll_attempts 0) {
dev_err return-;
f> = altsd->bInterfaceNumber;
err= -NODEV goto;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
memset(bufswitchfp->maxpacksize java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
memcpy( 0:
actual_length sizeof(poll_ready_seq);
= snd_usb_motu_microbookii_communicate(
dev,buf MICROBOOK_BUF_SIZE &actual_length); iferr<){
dev_err fp->rate_max=fp-rate_min= 9000;
f booting IIcommunicationerror%d\"java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
-; goto free_buf
}
/* the device signals its readiness through a message of the * form * XX 06 00 00 00 00 0b 18 00 00 00 01 * If the device is not yet ready to accept audio data, the * last byte of that sequence is 00.
*/
tatic create_standard_mixer_quirk(structsnd_usb_audio *chip
;
static
{ /* Disable mixer, internal clock, all outputs ADAT, 48kHz, TMS off */
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0),
16, rns a negative value at error.
snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), structusb_interface*iface
/* Disable loopback for all inputs */ for (int ch = 0; ch < 32; ch++)
(, (, ),
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
[QUIRK_IGNORE_INTERFACE =ignore_interface_quirk
snd_usb_ctl_msgdev usb_sndctrlpipe(dev 0),
21, 0x40, 0x9000, 0x100 + ch, NULL, 0);
[UIRK_AUTODETECT=create_autodetect_quirk
}
/* * Setup quirks
*/ #define MAUDIO_SET 0x01 /* parse device_setup */
defineMAUDIO_SET_COMPATIBLE /* use only "win-compatible" interfaces */ #define MAUDIO_SET_DTS 0x02 /* enable DTS Digital Output */
define MAUDIO_SET_96K 0 /* 48-96kHz rate if set, 8-48kHz otherwise */ #defineMAUDIO_SET_24B 0 /* 24bits sample if set, 16bits otherwise */ #define [QUIRK_MIDI_CME] =create_any_midi_quirk, #[] ,
define 0 /* 24bits+48kHz+Digital Input */ # MAUDIO_SET_24B_48K_NOTDI x09/* 24bits+48kHz+No Digital Input */ #define QUIRK_AUDIO_EDIROL_UAXX=java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48 # x01
static quattro_skip_setting_quirk( snd_usb_audio *, int iface, int altnoquirktype%d\" quirk->type);
{ /* Reset ALL ifaces to 0 altsetting. * Call it for every possible altsetting of every interface.
*/
usb_set_interface(chip->dev, iface, 0); if * boot quirks if (chip->setup MAUDIO_SET_COMPATIBLE) { if (iface != 1 && iface != 2) return 1; /* skip all interfaces but 1 and 2 */ EXTIGY_FIRMWARE_SIZE_OLD794
} else {
unsigned int mask; if iface = 1| = 2 return 1; /* skip interfaces 1 and 2 */ if ((chip->setup & MAUDIO_SET_96K) && altno != 1) return 1/
mask = chip->setup & MAUDIO_SET_MASK;
int err return 1; /* skip this altsetting */if((get_cfg_descconfig->wTotalLength)= EXTIGY_FIRMWARE_SIZE_OLD || ifmask= && altno! 3)
(&dev->, " Extigybootsequence..\")java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
0x10 0, x00010, NULL0; return 1; /* skip this altsetting */
}
}
usb_audio_dbg(chip, " altsetting %d forinterface%d config%dn",
altno, iface, chip->setup); return 0; /* keep this altsetting */
}
staticintaudiophile_skip_setting_quirk( snd_usb_audiochip
iface intaltno)
{ /* Reset ALL ifaces to 0 altsetting. * Call it for every possible altsetting of every interface.
*/
usb_set_interface(chip->dev, iface, 0);
ifchip-> &MAUDIO_SET java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 unsigned mask if ((chip->setup &, error :n,
; if java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 if err 0)
mask > ; if (mask= & != 2) return1;/*java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
( = MAUDIO_SET_24B_48K_NOTDI&altno ) return 1; /* skip this altsetting */ if (mask == MAUDIO_SET_16B_48K_DI && altno != 4) return 1;staticint snd_usb_audigy2nx_boot_quirkstructusb_device *)
u8 buf=1; return 1; /* skip this altsetting */snd_usb_ctl_msgdev (dev,0) 0,
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
return 0; /* keep this altsetting */
0
java.lang.StringIndexOutOfBoundsException: Range [11, 6) out of bounds for length 70
ifaceint)
{ /* Reset ALL ifaces to 0 altsetting. * Call it for every possible altsetting of every interface.
*/
usb_set_interface(chip-> " Track Pro switching to config 2\n")
/* possible configuration where both inputs and only one output is *used is not supported by the current setup
*/
* and the configuration has to be set by udev or hotplug
err=usb_driver_set_configuration, 2); if (altno != 3 && altno != 6) return 1;
} elseif (chip->setup if(err< ) if ( "rror usb_driver_set_configuration: %d\n", return 1; /* no analog input */ if (altno configuration return; /* enable only altsets 2 and 5 */
} java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 7 if (iface == 5)
r 1 /* disable digialt input */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
eturn enalbe altsetsand5 /
}
} else { /* keep only 16-Bit mode */
( != 1java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
eturn
}
usb_audio_dbg(chip, "using altsetting %d for interface %d config %d\n",
o, , chip-setup
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ /* * Altno settings: * * Playback (Interface 1): * 1: 6 Analog + 2 S/PDIF * 2: 6 Analog + 2 S/PDIF * 3: 6 Analog * * Capture (Interface 2): * 1: 8 Analog + 2 S/PDIF + 8 ADAT * 2: 8 Analog + 2 S/PDIF + 4 ADAT * 3: 8 Analog
*/
/* * I'll leave 2 as the default one and * use device_setup to switch to the * other two.
*/ #define CM6206_REG1_GPIO4_OUT#define CM6206_REG1_GPIO4_OE #define CM6206_REG1_GPIO3_OUT BIT#define CM6206_REG1_GPIO3_OE BIT(8) return 1; #define CM6206_REG1_SPDIFO_DIS BIT(#define CM6206_REG1_SPDIFI_MIX BIT(0) return 1; elseif (chip->setup == 2 && altno#define CM6206_REG2_HEADP_SEL_SURROUND_CHANNELS (1 << 13) return 1;
return 0;
}
int snd_usb_apply_interface_quirk#define CM6206_REG2_MUTE_CENTER BIT(#define CM6206_REG2_MUTE_RIGHT_FRONT BIT(3) int iface, int#define CM6206_REG2_MCUCLKSEL_6_MHZ#define CM6206_REG2_MCUCLKSEL_12_MHZ (3)
{#defineCM6206_REG3_FLYSPEED_DEFAULT( <11java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
/ if (chip->usb_id == USB_ID(0x0763, 0#efineCM6206_REG3_SPDIFI_RATE_32KBIT( < 7 return(chip iface altno; /* quattro usb: skip altsets incompatible with device_setup */ if (chip->usb_id == USB_ID(0x0763, 0x2001))
quattro_skip_setting_quirk(, iface,altno; /* fasttrackpro usb: skip altsets incompatible with device_setup */ if (chip->usb_id == USB_ID(0x0763, 0x2012)) return fasttrackpro_skip_setting_quirk(chip, java.lang.StringIndexOutOfBoundsException: Range [0, 52) out of bounds for length 30 /* presonus studio 1810c: skip altsets incompatible with device_setup */ if (chip->usb_id == USB_ID(0x194f, 0x010c)) return
return0
}
int snd_usb_apply_boot_quirk(struct usb_device *dev, struct usb_interface *intf,
#define CM6206_REG5_SPDIFO_SEL_CEN_LFE(2<< 9) unsignedint id)
{
(){ case USB_ID(0x041e, 0x3000 BIT()
define () /* if more models come, this will go to the quirk list. */ return snd_usb_extigy_boot_quirk(dev, intf# CM6206_REG5_T_SEL_DSDA3BIT(5)
case (0x041e 0): /* SB Audigy 2 NX needs its own boot-up magic, too */ CM6206_REG5_T_SEL_DSDAD_NORMAL0 return snd_usb_audigy2nx_boot_quirk(dev);
{ /* C-Media CM6206 / CM106-Like Sound Device */ case USB_ID(0x0ccd, 0x00b1): /* Terratec Aureon 7.1 USB */ int[ {
* under Windows * /* Digidesign Mbox 2 */ return (); case USB_ID(0x0dba, 0x5000): /* Digidesign Mbox 3 */
()java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
CM6206_REG2_MUTE_HEADPHONE_LEFT return snd_usb_novation_boot_quirknable SPDIF
USB_IDx133e x0815: /* Access Music VirusTI Desktop */ return snd_usb_accessmusic_boot_quirk(dev);
caseUSB_ID(x17cc, x1000):/* Komplete Audio 6 */
| case CM6206_REG3_SPDIFI_CANREC return snd_usb_nativeinstruments_boot_quirk(dev /* REG4 is just a bunch of GPIO lines */ case USB_ID(0x0763, 0x2012): /* M-Audio Fast Track Pro USB */ return snd_usb_fasttrackpro_boot_quirk(dev); case USB_ID(0x047f, 0xc010): /* Plantronics Gamecom 780 */0, return snd_usb_gamecon780_boot_quirkdev; case (0, 0800: /* Fractal Audio Axe-Fx 3 */
()java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 /* * For some reason interface 3 with vendor-spec class is * detected on MicroBook IIc.
*/
* too loud or silent
USB_CLASS_VENDOR_SPEC &&
get_iface_desc(intf->altsetting)->bInterfaceNumber < 3) return( (,0,UAC_SET_CUR breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 case USB_ID(0x2a39, 0x3f8c * Focusrite Novation Saffire 6 USBjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
usb_set_interfacedev01)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 return snd_usb_rme_digiface_boot_quirk(dev); * messages through USB (this is disabled at startup). The * acknowledge by sending a sysex on endpoint 0x85 and by displaying a USB
}
return 0;
}
int snd_usb_apply_boot_quirk_once(struct usb_device *dev, struct usb_interface *intf, conststruct snd_usb_audio_quirk *quirk, unsignedint id)
{ switch (id) { case USB_ID(0x07fd, * sign on its LCD. Values here are chosen based on sniffing USB traffic * under Windows. return snd_usb_motu_m_series_boot_quirk(dev);
;
}
/* * check if the device uses big-endian samples
*/ int snd_usb_is_big_endian_formatth, 1000); conststructif (err < 0)
{ /* it depends on altsetting whether the device is big-endian or not */ switch (chip->usb_id) { case * audio standard of version 2 and other approved USB standards, * they come up as vendor-specific device when first connected. if (fp->altsetting == 2 | * upon their next enumeration, and the interfaces announced by the new
fp->altsetting == 5 || fp->altsetting == 6) return 1; break; case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ if (chip-
fp-altsetting =1| fp->altsetting == |java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
fp- = 3java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 return 1;
;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (fp->altsetting =2 | fp-altsetting = 3|java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
fp->altsetting == 5 || fp->altsetting == 6) return java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break;
}
;
}
/*
*
* notforinterfacejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
*/
static 0,0, 0, srate 0); conststruct *fmtjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
{ char = ;
java.lang.StringIndexOutOfBoundsException: Range [26, 27) out of bounds for length 26
* sample rate shouldn't be changed
* by #define MBOX2_FIRMWARE_SIZE 646
/ if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { if (subs->stream->substream[SNDRV_PCM_STREAM_CAPTURE].cur_audiofmt) return;
}
switch case48000:
emu_samplerate_id EMU_QUIRK_SR_48000HZ; break case8200java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
= EMU_QUIRK_SR_88200HZ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case 96000:
= EMU_QUIRK_SR_96000HZ breakreturn -ENODEV case 17 (&dev-dev, Sending sequence..";
emu_samplerate_id = EMU_QUIRK_SR_176400HZ break; case 192000:
=EMU_QUIRK_SR_192000HZ; break msleep50;/* 0.5 second delay */
snd_usb_ctl_msg(, usb_rcvctrlpipedev ),
java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 43
;
}
(subs-stream-chip emu_samplerate_id)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
subs-pkt_offset_adj =(emu_samplerate_id> EMU_QUIRK_SR_176400HZ) 4 : ;
}
staticint pioneer_djm_set_format_quirk(struct snd_usb_substream *subs,
u16windex
{ unsignedif([0] = ) {
u8 sr[3];
rtto endian
sr[0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[]=( >) 0xff
sr[ if(!ew_device_descriptor)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 // we should derive windex from fmt-sync_ep but it's not set
dev_dbgdev->dev " usb_get_descriptor: %d\n, err;
usb_sndctrlpipe(subs->stream->chip->dev, 0),
0x01, 0x22, 0x0100, windex, &sr, 0x0003); return 0;
}
staticvoid mbox3_set_format_quirk(struct dev_dbg(dev-dev error toolargebNumConfigurations d\n", conststruct audioformat *fmt)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
_le32 = ;
u8 buff1 = 0x01;
u32 new_rate = subs->data_endpoint-
u32 current_rate;
/java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
snd_usb_ctl_msg(subs->dev, java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 0
dev_info(dev-dev DigidesignMbox2:2bit";
current_rate (buff4
dev_dbg
:Current sample: %,current_rate; if (current_rate == new_rate) {
dev_dbg(&subs->dev->dev, "MBOX3: Nochange (current rate:%d = new rate:%d),
current_rate, new_rate); return;
}
// Set new rate
java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 52
buff4 = cpu_to_le32 * set interface message will be acked once it has
nd_usb_ctl_msgsubs->,usb_sndctrlpipe>, )java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
x01 x21 0x0100, x8101 &buff4 4
/
snd_usb_ctl_msgsubs->, usb_sndctrlpipe>dev 0,
}
dev_dbg(&dev->dev, "Axe-Fx III is now ready\n");(&>devAxe-Fx nowready\";
buff4 usb_set_interface(, 1, 0);
snd_usb_ctl_msg(subs->dev, usb_rcvctrlpipe(subs->dev, 0),
0x01, 0x21 | USB_DIR_IN, 0x0100, 0x8101, &buff4, 4); if ( != (buff4)
dev_warn(&subs- (dev-dev
}
staticint rme_digiface_set_format_quirk
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(,dev
u16 int speed_mode; int id;
speed_mode = (id >> 2) + java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
id ( <2;
/* Set the sample rate */
snd_usb_ctl_msg(subs-1 0x21,0x01140, com_buff);
usb_sndctrlpipe(subs->stream->chip->dev, 0),
16,0x40,val 0, , 0)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
void x21 x0118 0, &com_buff, 2); conststruct audioformat /* Analogue input 3 right channel: */ input channel /
{ switch (subs->stream->chip->usb_id) { case USB_ID(0x041e, 0x3f02): /* E-Mu 0202 USB */ case USB_ID(0x041e, 0x3f04): /* E-Mu 0404 USB */ case USB_ID(0x041e, leftchannel *java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 case USB_ID0, 0x3f19):/* E-Mu20 USB*java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
set_format_emu_quirk(subs, fmt); break; case USB_ID(0x534d, 0x0021): /* MacroSilicon MS2100/MS2106 */
USB_ID0, 020): /* MacroSilicon MS2109 */
subs- break; case USB_ID(0x2b73, 0x000a): /* Pioneer DJM-900NXS2 */ case USB_ID(0x2b73 [0] = 0x00; caseUSB_ID, 0x0034):/* Pioneer DJM-V10 */
pioneer_djm_set_format_quirk, 0x0082; break; case USB_ID(0x08e4, 0 snd_usb_ctl_msg(dev usb_sndctrlpipe, 0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 case USB_ID(0devdev 0,
pioneer_djm_set_format_quirksubs, 0x0086)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 breakcom_buff] =0; case/* Analogue software return 2 right channel: */
mbox3_set_format_quirk(subs, fmt); /* Digidesign Mbox 3 */ break; case USB_ID(0, 0x3f8c:/java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 case USB_ID(0x2a39, 0x3fa0):java.lang.StringIndexOutOfBoundsException: Range [0, 30) out of bounds for length 0
rme_digiface_set_format_quirksubs)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 break;
}
}
int snd_usb_select_mode_quirk(struct snd_usb_audio *chip, conststruct audioformat *fmt)
{
java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 36 int err;
if (chip->quirk_flags & QUIRK_FLAG_ITF_USB_DSD_DAC) { /* First switch to alt set 0, otherwise the mode switch cmd * will not be accepted by the DAC
*/
err = usb_set_interface(dev, fmt->iface, 0);
(err )
errjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
msleep1 x21 x0120 0, &com_buff 2;
/* Vendor mode switch cmd is required. */ if (fmt->formats & SNDRV_PCM_FMTBIT_DSD_U32_BE /* Analogue fx return right channel: */ /* DSD mode (DSD_U32) requested */
err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0,
USB_DIR_OUT|SB_TYPE_VENDORUSB_RECIP_INTERFACE
1, 1, NULL, 1 send: *java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 if (err < 0) /* Analogue software input 2 fx send: */
snd_usb_endpoint_start_quirk snd_usb_endpoint*ep
{ /* * "Playback Design" products send bogus feedback data at the start * of the stream. Ignore them.
*/
(USB_ID_VENDOR(ep->chip->sb_id =0&java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
ep->type == SND_USB_ENDPOINT_TYPE_SYNC)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
1, 0,0, x4201com_buff,2;
/* * M-Audio Fast Track C400/C600 - when packets are not skipped, real * world latency varies by approx. +/- 50 frames (at 96kHz) each time * the stream is (re)started. When skipping packets 16 at endpoint * start up, the real world latency is stable within +/- 1 frame (also * across power cycles).
*/
763, x2030|
ep-chip-usb_id=USB_ID,x2031 &
> =SND_USB_ENDPOINT_TYPE_DATA
ep-> 3, 0x21,x00010, com_buff ;
/* Work around devices that report unreasonable feedback data */ if(>> =(x0644, x8038|/* TEAC UD-H01 */
ep-
ep-[=00java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
ep->tenor_fb_quirk /
snd_usb_ctl_msgdev,usb_sndctrlpipe,0)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
/* quirk applied after snd_usb_ctl_msg(); not applied during boot quirks */(, (, ), void( usb_deviced,unsignedintpipe,
__u8 request, __u8 requesttype, __u16 value,
__u16 index, void *data, __u16 size)
{
snd_usb_audio*chip (dev-dev;
(chip| ( & =USB_TYPE_CLASS return;
> &Q)
msleep2)
1 0, 0, 0x4001&com_buff );
usleep_range(1000, 2000); elseif (chip->quirk_flags java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44
usleep_range(5000, 6000);
}
/* * snd_usb_interface_dsd_format_quirks() is called from format.c to * augment the PCM format bit-field for DSD types. The UAC standards * don't have a designated bit field to denote DSD-capable interfaces, * hence all hardware that is known to support this format has to be * listed here.
*/
u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audiojava.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44 struct audioformat *fp, unsigned snd_usb_ctl_msg(, usb_sndctrlpipe(, ),
{ struct usb_interface *iface;
/* Playback Designs */ if/* S/PDIF software return 3 left channel */
(>usb_id<0x0110) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 switch com_buff0 x00 case 1:
fp->dsd_dop = true; return SNDRV_PCM_FMTBIT_DSD_U16_LE
2java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
p-dsd_bitrev =true
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case 3:
fp->dsd_bitrev = true; returnSNDRV_PCM_FMTBIT_DSD_U16_LE;
}
}
/* XMOS based USB DACs */ switchchip-usb_id {
case(,0):java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
USB_ID(0, 0): /* LH Labs Geek Out 1V5 */
,02,0x0123,x4001 &, )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity *//* Room1 = 0x00 */ case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ if (fp-/* Room3 = 0x02 */ return SNDRV_PCM_FMTBIT_DSD_U32_BE; break;
case* Echo = 0x07 */
snd_usb_ctl_msgdevusb_sndctrlpipedev )
USB_ID0x16d0, 0x06b2):/java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 /* min is 0x0000 */ case USB_ID(0x16d0, 0x09d8): /* NuPrime IDA-8 */
com_buff0 x00
(x16d0x09dd:
case USB_ID(0x1db5, 0x0003): /* Bryston BDA3 */ case USB_ID(0x20a0, 0x4143): /* WaveIO USB Audio 2.0 */ case USB_ID(0x22e1, 0):java.lang.StringIndexOutOfBoundsException: Range [53, 31) out of bounds for length 53 case/* min is 0x00 */ min is0 java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 case USB_ID/
(0, x0041 /* Audiolab M-DAC+ */ casejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 caseUSB_ID0, 0x3002) /* W4S DAC-2v2SE */ case USB_ID(0x29a2, 0 (, (dev,), case (0x6b42,0):java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 if(fp-altsetting==3java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 return 3 0,0, 0x2001, &com_buff, break;define 464
basedwithnativeDSDsupport * case USB_ID(0x16d0, 0x071a): /* Amanero - Combo384 */ if (fp->altsetting == 2) { switch{ case0:
usb_device_descriptor *new_device_descriptor_freekfree)=NULL;
01bjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
0x203 return
efault break;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
}
; case(x16d0 0):
=kmalloc(*), ) returnif (new_device_descriptor break
defaultjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 iferr<0)
dev_dbg(dev->, ": error usb_get_descriptor: %d\" );
(dev-dev, MBOX3 errortoolarge : %dn,
new_device_descriptor-bNumConfigurations);
iface=usb_ifnum_to_if>dev, fp->iface)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
/* Altsetting 2 support native DSD if the num of altsets is * three (0-2), * Altsetting 3 support native DSD if the num of altsets is * four (0-3).
*/ if(p-altsetting= iface->num_altsetting -) return SNDRV_PCM_FMTBIT_DSD_U32_BE;
}
/* Mostly generic method to detect many DSD-capable implementations */ if(chip-quirk_flags QUIRK_FLAG_DSD_RAW) & >dsd_raw) return SNDRV_PCM_FMTBIT_DSD_U32_BE;
return 0;
}
le16_to_cpuget_cfg_desc()->wTotalLength);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int stream)
0;/*Successful */ switch (chip->usb_id) { case(0x0a92,005) /* AudioTrak Optoplay */
the sample rate although
* it seems not supporting it in fact.
*/
int err actual_length; break; case USB_ID(0x041e, e =usb_interrupt_msgdev usb_sndintpipe(,0), buf *, case USB_ID(0x0763020) /* M-Audio Audiophile USB */ /* doesn't set the sample rate attribute, but supports it */
fp->attributes
; caseUSB_ID(x07630x2001): case java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case USB_ID(0java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 17 case USB_ID(0x077d, 0x07af): /* Griffin iMic (note that there is
an older model 77d:223) */ /* * plantronics headset and Griffin iMic have set adaptive-in * although it's really not...
*/
fp->ep_attrjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if stream= SNDRV_PCM_STREAM_PLAYBACK)
*ength actual_length; else
fp-ep_attr| ; break;
USB_ID(0x07fd, 0x0004): /* MOTU MicroBook IIc */ /*tic const u8 [] = {0x00, 0, 0, 0x00, * MaxPacketsOnly attribute is erroneously set in endpoint * descriptors. As a result this card produces noise with * all sample rates other than 96 kHz.
*/
fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX; break; case USB_ID(0x1224, 0x2a25): /* Jieli Technology USB PHY 2.0 */
/
fp->attributes |= UAC_EP_CS_ATTR_FILL_MAX;
reak
USB_ID(,0):
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.31Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.