--- zzzz-none-000/linux-4.4.271/drivers/net/usb/cdc_ether.c 2021-06-03 06:22:09.000000000 +0000 +++ hawkeye-5590-750/linux-4.4.271/drivers/net/usb/cdc_ether.c 2023-04-19 10:22:29.000000000 +0000 @@ -54,11 +54,19 @@ 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 @@ */ 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; @@ -225,7 +234,12 @@ dev_dbg(&intf->dev, "ACM capabilities %02x, not really RNDIS?\n", header.usb_cdc_acm_descriptor->bmCapabilities); - goto bad_desc; + +/* == 20171008 AVM/VGJ - CHANGESET: Fix for buggy ZTE rndis modems, ignore buggy descriptor */ +#if 0 + goto bad_desc; +#endif + } if (header.usb_cdc_ether_desc && info->ether->wMaxSegmentSize) {