USB: accept some invalid ep0-maxpacket values
[firefly-linux-kernel-4.4.55.git] / drivers / usb / core / hub.c
index 7456e2986f85444662ea2998eca77d875465bb59..12254e1f4659454bf6a0f3709cfa4da2ad91a833 100644 (file)
@@ -2821,13 +2821,16 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
        else
                i = udev->descriptor.bMaxPacketSize0;
        if (le16_to_cpu(udev->ep0.desc.wMaxPacketSize) != i) {
-               if (udev->speed != USB_SPEED_FULL ||
+               if (udev->speed == USB_SPEED_LOW ||
                                !(i == 8 || i == 16 || i == 32 || i == 64)) {
-                       dev_err(&udev->dev, "ep0 maxpacket = %d\n", i);
+                       dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
                        retval = -EMSGSIZE;
                        goto fail;
                }
-               dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
+               if (udev->speed == USB_SPEED_FULL)
+                       dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
+               else
+                       dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
                usb_ep0_reinit(udev);
        }