|
@@ -1694,9 +1694,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
|
value = min(w_length, (u16) 1);
|
|
value = min(w_length, (u16) 1);
|
|
break;
|
|
break;
|
|
|
|
|
|
- /* function drivers must handle get/set altsetting; if there's
|
|
|
|
- * no get() method, we know only altsetting zero works.
|
|
|
|
- */
|
|
|
|
|
|
+ /* function drivers must handle get/set altsetting */
|
|
case USB_REQ_SET_INTERFACE:
|
|
case USB_REQ_SET_INTERFACE:
|
|
if (ctrl->bRequestType != USB_RECIP_INTERFACE)
|
|
if (ctrl->bRequestType != USB_RECIP_INTERFACE)
|
|
goto unknown;
|
|
goto unknown;
|
|
@@ -1705,7 +1703,13 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
|
f = cdev->config->interface[intf];
|
|
f = cdev->config->interface[intf];
|
|
if (!f)
|
|
if (!f)
|
|
break;
|
|
break;
|
|
- if (w_value && !f->set_alt)
|
|
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * If there's no get_alt() method, we know only altsetting zero
|
|
|
|
+ * works. There is no need to check if set_alt() is not NULL
|
|
|
|
+ * as we check this in usb_add_function().
|
|
|
|
+ */
|
|
|
|
+ if (w_value && !f->get_alt)
|
|
break;
|
|
break;
|
|
value = f->set_alt(f, w_index, w_value);
|
|
value = f->set_alt(f, w_index, w_value);
|
|
if (value == USB_GADGET_DELAYED_STATUS) {
|
|
if (value == USB_GADGET_DELAYED_STATUS) {
|