USB: RNDIS gadget, fix issues talking from PXA
The reworked Ethernet gadget has an RNDIS interop problem when used with the CDC subset driver ... e.g. on PXA 2xx and 3xx hardware, which currently has a hard time talking to MS-Windows hosts. The issue is that Microsoft requires USB_CLASS_COMM. Fix by tweaking the CDC subset driver to not switch to USB_CLASS_VENDOR_SPEC if RNDIS is used in some other device configuration. [ UPDATED: some "statements" were comma-terminated; fix that. ] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Aric Blumer <aric@sdgsystems.net> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
b34efeeab8
commit
4e19f220d4
@ -293,15 +293,16 @@ static int __init eth_bind(struct usb_composite_dev *cdev)
|
||||
/* CDC Subset */
|
||||
eth_config_driver.label = "CDC Subset/SAFE";
|
||||
|
||||
device_desc.idVendor = cpu_to_le16(SIMPLE_VENDOR_NUM),
|
||||
device_desc.idProduct = cpu_to_le16(SIMPLE_PRODUCT_NUM),
|
||||
device_desc.bDeviceClass = USB_CLASS_VENDOR_SPEC;
|
||||
device_desc.idVendor = cpu_to_le16(SIMPLE_VENDOR_NUM);
|
||||
device_desc.idProduct = cpu_to_le16(SIMPLE_PRODUCT_NUM);
|
||||
if (!has_rndis())
|
||||
device_desc.bDeviceClass = USB_CLASS_VENDOR_SPEC;
|
||||
}
|
||||
|
||||
if (has_rndis()) {
|
||||
/* RNDIS plus ECM-or-Subset */
|
||||
device_desc.idVendor = cpu_to_le16(RNDIS_VENDOR_NUM),
|
||||
device_desc.idProduct = cpu_to_le16(RNDIS_PRODUCT_NUM),
|
||||
device_desc.idVendor = cpu_to_le16(RNDIS_VENDOR_NUM);
|
||||
device_desc.idProduct = cpu_to_le16(RNDIS_PRODUCT_NUM);
|
||||
device_desc.bNumConfigurations = 2;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user