Override the default VID/PID if custom values are supplied through the idVendor and idProduct kernel module parameters. Signed-off-by: Jef Driesen <jefdriesen@telenet.be> --- drivers/usb/gadget/serial.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c index f46a609..77b410e 100644 --- a/drivers/usb/gadget/serial.c +++ b/drivers/usb/gadget/serial.c @@ -271,6 +271,11 @@ static int __init init(void) } strings_dev[STRING_DESCRIPTION_IDX].s = serial_config_driver.label; + if (idVendor) + device_desc.idVendor = idVendor; + if (idProduct) + device_desc.idProduct = idProduct; + return usb_composite_register(&gserial_driver); } module_init(init); -- 1.7.1 --
So this patch resolves the bug found in 1ab83238740ff1e1773d5c13ecac43c60cf4aec4 which showed up in .35-rc1, right? Robert, any objection to this as it was your patch that broke things? thanks, --
Yes, although I'm really sure it is the best way to fix the problem. The way I understand this code is that before that commit, the idVendor/idProduct/bcdDevice module parameters where set after the bind(). Thus whatever was set as the default there got replaced with the values of the module parameters. Exactly what I would consider the correct behavior. After the commit, they get set before bind(), where they are changed back to the hardcoded values, which I think is wrong. My patch sets them back to the right values, but maybe it makes more sense to not set the default values in the first place (if there are already values in place of course). But I didn't knew how to accomplish that. There might be similar problems for the other gadget drivers as well. I haven't --
Hi, I just revisited the patch I submitted and I can see that it needs fixing. The intention of the patch was to provide the idVendor & idProduct kernel module parameter overrides to the individual functions at 'bind()' time. Prior to the patch, the overrides were done after the bind, making it hard for individual functions to determine the correct value for idVendor (some functions may need to use that value, e.g. USB audio when it registers itself as an ALSA device; it would want to use the same Vendor id). The patch makes sure that that happens, however, right after the bind() the patched values are lost due to the copying of the gadget specific device descriptor. Here's the snippet from 2.6.34: 999 usb_gadget_set_selfpowered(gadget); 1000 1001 /* interface and string IDs start at zero via kzalloc. 1002 * we force endpoints to start unassigned; few controller 1003 * drivers will zero ep->driver_data. 1004 */ 1005 usb_ep_autoconfig_reset(cdev->gadget); 1006 1007 /* composite gadget needs to assign strings for whole device (like 1008 * serial number), register function drivers, potentially update 1009 * power state and consumption, etc 1010 */ 1011 status = composite->bind(cdev); 1012 if (status < 0) 1013 goto fail; 1014 1015 cdev->desc = *composite->dev; 1016 cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket; 1017 1018 /* standardized runtime overrides for device ID data */ 1019 if (idVendor) 1020 cdev->desc.idVendor = cpu_to_le16(idVendor); 1021 if (idProduct) 1022 cdev->desc.idProduct = cpu_to_le16(idProduct); 1023 if (bcdDevice) 1024 cdev->desc.bcdDevice = cpu_to_le16(bcdDevice); 1025 In line 1015, the composite device descriptor is copied to the cdev->desc field. Then the values get patched. My patch just moved lines 1018-1024, so that the functions ...
So, do you want me to revert your original patch and wait for you to come up with a "better" solution? That seems like the correct thing to do at the moment. thanks, greg k-h --
If the original commit is reverted, the idVendor and idProduct module parameters can still be accessed through the global variables directly (like I did in my own pathc). Since access to those values appears to be the main goal of the patch, I think no functionality will be lost by reverting the commit. --
Hi, Yes, providing access to those module parameters was the original goal. I agree that my patch should be reverted and I'll try to come up with a method of accessing these values without violating the information hiding principles too much. I don't like accessing globals. This e-mail message contains information which is confidential and may be privileged. It is intended for use by the addressee only. If you are not the intended addressee, we request that you notify the sender immediately and delete or destroy this e-mail message and any attachment(s), without copying, saving, forwarding, disclosing or using its contents in any other way. TomTom N.V., TomTom International BV or any other company belonging to the TomTom group of companies will not be liable for damage relating to the communication by e-mail of data, documents or any other information. --
Do I have to take any action to make sure the original commit [1] gets reverted? [1] 1ab83238740ff1e1773d5c13ecac43c60cf4aec4 --
| Greg KH | Og dreams of kernels |
| Jens Axboe | [PATCH 31/33] Fusion: sg chaining support |
| Arnd Bergmann | Re: finding your own dead "CONFIG_" variables |
| Mark Brown | [PATCH 2/2] Subject: natsemi: Allow users to disable workaround for DspCfg reset |
| Tony Breeds | [LGUEST] Look |
