On Fri, 17 Mar 2017, Johan Hovold wrote:

> Use the new endpoint helpers to lookup the required bulk-in and bulk-out
> endpoints and the (typically) optional interrupt-in endpoint.
> 
> Cc: Alan Stern <st...@rowland.harvard.edu>
> Cc: usb-stor...@lists.one-eyed-alien.net
> Signed-off-by: Johan Hovold <jo...@kernel.org>
> ---
>  drivers/usb/storage/usb.c | 40 +++++++++++++---------------------------
>  1 file changed, 13 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
> index 615bea08ec0a..06615934fed1 100644
> --- a/drivers/usb/storage/usb.c
> +++ b/drivers/usb/storage/usb.c
> @@ -737,13 +737,11 @@ static void get_protocol(struct us_data *us)
>  /* Get the pipe settings */
>  static int get_pipes(struct us_data *us)
>  {
> -     struct usb_host_interface *altsetting =
> -             us->pusb_intf->cur_altsetting;
> -     int i;
> -     struct usb_endpoint_descriptor *ep;
> -     struct usb_endpoint_descriptor *ep_in = NULL;
> -     struct usb_endpoint_descriptor *ep_out = NULL;
> -     struct usb_endpoint_descriptor *ep_int = NULL;
> +     struct usb_host_interface *alt = us->pusb_intf->cur_altsetting;
> +     struct usb_endpoint_descriptor *ep_in;
> +     struct usb_endpoint_descriptor *ep_out;
> +     struct usb_endpoint_descriptor *ep_int;
> +     int res;
>  
>       /*
>        * Find the first endpoint of each type we need.
> @@ -751,28 +749,16 @@ static int get_pipes(struct us_data *us)
>        * An optional interrupt-in is OK (necessary for CBI protocol).
>        * We will ignore any others.
>        */
> -     for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
> -             ep = &altsetting->endpoint[i].desc;
> -
> -             if (usb_endpoint_xfer_bulk(ep)) {
> -                     if (usb_endpoint_dir_in(ep)) {
> -                             if (!ep_in)
> -                                     ep_in = ep;
> -                     } else {
> -                             if (!ep_out)
> -                                     ep_out = ep;
> -                     }
> -             }
> -
> -             else if (usb_endpoint_is_int_in(ep)) {
> -                     if (!ep_int)
> -                             ep_int = ep;
> -             }
> +     res = usb_find_common_endpoints(alt, &ep_in, &ep_out, NULL, NULL);
> +     if (res) {
> +             usb_stor_dbg(us, "bulk endpoints not found\n");
> +             return res;
>       }
>  
> -     if (!ep_in || !ep_out || (us->protocol == USB_PR_CBI && !ep_int)) {
> -             usb_stor_dbg(us, "Endpoint sanity check failed! Rejecting 
> dev.\n");
> -             return -EIO;
> +     res = usb_find_int_in_endpoint(alt, &ep_int);
> +     if (res && us->protocol == USB_PR_CBI) {
> +             usb_stor_dbg(us, "interrupt endpoint not found\n");
> +             return res;
>       }
>  
>       /* Calculate and store the pipe values */

Acked-by: Alan Stern <st...@rowland.harvard.edu>

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to