diff options
| author | Eldad Zack <eldad@fogrefinery.com> | 2013-01-13 17:02:03 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2013-01-14 04:06:03 -0500 |
| commit | 83e3acd494f47dc5dababfe6156c6178aca5c3a9 (patch) | |
| tree | 2ab91958e7565076fcd01d5659bca892fa694d74 | |
| parent | 2aad272b3f458564f2d505465c88fcde37017ba0 (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>
| -rw-r--r-- | sound/usb/quirks.c | 11 |
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 | ||
| 866 | void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, | 877 | void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, |
