]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
USB: usblp: refactor endpoint retrieval
authorJohan Hovold <johan@kernel.org>
Fri, 17 Mar 2017 10:35:50 +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-out endpoint
and the depending on protocol likewise required bulk-in endpoint.

Cc: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/class/usblp.c

index cc61055fb9befcbc00a6a32b85996518d1aebbe4..73bd9a2ac530cc165060456f8a15036c093312c9 100644 (file)
@@ -1239,8 +1239,9 @@ static int usblp_select_alts(struct usblp *usblp)
 {
        struct usb_interface *if_alt;
        struct usb_host_interface *ifd;
-       struct usb_endpoint_descriptor *epd, *epwrite, *epread;
-       int p, i, e;
+       struct usb_endpoint_descriptor *epwrite, *epread;
+       int p, i;
+       int res;
 
        if_alt = usblp->intf;
 
@@ -1260,31 +1261,21 @@ static int usblp_select_alts(struct usblp *usblp)
                    ifd->desc.bInterfaceProtocol > USBLP_LAST_PROTOCOL)
                        continue;
 
-               /* Look for bulk OUT and IN endpoints. */
-               epwrite = epread = NULL;
-               for (e = 0; e < ifd->desc.bNumEndpoints; e++) {
-                       epd = &ifd->endpoint[e].desc;
-
-                       if (usb_endpoint_is_bulk_out(epd))
-                               if (!epwrite)
-                                       epwrite = epd;
-
-                       if (usb_endpoint_is_bulk_in(epd))
-                               if (!epread)
-                                       epread = epd;
+               /* Look for the expected bulk endpoints. */
+               if (ifd->desc.bInterfaceProtocol > 1) {
+                       res = usb_find_common_endpoints(ifd,
+                                       &epread, &epwrite, NULL, NULL);
+               } else {
+                       epread = NULL;
+                       res = usb_find_bulk_out_endpoint(ifd, &epwrite);
                }
 
                /* Ignore buggy hardware without the right endpoints. */
-               if (!epwrite || (ifd->desc.bInterfaceProtocol > 1 && !epread))
+               if (res)
                        continue;
 
-               /*
-                * Turn off reads for USB_CLASS_PRINTER/1/1 (unidirectional)
-                * interfaces and buggy bidirectional printers.
-                */
-               if (ifd->desc.bInterfaceProtocol == 1) {
-                       epread = NULL;
-               } else if (usblp->quirks & USBLP_QUIRK_BIDIR) {
+               /* Turn off reads for buggy bidirectional printers. */
+               if (usblp->quirks & USBLP_QUIRK_BIDIR) {
                        printk(KERN_INFO "usblp%d: Disabling reads from "
                            "problematic bidirectional printer\n",
                            usblp->minor);