|
@@ -1684,6 +1684,39 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_BLACKFIN
|
|
|
+static struct usb_ep *musb_match_ep(struct usb_gadget *g,
|
|
|
+ struct usb_endpoint_descriptor *desc,
|
|
|
+ struct usb_ss_ep_comp_descriptor *ep_comp)
|
|
|
+{
|
|
|
+ struct usb_ep *ep = NULL;
|
|
|
+
|
|
|
+ switch (usb_endpoint_type(desc)) {
|
|
|
+ case USB_ENDPOINT_XFER_ISOC:
|
|
|
+ case USB_ENDPOINT_XFER_BULK:
|
|
|
+ if (usb_endpoint_dir_in(desc))
|
|
|
+ ep = gadget_find_ep_by_name(g, "ep5in");
|
|
|
+ else
|
|
|
+ ep = gadget_find_ep_by_name(g, "ep6out");
|
|
|
+ break;
|
|
|
+ case USB_ENDPOINT_XFER_INT:
|
|
|
+ if (usb_endpoint_dir_in(desc))
|
|
|
+ ep = gadget_find_ep_by_name(g, "ep1in");
|
|
|
+ else
|
|
|
+ ep = gadget_find_ep_by_name(g, "ep2out");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ep && usb_gadget_ep_match_desc(g, ep, desc, ep_comp))
|
|
|
+ return ep;
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+#else
|
|
|
+#define musb_match_ep NULL
|
|
|
+#endif
|
|
|
+
|
|
|
static int musb_gadget_start(struct usb_gadget *g,
|
|
|
struct usb_gadget_driver *driver);
|
|
|
static int musb_gadget_stop(struct usb_gadget *g);
|
|
@@ -1697,6 +1730,7 @@ static const struct usb_gadget_ops musb_gadget_operations = {
|
|
|
.pullup = musb_gadget_pullup,
|
|
|
.udc_start = musb_gadget_start,
|
|
|
.udc_stop = musb_gadget_stop,
|
|
|
+ .match_ep = musb_match_ep,
|
|
|
};
|
|
|
|
|
|
/* ----------------------------------------------------------------------- */
|