diff options
| -rw-r--r-- | drivers/usb/gadget/composite.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index ebb5131a9..2c5600ed5 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -859,6 +859,25 @@ unknown:  			if (&f->list == &cdev->config->functions)  				f = NULL;  			break; +		/* +		 * dfu-util (version 0.5) sets bmRequestType.Receipent = Device +		 * for non-standard request (w_value = 0x21, +		 * bRequest = GET_DESCRIPTOR in this case). +		 * When only one interface is registered (as it is done now), +		 * then this request shall be handled as it was requested for +		 * interface. +		 * +		 * In the below code it is checked if only one interface is +		 * present and proper function for it is extracted. Due to that +		 * function's setup (f->setup) is called to handle this +		 * special non-standard request. +		 */ +		case USB_RECIP_DEVICE: +			debug("cdev->config->next_interface_id: %d intf: %d\n", +			       cdev->config->next_interface_id, intf); +			if (cdev->config->next_interface_id == 1) +				f = cdev->config->interface[intf]; +			break;  		}  		if (f && f->setup) |