diff options
Diffstat (limited to 'drivers/usb/core/message.c')
| -rw-r--r-- | drivers/usb/core/message.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 31fb204f44c..49e7f56e0d7 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -653,7 +653,7 @@ int usb_get_descriptor(struct usb_device *dev, unsigned char type,  		if (result <= 0 && result != -ETIMEDOUT)  			continue;  		if (result > 1 && ((u8 *)buf)[1] != type) { -			result = -EPROTO; +			result = -ENODATA;  			continue;  		}  		break; @@ -696,8 +696,13 @@ static int usb_get_string(struct usb_device *dev, unsigned short langid,  			USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,  			(USB_DT_STRING << 8) + index, langid, buf, size,  			USB_CTRL_GET_TIMEOUT); -		if (!(result == 0 || result == -EPIPE)) -			break; +		if (result == 0 || result == -EPIPE) +			continue; +		if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) { +			result = -ENODATA; +			continue; +		} +		break;  	}  	return result;  }  | 
