diff options
Diffstat (limited to 'drivers/net/usb/cdc_ether.c')
| -rw-r--r-- | drivers/net/usb/cdc_ether.c | 48 | 
1 files changed, 47 insertions, 1 deletions
| diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 8ab281b478f2..3e7a3ac3a362 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -54,11 +54,19 @@ static int is_wireless_rndis(struct usb_interface_descriptor *desc)  		desc->bInterfaceProtocol == 3);  } +static int is_novatel_rndis(struct usb_interface_descriptor *desc) +{ +	return (desc->bInterfaceClass == USB_CLASS_MISC && +		desc->bInterfaceSubClass == 4 && +		desc->bInterfaceProtocol == 1); +} +  #else  #define is_rndis(desc)		0  #define is_activesync(desc)	0  #define is_wireless_rndis(desc)	0 +#define is_novatel_rndis(desc)	0  #endif @@ -150,7 +158,8 @@ int usbnet_generic_cdc_bind(struct usbnet *dev, struct usb_interface *intf)  	 */  	rndis = (is_rndis(&intf->cur_altsetting->desc) ||  		 is_activesync(&intf->cur_altsetting->desc) || -		 is_wireless_rndis(&intf->cur_altsetting->desc)); +		 is_wireless_rndis(&intf->cur_altsetting->desc) || +		 is_novatel_rndis(&intf->cur_altsetting->desc));  	memset(info, 0, sizeof(*info));  	info->control = intf; @@ -547,9 +556,12 @@ static const struct driver_info wwan_info = {  #define REALTEK_VENDOR_ID	0x0bda  #define SAMSUNG_VENDOR_ID	0x04e8  #define LENOVO_VENDOR_ID	0x17ef +#define LINKSYS_VENDOR_ID	0x13b1  #define NVIDIA_VENDOR_ID	0x0955  #define HP_VENDOR_ID		0x03f0  #define MICROSOFT_VENDOR_ID	0x045e +#define UBLOX_VENDOR_ID		0x1546 +#define TPLINK_VENDOR_ID	0x2357  static const struct usb_device_id	products[] = {  /* BLACKLIST !! @@ -737,6 +749,15 @@ static const struct usb_device_id	products[] = {  	.driver_info = 0,  }, +#if IS_ENABLED(CONFIG_USB_RTL8152) +/* Linksys USB3GIGV1 Ethernet Adapter */ +{ +	USB_DEVICE_AND_INTERFACE_INFO(LINKSYS_VENDOR_ID, 0x0041, USB_CLASS_COMM, +			USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), +	.driver_info = 0, +}, +#endif +  /* ThinkPad USB-C Dock (based on Realtek RTL8153) */  {  	USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM, @@ -793,6 +814,13 @@ static const struct usb_device_id	products[] = {  	.driver_info = 0,  }, +	/* TP-LINK UE300 USB 3.0 Ethernet Adapters (based on Realtek RTL8153) */ +{ +	USB_DEVICE_AND_INTERFACE_INFO(TPLINK_VENDOR_ID, 0x0601, USB_CLASS_COMM, +			USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), +	.driver_info = 0, +}, +  /* WHITELIST!!!   *   * CDC Ether uses two interfaces, not necessarily consecutive. @@ -844,12 +872,30 @@ static const struct usb_device_id	products[] = {  			USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),  	.driver_info = (kernel_ulong_t)&wwan_info,  }, { +	/* Huawei ME906 and ME909 */ +	USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x15c1, USB_CLASS_COMM, +				      USB_CDC_SUBCLASS_ETHERNET, +				      USB_CDC_PROTO_NONE), +	.driver_info = (unsigned long)&wwan_info, +}, {  	/* ZTE modules */  	USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, USB_CLASS_COMM,  				      USB_CDC_SUBCLASS_ETHERNET,  				      USB_CDC_PROTO_NONE),  	.driver_info = (unsigned long)&zte_cdc_info,  }, { +	/* U-blox TOBY-L2 */ +	USB_DEVICE_AND_INTERFACE_INFO(UBLOX_VENDOR_ID, 0x1143, USB_CLASS_COMM, +				      USB_CDC_SUBCLASS_ETHERNET, +				      USB_CDC_PROTO_NONE), +	.driver_info = (unsigned long)&wwan_info, +}, { +	/* U-blox SARA-U2 */ +	USB_DEVICE_AND_INTERFACE_INFO(UBLOX_VENDOR_ID, 0x1104, USB_CLASS_COMM, +				      USB_CDC_SUBCLASS_ETHERNET, +				      USB_CDC_PROTO_NONE), +	.driver_info = (unsigned long)&wwan_info, +}, {  	USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET,  			USB_CDC_PROTO_NONE),  	.driver_info = (unsigned long) &cdc_info, |