<div dir="ltr"><div><div>Hi Aleksander,<br><br><span style="color:rgb(116,27,71)"><span><br></span>> I saw your merge request and replied about that there, the problem you<br>
> had with ModemManager not detecting the cdc-wdm port as a QMI port was<br>
> indeed the kernel driver name, "qmi_wwan_q" vs "qmi_wwan":<br>
> <a href="https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/406" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/406</a></span></div><br>Thanks for confirmation, no worries about the merge request, I wasn't convinced this is the way to fix it neither.<br><br></div>Hi Carl,<span style="color:rgb(116,27,71)"><br><br> > For you are using EC21, the upstream qmi_wwan driver is enough.<br>
>         If the EC21's VID and PID is not in the qmi_wwan.c products table, you just need add it, as next:<br>
>         {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */<br>
> <br>
>         If you are using LTE-A or 5G modules, it is recomment to use MBIM (set by at+qcfg="usbnet", 2 )<br></span><div><span style="color:rgb(116,27,71)">
>         (for these modems, it is recomment or mandatory to use "QMAP" fucntion, but not well support by the upsream qmi_wwan)</span></div><div><span style="color:rgb(116,27,71)"><br></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">Thanks for comment, I am using kernel 5.4.8 - I've just checked that upstream qmi_wwan driver handles EG21 without any issues, so just like you've said there is no point to add the qmi_wwan_q driver. Please update the "LTE&5G Linux USB<br>Driver User Guide" doc so that in future no one else falls into these issues.<br><br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">For those who wants to use qmi_wwan_q driver with a Modem Manager, here is the hint how the workaround patch should look like - I am basically replacing strcmp checks with has_prefix checks against the 'qmi_wwan' driver name to accept the 'qmi_wwan_q' driver as well: <br><br>diff --git a/src/kerneldevice/mm-kernel-device-udev.c b/src/kerneldevice/mm-kernel-device-udev.c<br>index 4b06969e..10abefc4 100644<br>--- a/src/kerneldevice/mm-kernel-device-udev.c<br>+++ b/src/kerneldevice/mm-kernel-device-udev.c<br>@@ -87,7 +87,7 @@ get_device_ids (GUdevDevice *device,<br>                 success = TRUE;<br>                 goto out;<br>             } else if (g_str_has_prefix (parent_subsys, "usb") &&<br>-                       (!g_strcmp0 (g_udev_device_get_driver (parent), "qmi_wwan") ||<br>+                       (g_str_has_prefix (g_udev_device_get_driver (parent), "qmi_wwan") ||<br>                         !g_strcmp0 (g_udev_device_get_driver (parent), "cdc_mbim"))) {<br>                 /* Need to look for vendor/product in the parent of the QMI/MBIM device */<br>                 GUdevDevice *qmi_parent;<br>diff --git a/src/mm-plugin.c b/src/mm-plugin.c<br>index 7150b037..06128c93 100644<br>--- a/src/mm-plugin.c<br>+++ b/src/mm-plugin.c<br>@@ -316,7 +316,7 @@ apply_pre_probing_filters (MMPlugin       *self,<br> <br>             for (j = 0; drivers[j]; j++) {<br>                 /* If we match the QMI driver: unsupported */<br>-                if (g_str_equal (drivers[j], "qmi_wwan")) {<br>+                if (g_str_has_prefix (drivers[j], "qmi_wwan")) {<br>                     mm_dbg ("(%s) [%s] filtered by implicit QMI driver",<br>                             self->priv->name,<br>                             mm_kernel_device_get_name (port));<br>@@ -801,7 +801,7 @@ mm_plugin_supports_port (MMPlugin            *self,<br>             probe_run_flags |= MM_PORT_PROBE_QCDM;<br>     } else {<br>         /* cdc-wdm ports... */<br>-        if (self->priv->qmi && !g_strcmp0 (mm_kernel_device_get_driver (port), "qmi_wwan"))<br>+        if (self->priv->qmi && g_str_has_prefix (mm_kernel_device_get_driver (port), "qmi_wwan"))<br>             probe_run_flags |= MM_PORT_PROBE_QMI;<br>         else if (self->priv->mbim && !g_strcmp0 (mm_kernel_device_get_driver (port), "cdc_mbim"))<br>             probe_run_flags |= MM_PORT_PROBE_MBIM;<br>@@ -980,7 +980,7 @@ mm_plugin_create_modem (MMPlugin  *self,<br> #if defined WITH_QMI<br>             if (MM_IS_BROADBAND_MODEM_QMI (modem) &&<br>                 port_type == MM_PORT_TYPE_NET &&<br>-                g_strcmp0 (driver, "qmi_wwan") != 0) {<br>+                !g_str_has_prefix (driver, "qmi_wwan")) {<br>                 /* Non-QMI net ports are ignored in QMI modems */<br>                 mm_dbg ("(%s/%s): ignoring non-QMI net port in QMI modem", subsys, name);<br>                 force_ignored = TRUE;<br>@@ -989,7 +989,7 @@ mm_plugin_create_modem (MMPlugin  *self,<br> <br>             if (!MM_IS_BROADBAND_MODEM_QMI (modem) &&<br>                 port_type == MM_PORT_TYPE_NET &&<br>-                g_strcmp0 (driver, "qmi_wwan") == 0) {<br>+                g_str_has_prefix (driver, "qmi_wwan")) {<br>                 /* QMI net ports are ignored in non-QMI modems */<br>                 mm_dbg ("(%s/%s): ignoring QMI net port in non-QMI modem", subsys, name);<br>                 force_ignored = TRUE;<br>@@ -997,7 +997,7 @@ mm_plugin_create_modem (MMPlugin  *self,<br>             }<br> #else<br>             if (port_type == MM_PORT_TYPE_NET &&<br>-                g_strcmp0 (driver, "qmi_wwan") == 0) {<br>+                g_str_has_prefix (driver, "qmi_wwan")) {<br>                 /* QMI net ports are ignored if QMI support not built */<br>                 mm_dbg ("(%s/%s): ignoring QMI net port as QMI support isn't available", subsys, name);<br>                 force_ignored = TRUE;<br><br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">This was checked for Modem Manager v1.12.10.<br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000"><br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">Thanks a lot for help guys!<br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000"><br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">Best Regards,<br></font></span></div><div><span style="color:rgb(116,27,71)"><font color="#000000">Rafał<br></font></span></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 26, 2020 at 10:09 AM Aleksander Morgado <<a href="mailto:aleksander@aleksander.es" target="_blank">aleksander@aleksander.es</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey Carl,<br>
<br>
>         Quectel has lot of customers, and most of them are use system like openwrt, android, others embedded -linux.<br>
>         and the kernel version used is usually is V3.x,V4.x.<br>
>         it will spend very much time (for quectel-self and customers):<br>
>                          if we appiled patch to the upstream qmi_wwan driver, and back-port the driver to the customer's kernel.<br>
>         So we directly povide qmi_wwan_q.c, suitable for ALL kernel versions (V3.2 and later), the customers just need 'copy + paste' it.<br>
><br>
<br>
That's a fair enough reason I guess. May I suggest, though, that<br>
instead of always telling your customers to use the "qmi_wwan_q"<br>
driver, you could tell them something like "the EC21 (0x2c7c, 0x0121)<br>
is supported in the Linux kernel since v4.9"? Your driver should be a<br>
fallback case when the user is using an old kernel that doesn't<br>
support the module by default, your driver should not be the default<br>
IMO. Keeping a list with your module versions and the kernel versions<br>
where support was introduced would be a great source of information<br>
for your customers ;)<br>
<br>
-- <br>
Aleksander<br>
<a href="https://aleksander.es" rel="noreferrer" target="_blank">https://aleksander.es</a><br>
</blockquote></div>