usb: gadget: defer setting maxpacket till ->setup()
[pandora-kernel.git] / drivers / usb / gadget / file_storage.c
index 738591a..639e14a 100644 (file)
@@ -929,6 +929,7 @@ static int standard_setup_req(struct fsg_dev *fsg,
 
                case USB_DT_DEVICE:
                        VDBG(fsg, "get device descriptor\n");
+                       device_desc.bMaxPacketSize0 = fsg->ep0->maxpacket;
                        value = sizeof device_desc;
                        memcpy(req->buf, &device_desc, value);
                        break;
@@ -936,6 +937,11 @@ static int standard_setup_req(struct fsg_dev *fsg,
                        VDBG(fsg, "get device qualifier\n");
                        if (!gadget_is_dualspeed(fsg->gadget))
                                break;
+                       /*
+                        * Assume ep0 uses the same maxpacket value for both
+                        * speeds
+                        */
+                       dev_qualifier.bMaxPacketSize0 = fsg->ep0->maxpacket;
                        value = sizeof dev_qualifier;
                        memcpy(req->buf, &dev_qualifier, value);
                        break;
@@ -3417,7 +3423,6 @@ static int __init fsg_bind(struct usb_gadget *gadget)
        }
 
        /* Fix up the descriptors */
-       device_desc.bMaxPacketSize0 = fsg->ep0->maxpacket;
        device_desc.idVendor = cpu_to_le16(mod_data.vendor);
        device_desc.idProduct = cpu_to_le16(mod_data.product);
        device_desc.bcdDevice = cpu_to_le16(mod_data.release);
@@ -3431,9 +3436,6 @@ static int __init fsg_bind(struct usb_gadget *gadget)
        if (gadget_is_dualspeed(gadget)) {
                fsg_hs_function[i + FSG_HS_FUNCTION_PRE_EP_ENTRIES] = NULL;
 
-               /* Assume ep0 uses the same maxpacket value for both speeds */
-               dev_qualifier.bMaxPacketSize0 = fsg->ep0->maxpacket;
-
                /* Assume endpoint addresses are the same for both speeds */
                fsg_hs_bulk_in_desc.bEndpointAddress =
                        fsg_fs_bulk_in_desc.bEndpointAddress;