|
@@ -1707,15 +1707,24 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
|
|
|
*((u8 *)req->buf) = value;
|
|
|
value = min(w_length, (u16) 1);
|
|
|
break;
|
|
|
-
|
|
|
- /*
|
|
|
- * USB 3.0 additions:
|
|
|
- * Function driver should handle get_status request. If such cb
|
|
|
- * wasn't supplied we respond with default value = 0
|
|
|
- * Note: function driver should supply such cb only for the first
|
|
|
- * interface of the function
|
|
|
- */
|
|
|
case USB_REQ_GET_STATUS:
|
|
|
+ if (gadget_is_otg(gadget) && gadget->hnp_polling_support &&
|
|
|
+ (w_index == OTG_STS_SELECTOR)) {
|
|
|
+ if (ctrl->bRequestType != (USB_DIR_IN |
|
|
|
+ USB_RECIP_DEVICE))
|
|
|
+ goto unknown;
|
|
|
+ *((u8 *)req->buf) = gadget->host_request_flag;
|
|
|
+ value = 1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * USB 3.0 additions:
|
|
|
+ * Function driver should handle get_status request. If such cb
|
|
|
+ * wasn't supplied we respond with default value = 0
|
|
|
+ * Note: function driver should supply such cb only for the
|
|
|
+ * first interface of the function
|
|
|
+ */
|
|
|
if (!gadget_is_superspeed(gadget))
|
|
|
goto unknown;
|
|
|
if (ctrl->bRequestType != (USB_DIR_IN | USB_RECIP_INTERFACE))
|