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-lin...
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@web.de 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@web.de
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),
/* .vendor_name = "M-Audio", */.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
/* .product_name = "Fast Track Ultra 8", */
.ifnum = QUIRK_ANY_INTERFACE, .type = QUIRK_COMPOSITE, .data = & (const struct snd_usb_audio_quirk[]) {/* .product_name = "Fast Track Ultra", */
@@ -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) {
/* .vendor_name = "M-Audio", */ /* .product_name = "Fast Track Ultra 8R", */ .ifnum = QUIRK_ANY_INTERFACE,.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
@@ -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