[alsa-devel] [PATCH 2/3] ALSA: usb-audio: M-Audio FT C400 skip packet quirk

Eldad Zack eldad at fogrefinery.com
Sun Jan 13 23:02:03 CET 2013


Attain constant real-world latency by skipping 16 data packets.
The number of packets to be skipped was found by trial and error.

Signed-off-by: Eldad Zack <eldad at fogrefinery.com>
---
 sound/usb/quirks.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index acc12f0..ace0210 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -859,6 +859,17 @@ void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
 	if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) &&
 	    ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
 		ep->skip_packets = 4;
+
+	/*
+	 * M-Audio Fast Track C400 - when packets are not skipped, real world
+	 * latency varies by approx. +/- 50 frames (at 96KHz) each time the
+	 * stream is (re)started. When skipping packets 16 at endpoint start
+	 * up, the real world latency is stable within +/- 1 frame (also
+	 * across power cycles).
+	 */
+	if (ep->chip->usb_id == USB_ID(0x0763, 0x2030) &&
+	    ep->type == SND_USB_ENDPOINT_TYPE_DATA)
+		ep->skip_packets = 16;
 }
 
 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
-- 
1.7.12.4



More information about the Alsa-devel mailing list