alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] teac ud-501/ud-503 usb delay
@ 2016-01-24 16:36 Guillaume Fougnies
  2016-01-25 10:59 ` Takashi Iwai
  2016-03-01  0:38 ` Rob O'Donnell
  0 siblings, 2 replies; 6+ messages in thread
From: Guillaume Fougnies @ 2016-01-24 16:36 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai


Hello,

This is a small patch against sound/usb/quirks.c to correct "Teac
Corp." products delay.
Tested on Teac UD-501 and UD-503 products, could not harm other
Teac products.
It corrects the "clock source 41 is not valid, cannot use" error
for both devices.
And more critically on the new UD-503, a complete freeze of the
teac usb interface when switching between different rate/format.
(Freeze only solved by a power switch of the device...)

The patch matches the problem of the "Playback Design" products. I just
refactored a bit the code to include Teac products properly.

Regards,
Guillaume


---
 sound/usb/quirks.c | 58 +++++++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 23ea6d8..f3faaef 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -1202,40 +1202,48 @@ void snd_usb_endpoint_start_quirk(struct snd_usb_endpoint *ep)
 void snd_usb_set_interface_quirk(struct usb_device *dev)
 {
 	/*
-	 * "Playback Design" products need a 50ms delay after setting the
+	 * Products needing a 50ms delay after setting the
 	 * USB interface.
 	 */
-	if (le16_to_cpu(dev->descriptor.idVendor) == 0x23ba)
-		mdelay(50);
+	switch (le16_to_cpu(dev->descriptor.idVendor)) {
+		case 0x23ba: /* Playback Design */
+		case 0x0644: /* TEAC Corp. */
+			mdelay(50);
+	}
 }
 
 void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
 			   __u8 request, __u8 requesttype, __u16 value,
 			   __u16 index, void *data, __u16 size)
 {
-	/*
-	 * "Playback Design" products need a 20ms delay after each
-	 * class compliant request
-	 */
-	if ((le16_to_cpu(dev->descriptor.idVendor) == 0x23ba) &&
-	    (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
-		mdelay(20);
-
-	/* Marantz/Denon devices with USB DAC functionality need a delay
-	 * after each class compliant request
-	 */
-	if (is_marantz_denon_dac(USB_ID(le16_to_cpu(dev->descriptor.idVendor),
-					le16_to_cpu(dev->descriptor.idProduct)))
-	    && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
-		mdelay(20);
+	if ((requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) {
+		switch (le16_to_cpu(dev->descriptor.idVendor)) {
+			/*
+			 * "Playback Design"/"TEAC Corp." products need a 20ms delay after each
+			 * class compliant request
+			 */
+			case 0x23ba: /* "Playback Design" */
+			case 0x0644: /* TEAC Corp. */
+				mdelay(20);
+				return;
+
+				/* Zoom R16/24 needs a tiny delay here, otherwise requests like
+				 * get/set frequency return as failed despite actually succeeding.
+				 */
+			case 0x1686:
+				/* restrict to 0x00dd */
+				if (le16_to_cpu(dev->descriptor.idProduct) == 0x00dd)
+					mdelay(1);
+				return;
+		}
 
-	/* Zoom R16/24 needs a tiny delay here, otherwise requests like
-	 * get/set frequency return as failed despite actually succeeding.
-	 */
-	if ((le16_to_cpu(dev->descriptor.idVendor) == 0x1686) &&
-	    (le16_to_cpu(dev->descriptor.idProduct) == 0x00dd) &&
-	    (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
-		mdelay(1);
+		/* Marantz/Denon devices with USB DAC functionality need a delay
+		 * after each class compliant request
+		 */
+		if (is_marantz_denon_dac(USB_ID(le16_to_cpu(dev->descriptor.idVendor),
+						le16_to_cpu(dev->descriptor.idProduct))))
+			mdelay(20);
+	}
 }
 
 /*
-- 
2.6.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-03-01  7:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-24 16:36 [PATCH] teac ud-501/ud-503 usb delay Guillaume Fougnies
2016-01-25 10:59 ` Takashi Iwai
2016-01-25 23:28   ` Guillaume Fougnies
2016-01-26  6:03     ` Takashi Iwai
2016-03-01  0:38 ` Rob O'Donnell
2016-03-01  7:37   ` Clemens Ladisch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).