aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb
diff options
context:
space:
mode:
authorEldad Zack <eldad@fogrefinery.com>2013-01-13 17:02:03 -0500
committerTakashi Iwai <tiwai@suse.de>2013-01-14 04:06:03 -0500
commit83e3acd494f47dc5dababfe6156c6178aca5c3a9 (patch)
tree2ab91958e7565076fcd01d5659bca892fa694d74 /sound/usb
parent2aad272b3f458564f2d505465c88fcde37017ba0 (diff)
ALSA: usb-audio: M-Audio FT C400 skip packet quirk
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@fogrefinery.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb')
-rw-r--r--sound/usb/quirks.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index e71fc8bc3a70..2c971858d6b7 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -861,6 +861,17 @@ void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
861 if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) && 861 if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) &&
862 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) 862 ep->type == SND_USB_ENDPOINT_TYPE_SYNC)
863 ep->skip_packets = 4; 863 ep->skip_packets = 4;
864
865 /*
866 * M-Audio Fast Track C400 - when packets are not skipped, real world
867 * latency varies by approx. +/- 50 frames (at 96KHz) each time the
868 * stream is (re)started. When skipping packets 16 at endpoint start
869 * up, the real world latency is stable within +/- 1 frame (also
870 * across power cycles).
871 */
872 if (ep->chip->usb_id == USB_ID(0x0763, 0x2030) &&
873 ep->type == SND_USB_ENDPOINT_TYPE_DATA)
874 ep->skip_packets = 16;
864} 875}
865 876
866void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, 877void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,