summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorGuillaume Fougnies <guillaume@eulerian.com>2016-01-25 18:28:27 -0500
committerTakashi Iwai <tiwai@suse.de>2016-01-26 00:58:57 -0500
commit5a4ff9ec8d6edd2ab1cfe8ce6a080d6e57cbea9a (patch)
treea69c85de5d947b3bd9987e0793c3208d96f44656 /sound
parent462b3f161beb62eeb290f4ec52f5ead29a2f8ac7 (diff)
ALSA: usb-audio: Fix TEAC UD-501/UD-503/NT-503 usb delay
TEAC UD-501/UD-503/NT-503 fail to switch properly between different rate/format. Similar to 'Playback Design', this patch corrects the invalid clock source error for TEAC products and avoids complete freeze of the usb interface of 503 series. Signed-off-by: Guillaume Fougnies <guillaume@eulerian.com> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/usb/quirks.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 23ea6d800c4c..a75d9ce7d77a 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1205,8 +1205,12 @@ void snd_usb_set_interface_quirk(struct usb_device *dev)
1205 * "Playback Design" products need a 50ms delay after setting the 1205 * "Playback Design" products need a 50ms delay after setting the
1206 * USB interface. 1206 * USB interface.
1207 */ 1207 */
1208 if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) 1208 switch (le16_to_cpu(dev->descriptor.idVendor)) {
1209 case 0x23ba: /* Playback Design */
1210 case 0x0644: /* TEAC Corp. */
1209 mdelay(50); 1211 mdelay(50);
1212 break;
1213 }
1210} 1214}
1211 1215
1212void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, 1216void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
@@ -1221,6 +1225,14 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
1221 (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) 1225 (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1222 mdelay(20); 1226 mdelay(20);
1223 1227
1228 /*
1229 * "TEAC Corp." products need a 20ms delay after each
1230 * class compliant request
1231 */
1232 if ((le16_to_cpu(dev->descriptor.idVendor) == 0x0644) &&
1233 (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
1234 mdelay(20);
1235
1224 /* Marantz/Denon devices with USB DAC functionality need a delay 1236 /* Marantz/Denon devices with USB DAC functionality need a delay
1225 * after each class compliant request 1237 * after each class compliant request
1226 */ 1238 */