alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Felix Homann <fexpop@web.de>
To: patch@alsa-project.org
Cc: alsa-devel@alsa-project.org
Subject: [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.
Date: Wed, 01 Sep 2010 10:48:54 +0200	[thread overview]
Message-ID: <4C7E1376.9030208@web.de> (raw)
In-Reply-To: <4C32E3B2.5080707@web.de>

[-- Attachment #1: Type: text/plain, Size: 1922 bytes --]

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.

Kind regards,

Felix


[-- Attachment #2: 0001-fix-sample-rates-ftu-v3.patch --]
[-- Type: text/x-patch, Size: 4896 bytes --]

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



[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  parent reply	other threads:[~2010-09-01  8:48 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-06  8:05 [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 Felix Homann
2010-07-07  9:05 ` Felix Homann
2010-07-07 12:44   ` Clemens Ladisch
2010-07-07 13:19     ` Felix Homann
2010-07-07 13:59       ` Felix Homann
2010-07-07 14:23       ` Clemens Ladisch
2010-07-07 16:55         ` Felix Homann
2010-07-08  6:25           ` Clemens Ladisch
2010-07-08  8:35             ` Felix Homann
2010-07-08 13:10               ` Clemens Ladisch
2010-07-08 15:14                 ` Felix Homann
2010-07-08 15:19                   ` Clemens Ladisch
2010-07-08 15:54                     ` Felix Homann
2010-07-16  8:27         ` Felix Homann
2010-08-31  6:39 ` Felix Homann
2010-08-31  8:24   ` [PATCH] - Fix Fast Track Ultra series: 44.1/88.1 kHz 1/Fix playback/capture issues and related crashes " Paul Menzel
2010-09-01  8:48 ` Felix Homann [this message]
2010-09-02  8:33   ` [RESENT] [PATCH - Fix Fast Track Ultra series: 44.1/88.1 kHz 1/Fix playback/capture issues and related chrashes " Takashi Iwai
2010-09-02  9:12     ` Clemens Ladisch
2010-09-02  9:16       ` Daniel Mack
2010-09-02 11:13         ` Clemens Ladisch
2010-09-03 13:34           ` Daniel Mack
2010-09-03 14:26             ` Clemens Ladisch
2010-09-02 10:12       ` Felix Homann
  -- strict thread matches above, loose matches on Subject: below --
2010-09-02 18:05 Garnet MacPhee
2010-09-03  7:26 ` Clemens Ladisch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C7E1376.9030208@web.de \
    --to=fexpop@web.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=patch@alsa-project.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).