aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Lukassen <Robert.Lukassen@tomtom.com>2010-05-07 09:19:53 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-20 13:21:43 -0700
commit1ab83238740ff1e1773d5c13ecac43c60cf4aec4 (patch)
treea60e5300f9cbc6e8aef2d1dbebd1011e998c85cc
parent1d6ec813e2b2f82666230fc3c0fbf13032da945e (diff)
downloadkernel_samsung_smdk4412-1ab83238740ff1e1773d5c13ecac43c60cf4aec4.zip
kernel_samsung_smdk4412-1ab83238740ff1e1773d5c13ecac43c60cf4aec4.tar.gz
kernel_samsung_smdk4412-1ab83238740ff1e1773d5c13ecac43c60cf4aec4.tar.bz2
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 dd6d190..391d169 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)
*/
usb_ep_autoconfig_reset(cdev->gadget);
+ /* standardized runtime overrides for device ID data */
+ if (idVendor)
+ cdev->desc.idVendor = cpu_to_le16(idVendor);
+ if (idProduct)
+ cdev->desc.idProduct = cpu_to_le16(idProduct);
+ if (bcdDevice)
+ cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
+
/* composite gadget needs to assign strings for whole device (like
* serial number), register function drivers, potentially update
* power state and consumption, etc
@@ -1028,14 +1036,6 @@ static int composite_bind(struct usb_gadget *gadget)
cdev->desc = *composite->dev;
cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
- /* standardized runtime overrides for device ID data */
- if (idVendor)
- cdev->desc.idVendor = cpu_to_le16(idVendor);
- if (idProduct)
- cdev->desc.idProduct = cpu_to_le16(idProduct);
- if (bcdDevice)
- cdev->desc.bcdDevice = cpu_to_le16(bcdDevice);
-
/* strings can't be assigned before bind() allocates the
* releavnt identifiers
*/