Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1273867

[PATCH v6 2/4] usb: gadget: configfs: pass UDC name via usb_gadget_driver struct

From Marek Szyprowski <m.szyprowski@samsung.com>
Newsgroups linux.kernel
Subject [PATCH v6 2/4] usb: gadget: configfs: pass UDC name via usb_gadget_driver struct
Date 2015-11-20 10:00 +0100
Message-ID <qwPHZ-4To-33@gated-at.bofh.it> (permalink)
References <qwPHY-4To-17@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Ruslan Bilovol <ruslan.bilovol@gmail.com>

Now when udc-core supports binding to specific UDC by passing
its name via 'udc_name' member of usb_gadget_driver struct,
switch to this generic approach.

Tested-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 drivers/usb/gadget/configfs.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 163d305..0bc6865 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -56,7 +56,6 @@ struct gadget_info {
 	struct list_head string_list;
 	struct list_head available_func;
 
-	const char *udc_name;
 	struct usb_composite_driver composite;
 	struct usb_composite_dev cdev;
 	bool use_os_desc;
@@ -233,21 +232,21 @@ static ssize_t gadget_dev_desc_bcdUSB_store(struct config_item *item,
 
 static ssize_t gadget_dev_desc_UDC_show(struct config_item *item, char *page)
 {
-	return sprintf(page, "%s\n", to_gadget_info(item)->udc_name ?: "");
+	return sprintf(page, "%s\n", to_gadget_info(item)->composite.gadget_driver.udc_name ?: "");
 }
 
 static int unregister_gadget(struct gadget_info *gi)
 {
 	int ret;
 
-	if (!gi->udc_name)
+	if (!gi->composite.gadget_driver.udc_name)
 		return -ENODEV;
 
 	ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver);
 	if (ret)
 		return ret;
-	kfree(gi->udc_name);
-	gi->udc_name = NULL;
+	kfree(gi->composite.gadget_driver.udc_name);
+	gi->composite.gadget_driver.udc_name = NULL;
 	return 0;
 }
 
@@ -271,14 +270,16 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,
 		if (ret)
 			goto err;
 	} else {
-		if (gi->udc_name) {
+		if (gi->composite.gadget_driver.udc_name) {
 			ret = -EBUSY;
 			goto err;
 		}
-		ret = usb_udc_attach_driver(name, &gi->composite.gadget_driver);
-		if (ret)
+		gi->composite.gadget_driver.udc_name = name;
+		ret = usb_gadget_probe_driver(&gi->composite.gadget_driver);
+		if (ret) {
+			gi->composite.gadget_driver.udc_name = NULL;
 			goto err;
-		gi->udc_name = name;
+		}
 	}
 	mutex_unlock(&gi->lock);
 	return len;
@@ -427,9 +428,9 @@ static int config_usb_cfg_unlink(
 	 * remove the function.
 	 */
 	mutex_lock(&gi->lock);
-	if (gi->udc_name)
+	if (gi->composite.gadget_driver.udc_name)
 		unregister_gadget(gi);
-	WARN_ON(gi->udc_name);
+	WARN_ON(gi->composite.gadget_driver.udc_name);
 
 	list_for_each_entry(f, &cfg->func_list, list) {
 		if (f->fi == fi) {
@@ -873,10 +874,10 @@ static int os_desc_unlink(struct config_item *os_desc_ci,
 	struct usb_composite_dev *cdev = &gi->cdev;
 
 	mutex_lock(&gi->lock);
-	if (gi->udc_name)
+	if (gi->composite.gadget_driver.udc_name)
 		unregister_gadget(gi);
 	cdev->os_desc_config = NULL;
-	WARN_ON(gi->udc_name);
+	WARN_ON(gi->composite.gadget_driver.udc_name);
 	mutex_unlock(&gi->lock);
 	return 0;
 }
-- 
1.9.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v6 0/4] usb/gadget: independent registration of gadgets and  gadget drivers Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:00 +0100
  [PATCH v6 3/4] usb: gadget: udc-core: remove unused  usb_udc_attach_driver() Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:00 +0100
  [PATCH v6 1/4] usb: gadget: bind UDC by name passed via  usb_gadget_driver structure Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:00 +0100
  [PATCH v6 2/4] usb: gadget: configfs: pass UDC name via  usb_gadget_driver struct Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:00 +0100
  [PATCH v6 4/4] usb: gadget: udc-core: independent registration of  gadgets and gadget drivers Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:00 +0100
    Re: [PATCH v6 4/4] usb: gadget: udc-core: independent registration of  gadgets and gadget drivers Marek Szyprowski <m.szyprowski@samsung.com> - 2015-11-20 10:50 +0100
      RE: [PATCH v6 4/4] usb: gadget: udc-core: independent registration of  gadgets and gadget drivers Peter Chen <Peter.Chen@freescale.com> - 2015-11-20 11:00 +0100
    Re: [PATCH v6 4/4] usb: gadget: udc-core: independent registration  of gadgets and gadget drivers Alan Stern <stern@rowland.harvard.edu> - 2015-11-20 17:30 +0100

csiph-web