/* 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 */