From 5ea8756766a5ba148e47075265743f727ef1d6dc Mon Sep 17 00:00:00 2001
From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
Date: Mon, 18 Jul 2016 17:59:27 +0200
Subject: [PATCH] ledtrig-usbdev: use upstream function for iterating USB
 devices
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

This will allow us to drop LEDE patch adding usb_find_device_by_name.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
 .../files/drivers/leds/ledtrig-usbdev.c       | 32 ++++++++++++++++---
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/target/linux/generic/files/drivers/leds/ledtrig-usbdev.c b/target/linux/generic/files/drivers/leds/ledtrig-usbdev.c
index 70b0e392ad..effcae6f9e 100644
--- a/target/linux/generic/files/drivers/leds/ledtrig-usbdev.c
+++ b/target/linux/generic/files/drivers/leds/ledtrig-usbdev.c
@@ -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 */
-- 
2.30.2