ronnie
2022-10-23 1898d93087d7404317dfdeaffa5d18fadbca52ef
add ec20 drivers
2 files modified
33 ■■■■■ changed files
longan/kernel/linux-4.9/drivers/usb/serial/option.c 21 ●●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c 12 ●●●●● patch | view | raw | blame | history
longan/kernel/linux-4.9/drivers/usb/serial/option.c
....@@ -555,6 +555,10 @@
555555 #define WETELECOM_PRODUCT_6802 0x6802
556556 #define WETELECOM_PRODUCT_WMD300 0x6803
557557
558
+#define FIBOCOM_VENDOR_ID 0x1782
559
+#define FIBOCOM_PRODUCT_L61031 0x4D10
560
+#define FIBOCOM_PRODUCT_L61032 0x4D11
561
+#define FIBOCOM_PRODUCT_L61033 0x4D11
558562
559563 /* Device flags */
560564
....@@ -1965,6 +1969,22 @@
19651969 .driver_info = RSVD(4) | RSVD(5) },
19661970 { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
19671971 .driver_info = RSVD(6) },
1972
+#if 1
1973
+ { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
1974
+ { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
1975
+ { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
1976
+ { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
1977
+ { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
1978
+ { USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
1979
+ { USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
1980
+ { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
1981
+ { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
1982
+#endif
1983
+ /* fibocom L610 */
1984
+ { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61031) },
1985
+ { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61032) },
1986
+ { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61033) },
1987
+
19681988 { } /* Terminating entry */
19691989 };
19701990 MODULE_DEVICE_TABLE(usb, option_ids);
....@@ -1999,6 +2019,7 @@
19992019 #ifdef CONFIG_PM
20002020 .suspend = usb_wwan_suspend,
20012021 .resume = usb_wwan_resume,
2022
+ .reset_resume = usb_wwan_resume,
20022023 #endif
20032024 };
20042025
longan/kernel/linux-4.9/drivers/usb/serial/usb_wwan.c
....@@ -504,7 +504,17 @@
504504 usb_fill_bulk_urb(urb, serial->dev,
505505 usb_sndbulkpipe(serial->dev, endpoint) | dir,
506506 buf, len, callback, ctx);
507
-
507
+ if (dir == USB_DIR_OUT) {
508
+ struct usb_device_descriptor *desc = &serial->dev->descriptor;
509
+ if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
510
+ urb->transfer_flags |= URB_ZERO_PACKET;
511
+ if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
512
+ urb->transfer_flags |= URB_ZERO_PACKET;
513
+ if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
514
+ urb->transfer_flags |= URB_ZERO_PACKET;
515
+ if (desc->idVendor == cpu_to_le16(0x2C7C))
516
+ urb->transfer_flags |= URB_ZERO_PACKET;
517
+ }
508518 return urb;
509519 }
510520