diff options
author | Thomas Backlund <tmb@mandriva.org> | 2008-07-22 16:55:58 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-07-22 19:45:49 -0400 |
commit | 7e99eeddb35cdaafb820676a57517b5e58685e4c (patch) | |
tree | cfda2415c58e99ab948ea371b4e42bc4f557cb93 /drivers/net | |
parent | 7a2f53ee0b56ff7e1c0c24404575cb62935d37d9 (diff) |
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')
-rw-r--r-- | drivers/net/usb/cdc_ether.c | 11 | ||||
-rw-r--r-- | drivers/net/usb/rndis_host.c | 4 |
2 files changed, 14 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) | |||
50 | && desc->bInterfaceProtocol == 1; | 50 | && desc->bInterfaceProtocol == 1; |
51 | } | 51 | } |
52 | 52 | ||
53 | static int is_wireless_rndis(struct usb_interface_descriptor *desc) | ||
54 | { | ||
55 | return desc->bInterfaceClass == USB_CLASS_WIRELESS_CONTROLLER | ||
56 | && desc->bInterfaceSubClass == 1 | ||
57 | && desc->bInterfaceProtocol == 3; | ||
58 | } | ||
59 | |||
53 | #else | 60 | #else |
54 | 61 | ||
55 | #define is_rndis(desc) 0 | 62 | #define is_rndis(desc) 0 |
56 | #define is_activesync(desc) 0 | 63 | #define is_activesync(desc) 0 |
64 | #define is_wireless_rndis(desc) 0 | ||
57 | 65 | ||
58 | #endif | 66 | #endif |
59 | 67 | ||
@@ -110,7 +118,8 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf) | |||
110 | * of cdc-acm, it'll fail RNDIS requests cleanly. | 118 | * of cdc-acm, it'll fail RNDIS requests cleanly. |
111 | */ | 119 | */ |
112 | rndis = is_rndis(&intf->cur_altsetting->desc) | 120 | rndis = is_rndis(&intf->cur_altsetting->desc) |
113 | || is_activesync(&intf->cur_altsetting->desc); | 121 | || is_activesync(&intf->cur_altsetting->desc) |
122 | || is_wireless_rndis(&intf->cur_altsetting->desc); | ||
114 | 123 | ||
115 | memset(info, 0, sizeof *info); | 124 | memset(info, 0, sizeof *info); |
116 | info->control = intf; | 125 | info->control = intf; |
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c index 61c98beb4d17..bcd858c567e0 100644 --- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c | |||
@@ -576,6 +576,10 @@ static const struct usb_device_id products [] = { | |||
576 | /* "ActiveSync" is an undocumented variant of RNDIS, used in WM5 */ | 576 | /* "ActiveSync" is an undocumented variant of RNDIS, used in WM5 */ |
577 | USB_INTERFACE_INFO(USB_CLASS_MISC, 1, 1), | 577 | USB_INTERFACE_INFO(USB_CLASS_MISC, 1, 1), |
578 | .driver_info = (unsigned long) &rndis_info, | 578 | .driver_info = (unsigned long) &rndis_info, |
579 | }, { | ||
580 | /* RNDIS for tethering */ | ||
581 | USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3), | ||
582 | .driver_info = (unsigned long) &rndis_info, | ||
579 | }, | 583 | }, |
580 | { }, // END | 584 | { }, // END |
581 | }; | 585 | }; |