On Thu, Apr 20, 2017 at 01:29:16PM +0200, Alfredo Rafael Vicente Boix wrote:
> Hello,
> 
> Thank you for your quick answer. I just have compiled the last stable
> kernel and I'm having the same issue. This is Lliurex (based in
> ubuntu)
> 
> [ 2016.280112] usb 8-2: USB disconnect, device number 2
> [ 2017.944091] usb 8-2: new low-speed USB device number 3 using uhci_hcd
> [ 2018.165147] usb 8-2: New USB device found, idVendor=0694, idProduct=0001
> [ 2018.165151] usb 8-2: New USB device strings: Mfr=4, Product=26,
> SerialNumber=0
> [ 2018.165153] usb 8-2: Product: LEGO USB Tower
> [ 2018.165155] usb 8-2: Manufacturer: LEGO Group
> [ 2018.168352] legousbtower 8-2:1.0: LEGO USB Tower get version
> control request failed

Ok, that is odd.

> [ 2018.168361] legousbtower: probe of 8-2:1.0 failed with error -11

And -11 is also probably not the right error to return here -EAGAIN
doesn't make sense...

But, this did find at least one bug in the driver, where data was being
sent to the device off of the stack.  Can you try the patch below to see
if that fixes anything or not?

It's not a "complete" patch, but should be good enough for testing.

If that doesn't work, I don't see why asking for the firmware
information is required, we should be able to just continue on if this
fails.  There was some reorginization done in this area of the code a
few versions back, but I don't see how that could affect this device
(famous last words...)

thanks,

greg k-h

-------------------------

diff --git a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c
index 322a042d6e59..aac51caa55b2 100644
--- a/drivers/usb/misc/legousbtower.c
+++ b/drivers/usb/misc/legousbtower.c
@@ -808,7 +808,7 @@ static int tower_probe (struct usb_interface *interface, 
const struct usb_device
        struct lego_usb_tower *dev = NULL;
        struct usb_host_interface *iface_desc;
        struct usb_endpoint_descriptor* endpoint;
-       struct tower_get_version_reply get_version_reply;
+       struct tower_get_version_reply *get_version_reply;
        int i;
        int retval = -ENOMEM;
        int result;
@@ -886,6 +886,7 @@ static int tower_probe (struct usb_interface *interface, 
const struct usb_device
        dev->interrupt_in_interval = interrupt_in_interval ? 
interrupt_in_interval : dev->interrupt_in_endpoint->bInterval;
        dev->interrupt_out_interval = interrupt_out_interval ? 
interrupt_out_interval : dev->interrupt_out_endpoint->bInterval;
 
+       get_version_reply = kmalloc(sizeof(*get_version_reply), GFP_KERNEL);
        /* get the firmware version and log it */
        result = usb_control_msg (udev,
                                  usb_rcvctrlpipe(udev, 0),
@@ -893,8 +894,8 @@ static int tower_probe (struct usb_interface *interface, 
const struct usb_device
                                  USB_TYPE_VENDOR | USB_DIR_IN | 
USB_RECIP_DEVICE,
                                  0,
                                  0,
-                                 &get_version_reply,
-                                 sizeof(get_version_reply),
+                                 get_version_reply,
+                                 sizeof(*get_version_reply),
                                  1000);
        if (result < 0) {
                dev_err(idev, "LEGO USB Tower get version control request 
failed\n");
@@ -902,9 +903,10 @@ static int tower_probe (struct usb_interface *interface, 
const struct usb_device
                goto error;
        }
        dev_info(&interface->dev, "LEGO USB Tower firmware version is %d.%d "
-                "build %d\n", get_version_reply.major,
-                get_version_reply.minor,
-                le16_to_cpu(get_version_reply.build_no));
+                "build %d\n", get_version_reply->major,
+                get_version_reply->minor,
+                le16_to_cpu(get_version_reply->build_no));
+       kfree(get_version_reply);
 
        /* we can register the device now, as it is ready */
        usb_set_intfdata (interface, dev);
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to