diff options
| -rw-r--r-- | drivers/usb/core/message.c | 5 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 3 | ||||
| -rw-r--r-- | include/linux/usb/quirks.h | 3 | 
3 files changed, 10 insertions, 1 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index fefb92296e8..c311f67b7f0 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -1206,7 +1206,10 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)  		return -EINVAL;  	} -	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), +	if (dev->quirks & USB_QUIRK_NO_SET_INTF) +		ret = -EPIPE; +	else +		ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),  				   USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,  				   alternate, interface, NULL, 0, 5000); diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index d9d1eb19f2a..dfc5418ea10 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -50,6 +50,9 @@ static const struct usb_device_id usb_quirk_list[] = {  	/* M-Systems Flash Disk Pioneers */  	{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, +	/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ +	{ USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, +  	/* Action Semiconductor flash disk */  	{ USB_DEVICE(0x10d6, 0x2200), .driver_info =  			USB_QUIRK_STRING_FETCH_255 }, diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h index 2692ec9389c..1f999ec8d08 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h @@ -9,3 +9,6 @@  /* device can't resume correctly so reset it instead */  #define USB_QUIRK_RESET_RESUME		0x00000002 + +/* device can't handle Set-Interface requests */ +#define USB_QUIRK_NO_SET_INTF		0x00000004  |