usb: gadget: autoconf: net2280: match hardware and usb ep address
authorMian Yousaf Kaukab <yousaf.kaukab@intel.com>
Sat, 16 May 2015 20:33:37 +0000 (22:33 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 26 May 2015 15:40:21 +0000 (10:40 -0500)
USB3380 GPEP can be used in IN and OUT directions however, both
directions should use same endpoint address. Fulfil this requirement
by mapping usb endpoint to hardware endpoint with the same address.

Tested-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/epautoconf.c

index 0567cca1465ef2ba043cbd22a1c18b406a194553..919cdfdda78b91c8a17c921a4c05ec5a6aaa600b 100644 (file)
@@ -258,15 +258,25 @@ struct usb_ep *usb_ep_autoconfig_ss(
        /* First, apply chip-specific "best usage" knowledge.
         * This might make a good usb_gadget_ops hook ...
         */
-       if (gadget_is_net2280 (gadget) && type == USB_ENDPOINT_XFER_INT) {
-               /* ep-e, ep-f are PIO with only 64 byte fifos */
-               ep = find_ep (gadget, "ep-e");
-               if (ep && ep_matches(gadget, ep, desc, ep_comp))
-                       goto found_ep;
-               ep = find_ep (gadget, "ep-f");
+       if (gadget_is_net2280(gadget)) {
+               char name[8];
+
+               if (type == USB_ENDPOINT_XFER_INT) {
+                       /* ep-e, ep-f are PIO with only 64 byte fifos */
+                       ep = find_ep(gadget, "ep-e");
+                       if (ep && ep_matches(gadget, ep, desc, ep_comp))
+                               goto found_ep;
+                       ep = find_ep(gadget, "ep-f");
+                       if (ep && ep_matches(gadget, ep, desc, ep_comp))
+                               goto found_ep;
+               }
+
+               /* USB3380: use same address for usb and hardware endpoints */
+               snprintf(name, sizeof(name), "ep%d%s", usb_endpoint_num(desc),
+                               usb_endpoint_dir_in(desc) ? "in" : "out");
+               ep = find_ep(gadget, name);
                if (ep && ep_matches(gadget, ep, desc, ep_comp))
                        goto found_ep;
-
        } else if (gadget_is_goku (gadget)) {
                if (USB_ENDPOINT_XFER_INT == type) {
                        /* single buffering is enough */
This page took 0.024897 seconds and 5 git commands to generate.