Re: [PATCHv3 1/5] usb: gadget: bind UDC by name passed via usb_gadget_driver structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello.

On 2/18/2015 12:17 AM, Ruslan Bilovol wrote:

Introduce new 'udc_name' member to usb_gadget_driver structure.
The 'udc_name' is a name of UDC that usb_gadget_driver should
be bound to. If udc_name is NULL, it will be bound to any
available UDC.

Signed-off-by: Ruslan Bilovol <ruslan.bilovol@xxxxxxxxx>
---
  drivers/usb/gadget/udc/udc-core.c | 25 ++++++++++++++++++++-----
  include/linux/usb/gadget.h        |  4 ++++
  2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index 5a81cb0..e1079e08 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -440,21 +440,36 @@ EXPORT_SYMBOL_GPL(usb_udc_attach_driver);
  int usb_gadget_probe_driver(struct usb_gadget_driver *driver)
  {
  	struct usb_udc		*udc = NULL;
-	int			ret;
+	int			ret = -ENODEV;

  	if (!driver || !driver->bind || !driver->setup)
  		return -EINVAL;

  	mutex_lock(&udc_lock);
-	list_for_each_entry(udc, &udc_list, list) {
-		/* For now we take the first one */
-		if (!udc->driver)
+	if (driver->udc_name) {
+		list_for_each_entry(udc, &udc_list, list) {
+			ret = strcmp(driver->udc_name, dev_name(&udc->dev));
+			if (!ret)
+				break;
+		}
+		if (ret)
+			ret = -ENODEV;
+		else if (udc->driver)
+			ret = -EBUSY;
+		else
  			goto found;
+	} else {
+		list_for_each_entry(udc, &udc_list, list) {
+			/* For now we take the first one */
+			if (!udc->driver)
+				goto found;
+		}
+		ret = -ENODEV;

   Already assigned the same value by the initializer.

  	}

  	pr_debug("couldn't find an available UDC\n");
  	mutex_unlock(&udc_lock);
-	return -ENODEV;
+	return ret;
  found:
  	ret = udc_bind_to_driver(udc, driver);
  	mutex_unlock(&udc_lock);
[...]

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux