usb: gadget: Add match_ep() op to usb_gadget_ops
Add match_ep() op to usb_gadget_ops similar to Linux kernel which is useful in finding a suitable ep match for the function driver. This will avoid adding more gadget_is_xxx() handling code to usb_ep_autoconfig(). Also sync usb_ep_caps struct thats is usually used in the match_ep() callback by the gadget controller driver Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
This commit is contained in:
parent
c93e305af7
commit
77dcbdf3c1
@ -282,6 +282,9 @@ struct usb_ep *usb_ep_autoconfig(
|
|||||||
return ep;
|
return ep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gadget->ops->match_ep)
|
||||||
|
ep = gadget->ops->match_ep(gadget, desc, NULL);
|
||||||
|
|
||||||
/* Second, look at endpoints until an unclaimed one looks usable */
|
/* Second, look at endpoints until an unclaimed one looks usable */
|
||||||
list_for_each_entry(ep, &gadget->ep_list, ep_list) {
|
list_for_each_entry(ep, &gadget->ep_list, ep_list) {
|
||||||
if (ep_matches(gadget, ep, desc))
|
if (ep_matches(gadget, ep, desc))
|
||||||
|
@ -129,11 +129,30 @@ struct usb_ep_ops {
|
|||||||
void (*fifo_flush) (struct usb_ep *ep);
|
void (*fifo_flush) (struct usb_ep *ep);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct usb_ep_caps - endpoint capabilities description
|
||||||
|
* @type_control:Endpoint supports control type (reserved for ep0).
|
||||||
|
* @type_iso:Endpoint supports isochronous transfers.
|
||||||
|
* @type_bulk:Endpoint supports bulk transfers.
|
||||||
|
* @type_int:Endpoint supports interrupt transfers.
|
||||||
|
* @dir_in:Endpoint supports IN direction.
|
||||||
|
* @dir_out:Endpoint supports OUT direction.
|
||||||
|
*/
|
||||||
|
struct usb_ep_caps {
|
||||||
|
unsigned type_control:1;
|
||||||
|
unsigned type_iso:1;
|
||||||
|
unsigned type_bulk:1;
|
||||||
|
unsigned type_int:1;
|
||||||
|
unsigned dir_in:1;
|
||||||
|
unsigned dir_out:1;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct usb_ep - device side representation of USB endpoint
|
* struct usb_ep - device side representation of USB endpoint
|
||||||
* @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk"
|
* @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk"
|
||||||
* @ops: Function pointers used to access hardware-specific operations.
|
* @ops: Function pointers used to access hardware-specific operations.
|
||||||
* @ep_list:the gadget's ep_list holds all of its endpoints
|
* @ep_list:the gadget's ep_list holds all of its endpoints
|
||||||
|
* @caps:The structure describing types and directions supported by endoint.
|
||||||
* @maxpacket:The maximum packet size used on this endpoint. The initial
|
* @maxpacket:The maximum packet size used on this endpoint. The initial
|
||||||
* value can sometimes be reduced (hardware allowing), according to
|
* value can sometimes be reduced (hardware allowing), according to
|
||||||
* the endpoint descriptor used to configure the endpoint.
|
* the endpoint descriptor used to configure the endpoint.
|
||||||
@ -159,6 +178,7 @@ struct usb_ep {
|
|||||||
const char *name;
|
const char *name;
|
||||||
const struct usb_ep_ops *ops;
|
const struct usb_ep_ops *ops;
|
||||||
struct list_head ep_list;
|
struct list_head ep_list;
|
||||||
|
struct usb_ep_caps caps;
|
||||||
unsigned maxpacket:16;
|
unsigned maxpacket:16;
|
||||||
unsigned maxpacket_limit:16;
|
unsigned maxpacket_limit:16;
|
||||||
unsigned max_streams:16;
|
unsigned max_streams:16;
|
||||||
@ -447,6 +467,9 @@ struct usb_gadget_ops {
|
|||||||
int (*udc_start)(struct usb_gadget *,
|
int (*udc_start)(struct usb_gadget *,
|
||||||
struct usb_gadget_driver *);
|
struct usb_gadget_driver *);
|
||||||
int (*udc_stop)(struct usb_gadget *);
|
int (*udc_stop)(struct usb_gadget *);
|
||||||
|
struct usb_ep *(*match_ep)(struct usb_gadget *,
|
||||||
|
struct usb_endpoint_descriptor *,
|
||||||
|
struct usb_ss_ep_comp_descriptor *);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user