--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -44,7 +44,24 @@
  * These devices may alternatively/additionally be configured using AT
  * commands on a serial interface
  */
-
+//Added by Quectel
+/******************************************************************/
+#include <linux/etherdevice.h>
+struct sk_buff *qmi_wwan_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags){
+	if(dev->udev->descriptor.idVendor !=cpu_to_le16(0x2C7C))
+		return skb;
+	// Skip Ethernet header from message
+	if(skb_pull(skb, ETH_HLEN)){
+		return skb;
+	}else{
+		dev_err(&dev->intf->dev,"Packet Dropped");
+	}
+	// Filter the packet out, release it
+	dev_kfree_skb_any(skb);
+	return NULL;
+}
+#include <linux/version.h>
+/*****************************************************************/
 /* driver specific data */
 struct qmi_wwan_state {
 	struct usb_driver *subdriver;
@@ -801,6 +818,20 @@ static int qmi_wwan_bind(struct usbnet *dev, struct usb_interface *intf)
 	}
 	dev->net->netdev_ops = &qmi_wwan_netdev_ops;
 	dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
+//Added by Quectel
+/******************************************************************/
+	if(dev->udev->descriptor.idVendor == cpu_to_le16(0x2C7C)){
+		dev_info(&intf->dev,"Quectel EC21&EC25&EC20 R2.0work on RawIP mode\n");
+		dev->net->flags |= IFF_NOARP;
+
+		usb_control_msg(interface_to_usbdev(intf),usb_sndctrlpipe(interface_to_usbdev(intf),0),
+		0x22,//USB_CDC_REQ_SET_CONTROL_LINE_STATE
+		0x21,//USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE
+		1,//active CDCDTR
+		intf->cur_altsetting->desc.bInterfaceNumber,
+		NULL,0,100);
+	}
+/******************************************************************/
 err:
 	return status;
 }
@@ -892,6 +923,12 @@ static const struct driver_info	qmi_wwan_info = {
 	.unbind		= qmi_wwan_unbind,
 	.manage_power	= qmi_wwan_manage_power,
 	.rx_fixup       = qmi_wwan_rx_fixup,
+//Added by Quectel
+/****************************************************/
+#if (LINUX_VERSION_CODE < KERNEL_VERSION( 4,5,0 ))
+	.tx_fixup =qmi_wwan_tx_fixup,
+#endif
+/****************************************************/
 };
 
 static const struct driver_info	qmi_wwan_info_quirk_dtr = {
@@ -938,6 +975,22 @@ static const struct driver_info	qmi_wwan_info_quirk_dtr = {
 	.driver_info = (unsigned long)&qmi_wwan_info_quirk_dtr
 
 static const struct usb_device_id products[] = {
+//Added by Quectel
+/***********************************************************/
+#ifndef QMI_FIXED_INTF
+	/* map QMI/wwan function by a fixed interface number */
+	#define QMI_FIXED_INTF(vend, prod, num) \
+	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |
+	USB_DEVICE_ID_MATCH_INT_INFO, \
+	.idVendor = vend, \
+	.idProduct = prod, \
+	.bInterfaceClass =0xff, \
+	.bInterfaceSubClass =0xff, \
+	.bInterfaceProtocol =0xff, \
+	.driver_info =(unsignedlong)&qmi_wwan_force_int##num,
+#endif
+	{ QMI_FIXED_INTF(0x2C7C,0x0125,4)},/* Quectel EC25/EC20R2.0 */
+/***********************************************************/
 	/* 1. CDC ECM like devices match on the control interface */
 	{	/* Huawei E392, E398 and possibly others sharing both device id and more... */
 		USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 1, 9),
@@ -1041,6 +1094,10 @@ static const struct usb_device_id products[] = {
 		USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x581d, USB_CLASS_VENDOR_SPEC, 1, 7),
 		.driver_info = (unsigned long)&qmi_wwan_info,
 	},
+	{	/* G405 */
+		USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0x0579, 0xff, 0xff, 0xff),
+		.driver_info = (unsigned long)&qmi_wwan_info,
+	},
 	{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0125)},	/* Quectel EC25, EC20 R2.0  Mini PCIe */
 	{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0306)},	/* Quectel EP06/EG06/EM06 */
 	{QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)},	/* Quectel EG12/EM12 */
@@ -1276,6 +1333,10 @@ static const struct usb_device_id products[] = {
 	{QMI_FIXED_INTF(0x19d2, 0x1428, 2)},	/* Telewell TW-LTE 4G v2 */
 	{QMI_FIXED_INTF(0x19d2, 0x1432, 3)},	/* ZTE ME3620 */
 	{QMI_FIXED_INTF(0x19d2, 0x2002, 4)},	/* ZTE (Vodafone) K3765-Z */
+	{QMI_FIXED_INTF(0x19d2, 0x0533, 1)},
+	{QMI_FIXED_INTF(0x19d2,0x0533, 4)},
+	{QMI_FIXED_INTF(0x19d2, 0x0543, 1)},
+	{QMI_FIXED_INTF(0x19d2, 0x0579, 1)},	/* G405 */
 	{QMI_FIXED_INTF(0x2001, 0x7e16, 3)},	/* D-Link DWM-221 */
 	{QMI_FIXED_INTF(0x2001, 0x7e19, 4)},	/* D-Link DWM-221 B1 */
 	{QMI_FIXED_INTF(0x2001, 0x7e35, 4)},	/* D-Link DWM-222 */
