On Sat, Apr 20, 2013 at 20:58:56 +0200, Daniel Schürmann wrote:
Thank you Daniel for review. Here is an updated version of the patch against https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/ 581cbef46ae60073252208fc1f26dd1044f6e215
Set the timeout for USB control set messages according to the USB 2 spec §9.2.6.4 to 5000 ms. To avoid new issues, the get timeout is unchanged at 1000 ms, though it is 500 ms in the spec. This patch is required to run the Hercules RMX2 which needs a timeout > 1240 ms
Signed-off-by: Daniel Schürmann daschuer@mixxx.org
diff --git a/sound/usb/helper.c b/sound/usb/helper.c index c1db28f..c1caae4 100644 --- a/sound/usb/helper.c +++ b/sound/usb/helper.c @@ -23,6 +23,11 @@ #include "helper.h" #include "quirks.h"
+/* Value from 9.2.6.4 USB 2 spec */ +#define USB_MSG_SET_TIMEOUT 5000
There is an USB_CTRL_SET_TIMEOUT of 5000 ms defined in include/linux/usb.h, which is used by other callers of usb_control_msg(). And linux/usb.h is already included by helper.c.
+/* Value from spec is 500 but we pick 1000 for legacy reasons */ +#define USB_MSG_GET_TIMEOUT 1000
/*
- combine bytes and get an integer value
*/ @@ -86,14 +91,19 @@ int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request, { int err; void *buf = NULL;
int timeout;
if (size > 0) { buf = kmemdup(data, size, GFP_KERNEL); if (!buf) return -ENOMEM; }
if (requesttype & USB_DIR_IN)
timeout = USB_MSG_GET_TIMEOUT;
else
timeout = USB_MSG_SET_TIMEOUT;
err = usb_control_msg(dev, pipe, request, requesttype,
value, index, buf, size, 1000);
if (size > 0) { memcpy(data, buf, size); kfree(buf);value, index, buf, size, timeout);