Device properties are generally on the device, on the USB interface
descriptor, or the on the USB device descriptor.
---
 plugins/udevng.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/plugins/udevng.c b/plugins/udevng.c
index 4faa365..7c5016a 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -1324,7 +1324,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;
@@ -1342,9 +1342,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);
@@ -1365,7 +1365,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) */
@@ -1381,6 +1381,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)
@@ -1502,6 +1506,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;
-- 
2.9.3

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to