On Tue, 26 Nov 2013, Felipe Balbi wrote: > Start matching endpoints against feature flags, > this will help us dropping the naming conventions > currently used by the Gadget Framework. > > Signed-off-by: Felipe Balbi <balbi@xxxxxx> > --- > drivers/usb/gadget/epautoconf.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c > index feaaa7b..3fe0d42 100644 > --- a/drivers/usb/gadget/epautoconf.c > +++ b/drivers/usb/gadget/epautoconf.c > @@ -62,6 +62,31 @@ ep_matches ( > if (USB_ENDPOINT_XFER_CONTROL == type) > return 0; > > + /* first check feature flags */ > + if (ep->has_dir_in ^ usb_endpoint_dir_in(desc)) > + return 0; > + > + if (ep->has_dir_out ^ usb_endpoint_dir_out(desc)) > + return 0; I should have noticed this sooner (argh!). The ^ operation isn't what you want here -- if the endpoint hardware can work in either direction then one of those two tests is bound to fail. The code should be structured more like the tests for the endpoint type, below. In other words, like this: if (usb_endpoint_dir_in(desc)) { if (!ep->has_dir_in) return 0; } else { if (!ep->has_dir_out) return 0; } Alan Stern > + > + switch (type) { > + case USB_ENDPOINT_XFER_CONTROL: > + /* only ep0 */ > + return 0; > + case USB_ENDPOINT_XFER_BULK: > + if (ep->has_bulk) > + goto match; > + break; > + case USB_ENDPOINT_XFER_INT: > + if (ep->has_interrupt) > + goto match; > + break; > + case USB_ENDPOINT_XFER_ISOC: > + if (ep->has_isochronous) > + goto match; > + break; > + } > + > /* some other naming convention */ > if ('e' != ep->name[0]) > return 0; -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html