[alsa-devel] [PATCH v2] ALSA: snd-usb-audio: set the timeout for usb control set messages to 5000 ms

Torstein Hegge hegge at resisty.net
Sat Apr 20 21:24:14 CEST 2013


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 at 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);
> +                  value, index, buf, size, timeout);
>      if (size > 0) {
>          memcpy(data, buf, size);
>          kfree(buf);


More information about the Alsa-devel mailing list