summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/ofono.rules53
-rw-r--r--plugins/udev.c77
-rw-r--r--plugins/udevng.c59
3 files changed, 59 insertions, 130 deletions
diff --git a/plugins/ofono.rules b/plugins/ofono.rules
index 7288aa7d..c4ed1639 100644
--- a/plugins/ofono.rules
+++ b/plugins/ofono.rules
@@ -34,59 +34,6 @@ ENV{DEVTYPE}!="usb_device", GOTO="ofono_end"
# Ignore fake serial number
ATTRS{serial}=="1234567890ABCDEF", ENV{ID_SERIAL_SHORT}=""
-# Ericsson F3507g
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1900", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1902", ENV{OFONO_DRIVER}="mbm"
-
-# Ericsson F3607gw
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1904", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1905", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1906", ENV{OFONO_DRIVER}="mbm"
-
-# Ericsson c3607w
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190b", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1049", ENV{OFONO_DRIVER}="mbm"
-
-# Ericsson F3307
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190a", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1909", ENV{OFONO_DRIVER}="mbm"
-
-# Ericsson F5521gw
-ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190d", ENV{OFONO_DRIVER}="mbm"
-
-# Sony-Ericsson MD300
-ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="d0cf", ENV{OFONO_DRIVER}="mbm"
-
-# Dell 5530 HSDPA
-ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8147", ENV{OFONO_DRIVER}="mbm"
-
-# Dell F3607gw
-ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8183", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8184", ENV{OFONO_DRIVER}="mbm"
-
-# Dell F3307
-ATTRS{idVendor}=="413c", ATTRS{idProduct}=="818b", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="413c", ATTRS{idProduct}=="818c", ENV{OFONO_DRIVER}="mbm"
-
-# HP hs2330 Mobile Broadband Module
-ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="271d", ENV{OFONO_DRIVER}="mbm"
-
-# HP hs2320 Mobile Broadband Module
-ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="261d", ENV{OFONO_DRIVER}="mbm"
-
-# HP lc2000 Mobile Broadband Module
-ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="301d", ENV{OFONO_DRIVER}="mbm"
-
-# HP lc2010 Mobile Broadband Module
-ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="2f1d", ENV{OFONO_DRIVER}="mbm"
-
-# Toshiba
-ATTRS{idVendor}=="0930", ATTRS{idProduct}=="130b", ENV{OFONO_DRIVER}="mbm"
-
-# Toshiba F3607gw
-ATTRS{idVendor}=="0930", ATTRS{idProduct}=="130c", ENV{OFONO_DRIVER}="mbm"
-ATTRS{idVendor}=="0930", ATTRS{idProduct}=="1311", ENV{OFONO_DRIVER}="mbm"
-
# Nokia CDMA Device
ATTRS{idVendor}=="0421", ATTRS{idProduct}=="023e", ENV{OFONO_DRIVER}="nokiacdma"
ATTRS{idVendor}=="0421", ATTRS{idProduct}=="00b6", ENV{OFONO_DRIVER}="nokiacdma"
diff --git a/plugins/udev.c b/plugins/udev.c
index 916a5b86..84b2a818 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -96,79 +96,6 @@ static const char *get_serial(struct udev_device *udev_device)
return serial;
}
-#define MODEM_DEVICE "ModemDevice"
-#define DATA_DEVICE "DataDevice"
-#define GPS_DEVICE "GPSDevice"
-#define NETWORK_INTERFACE "NetworkInterface"
-
-static void add_mbm(struct ofono_modem *modem,
- struct udev_device *udev_device)
-{
- const char *desc, *devnode;
- const char *device, *data, *network;
- int registered;
-
- desc = udev_device_get_sysattr_value(udev_device, "device/interface");
-
- if (desc == NULL)
- return;
-
- DBG("desc: %s", desc);
-
- registered = ofono_modem_get_integer(modem, "Registered");
-
- if (registered == 0 &&
- (g_str_has_suffix(desc, "Minicard Modem") ||
- g_str_has_suffix(desc, "Minicard Modem 2") ||
- g_str_has_suffix(desc, "Mini-Card Modem") ||
- g_str_has_suffix(desc, "Broadband Modem") ||
- g_str_has_suffix(desc, "Module Modem") ||
- g_str_has_suffix(desc, "Broadband USB Modem"))) {
- devnode = udev_device_get_devnode(udev_device);
-
- if (ofono_modem_get_string(modem, MODEM_DEVICE) == NULL)
- ofono_modem_set_string(modem, MODEM_DEVICE, devnode);
- else
- ofono_modem_set_string(modem, DATA_DEVICE, devnode);
- } else if (registered == 0 &&
- (g_str_has_suffix(desc, "Minicard Data Modem") ||
- g_str_has_suffix(desc, "Mini-Card Data Modem") ||
- g_str_has_suffix(desc, "Module Data Modem") ||
- g_str_has_suffix(desc, "Module\xc2\xa0""Data Modem") ||
- g_str_has_suffix(desc, "Broadband Data Modem"))) {
- devnode = udev_device_get_devnode(udev_device);
- ofono_modem_set_string(modem, DATA_DEVICE, devnode);
- } else if (g_str_has_suffix(desc, "Minicard GPS Port") ||
- g_str_has_suffix(desc, "Mini-Card GPS Port") ||
- g_str_has_suffix(desc, "Module NMEA") ||
- g_str_has_suffix(desc, "Broadband GPS Port")) {
- devnode = udev_device_get_devnode(udev_device);
- ofono_modem_set_string(modem, GPS_DEVICE, devnode);
- } else if (registered == 0 &&
- (g_str_has_suffix(desc, "Minicard Network Adapter") ||
- g_str_has_suffix(desc, "Mini-Card Network Adapter") ||
- g_str_has_suffix(desc, "Broadband Network Adapter") ||
- g_str_has_suffix(desc, "Module Network Adapter") ||
- g_str_has_suffix(desc, "Minicard NetworkAdapter"))) {
- devnode = get_property(udev_device, "INTERFACE");
- ofono_modem_set_string(modem, NETWORK_INTERFACE, devnode);
- } else {
- return;
- }
-
- if (registered == 1)
- return;
-
- device = ofono_modem_get_string(modem, MODEM_DEVICE);
- data = ofono_modem_get_string(modem, DATA_DEVICE);
- network = ofono_modem_get_string(modem, NETWORK_INTERFACE);
-
- if (device != NULL && data != 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)
{
@@ -407,9 +334,7 @@ done:
g_hash_table_insert(devpath_list, g_strdup(curpath), g_strdup(devpath));
- if (g_strcmp0(driver, "mbm") == 0)
- add_mbm(modem, udev_device);
- else if (g_strcmp0(driver, "ifx") == 0)
+ if (g_strcmp0(driver, "ifx") == 0)
add_ifx(modem, udev_device);
else if (g_strcmp0(driver, "isiusb") == 0)
add_isi(modem, udev_device);
diff --git a/plugins/udevng.c b/plugins/udevng.c
index b8b3c516..c323095a 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -55,6 +55,52 @@ struct device_info {
char *sysattr;
};
+static gboolean setup_mbm(struct modem_info *modem)
+{
+ const char *mdm = NULL, *app = NULL, *network = NULL, *gps = 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_str_has_suffix(info->sysattr, "Modem") == TRUE ||
+ g_str_has_suffix(info->sysattr,
+ "Modem 2") == TRUE) {
+ if (mdm == NULL)
+ mdm = info->devnode;
+ else
+ app = info->devnode;
+ } else if (g_str_has_suffix(info->sysattr,
+ "GPS Port") == TRUE ||
+ g_str_has_suffix(info->sysattr,
+ "Module NMEA") == TRUE) {
+ gps = info->devnode;
+ } else if (g_str_has_suffix(info->sysattr,
+ "Network Adapter") == TRUE ||
+ g_str_has_suffix(info->sysattr,
+ "NetworkAdapter") == TRUE) {
+ network = info->devnode;
+ }
+ }
+
+ if (mdm == NULL || app == NULL)
+ return FALSE;
+
+ DBG("modem=%s data=%s network=%s gps=%s", mdm, app, network, gps);
+
+ ofono_modem_set_string(modem->modem, "ModemDevice", mdm);
+ ofono_modem_set_string(modem->modem, "DataDevice", app);
+ ofono_modem_set_string(modem->modem, "GPSDevice", gps);
+ ofono_modem_set_string(modem->modem, "NetworkInterface", network);
+
+ return TRUE;
+}
+
static gboolean setup_hso(struct modem_info *modem)
{
const char *control = NULL, *application = NULL, *network = NULL;
@@ -451,7 +497,8 @@ static struct {
gboolean (*setup)(struct modem_info *modem);
const char *sysattr;
} driver_list[] = {
- { "hso", setup_hso, "hsotype" },
+ { "mbm", setup_mbm, "device/interface" },
+ { "hso", setup_hso, "hsotype" },
{ "gobi", setup_gobi, },
{ "sierra", setup_sierra },
{ "huawei", setup_huawei },
@@ -625,6 +672,16 @@ static struct {
const char *vid;
const char *pid;
} vendor_list[] = {
+ { "mbm", "cdc_acm", "0bdb" },
+ { "mbm" "cdc_ether", "0bdb" },
+ { "mbm", "cdc_acm", "0fce" },
+ { "mbm", "cdc_ether", "0fce" },
+ { "mbm", "cdc_acm", "413c" },
+ { "mbm", "cdc_ether", "413c" },
+ { "mbm", "cdc_acm", "03f0" },
+ { "mbm", "cdc_ether", "03f0" },
+ { "mbm", "cdc_acm", "0930" },
+ { "mbm", "cdc_ether", "0930" },
{ "hso", "hso" },
{ "gobi", "qcserial" },
{ "sierra", "sierra" },