diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-05-13 09:19:37 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-05-13 09:19:37 +0300 |
commit | 991919e969043a4422dfebbcadf600a5d28b94e4 (patch) | |
tree | 4776f9f162c665a9735198fafc466d3e49a14253 /sound/usb/endpoint.c | |
parent | 73ed6faed58e5611abfb54c2f703eec091781d63 (diff) | |
parent | 82f2b0b97b36ee3fcddf0f0780a9a0825d52fec3 (diff) | |
download | linux-991919e969043a4422dfebbcadf600a5d28b94e4.tar.xz |
Merge 6.15-rc6 into char-misc-next
We need the iio/hyperv fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound/usb/endpoint.c')
-rw-r--r-- | sound/usb/endpoint.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index a29f28eb7d0c..f36ec98da460 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -926,6 +926,8 @@ static int endpoint_set_interface(struct snd_usb_audio *chip, { int altset = set ? ep->altsetting : 0; int err; + int retries = 0; + const int max_retries = 5; if (ep->iface_ref->altset == altset) return 0; @@ -935,8 +937,13 @@ static int endpoint_set_interface(struct snd_usb_audio *chip, usb_audio_dbg(chip, "Setting usb interface %d:%d for EP 0x%x\n", ep->iface, altset, ep->ep_num); +retry: err = usb_set_interface(chip->dev, ep->iface, altset); if (err < 0) { + if (err == -EPROTO && ++retries <= max_retries) { + msleep(5 * (1 << (retries - 1))); + goto retry; + } usb_audio_err_ratelimited( chip, "%d:%d: usb_set_interface failed (%d)\n", ep->iface, altset, err); |