Re: [RFCv3 2/3] usb: gadget: epautoconf: check feature flags

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux