summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Winstein <keithw@cs.stanford.edu>2020-10-25 22:05:47 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-11-10 12:35:57 +0100
commit0b443d1aff6d6f3706e48c93d9fe1212a569af4b (patch)
tree56eb73c7062eeacc1a67e8ac1495466d36476a9f
parent11af858054baadff13eb92eb347443f93768fde7 (diff)
downloadlinux-stable-0b443d1aff6d6f3706e48c93d9fe1212a569af4b.tar.gz
linux-stable-0b443d1aff6d6f3706e48c93d9fe1212a569af4b.tar.bz2
linux-stable-0b443d1aff6d6f3706e48c93d9fe1212a569af4b.zip
ALSA: usb-audio: Add implicit feedback quirk for Zoom UAC-2
commit f15cfca818d756dd1c9492530091dfd583359db3 upstream. The Zoom UAC-2 USB audio interface provides an async playback endpoint ("1 OUT (ASYNC)") and capture endpoint ("2 IN (ASYNC)"), both with 2-channel S32_LE in 44.1, 48, 88.2, 96, 176.4, or 192 kilosamples/s. The device provides explicit feedback to adjust the host's playback rate, but the feedback appears unstable and biased relative to the device's capture rate. "alsaloop -t 1000" experiences playback underruns and tries to resample the captured audio to match the varying playback rate. Forcing the kernel to use implicit feedback appears to produce more stable results. This causes the host to transmit one playback sample for each capture sample received. (Zoom North America has been notified of this change.) Signed-off-by: Keith Winstein <keithw@cs.stanford.edu> Tested-by: Keith Winstein <keithw@cs.stanford.edu> Cc: <stable@vger.kernel.org> BugLink: https://lore.kernel.org/r/20201027071841.GA164525@trolley.csail.mit.edu Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--sound/usb/pcm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 7743e7bc6bf2..038ce38986e2 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -350,6 +350,10 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
ep = 0x81;
ifnum = 2;
goto add_sync_ep_from_ifnum;
+ case USB_ID(0x1686, 0xf029): /* Zoom UAC-2 */
+ ep = 0x82;
+ ifnum = 2;
+ goto add_sync_ep_from_ifnum;
case USB_ID(0x1397, 0x0001): /* Behringer UFX1604 */
case USB_ID(0x1397, 0x0002): /* Behringer UFX1204 */
ep = 0x81;