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>

authored by Eldad Zack and committed by Takashi Iwai 83e3acd4 2aad272b

+11
+11
sound/usb/quirks.c
··· 861 if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) && 862 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) 863 ep->skip_packets = 4; 864 } 865 866 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
··· 861 if ((le16_to_cpu(ep->chip->dev->descriptor.idVendor) == 0x23ba) && 862 ep->type == SND_USB_ENDPOINT_TYPE_SYNC) 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; 875 } 876 877 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,