summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2016-12-17 18:34:20 +0100
committerHarald Welte <laforge@gnumonks.org>2016-12-17 18:34:20 +0100
commit636fe4eab93b6baf56e0e3e38f181de2171e2651 (patch)
treeb04d58fb383330792fa3017b8b8a46833b662326
parenta679b575f2729d2144b2111abb46d6c10f86d023 (diff)
add general EC21/EC25 patch
This was introduced in commit 9a765881bf3dcd32847d7108cf48cb04a4ed993f of mainline linux, but not everyone may be running 4.9-rc1 or later at this point ;)
-rw-r--r--host-drivers/0002-qmi_wwan-add-support-for-Quectel-EC21-and-EC25.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/host-drivers/0002-qmi_wwan-add-support-for-Quectel-EC21-and-EC25.patch b/host-drivers/0002-qmi_wwan-add-support-for-Quectel-EC21-and-EC25.patch
new file mode 100644
index 0000000..cb8fb4e
--- /dev/null
+++ b/host-drivers/0002-qmi_wwan-add-support-for-Quectel-EC21-and-EC25.patch
@@ -0,0 +1,98 @@
+From 95becdf1025b29c46762f08e3b7f5a48914495ae Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Mon, 10 Oct 2016 21:12:49 +0200
+Subject: [PATCH 2/3] qmi_wwan: add support for Quectel EC21 and EC25
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The Quectel EC21 and EC25 need the same "set DTR" request as devices
+based on the MDM9230 chipset, but has no USB3 support. Our best guess
+is that the "set DTR" functionality depends on chipset and/or
+baseband firmware generation. But USB3 is still an optional feature.
+
+Since we cannot enable this unconditionally for all older devices, and
+there doesn't appear to be anything we can use in the USB descriptors
+to identify these chips, we are forced to use a device specific quirk
+flag.
+
+Reported-and-tested-by: Sebastian Sjoholm <sebastian.sjoholm@gmail.com>
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/usb/qmi_wwan.c | 30 ++++++++++++++++++++++++++++--
+ 1 file changed, 28 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 9d1fce8a6e84..3ff76c6db4f6 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -59,6 +59,10 @@ enum qmi_wwan_flags {
+ QMI_WWAN_FLAG_RAWIP = 1 << 0,
+ };
+
++enum qmi_wwan_quirks {
++ QMI_WWAN_QUIRK_DTR = 1 << 0, /* needs "set DTR" request */
++};
++
+ static void qmi_wwan_netdev_setup(struct net_device *net)
+ {
+ struct usbnet *dev = netdev_priv(net);
+@@ -411,9 +415,14 @@ static int qmi_wwan_bind(struct usbnet *dev, struct usb_interface *intf)
+ * clearing out state the clients might need.
+ *
+ * MDM9x30 is the first QMI chipset with USB3 support. Abuse
+- * this fact to enable the quirk.
++ * this fact to enable the quirk for all USB3 devices.
++ *
++ * There are also chipsets with the same "set DTR" requirement
++ * but without USB3 support. Devices based on these chips
++ * need a quirk flag in the device ID table.
+ */
+- if (le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) {
++ if (dev->driver_info->data & QMI_WWAN_QUIRK_DTR ||
++ le16_to_cpu(dev->udev->descriptor.bcdUSB) >= 0x0201) {
+ qmi_wwan_manage_power(dev, 1);
+ qmi_wwan_change_dtr(dev, true);
+ }
+@@ -526,6 +535,16 @@ static const struct driver_info qmi_wwan_info = {
+ .rx_fixup = qmi_wwan_rx_fixup,
+ };
+
++static const struct driver_info qmi_wwan_info_quirk_dtr = {
++ .description = "WWAN/QMI device",
++ .flags = FLAG_WWAN,
++ .bind = qmi_wwan_bind,
++ .unbind = qmi_wwan_unbind,
++ .manage_power = qmi_wwan_manage_power,
++ .rx_fixup = qmi_wwan_rx_fixup,
++ .data = QMI_WWAN_QUIRK_DTR,
++};
++
+ #define HUAWEI_VENDOR_ID 0x12D1
+
+ /* map QMI/wwan function by a fixed interface number */
+@@ -533,6 +552,11 @@ static const struct driver_info qmi_wwan_info = {
+ USB_DEVICE_INTERFACE_NUMBER(vend, prod, num), \
+ .driver_info = (unsigned long)&qmi_wwan_info
+
++/* devices requiring "set DTR" quirk */
++#define QMI_QUIRK_SET_DTR(vend, prod, num) \
++ USB_DEVICE_INTERFACE_NUMBER(vend, prod, num), \
++ .driver_info = (unsigned long)&qmi_wwan_info_quirk_dtr
++
+ /* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */
+ #define QMI_GOBI1K_DEVICE(vend, prod) \
+ QMI_FIXED_INTF(vend, prod, 3)
+@@ -895,6 +919,8 @@ static const struct usb_device_id products[] = {
+ {QMI_FIXED_INTF(0x03f0, 0x4e1d, 8)}, /* HP lt4111 LTE/EV-DO/HSPA+ Gobi 4G Module */
+ {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */
+ {QMI_FIXED_INTF(0x1e0e, 0x9001, 5)}, /* SIMCom 7230E */
++ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
++ {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
+
+ /* 4. Gobi 1000 devices */
+ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
+--
+2.11.0
+