[alsa-devel] [RESENT] [PATCH - Fix Fast Track Ultra series: 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.

Takashi Iwai tiwai at suse.de
Thu Sep 2 10:33:32 CEST 2010


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 at 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 at 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),
> +		.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
> 
> 


More information about the Alsa-devel mailing list