]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
USB: usb-skeleton: refactor endpoint retrieval
authorJohan Hovold <johan@kernel.org>
Fri, 17 Mar 2017 10:35:47 +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.

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/usb-skeleton.c

index 5133a0792eb0418391f74e4f56486731dc7e62fc..bb0bd732e29ab7369fb3865a4682a596b5f4459a 100644 (file)
@@ -491,16 +491,14 @@ static int skel_probe(struct usb_interface *interface,
                      const struct usb_device_id *id)
 {
        struct usb_skel *dev;
-       struct usb_host_interface *iface_desc;
-       struct usb_endpoint_descriptor *endpoint;
-       size_t buffer_size;
-       int i;
-       int retval = -ENOMEM;
+       struct usb_endpoint_descriptor *bulk_in, *bulk_out;
+       int retval;
 
        /* allocate memory for our device state and initialize it */
        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (!dev)
-               goto error;
+               return -ENOMEM;
+
        kref_init(&dev->kref);
        sema_init(&dev->limit_sem, WRITES_IN_FLIGHT);
        mutex_init(&dev->io_mutex);
@@ -513,36 +511,29 @@ static int skel_probe(struct usb_interface *interface,
 
        /* set up the endpoint information */
        /* use only the first bulk-in and bulk-out endpoints */
-       iface_desc = interface->cur_altsetting;
-       for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
-               endpoint = &iface_desc->endpoint[i].desc;
-
-               if (!dev->bulk_in_endpointAddr &&
-                   usb_endpoint_is_bulk_in(endpoint)) {
-                       /* we found a bulk in endpoint */
-                       buffer_size = usb_endpoint_maxp(endpoint);
-                       dev->bulk_in_size = buffer_size;
-                       dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
-                       dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
-                       if (!dev->bulk_in_buffer)
-                               goto error;
-                       dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
-                       if (!dev->bulk_in_urb)
-                               goto error;
-               }
-
-               if (!dev->bulk_out_endpointAddr &&
-                   usb_endpoint_is_bulk_out(endpoint)) {
-                       /* we found a bulk out endpoint */
-                       dev->bulk_out_endpointAddr = endpoint->bEndpointAddress;
-               }
-       }
-       if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
+       retval = usb_find_common_endpoints(interface->cur_altsetting,
+                       &bulk_in, &bulk_out, NULL, NULL);
+       if (retval) {
                dev_err(&interface->dev,
                        "Could not find both bulk-in and bulk-out endpoints\n");
                goto error;
        }
 
+       dev->bulk_in_size = usb_endpoint_maxp(bulk_in);
+       dev->bulk_in_endpointAddr = bulk_in->bEndpointAddress;
+       dev->bulk_in_buffer = kmalloc(dev->bulk_in_size, GFP_KERNEL);
+       if (!dev->bulk_in_buffer) {
+               retval = -ENOMEM;
+               goto error;
+       }
+       dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
+       if (!dev->bulk_in_urb) {
+               retval = -ENOMEM;
+               goto error;
+       }
+
+       dev->bulk_out_endpointAddr = bulk_out->bEndpointAddress;
+
        /* save our data pointer in this interface device */
        usb_set_intfdata(interface, dev);
 
@@ -563,9 +554,9 @@ static int skel_probe(struct usb_interface *interface,
        return 0;
 
 error:
-       if (dev)
-               /* this frees allocated memory */
-               kref_put(&dev->kref, skel_delete);
+       /* this frees allocated memory */
+       kref_put(&dev->kref, skel_delete);
+
        return retval;
 }