diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 7ccbcaf6a147..26dd5f20f149 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -309,6 +309,9 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, * support reading */ if (snd_usb_get_sample_rate_quirk(chip)) return 0; + /* the firmware is likely buggy, don't repeat to fail too many times */ + if (chip->sample_rate_read_error > 2) + return 0; if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC_GET_CUR, USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_IN, @@ -316,6 +319,7 @@ static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, data, sizeof(data))) < 0) { dev_err(&dev->dev, "%d:%d: cannot get freq at ep %#x\n", iface, fmt->altsetting, ep); + chip->sample_rate_read_error++; return 0; /* some devices don't support reading */ } diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index a161c7c1b126..89b6853030de 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -50,6 +50,7 @@ struct snd_usb_audio { int num_interfaces; int num_suspended_intf; + int sample_rate_read_error; struct list_head pcm_list; /* list of pcm streams */ struct list_head ep_list; /* list of audio-related endpoints */