]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
greybus: es1.c: wait until the last possible minute to start the svc messages
authorGreg Kroah-Hartman <greg@kroah.com>
Thu, 22 Jan 2015 13:19:25 +0000 (21:19 +0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Fri, 23 Jan 2015 14:55:57 +0000 (22:55 +0800)
When initializing the USB device, we were starting up the svc message
queue before the cport urbs were allocated.  This might not be an issue
for "slower" machines, but not having any allocated urbs for a cport
might be an issue if we were to handle svc messages.

So wait until everything is properly initialized and allocated before
starting the svc urb.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/es1.c

index 2ec5d7b403a3fb43a3f8e440fb027fe212ae3694..bbf1bd1048be03d96232b37de2cc3786a0a3aa3a 100644 (file)
@@ -559,9 +559,6 @@ static int ap_probe(struct usb_interface *interface,
                         usb_rcvintpipe(udev, es1->svc_endpoint),
                         es1->svc_buffer, ES1_SVC_MSG_SIZE, svc_in_callback,
                         hd, svc_interval);
-       retval = usb_submit_urb(es1->svc_urb, GFP_KERNEL);
-       if (retval)
-               goto error;
 
        /* Allocate buffers for our cport in messages and start them up */
        for (i = 0; i < NUM_CPORT_IN_URB; ++i) {
@@ -598,6 +595,11 @@ static int ap_probe(struct usb_interface *interface,
                es1->cport_out_urb_busy[i] = false;     /* just to be anal */
        }
 
+       /* Start up our svc urb, which allows events to start flowing */
+       retval = usb_submit_urb(es1->svc_urb, GFP_KERNEL);
+       if (retval)
+               goto error;
+
        return 0;
 error:
        ap_disconnect(interface);