Udevng layer is changed in order to support Sierra QMI modems like
MC73cxx.
Identically to Huawei modems, these modems are parsed by setup_sierra.
If QMI interface is detected, the Gobi modem driver is selected.

Unfortunately, MC73xx chips seem to have a broken QMI UIM interface.
The qmimodem-legacy is so forced in setup function.
---
 plugins/udevng.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/plugins/udevng.c b/plugins/udevng.c
index e5dc725..8a5f6fd 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -220,7 +220,7 @@ static gboolean setup_gobi(struct modem_info *modem)
 
 static gboolean setup_sierra(struct modem_info *modem)
 {
-       const char *mdm = NULL, *app = NULL, *net = NULL, *diag = NULL;
+       const char *mdm = NULL, *app = NULL, *net = NULL, *diag = NULL, *qmi = 
NULL;
        GSList *list;
 
        DBG("%s", modem->syspath);
@@ -228,8 +228,8 @@ static gboolean setup_sierra(struct modem_info *modem)
        for (list = modem->devices; list; list = list->next) {
                struct device_info *info = list->data;
 
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
+               DBG("%s %s %s %s %s", info->devnode, info->interface,
+                                               info->number, info->label, 
info->subsystem);
 
                if (g_strcmp0(info->interface, "255/255/255") == 0) {
                        if (g_strcmp0(info->number, "01") == 0)
@@ -240,14 +240,29 @@ static gboolean setup_sierra(struct modem_info *modem)
                                app = info->devnode;
                        else if (g_strcmp0(info->number, "07") == 0)
                                net = info->devnode;
+                       else if (g_strcmp0(info->number, "0a") == 0) {
+                               if (g_strcmp0(info->subsystem, "net") == 0)
+                                       net = info->devnode;
+                               else if (g_strcmp0(info->subsystem, "usbmisc") 
== 0)
+                                       qmi = info->devnode;
+                       }
                }
        }
 
+       if (qmi != NULL && net != NULL) {
+               ofono_modem_set_driver(modem->modem, "gobi");
+               /* Fixup SIM interface for Sierra QMI devices */
+               ofono_modem_set_boolean(modem->modem, "ForceSimLegacy", TRUE);
+               goto done;
+       }
+
        if (mdm == NULL || net == NULL)
                return FALSE;
 
-       DBG("modem=%s app=%s net=%s diag=%s", mdm, app, net, diag);
+done:
+       DBG("modem=%s app=%s net=%s diag=%s qmi=%s", mdm, app, net, diag, qmi);
 
+       ofono_modem_set_string(modem->modem, "Device", qmi);
        ofono_modem_set_string(modem->modem, "Modem", mdm);
        ofono_modem_set_string(modem->modem, "App", app);
        ofono_modem_set_string(modem->modem, "Diag", diag);
@@ -1129,6 +1144,8 @@ static struct {
        { "hso",        "hso"                           },
        { "gobi",       "qmi_wwan"                      },
        { "gobi",       "qcserial"                      },
+       { "sierra",     "qmi_wwan",     "1199"          },
+       { "sierra",     "qcserial",     "1199"          },
        { "sierra",     "sierra"                        },
        { "sierra",     "sierra_net"                    },
        { "option",     "option",       "0af0"          },
-- 
1.9.1

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to