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.rip...@free-electrons.com>
Signed-off-by: Ruslan Bilovol <ruslan.bilo...@gmail.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 c42765b..efad021 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -54,7 +54,6 @@ struct gadget_info {
        struct list_head string_list;
        struct list_head available_func;
 
-       const char *udc_name;
 #ifdef CONFIG_USB_OTG
        struct usb_otg_descriptor otg;
 #endif
@@ -230,21 +229,21 @@ static ssize_t gadget_dev_desc_bcdUSB_store(struct 
gadget_info *gi,
 
 static ssize_t gadget_dev_desc_UDC_show(struct gadget_info *gi, char *page)
 {
-       return sprintf(page, "%s\n", gi->udc_name ?: "");
+       return sprintf(page, "%s\n", gi->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;
 }
 
@@ -267,14 +266,16 @@ static ssize_t gadget_dev_desc_UDC_store(struct 
gadget_info *gi,
                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;
@@ -438,9 +439,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) {
@@ -917,10 +918,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.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in

Reply via email to