mirror of https://github.com/OpenIPC/firmware.git
42 lines
1.5 KiB
Diff
42 lines
1.5 KiB
Diff
--- linux-4.9.37/sound/usb/mixer.c 2017-07-12 16:42:41.000000000 +0300
|
|
+++ linux-4.9.y/sound/usb/mixer.c 2021-06-07 13:01:34.000000000 +0300
|
|
@@ -318,12 +318,15 @@
|
|
|
|
while (timeout-- > 0) {
|
|
idx = snd_usb_ctrl_intf(chip) | (cval->head.id << 8);
|
|
- if (snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request,
|
|
- USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
|
|
- validx, idx, buf, val_len) >= val_len) {
|
|
+ err = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request,
|
|
+ USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
|
|
+ validx, idx, buf, val_len);
|
|
+ if (err >= val_len) {
|
|
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len));
|
|
err = 0;
|
|
goto out;
|
|
+ } else if (err == -ETIMEDOUT) {
|
|
+ goto out;
|
|
}
|
|
}
|
|
usb_audio_dbg(chip,
|
|
@@ -483,12 +486,15 @@
|
|
|
|
while (timeout-- > 0) {
|
|
idx = snd_usb_ctrl_intf(chip) | (cval->head.id << 8);
|
|
- if (snd_usb_ctl_msg(chip->dev,
|
|
- usb_sndctrlpipe(chip->dev, 0), request,
|
|
- USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
|
|
- validx, idx, buf, val_len) >= 0) {
|
|
+ err = snd_usb_ctl_msg(chip->dev,
|
|
+ usb_sndctrlpipe(chip->dev, 0), request,
|
|
+ USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
|
|
+ validx, idx, buf, val_len);
|
|
+ if (err >= 0) {
|
|
err = 0;
|
|
goto out;
|
|
+ } else if (err == -ETIMEDOUT) {
|
|
+ goto out;
|
|
}
|
|
}
|
|
usb_audio_dbg(chip, "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n",
|