aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Lukassen <Robert.Lukassen@tomtom.com>2010-05-07 03:19:53 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-20 16:21:43 -0400
commit1ab83238740ff1e1773d5c13ecac43c60cf4aec4 (patch)
treea60e5300f9cbc6e8aef2d1dbebd1011e998c85cc
parent1d6ec813e2b2f82666230fc3c0fbf13032da945e (diff)
USB: gadget: Allow function access to device ID data during bind()
This is a patch that makes sure that the device ID data (idVendor, idProduct and bcdDevice) are assigned to the descriptor in the cdev structure *before* the composite gadget starts binding. This allows the composite driver, and all the composite functions it uses, access to that data. In one of the composite functions we created, we needed to register an input device and wanted to use the idVendor, idProduct and bcdDevice codes to properly initialize the id field of the input device. We could not do that because the idVendor, idProduct and bcdDevice values were only set in the cdec structure *after* the composite->bind(cdev) call. Signed-off-by: Robert Lukassen <robert.lukassen@tomtom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/gadget/composite.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index dd6d1905c14..391d169f8d0 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1017,6 +1017,14 @@ static int composite_bind(struct usb_gadget *gadget)
1017 */ 1017 */
1018 usb_ep_autoconfig_reset(cdev->gadget); 1018 usb_ep_autoconfig_reset(cdev->gadget);
1019 1019
1020 /* standardized runtime overrides for device ID data */
1021 if (idVendor)
1022 cdev->desc.idVendor = cpu_to_le16(idVendor);
1023 if (idProduct)
1024 cdev->desc.idProduct = cpu_to_le16(idProduct);
1025 if (bcdDevice)
1026 cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
1027
1020 /* composite gadget needs to assign strings for whole device (like 1028 /* composite gadget needs to assign strings for whole device (like
1021 * serial number), register function drivers, potentially update 1029 * serial number), register function drivers, potentially update
1022 * power state and consumption, etc 1030 * power state and consumption, etc
@@ -1028,14 +1036,6 @@ static int composite_bind(struct usb_gadget *gadget)
1028 cdev->desc = *composite->dev; 1036 cdev->desc = *composite->dev;
1029 cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket; 1037 cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
1030 1038
1031 /* standardized runtime overrides for device ID data */
1032 if (idVendor)
1033 cdev->desc.idVendor = cpu_to_le16(idVendor);
1034 if (idProduct)
1035 cdev->desc.idProduct = cpu_to_le16(idProduct);
1036 if (bcdDevice)
1037 cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
1038
1039 /* strings can't be assigned before bind() allocates the 1039 /* strings can't be assigned before bind() allocates the
1040 * releavnt identifiers 1040 * releavnt identifiers
1041 */ 1041 */