]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
USB: storage: refactor endpoint retrieval
authorJohan Hovold <johan@kernel.org>
Fri, 17 Mar 2017 10:35:49 +0000 (11:35 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Mar 2017 12:54:08 +0000 (13:54 +0100)
Use the new endpoint helpers to lookup the required bulk-in and bulk-out
endpoints and the (typically) optional interrupt-in endpoint.

Cc: usb-storage@lists.one-eyed-alien.net
Signed-off-by: Johan Hovold <johan@kernel.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/usb.c

index 615bea08ec0aeb1788155e067ac4f999a737f9a0..06615934fed1cc537694b03d023b613c95aea9f1 100644 (file)
@@ -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 */