| From 5a4ff9ec8d6edd2ab1cfe8ce6a080d6e57cbea9a Mon Sep 17 00:00:00 2001 |
| From: Guillaume Fougnies <guillaume@eulerian.com> |
| Date: Tue, 26 Jan 2016 00:28:27 +0100 |
| Subject: ALSA: usb-audio: Fix TEAC UD-501/UD-503/NT-503 usb delay |
| |
| From: Guillaume Fougnies <guillaume@eulerian.com> |
| |
| commit 5a4ff9ec8d6edd2ab1cfe8ce6a080d6e57cbea9a upstream. |
| |
| 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> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/usb/quirks.c | 14 +++++++++++++- |
| 1 file changed, 13 insertions(+), 1 deletion(-) |
| |
| --- a/sound/usb/quirks.c |
| +++ b/sound/usb/quirks.c |
| @@ -1128,8 +1128,12 @@ void snd_usb_set_interface_quirk(struct |
| * "Playback Design" products need a 50ms delay after setting the |
| * USB interface. |
| */ |
| - if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) |
| + switch (le16_to_cpu(dev->descriptor.idVendor)) { |
| + case 0x23ba: /* Playback Design */ |
| + case 0x0644: /* TEAC Corp. */ |
| mdelay(50); |
| + break; |
| + } |
| } |
| |
| void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe, |
| @@ -1144,6 +1148,14 @@ void snd_usb_ctl_msg_quirk(struct usb_de |
| (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) |
| mdelay(20); |
| |
| + /* |
| + * "TEAC Corp." products need a 20ms delay after each |
| + * class compliant request |
| + */ |
| + if ((le16_to_cpu(dev->descriptor.idVendor) == 0x0644) && |
| + (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) |
| + mdelay(20); |
| + |
| /* Marantz/Denon devices with USB DAC functionality need a delay |
| * after each class compliant request |
| */ |