Commit b0aea003 authored by Robert Baldyga's avatar Robert Baldyga Committed by Felipe Balbi
Browse files

usb: gadget: move find_ep() from epautoconf to udc-core



Move find_ep() to udc-core and rename it to gadget_find_ep_by_name().
It can be used in UDC drivers, especially in 'match_ep' callback after
moving chip-specific endpoint matching logic from epautoconf to UDC
drivers.

Replace all calls of find_ep() function with gadget_find_ep_by_name().

Signed-off-by: default avatarRobert Baldyga <r.baldyga@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 4278c687
Loading
Loading
Loading
Loading
+9 −21
Original line number Diff line number Diff line
@@ -22,18 +22,6 @@

#include "gadget_chips.h"

static struct usb_ep *
find_ep (struct usb_gadget *gadget, const char *name)
{
	struct usb_ep	*ep;

	list_for_each_entry (ep, &gadget->ep_list, ep_list) {
		if (0 == strcmp (ep->name, name))
			return ep;
	}
	return NULL;
}

/**
 * usb_ep_autoconfig_ss() - choose an endpoint matching the ep
 * descriptor and ep companion descriptor
@@ -103,11 +91,11 @@ struct usb_ep *usb_ep_autoconfig_ss(

		if (type == USB_ENDPOINT_XFER_INT) {
			/* ep-e, ep-f are PIO with only 64 byte fifos */
			ep = find_ep(gadget, "ep-e");
			ep = gadget_find_ep_by_name(gadget, "ep-e");
			if (ep && usb_gadget_ep_match_desc(gadget,
					ep, desc, ep_comp))
				goto found_ep;
			ep = find_ep(gadget, "ep-f");
			ep = gadget_find_ep_by_name(gadget, "ep-f");
			if (ep && usb_gadget_ep_match_desc(gadget,
					ep, desc, ep_comp))
				goto found_ep;
@@ -116,20 +104,20 @@ struct usb_ep *usb_ep_autoconfig_ss(
		/* 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);
		ep = gadget_find_ep_by_name(gadget, name);
		if (ep && usb_gadget_ep_match_desc(gadget, ep, desc, ep_comp))
			goto found_ep;
	} else if (gadget_is_goku (gadget)) {
		if (USB_ENDPOINT_XFER_INT == type) {
			/* single buffering is enough */
			ep = find_ep(gadget, "ep3-bulk");
			ep = gadget_find_ep_by_name(gadget, "ep3-bulk");
			if (ep && usb_gadget_ep_match_desc(gadget,
					ep, desc, ep_comp))
				goto found_ep;
		} else if (USB_ENDPOINT_XFER_BULK == type
				&& (USB_DIR_IN & desc->bEndpointAddress)) {
			/* DMA may be available */
			ep = find_ep(gadget, "ep2-bulk");
			ep = gadget_find_ep_by_name(gadget, "ep2-bulk");
			if (ep && usb_gadget_ep_match_desc(gadget,
					ep, desc, ep_comp))
				goto found_ep;
@@ -140,14 +128,14 @@ struct usb_ep *usb_ep_autoconfig_ss(
		if ((USB_ENDPOINT_XFER_BULK == type) ||
		    (USB_ENDPOINT_XFER_ISOC == type)) {
			if (USB_DIR_IN & desc->bEndpointAddress)
				ep = find_ep (gadget, "ep5in");
				ep = gadget_find_ep_by_name(gadget, "ep5in");
			else
				ep = find_ep (gadget, "ep6out");
				ep = gadget_find_ep_by_name(gadget, "ep6out");
		} else if (USB_ENDPOINT_XFER_INT == type) {
			if (USB_DIR_IN & desc->bEndpointAddress)
				ep = find_ep(gadget, "ep1in");
				ep = gadget_find_ep_by_name(gadget, "ep1in");
			else
				ep = find_ep(gadget, "ep2out");
				ep = gadget_find_ep_by_name(gadget, "ep2out");
		} else
			ep = NULL;
		if (ep && usb_gadget_ep_match_desc(gadget, ep, desc, ep_comp))
+21 −0
Original line number Diff line number Diff line
@@ -131,6 +131,27 @@ EXPORT_SYMBOL_GPL(usb_gadget_giveback_request);

/* ------------------------------------------------------------------------- */

/**
 * gadget_find_ep_by_name - returns ep whose name is the same as sting passed
 *	in second parameter or NULL if searched endpoint not found
 * @g: controller to check for quirk
 * @name: name of searched endpoint
 */
struct usb_ep *gadget_find_ep_by_name(struct usb_gadget *g, const char *name)
{
	struct usb_ep *ep;

	gadget_for_each_ep(ep, g) {
		if (!strcmp(ep->name, name))
			return ep;
	}

	return NULL;
}
EXPORT_SYMBOL_GPL(gadget_find_ep_by_name);

/* ------------------------------------------------------------------------- */

int usb_gadget_ep_match_desc(struct usb_gadget *gadget,
		struct usb_ep *ep, struct usb_endpoint_descriptor *desc,
		struct usb_ss_ep_comp_descriptor *ep_comp)
+7 −1
Original line number Diff line number Diff line
@@ -639,7 +639,6 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
#define gadget_for_each_ep(tmp, gadget) \
	list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)


/**
 * usb_ep_align_maybe - returns @len aligned to ep's maxpacketsize if gadget
 *	requires quirk_ep_out_aligned_size, otherwise reguens len.
@@ -1204,6 +1203,13 @@ extern void usb_gadget_giveback_request(struct usb_ep *ep,

/*-------------------------------------------------------------------------*/

/* utility to find endpoint by name */

extern struct usb_ep *gadget_find_ep_by_name(struct usb_gadget *g,
		const char *name);

/*-------------------------------------------------------------------------*/

/* utility to check if endpoint caps match descriptor needs */

extern int usb_gadget_ep_match_desc(struct usb_gadget *gadget,