driver 添加5G网卡RG200U
This commit is contained in:
@ -317,6 +317,7 @@ CONFIG_USB_NET_CDC_MBIM=y
|
||||
# CONFIG_USB_NET_NET1080 is not set
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
# CONFIG_USB_NET_ZAURUS is not set
|
||||
CONFIG_USB_NET_QMI_WWAN=y
|
||||
CONFIG_B43=y
|
||||
# CONFIG_B43_PHY_LP is not set
|
||||
CONFIG_B43_DEBUG=y
|
||||
|
||||
@ -587,7 +587,40 @@ static void option_instat_callback(struct urb *urb);
|
||||
|
||||
|
||||
static const struct usb_device_id option_ids[] = {
|
||||
|
||||
#if 1 //Added by Quectel
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2c7c, 0x0800, 0xff, 0x00, 0x00) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x2c7c, 0x0900, 0xff, 0x00, 0x00) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x1782, 0x4d00, 0xff, 0x00, 0x00) },
|
||||
#endif
|
||||
{ USB_DEVICE(0x1286, 0x4e3c) },
|
||||
#if 1 //Added by Quectel
|
||||
{ USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
|
||||
{ USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
|
||||
{ USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20(MDM9215) */
|
||||
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20(MDM9x07)/EC25/EG25 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
|
||||
{ USB_DEVICE(0x2C7C, 0x030B) }, /* Quectel EG065K/EG060K */
|
||||
{ USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EP12/EM12/EG16/EG18 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500/RM500/RG510/RM510 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0801) }, /* Quectel RG520/RM520/SG520 */
|
||||
{ USB_DEVICE(0x2C7C, 0x6026) }, /* Quectel EC200 */
|
||||
{ USB_DEVICE(0x2C7C, 0x6120) }, /* Quectel UC200 */
|
||||
{ USB_DEVICE(0x2C7C, 0x6000) }, /* Quectel EC200/UC200 */
|
||||
{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
|
||||
{ USB_DEVICE(0x2C7C, 0x0900) }, /* Quectel RG500U RG200U */
|
||||
{ .match_flags = USB_DEVICE_ID_MATCH_VENDOR, .idVendor = 0x2C7C }, /* Match All Quectel Modules */
|
||||
#endif
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
|
||||
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
|
||||
@ -2160,6 +2193,9 @@ static struct usb_serial_driver option_1port_device = {
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = usb_wwan_suspend,
|
||||
.resume = usb_wwan_resume,
|
||||
#if 1 //Added by Quectel
|
||||
.reset_resume = usb_wwan_resume,
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -2184,6 +2220,35 @@ static int option_probe(struct usb_serial *serial,
|
||||
&serial->interface->cur_altsetting->desc;
|
||||
unsigned long device_flags = id->driver_info;
|
||||
|
||||
#if 1 //Added by Quectel
|
||||
//Quectel UC20's interface 4 can be used as USB Network device
|
||||
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003)
|
||||
&& serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
|
||||
return -ENODEV;
|
||||
|
||||
//Quectel EC20(MDM9215)'s interface 4 can be used as USB Network device
|
||||
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215)
|
||||
&& serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
|
||||
return -ENODEV;
|
||||
|
||||
if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
|
||||
__u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);
|
||||
struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;
|
||||
|
||||
if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {
|
||||
//ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if ((idProduct&0xF000) == 0x0000) {
|
||||
//MDM interface 4 is QMI
|
||||
if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3
|
||||
&& intf->bInterfaceSubClass == 0xFF && intf->bInterfaceProtocol == 0xFF)
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Never bind to the CD-Rom emulation interface */
|
||||
if (iface_desc->bInterfaceClass == USB_CLASS_MASS_STORAGE)
|
||||
return -ENODEV;
|
||||
|
||||
@ -513,6 +513,10 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
|
||||
if ((desc->idVendor == cpu_to_le16(0x1286) &&
|
||||
desc->idProduct == cpu_to_le16(0x4e3c)))
|
||||
urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
if (desc->idVendor == cpu_to_le16(0x2C7C))
|
||||
urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
if (desc->idVendor == cpu_to_le16(0x1782))
|
||||
urb->transfer_flags |= URB_ZERO_PACKET;
|
||||
}
|
||||
return urb;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user