USB: cdc-acm: refactor endpoint retrieval
authorJohan Hovold <johan@kernel.org>
Fri, 17 Mar 2017 10:35:48 +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, bulk-out
and interrupt-in endpoints for collapsed interfaces.

Note that there is already a check verifying that there are exactly
three endpoints so we'd still be bailing out if there's an unexpected
endpoint type.

Cc: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/class/cdc-acm.c

index d538893..00d55ba 100644 (file)
@@ -1174,6 +1174,7 @@ static int acm_probe(struct usb_interface *intf,
        int combined_interfaces = 0;
        struct device *tty_dev;
        int rv = -ENOMEM;
+       int res;
 
        /* normal quirks */
        quirks = (unsigned long)id->driver_info;
@@ -1274,23 +1275,12 @@ static int acm_probe(struct usb_interface *intf,
                        return -EINVAL;
                }
 look_for_collapsed_interface:
-               for (i = 0; i < 3; i++) {
-                       struct usb_endpoint_descriptor *ep;
-                       ep = &data_interface->cur_altsetting->endpoint[i].desc;
-
-                       if (usb_endpoint_is_int_in(ep))
-                               epctrl = ep;
-                       else if (usb_endpoint_is_bulk_out(ep))
-                               epwrite = ep;
-                       else if (usb_endpoint_is_bulk_in(ep))
-                               epread = ep;
-                       else
-                               return -EINVAL;
-               }
-               if (!epctrl || !epread || !epwrite)
-                       return -ENODEV;
-               else
-                       goto made_compressed_probe;
+               res = usb_find_common_endpoints(data_interface->cur_altsetting,
+                               &epread, &epwrite, &epctrl, NULL);
+               if (res)
+                       return res;
+
+               goto made_compressed_probe;
        }
 
 skip_normal_probe: