ledtrig-usbdev: use upstream function for iterating USB devices
authorRafał Miłecki <zajec5@gmail.com>
Mon, 18 Jul 2016 15:59:27 +0000 (17:59 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Jul 2016 08:13:50 +0000 (10:13 +0200)
This will allow us to drop LEDE patch adding usb_find_device_by_name.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
target/linux/generic/files/drivers/leds/ledtrig-usbdev.c

index 70b0e39..effcae6 100644 (file)
@@ -83,6 +83,26 @@ static ssize_t usbdev_trig_name_show(struct device *dev,
        return strlen(buf) + 1;
 }
 
+struct usbdev_trig_match {
+       char *device_name;
+       struct usb_device *usb_dev;
+};
+
+static int usbdev_trig_find_usb_dev(struct usb_device *usb_dev, void *data)
+{
+       struct usbdev_trig_match *match = data;
+
+       if (WARN_ON(match->usb_dev))
+               return 0;
+
+       if (!strcmp(dev_name(&usb_dev->dev), match->device_name)) {
+               dev_dbg(&usb_dev->dev, "matched this device!\n");
+               match->usb_dev = usb_get_dev(usb_dev);
+       }
+
+       return 0;
+}
+
 static ssize_t usbdev_trig_name_store(struct device *dev,
                                      struct device_attribute *attr,
                                      const char *buf,
@@ -101,16 +121,18 @@ static ssize_t usbdev_trig_name_store(struct device *dev,
                td->device_name[size - 1] = 0;
 
        if (td->device_name[0] != 0) {
-               struct usb_device *usb_dev;
+               struct usbdev_trig_match match = {
+                       .device_name = td->device_name,
+               };
 
                /* check for existing device to update from */
-               usb_dev = usb_find_device_by_name(td->device_name);
-               if (usb_dev) {
+               usb_for_each_dev(&match, usbdev_trig_find_usb_dev);
+               if (match.usb_dev) {
                        if (td->usb_dev)
                                usb_put_dev(td->usb_dev);
 
-                       td->usb_dev = usb_dev;
-                       td->last_urbnum = atomic_read(&usb_dev->urbnum);
+                       td->usb_dev = match.usb_dev;
+                       td->last_urbnum = atomic_read(&match.usb_dev->urbnum);
                }
 
                /* updates LEDs, may start timers */