diff options
Diffstat (limited to 'drivers/usb/core')
| -rw-r--r-- | drivers/usb/core/devio.c | 14 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 6 | 
2 files changed, 15 insertions, 5 deletions
| diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 6abb7294e919..b5b85bf80329 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -1209,12 +1209,16 @@ static int do_proc_control(struct usb_dev_state *ps,  		usb_unlock_device(dev);  		i = usbfs_start_wait_urb(urb, tmo, &actlen); + +		/* Linger a bit, prior to the next control message. */ +		if (dev->quirks & USB_QUIRK_DELAY_CTRL_MSG) +			msleep(200);  		usb_lock_device(dev);  		snoop_urb(dev, NULL, pipe, actlen, i, COMPLETE, tbuf, actlen);  		if (!i && actlen) {  			if (copy_to_user(ctrl->data, tbuf, actlen)) {  				ret = -EFAULT; -				goto recv_fault; +				goto done;  			}  		}  	} else { @@ -1231,6 +1235,10 @@ static int do_proc_control(struct usb_dev_state *ps,  		usb_unlock_device(dev);  		i = usbfs_start_wait_urb(urb, tmo, &actlen); + +		/* Linger a bit, prior to the next control message. */ +		if (dev->quirks & USB_QUIRK_DELAY_CTRL_MSG) +			msleep(200);  		usb_lock_device(dev);  		snoop_urb(dev, NULL, pipe, actlen, i, COMPLETE, NULL, 0);  	} @@ -1242,10 +1250,6 @@ static int do_proc_control(struct usb_dev_state *ps,  	}  	ret = (i < 0 ? i : actlen); - recv_fault: -	/* Linger a bit, prior to the next control message. */ -	if (dev->quirks & USB_QUIRK_DELAY_CTRL_MSG) -		msleep(200);   done:  	kfree(dr);  	usb_free_urb(urb); diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index d3c14b5ed4a1..97b44a68668a 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -404,6 +404,9 @@ static const struct usb_device_id usb_quirk_list[] = {  	{ USB_DEVICE(0x0b05, 0x17e0), .driver_info =  			USB_QUIRK_IGNORE_REMOTE_WAKEUP }, +	/* Realtek Semiconductor Corp. Mass Storage Device (Multicard Reader)*/ +	{ USB_DEVICE(0x0bda, 0x0151), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, +  	/* Realtek hub in Dell WD19 (Type-C) */  	{ USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM }, @@ -507,6 +510,9 @@ static const struct usb_device_id usb_quirk_list[] = {  	/* DJI CineSSD */  	{ USB_DEVICE(0x2ca3, 0x0031), .driver_info = USB_QUIRK_NO_LPM }, +	/* VCOM device */ +	{ USB_DEVICE(0x4296, 0x7570), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, +  	/* INTEL VALUE SSD */  	{ USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME }, |