[PATCH] Revised - Huawei MU609 resets with AT^GETPORTMODE

David McCullough david.mccullough at accelecon.com
Mon Jun 30 00:10:01 PDT 2014

Hi all,

Seems my previous patch was not suitable,  here is a revised version that
uses udev rules to disable the ^GETPORTMODE on some Huawei modems.

The MU609 modems from Huawei have a bug (confirmed by Huawei) that causes
the modem to reset if AT^GETPORTMODE is issued.

I have provided and example udev rule I use to disable this command as a
patch,  feel free to drop that if its not acceptable.  Since I cannot tell
the modem type from within the udev rules this is less specific than my
previous code based patch,  but much simpler ;-)

I have two modems that share the same USB ID,  however,  neither supports the
^GETPORTMODE command (and one of them crashes when it is issued).  Perhaps
someone with a Huawei that supports ^GETPORTMODE can check their USB ID's
and see if they clash.

Here is a comment from the Huawei devs:
> We confirmed this is a issue. This is Qualcomm baseband command at Data
> Card. We didn’t delete and block it. We will fix this issue in next FW.
> Thank you very much.

Sorry for posting a snippet,  I didn't think it was appropriate to repost
the entire email here.


Sign-off-by: David McCullough <david.mccullough at accelecon.com>

diff --git a/plugins/huawei/77-mm-huawei-net-port-types.rules b/plugins/huawei/77-mm-huawei-net-port-types.rules
index 051b5d0..7309be8 100644
--- a/plugins/huawei/77-mm-huawei-net-port-types.rules
+++ b/plugins/huawei/77-mm-huawei-net-port-types.rules
@@ -3,6 +3,9 @@ ACTION!="add|change|move", GOTO="mm_huawei_port_types_end"
 ENV{ID_VENDOR_ID}!="12d1", GOTO="mm_huawei_port_types_end"
+# MU609 does not support getportmode (crashes modem with default firmware)
 # Mark the modem and at port flags for ModemManager
 SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="01", ENV{ID_MM_HUAWEI_MODEM_PORT}="1"
 SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="02", ENV{ID_MM_HUAWEI_AT_PORT}="1"
diff --git a/plugins/huawei/mm-plugin-huawei.c b/plugins/huawei/mm-plugin-huawei.c
index 2078774..3e3408c 100644
--- a/plugins/huawei/mm-plugin-huawei.c
+++ b/plugins/huawei/mm-plugin-huawei.c
@@ -251,6 +251,7 @@ static void
 huawei_custom_init_step (HuaweiCustomInitContext *ctx)
     FirstInterfaceContext *fi_ctx;
+    GUdevDevice *port;
     /* If cancelled, end */
     if (g_cancellable_is_cancelled (ctx->cancellable)) {
@@ -287,7 +288,8 @@ huawei_custom_init_step (HuaweiCustomInitContext *ctx)
     /* Try to get a port map from the modem */
-    if (!ctx->getportmode_done) {
+    port = mm_port_probe_peek_port (ctx->probe);
+    if (!ctx->getportmode_done && !g_udev_device_get_property_as_boolean (port, "ID_MM_HUAWEI_DISABLE_GETPORTMODE")) {
         if (ctx->getportmode_retries == 0) {
             g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);
             huawei_custom_init_context_complete_and_free (ctx);

David McCullough,  david.mccullough at accelecon.com,   Ph: 0410 560 763

More information about the ModemManager-devel mailing list