| From 4e19f220d4e84f5728cb7edde36352ab425cfba4 Mon Sep 17 00:00:00 2001 |
| From: David Brownell <dbrownell@users.sourceforge.net> |
| Date: Fri, 19 Jun 2009 03:09:04 -0700 |
| Subject: USB: RNDIS gadget, fix issues talking from PXA |
| |
| From: David Brownell <dbrownell@users.sourceforge.net> |
| |
| commit 4e19f220d4e84f5728cb7edde36352ab425cfba4 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/gadget/ether.c | 11 ++++++----- |
| 1 file changed, 6 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/usb/gadget/ether.c |
| +++ b/drivers/usb/gadget/ether.c |
| @@ -293,15 +293,16 @@ static int __init eth_bind(struct usb_co |
| /* 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; |
| } |
| |