summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJonas Bonn <jonas@southpole.se>2017-03-28 23:54:14 +0200
committerDenis Kenzior <denkenz@gmail.com>2017-03-29 09:56:28 -0500
commitbf20f0df187e40964c49bc48c549c8f349dadb2c (patch)
tree2cdc827b09b6d205cc19e6fef18ba65d509dcba5 /plugins
parent1b28cb5cc6d747ff45f234dfac287a6fb8e0c1c7 (diff)
downloadofono-bf20f0df187e40964c49bc48c549c8f349dadb2c.tar.gz
udevng: get properties from interface
Device properties are generally on the device, on the USB interface descriptor, or the on the USB device descriptor.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/udevng.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/plugins/udevng.c b/plugins/udevng.c
index ac46c08a..d1987635 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -1323,7 +1323,7 @@ static void add_device(const char *syspath, const char *devname,
const char *driver, const char *vendor,
const char *model, struct udev_device *device)
{
- struct udev_device *intf;
+ struct udev_device *usb_interface;
const char *devpath, *devnode, *interface, *number;
const char *label, *sysattr, *subsystem;
struct modem_info *modem;
@@ -1341,9 +1341,9 @@ static void add_device(const char *syspath, const char *devname,
return;
}
- intf = udev_device_get_parent_with_subsystem_devtype(device,
+ usb_interface = udev_device_get_parent_with_subsystem_devtype(device,
"usb", "usb_interface");
- if (intf == NULL)
+ if (usb_interface == NULL)
return;
modem = g_hash_table_lookup(modem_list, syspath);
@@ -1364,7 +1364,7 @@ static void add_device(const char *syspath, const char *devname,
g_hash_table_replace(modem_list, modem->syspath, modem);
}
- interface = udev_device_get_property_value(intf, "INTERFACE");
+ interface = udev_device_get_property_value(usb_interface, "INTERFACE");
number = udev_device_get_property_value(device, "ID_USB_INTERFACE_NUM");
/* If environment variable is not set, get value from attributes (or parent's ones) */
@@ -1380,6 +1380,10 @@ static void add_device(const char *syspath, const char *devname,
}
label = udev_device_get_property_value(device, "OFONO_LABEL");
+ if (!label)
+ label = udev_device_get_property_value(usb_interface,
+ "OFONO_LABEL");
+
subsystem = udev_device_get_subsystem(device);
if (modem->sysattr != NULL)
@@ -1501,6 +1505,16 @@ static void check_usb_device(struct udev_device *device)
model = udev_device_get_property_value(usb_device, "ID_MODEL_ID");
driver = udev_device_get_property_value(usb_device, "OFONO_DRIVER");
+ if (!driver) {
+ struct udev_device *usb_interface =
+ udev_device_get_parent_with_subsystem_devtype(
+ device, "usb", "usb_interface");
+
+ if (usb_interface)
+ driver = udev_device_get_property_value(
+ usb_interface, "OFONO_DRIVER");
+ }
+
if (driver == NULL) {
const char *drv;
unsigned int i;