At Wed, 01 Sep 2010 10:48:54 +0200, Felix Homann wrote: > > Hi, > > This is my second try to get support for all supported sample rates for > the Fast Track Ultra (FTU) series into mainline alsa. > > For clarification: Current Alsa already recognizes the supported sample > rates. But it will sound very corrupted at 44.1000 Hz and 88.200 Hz. > Without this patch your system will even probably freeze eventually when > using the FTU at 44.100/88.200 Hz too long. > > So the key idea in this patch is not to get 44.1 kHz and 88.2 kHz listed > as supported sample rates (as they already are recognized) but to change > the endpoint attributes. > > Citing dhubsith on the M-Audio forum: > > " The problem with using QUIRK_AUDIO_STANDARD_INTERFACE rather than > QUIRK_AUDIO_FIXED_ENDPOINT is that ep_attr does not get set correctly. > The device default for synchronization is async (0x05) for both capture > and playback, but in fact it should be set to adaptive (0x09) on > playback, so that playback follows capture, this way you don't get > capture and playback using different sample rates. > > Also, the Interface Class protocol for the device defaults to Vendor > Specific Class, but the driver only recognizes Class 1 or 2. The device > is really Class 1, so we have to force it to reflect this. There are 4 > places that we need to set this." > > > > The patch has been discussed starting here: > > http://forums.m-audio.com/showthread.php?714-Not-a-problem.-FastTrack-on-linux/page8 > > The "key" has been found by dhubsith. Please read posts #79, #81, #84, > #87, #97. > > > In post #102 of that forum you can even find an alternate patch by > dhubsith which doesn't use a fixed endpoint quirk but sets > > protocol = UAC_VERSION_1; > > for the FTU devices in sound/usb/format .c. You might even consider that > patch. (I've resend it to alsa-devel yesterday). > > After all, either one of the above mentioned patches should go into > alsa, as right now we can't use the FTU devices at 44.1 and 88.2 kHz. Thanks for the patch (and reposting it). I myself find it's OK to apply since it's pretty local change. Clemens, what was your objection at that time? thanks, Takashi > > Kind regards, > > Felix > > [2 0001-fix-sample-rates-ftu-v3.patch <text/x-patch (7bit)>] > >From 1573e7e973e6adcfe39fbfdaae0be2d1a5e01501 Mon Sep 17 00:00:00 2001 > From: Felix Homann <fexpop@xxxxxx> > Date: Wed, 7 Jul 2010 15:51:58 +0200 > Subject: [PATCH - Fix Fast Track Ultra series 1/1] Fix 44.1/88.1 kHz 1/Fix playback/capture issues and related chrashes at 44100 Hz and 88200 Hz for M-Audio Fast Track Ultra series. > > > Signed-off-by: Felix Homann <fexpop@xxxxxx> > > diff --git a/usb/endpoint.c b/usb/endpoint.c > index 1a701f1..bb9f938 100644 > --- a/usb/endpoint.c > +++ b/usb/endpoint.c > @@ -404,8 +404,6 @@ int snd_usb_parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) > break; > case USB_ID(0x041e, 0x3020): /* Creative SB Audigy 2 NX */ > case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */ > - case USB_ID(0x0763, 0x2080): /* M-Audio Fast Track Ultra 8 */ > - case USB_ID(0x0763, 0x2081): /* M-Audio Fast Track Ultra 8R */ > /* doesn't set the sample rate attribute, but supports it */ > fp->attributes |= UAC_EP_CS_ATTR_SAMPLE_RATE; > break; > diff --git a/usb/quirks-table.h b/usb/quirks-table.h > index f8797f6..4c1dc12 100644 > --- a/usb/quirks-table.h > +++ b/usb/quirks-table.h > @@ -1827,10 +1827,10 @@ YAMAHA_DEVICE(0x7010, "UB99"), > } > }, > { > - USB_DEVICE(0x0763, 0x2080), > - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { > + USB_DEVICE(0x0763, 0x2080), > + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { > /* .vendor_name = "M-Audio", */ > - /* .product_name = "Fast Track Ultra 8", */ > + /* .product_name = "Fast Track Ultra", */ > .ifnum = QUIRK_ANY_INTERFACE, > .type = QUIRK_COMPOSITE, > .data = & (const struct snd_usb_audio_quirk[]) { > @@ -1840,11 +1840,51 @@ YAMAHA_DEVICE(0x7010, "UB99"), > }, > { > .ifnum = 1, > - .type = QUIRK_AUDIO_STANDARD_INTERFACE > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = & (const struct audioformat) { > + .formats = SNDRV_PCM_FMTBIT_S24_3LE, > + .channels = 8, > + .iface = 1, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, > + .endpoint = 0x01, > + .ep_attr = 0x09, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000, > + .rate_min = 44100, > + .rate_max = 96000, > + .nr_rates = 4, > + .rate_table = (unsigned int[]) { > + 44100, 48000, 88200, 96000 > + } > + } > }, > { > .ifnum = 2, > - .type = QUIRK_AUDIO_STANDARD_INTERFACE > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = & (const struct audioformat) { > + .formats = SNDRV_PCM_FMTBIT_S24_3LE, > + .channels = 8, > + .iface = 2, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, > + .endpoint = 0x81, > + .ep_attr = 0x05, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000, > + .rate_min = 44100, > + .rate_max = 96000, > + .nr_rates = 4, > + .rate_table = (unsigned int[]) { > + 44100, 48000, 88200, 96000 > + } > + } > }, > /* interface 3 (MIDI) is standard compliant */ > { > @@ -1855,7 +1895,7 @@ YAMAHA_DEVICE(0x7010, "UB99"), > }, > { > USB_DEVICE(0x0763, 0x2081), > - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { > + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { > /* .vendor_name = "M-Audio", */ > /* .product_name = "Fast Track Ultra 8R", */ > .ifnum = QUIRK_ANY_INTERFACE, > @@ -1867,11 +1907,51 @@ YAMAHA_DEVICE(0x7010, "UB99"), > }, > { > .ifnum = 1, > - .type = QUIRK_AUDIO_STANDARD_INTERFACE > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = & (const struct audioformat) { > + .formats = SNDRV_PCM_FMTBIT_S24_3LE, > + .channels = 8, > + .iface = 1, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, > + .endpoint = 0x01, > + .ep_attr = 0x09, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000, > + .rate_min = 44100, > + .rate_max = 96000, > + .nr_rates = 4, > + .rate_table = (unsigned int[]) { > + 44100, 48000, 88200, 96000 > + } > + } > }, > { > .ifnum = 2, > - .type = QUIRK_AUDIO_STANDARD_INTERFACE > + .type = QUIRK_AUDIO_FIXED_ENDPOINT, > + .data = & (const struct audioformat) { > + .formats = SNDRV_PCM_FMTBIT_S24_3LE, > + .channels = 8, > + .iface = 2, > + .altsetting = 1, > + .altset_idx = 1, > + .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE, > + .endpoint = 0x81, > + .ep_attr = 0x05, > + .rates = SNDRV_PCM_RATE_44100 | > + SNDRV_PCM_RATE_48000 | > + SNDRV_PCM_RATE_88200 | > + SNDRV_PCM_RATE_96000, > + .rate_min = 44100, > + .rate_max = 96000, > + .nr_rates = 4, > + .rate_table = (unsigned int[]) { > + 44100, 48000, 88200, 96000 > + } > + } > }, > /* interface 3 (MIDI) is standard compliant */ > { > -- > 1.7.1 > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel