[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