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>
This commit is contained in:
committed by
Jeff Garzik
parent
7a2f53ee0b
commit
7e99eeddb3
@@ -50,10 +50,18 @@ static int is_activesync(struct usb_interface_descriptor *desc)
|
|||||||
&& desc->bInterfaceProtocol == 1;
|
&& 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
|
#else
|
||||||
|
|
||||||
#define is_rndis(desc) 0
|
#define is_rndis(desc) 0
|
||||||
#define is_activesync(desc) 0
|
#define is_activesync(desc) 0
|
||||||
|
#define is_wireless_rndis(desc) 0
|
||||||
|
|
||||||
#endif
|
#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.
|
* of cdc-acm, it'll fail RNDIS requests cleanly.
|
||||||
*/
|
*/
|
||||||
rndis = is_rndis(&intf->cur_altsetting->desc)
|
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);
|
memset(info, 0, sizeof *info);
|
||||||
info->control = intf;
|
info->control = intf;
|
||||||
|
@@ -576,6 +576,10 @@ static const struct usb_device_id products [] = {
|
|||||||
/* "ActiveSync" is an undocumented variant of RNDIS, used in WM5 */
|
/* "ActiveSync" is an undocumented variant of RNDIS, used in WM5 */
|
||||||
USB_INTERFACE_INFO(USB_CLASS_MISC, 1, 1),
|
USB_INTERFACE_INFO(USB_CLASS_MISC, 1, 1),
|
||||||
.driver_info = (unsigned long) &rndis_info,
|
.driver_info = (unsigned long) &rndis_info,
|
||||||
|
}, {
|
||||||
|
/* RNDIS for tethering */
|
||||||
|
USB_INTERFACE_INFO(USB_CLASS_WIRELESS_CONTROLLER, 1, 3),
|
||||||
|
.driver_info = (unsigned long) &rndis_info,
|
||||||
},
|
},
|
||||||
{ }, // END
|
{ }, // END
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user