summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Chaplet <m.chaplet@kerlink.fr>2016-05-03 10:44:55 +0200
committerDenis Kenzior <denkenz@gmail.com>2016-05-03 11:06:04 -0500
commit4005e879239296483c518819bb6c94350b9860ef (patch)
tree6b339e12cfad4ad3aaab4b536e7b1d66c737f5a0
parentd415265a69bce6ec42c65931d6830a6024474d83 (diff)
downloadofono-4005e879239296483c518819bb6c94350b9860ef.tar.gz
udevng: Add support for Sierra MC73xx QMI modems
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.
-rw-r--r--plugins/udevng.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/plugins/udevng.c b/plugins/udevng.c
index e5dc7253..8a5f6fd1 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" },