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>
This commit is contained in:
parent
1d6ec813e2
commit
1ab8323874
|
@ -1017,6 +1017,14 @@ static int composite_bind(struct usb_gadget *gadget)
|
||||||
*/
|
*/
|
||||||
usb_ep_autoconfig_reset(cdev->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
|
/* composite gadget needs to assign strings for whole device (like
|
||||||
* serial number), register function drivers, potentially update
|
* serial number), register function drivers, potentially update
|
||||||
* power state and consumption, etc
|
* power state and consumption, etc
|
||||||
|
@ -1028,14 +1036,6 @@ static int composite_bind(struct usb_gadget *gadget)
|
||||||
cdev->desc = *composite->dev;
|
cdev->desc = *composite->dev;
|
||||||
cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
|
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
|
/* strings can't be assigned before bind() allocates the
|
||||||
* releavnt identifiers
|
* releavnt identifiers
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue