From 1898d93087d7404317dfdeaffa5d18fadbca52ef Mon Sep 17 00:00:00 2001
From: ronnie <ronnie@industiosoft.com>
Date: Sun, 23 Oct 2022 10:11:45 +0000
Subject: [PATCH] add ec20 drivers

---
 longan/kernel/linux-4.9/drivers/usb/serial/option.c   |   21 +++++++++++++++++++++
 longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c |   12 +++++++++++-
 2 files changed, 32 insertions(+), 1 deletions(-)

diff --git a/longan/kernel/linux-4.9/drivers/usb/serial/option.c b/longan/kernel/linux-4.9/drivers/usb/serial/option.c
index 9f96dd2..665f417 100644
--- a/longan/kernel/linux-4.9/drivers/usb/serial/option.c
+++ b/longan/kernel/linux-4.9/drivers/usb/serial/option.c
@@ -555,6 +555,10 @@
 #define WETELECOM_PRODUCT_6802			0x6802
 #define WETELECOM_PRODUCT_WMD300		0x6803
 
+#define FIBOCOM_VENDOR_ID			0x1782
+#define FIBOCOM_PRODUCT_L61031			0x4D10
+#define FIBOCOM_PRODUCT_L61032			0x4D11
+#define FIBOCOM_PRODUCT_L61033			0x4D11
 
 /* Device flags */
 
@@ -1965,6 +1969,22 @@
 	  .driver_info = RSVD(4) | RSVD(5) },
 	{ USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff),			/* Fibocom NL678 series */
 	  .driver_info = RSVD(6) },
+#if 1
+	 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
+         { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
+         { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
+         { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
+         { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
+         { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
+         { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
+         { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
+         { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
+#endif
+	/* fibocom L610 */
+	{ USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61031) },
+	{ USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61032) },
+	{ USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61033) },
+
 	{ } /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, option_ids);
@@ -1999,6 +2019,7 @@
 #ifdef CONFIG_PM
 	.suspend           = usb_wwan_suspend,
 	.resume            = usb_wwan_resume,
+	.reset_resume      = usb_wwan_resume,
 #endif
 };
 
diff --git a/longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c b/longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
index 3dfdfc8..abb2c70 100644
--- a/longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
+++ b/longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
@@ -504,7 +504,17 @@
 	usb_fill_bulk_urb(urb, serial->dev,
 			  usb_sndbulkpipe(serial->dev, endpoint) | dir,
 			  buf, len, callback, ctx);
-
+	if (dir == USB_DIR_OUT) {
+               struct usb_device_descriptor *desc = &serial->dev->descriptor;
+               if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
+         	      urb->transfer_flags |= URB_ZERO_PACKET;
+               if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
+                      urb->transfer_flags |= URB_ZERO_PACKET;
+               if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
+                      urb->transfer_flags |= URB_ZERO_PACKET;
+               if (desc->idVendor == cpu_to_le16(0x2C7C))
+                      urb->transfer_flags |= URB_ZERO_PACKET;
+        }
 	return urb;
 }
 

--
Gitblit v1.6.2