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",
 |