diff options
Diffstat (limited to 'drivers/net/usb/cdc_ether.c')
| -rw-r--r-- | drivers/net/usb/cdc_ether.c | 21 | 
1 files changed, 20 insertions, 1 deletions
| diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 8ab281b478f2..29c7e2ec0dcb 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,6 +556,7 @@ 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 @@ -737,6 +747,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, | 
