summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/ofono.rules9
-rw-r--r--plugins/udev.c48
-rw-r--r--plugins/udevng.c57
3 files changed, 57 insertions, 57 deletions
diff --git a/plugins/ofono.rules b/plugins/ofono.rules
index 555125a4..3fc3cd4b 100644
--- a/plugins/ofono.rules
+++ b/plugins/ofono.rules
@@ -83,15 +83,6 @@ ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9e00", ENV{OFONO_DRIVER}="speedupcdm
# Speed Up
ATTRS{idVendor}=="2020", ENV{OFONO_DRIVER}="speedup"
-# Option Globetrotter
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="6911", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="6971", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="7401", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="7601", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="7701", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="7901", ENV{OFONO_DRIVER}="hso"
-ATTRS{idVendor}=="0af0", ATTRS{idProduct}=="9000", ENV{OFONO_DRIVER}="hso"
-
# Ericsson F3507g
ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1900", ENV{OFONO_DRIVER}="mbm"
ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1902", ENV{OFONO_DRIVER}="mbm"
diff --git a/plugins/udev.c b/plugins/udev.c
index a97d0b69..c4e7f6bf 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -169,52 +169,6 @@ static void add_mbm(struct ofono_modem *modem,
}
}
-#define APPLICATION_PORT "ApplicationPort"
-#define CONTROL_PORT "ControlPort"
-
-static void add_hso(struct ofono_modem *modem,
- struct udev_device *udev_device)
-{
- const char *subsystem, *type, *devnode;
- const char *app, *control, *network;
- int registered;
-
- DBG("modem %p", modem);
-
- subsystem = udev_device_get_subsystem(udev_device);
- if (subsystem == NULL)
- return;
-
- registered = ofono_modem_get_integer(modem, "Registered");
- if (registered != 0)
- return;
-
- type = udev_device_get_sysattr_value(udev_device, "hsotype");
-
- if (type != NULL) {
- devnode = udev_device_get_devnode(udev_device);
-
- if (g_str_has_suffix(type, "Application") == TRUE)
- ofono_modem_set_string(modem, APPLICATION_PORT, devnode);
- else if (g_str_has_suffix(type, "Control") == TRUE)
- ofono_modem_set_string(modem, CONTROL_PORT, devnode);
- } else if (g_str_equal(subsystem, "net") == TRUE) {
- devnode = get_property(udev_device, "INTERFACE");
- ofono_modem_set_string(modem, NETWORK_INTERFACE, devnode);
- } else {
- return;
- }
-
- app = ofono_modem_get_string(modem, APPLICATION_PORT);
- control = ofono_modem_get_string(modem, CONTROL_PORT);
- network = ofono_modem_get_string(modem, NETWORK_INTERFACE);
-
- if (app != NULL && control != NULL && network != NULL) {
- ofono_modem_set_integer(modem, "Registered", 1);
- ofono_modem_register(modem);
- }
-}
-
static void add_ifx(struct ofono_modem *modem,
struct udev_device *udev_device)
{
@@ -570,8 +524,6 @@ done:
if (g_strcmp0(driver, "mbm") == 0)
add_mbm(modem, udev_device);
- else if (g_strcmp0(driver, "hso") == 0)
- add_hso(modem, udev_device);
else if (g_strcmp0(driver, "ifx") == 0)
add_ifx(modem, udev_device);
else if (g_strcmp0(driver, "nokia") == 0)
diff --git a/plugins/udevng.c b/plugins/udevng.c
index e3be629f..2e083d1e 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -43,6 +43,7 @@ struct modem_info {
char *driver;
GSList *devices;
struct ofono_modem *modem;
+ const char *sysattr;
};
struct device_info {
@@ -51,8 +52,41 @@ struct device_info {
char *interface;
char *number;
char *label;
+ char *sysattr;
};
+static gboolean setup_hso(struct modem_info *modem)
+{
+ const char *control = NULL, *application = NULL, *network = NULL;
+ GSList *list;
+
+ DBG("%s", modem->syspath);
+
+ for (list = modem->devices; list; list = list->next) {
+ struct device_info *info = list->data;
+
+ DBG("%s %s %s %s %s", info->devnode, info->interface,
+ info->number, info->label, info->sysattr);
+
+ if (g_strcmp0(info->sysattr, "Control") == 0)
+ control = info->devnode;
+ else if (g_strcmp0(info->sysattr, "Application") == 0)
+ application = info->devnode;
+ else if (g_strcmp0(info->sysattr, "") == 0 &&
+ g_str_has_prefix(info->devnode, "hso") == TRUE)
+ network = info->devnode;
+ }
+
+ if (control == NULL && application == NULL)
+ return FALSE;
+
+ ofono_modem_set_string(modem->modem, "ControlPort", control);
+ ofono_modem_set_string(modem->modem, "ApplicationPort", application);
+ ofono_modem_set_string(modem->modem, "NetworkInterface", network);
+
+ return TRUE;
+}
+
static gboolean setup_gobi(struct modem_info *modem)
{
const char *device = NULL;
@@ -246,7 +280,9 @@ static gboolean setup_zte(struct modem_info *modem)
static struct {
const char *name;
gboolean (*setup)(struct modem_info *modem);
+ const char *sysattr;
} driver_list[] = {
+ { "hso", setup_hso, "hsotype" },
{ "gobi", setup_gobi },
{ "sierra", setup_sierra },
{ "huawei", setup_huawei },
@@ -258,6 +294,18 @@ static struct {
static GHashTable *modem_list;
+static const char *get_sysattr(const char *driver)
+{
+ unsigned int i;
+
+ for (i = 0; driver_list[i].name; i++) {
+ if (g_str_equal(driver_list[i].name, driver) == TRUE)
+ return driver_list[i].sysattr;
+ }
+
+ return NULL;
+}
+
static void destroy_modem(gpointer data)
{
struct modem_info *modem = data;
@@ -277,6 +325,7 @@ static void destroy_modem(gpointer data)
g_free(info->interface);
g_free(info->number);
g_free(info->label);
+ g_free(info->sysattr);
g_free(info);
list->data = NULL;
@@ -371,6 +420,8 @@ static void add_device(const char *syspath, const char *devname,
modem->devname = g_strdup(devname);
modem->driver = g_strdup(driver);
+ modem->sysattr = get_sysattr(driver);
+
g_hash_table_replace(modem_list, modem->syspath, modem);
}
@@ -384,6 +435,11 @@ static void add_device(const char *syspath, const char *devname,
info->number = g_strdup(number);
info->label = g_strdup(label);
+ if (modem->sysattr != NULL) {
+ info->sysattr = g_strdup(udev_device_get_sysattr_value(device,
+ modem->sysattr));
+ }
+
modem->devices = g_slist_insert_sorted(modem->devices, info,
compare_device);
}
@@ -394,6 +450,7 @@ static struct {
const char *vid;
const char *pid;
} vendor_list[] = {
+ { "hso", "hso" },
{ "gobi", "qcserial" },
{ "sierra", "sierra" },
{ "huawei", "cdc_ether", "12d1" },