1
0
Fork 0

usb: dwc3: gadget: add common endpoint configuration for dwc3 udc driver

This patch adds code to select standard, commonly used usb endpoint
configuration (ep1in-bulk, ep2out-bulk, ep3in-int) to dwc3 driver. This
ensures compatibility with old userspace and windows drivers, which
expects hardcoded endpoint numbers.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
utp
Marek Szyprowski 2015-03-03 17:32:11 +01:00 committed by Marek Vasut
parent 5dc4538bf3
commit 16bece51c5
2 changed files with 31 additions and 1 deletions

View File

@ -220,7 +220,7 @@ struct usb_ep *usb_ep_autoconfig(
struct usb_endpoint_descriptor *desc
)
{
struct usb_ep *ep;
struct usb_ep *ep = NULL;
u8 type;
type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
@ -261,6 +261,28 @@ struct usb_ep *usb_ep_autoconfig(
ep = find_ep(gadget, "ep1-bulk");
if (ep && ep_matches(gadget, ep, desc))
return ep;
} else if (gadget_is_dwc3(gadget)) {
const char *name = NULL;
/*
* First try standard, common configuration: ep1in-bulk,
* ep2out-bulk, ep3in-int to match other udc drivers to avoid
* confusion in already deployed software (endpoint numbers
* hardcoded in userspace software/drivers)
*/
if ((desc->bEndpointAddress & USB_DIR_IN) &&
type == USB_ENDPOINT_XFER_BULK)
name = "ep1in";
else if ((desc->bEndpointAddress & USB_DIR_IN) == 0 &&
type == USB_ENDPOINT_XFER_BULK)
name = "ep2out";
else if ((desc->bEndpointAddress & USB_DIR_IN) &&
type == USB_ENDPOINT_XFER_INT)
name = "ep3in";
if (name)
ep = find_ep(gadget, name);
if (ep && ep_matches(gadget, ep, desc))
return ep;
}
/* Second, look at endpoints until an unclaimed one looks usable */

View File

@ -156,6 +156,14 @@
#define gadget_is_fotg210(g) 0
#endif
#ifdef CONFIG_USB_DWC3_GADGET
#define gadget_is_dwc3(g) (!strcmp("dwc3-gadget", (g)->name))
#else
#define gadget_is_dwc3(g) 0
#endif
/*
* CONFIG_USB_GADGET_SX2
* CONFIG_USB_GADGET_AU1X00