From: Forest Bond <[email protected]>
Sierra Wireless CDMA devices have a single interface with multiple
ports.
---
plugins/udevng.c | 43 +++++++++++++++++++++++++++++++++----------
1 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/plugins/udevng.c b/plugins/udevng.c
index afb02ca..feef4cc 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -218,10 +218,28 @@ 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;
+ gboolean multi_iface = FALSE;
+ char *last_iface = NULL;
GSList *list;
DBG("%s", modem->syspath);
+ /*
+ * DirectIP devices use multiple interfaces, but non-DirectIP
+ * (e.g. CDMA) devices have a single interface with multiple
+ * ports distinguished by the "port_number" sysfs attribute.
+ */
+
+ for (list = modem->devices; list; list = list->next) {
+ struct device_info *info = list->data;
+
+ if (last_iface != NULL && g_strcmp0(info->number, last_iface)
!= 0) {
+ multi_iface = TRUE;
+ break;
+ }
+ last_iface = info->number;
+ }
+
for (list = modem->devices; list; list = list->next) {
struct device_info *info = list->data;
@@ -229,18 +247,23 @@ static gboolean setup_sierra(struct modem_info *modem)
info->number, info->label);
if (g_strcmp0(info->interface, "255/255/255") == 0) {
- if (g_strcmp0(info->number, "01") == 0)
- diag = info->devnode;
- if (g_strcmp0(info->number, "03") == 0)
- mdm = info->devnode;
- else if (g_strcmp0(info->number, "04") == 0)
- app = info->devnode;
- else if (g_strcmp0(info->number, "07") == 0)
- net = info->devnode;
+ if (multi_iface) {
+ if (g_strcmp0(info->number, "01") == 0)
+ diag = info->devnode;
+ else if (g_strcmp0(info->number, "03") == 0)
+ mdm = info->devnode;
+ else if (g_strcmp0(info->number, "04") == 0)
+ app = info->devnode;
+ else if (g_strcmp0(info->number, "07") == 0)
+ net = info->devnode;
+ } else {
+ if (g_strcmp0(info->sysattr, "0") == 0)
+ mdm = info->devnode;
+ }
}
}
- if (mdm == NULL || net == NULL)
+ if (mdm == NULL || (multi_iface && net == NULL))
return FALSE;
DBG("modem=%s app=%s net=%s diag=%s", mdm, app, net, diag);
@@ -768,7 +791,7 @@ static struct {
{ "mbm", setup_mbm, "device/interface" },
{ "hso", setup_hso, "hsotype" },
{ "gobi", setup_gobi },
- { "sierra", setup_sierra },
+ { "sierra", setup_sierra, "device/port_number" },
{ "option", setup_option },
{ "huawei", setup_huawei },
{ "speedupcdma",setup_speedup },
--
1.7.0.4
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono