usb: gadget: move non-super speed code out of usb_ep_autoconfig_ss()
authorAndrzej Pietrasiewicz <andrzej.p@collabora.com>
Thu, 31 Jan 2019 14:53:39 +0000 (15:53 +0100)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 7 Feb 2019 11:14:51 +0000 (13:14 +0200)
The moved code refers to non-super speed endpoints only. This patch also
makes the comment stress the fact, that autoconfigured descriptor might
need some adjustments.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/gadget/epautoconf.c

index 71b15c6..1eb4fa2 100644 (file)
@@ -67,9 +67,6 @@ struct usb_ep *usb_ep_autoconfig_ss(
 )
 {
        struct usb_ep   *ep;
-       u8              type;
-
-       type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
 
        if (gadget->ops->match_ep) {
                ep = gadget->ops->match_ep(gadget, desc, ep_comp);
@@ -109,16 +106,6 @@ found_ep:
                desc->bEndpointAddress |= gadget->out_epnum;
        }
 
-       /* report (variable) full speed bulk maxpacket */
-       if ((type == USB_ENDPOINT_XFER_BULK) && !ep_comp) {
-               int size = ep->maxpacket_limit;
-
-               /* min() doesn't work on bitfields with gcc-3.5 */
-               if (size > 64)
-                       size = 64;
-               desc->wMaxPacketSize = cpu_to_le16(size);
-       }
-
        ep->address = desc->bEndpointAddress;
        ep->desc = NULL;
        ep->comp_desc = NULL;
@@ -152,9 +139,10 @@ EXPORT_SYMBOL_GPL(usb_ep_autoconfig_ss);
  *
  * On success, this returns an claimed usb_ep, and modifies the endpoint
  * descriptor bEndpointAddress.  For bulk endpoints, the wMaxPacket value
- * is initialized as if the endpoint were used at full speed.  To prevent
- * the endpoint from being returned by a later autoconfig call, claims it
- * by assigning ep->claimed to true.
+ * is initialized as if the endpoint were used at full speed. Because of
+ * that the users must consider adjusting the autoconfigured descriptor.
+ * To prevent the endpoint from being returned by a later autoconfig call,
+ * claims it by assigning ep->claimed to true.
  *
  * On failure, this returns a null endpoint descriptor.
  */
@@ -163,7 +151,26 @@ struct usb_ep *usb_ep_autoconfig(
        struct usb_endpoint_descriptor  *desc
 )
 {
-       return usb_ep_autoconfig_ss(gadget, desc, NULL);
+       struct usb_ep   *ep;
+       u8              type;
+
+       ep = usb_ep_autoconfig_ss(gadget, desc, NULL);
+       if (!ep)
+               return NULL;
+
+       type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+
+       /* report (variable) full speed bulk maxpacket */
+       if (type == USB_ENDPOINT_XFER_BULK) {
+               int size = ep->maxpacket_limit;
+
+               /* min() doesn't work on bitfields with gcc-3.5 */
+               if (size > 64)
+                       size = 64;
+               desc->wMaxPacketSize = cpu_to_le16(size);
+       }
+
+       return ep;
 }
 EXPORT_SYMBOL_GPL(usb_ep_autoconfig);