mirror of git://git.sysmocom.de/ofono
udev: Add automatic detection for Ericsson MBM based devices
This commit is contained in:
parent
7fd6d3d0ef
commit
3742162017
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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" },
|
||||
|
|
Loading…
Reference in New Issue