diff options
author | Thomas Backlund <tmb@mandriva.org> | 2008-07-22 13:55:58 -0700 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-07-22 19:45:49 -0400 |
commit | 7e99eeddb35cdaafb820676a57517b5e58685e4c (patch) | |
tree | cfda2415c58e99ab948ea371b4e42bc4f557cb93 /drivers/net/usb/cdc_ether.c | |
parent | 7a2f53ee0b56ff7e1c0c24404575cb62935d37d9 (diff) | |
download | linux-7e99eeddb35cdaafb820676a57517b5e58685e4c.tar.gz |
rndis_host: support WM6 devices as modems
This patch allows Windows Mobile 6 devices to be used for
tethering -- that is, used as modems. It was requested by
AdamW in kernel bugzilla:
http://bugzilla.kernel.org/show_bug.cgi?id=11119
and Mandriva kernel-discuss list. It is tested and confirmed
to work by Peterl:
http://forum.eeeuser.com/viewtopic.php?pid=323543#p323543
This patch is based on the patch in the above kernel bugzilla,
which is from the usb-rndis-lite tree.
[ dbrownell@users.sourceforge.net: misc fixes ]
Signed-off-by: Thomas Backlund <tmb@mandriva.org>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/usb/cdc_ether.c')
-rw-r--r-- | drivers/net/usb/cdc_ether.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index a934428a5890..0e061dfea78d 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -50,10 +50,18 @@ static int is_activesync(struct usb_interface_descriptor *desc) && desc->bInterfaceProtocol == 1; } +static int is_wireless_rndis(struct usb_interface_descriptor *desc) +{ + return desc->bInterfaceClass == USB_CLASS_WIRELESS_CONTROLLER + && desc->bInterfaceSubClass == 1 + && desc->bInterfaceProtocol == 3; +} + #else #define is_rndis(desc) 0 #define is_activesync(desc) 0 +#define is_wireless_rndis(desc) 0 #endif @@ -110,7 +118,8 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf) * of cdc-acm, it'll fail RNDIS requests cleanly. */ rndis = is_rndis(&intf->cur_altsetting->desc) - || is_activesync(&intf->cur_altsetting->desc); + || is_activesync(&intf->cur_altsetting->desc) + || is_wireless_rndis(&intf->cur_altsetting->desc); memset(info, 0, sizeof *info); info->control = intf; |