f_sourcesink should only include the bare function but it also includes
the config descriptor. This patch moves the config descriptor into
zero.c, the only user of this function.

Signed-off-by: Sebastian Andrzej Siewior <bige...@linutronix.de>
---
 drivers/usb/gadget/f_sourcesink.c |   48 +++++++------------------------------
 drivers/usb/gadget/g_zero.h       |    1 -
 drivers/usb/gadget/zero.c         |   29 ++++++++++++++++++++--
 3 files changed, 35 insertions(+), 43 deletions(-)

diff --git a/drivers/usb/gadget/f_sourcesink.c 
b/drivers/usb/gadget/f_sourcesink.c
index e5c0504..6bff462 100644
--- a/drivers/usb/gadget/f_sourcesink.c
+++ b/drivers/usb/gadget/f_sourcesink.c
@@ -328,6 +328,14 @@ sourcesink_bind(struct usb_configuration *c, struct 
usb_function *f)
        source_sink_intf_alt0.bInterfaceNumber = id;
        source_sink_intf_alt1.bInterfaceNumber = id;
 
+       /* allocate string ID(s) */
+       id = usb_string_id(cdev);
+       if (id < 0)
+               return id;
+       strings_sourcesink[0].id = id;
+       source_sink_intf_alt0.iInterface = id;
+       source_sink_intf_alt1.iInterface = id;
+
        /* allocate bulk endpoints */
        ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc);
        if (!ss->in_ep) {
@@ -870,43 +878,3 @@ static int ss_config_setup(struct usb_configuration *c,
                        return -EOPNOTSUPP;
        }
 }
-
-static struct usb_configuration sourcesink_driver = {
-       .label                  = "source/sink",
-       .strings                = sourcesink_strings,
-       .setup                  = ss_config_setup,
-       .bConfigurationValue    = 3,
-       .bmAttributes           = USB_CONFIG_ATT_SELFPOWER,
-       /* .iConfiguration      = DYNAMIC */
-};
-
-/**
- * sourcesink_add - add a source/sink testing configuration to a device
- * @cdev: the device to support the configuration
- */
-int __init sourcesink_add(struct usb_composite_dev *cdev, bool autoresume)
-{
-       int id;
-
-       /* allocate string ID(s) */
-       id = usb_string_id(cdev);
-       if (id < 0)
-               return id;
-       strings_sourcesink[0].id = id;
-
-       source_sink_intf_alt0.iInterface = id;
-       source_sink_intf_alt1.iInterface = id;
-       sourcesink_driver.iConfiguration = id;
-
-       /* support autoresume for remote wakeup testing */
-       if (autoresume)
-               sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
-
-       /* support OTG systems */
-       if (gadget_is_otg(cdev->gadget)) {
-               sourcesink_driver.descriptors = otg_desc;
-               sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
-       }
-
-       return usb_add_config(cdev, &sourcesink_driver, sourcesink_bind_config);
-}
diff --git a/drivers/usb/gadget/g_zero.h b/drivers/usb/gadget/g_zero.h
index 71ca193..919eaa9 100644
--- a/drivers/usb/gadget/g_zero.h
+++ b/drivers/usb/gadget/g_zero.h
@@ -20,7 +20,6 @@ void disable_endpoints(struct usb_composite_dev *cdev,
                struct usb_ep *iso_in, struct usb_ep *iso_out);
 
 /* configuration-specific linkup */
-int sourcesink_add(struct usb_composite_dev *cdev, bool autoresume);
 int loopback_add(struct usb_composite_dev *cdev, bool autoresume);
 
 #endif /* __G_ZERO_H */
diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
index 6bf4c06..5f36514 100644
--- a/drivers/usb/gadget/zero.c
+++ b/drivers/usb/gadget/zero.c
@@ -139,10 +139,13 @@ const struct usb_descriptor_header *otg_desc[] = {
 /* default serial number takes at least two packets */
 static char serial[] = "0123456789.0123456789.0123456789";
 
+#define USB_GZERO_SS_DESC      (USB_GADGET_FIRST_AVAIL_IDX + 0)
+
 static struct usb_string strings_dev[] = {
        [USB_GADGET_MANUFACTURER_IDX].s = "",
        [USB_GADGET_PRODUCT_IDX].s = longname,
        [USB_GADGET_SERIAL_IDX].s = serial,
+       [USB_GZERO_SS_DESC].s   = "source and sink data",
        {  }                    /* end of list */
 };
 
@@ -251,6 +254,15 @@ static void zero_resume(struct usb_composite_dev *cdev)
 
 /*-------------------------------------------------------------------------*/
 
+static struct usb_configuration sourcesink_driver = {
+       .label                  = "source/sink",
+       .strings                = sourcesink_strings,
+       .setup                  = ss_config_setup,
+       .bConfigurationValue    = 3,
+       .bmAttributes           = USB_CONFIG_ATT_SELFPOWER,
+       /* .iConfiguration      = DYNAMIC */
+};
+
 static int __init zero_bind(struct usb_composite_dev *cdev)
 {
        int                     status;
@@ -268,14 +280,27 @@ static int __init zero_bind(struct usb_composite_dev 
*cdev)
 
        setup_timer(&autoresume_timer, zero_autoresume, (unsigned long) cdev);
 
+       sourcesink_driver.iConfiguration = strings_dev[USB_GZERO_SS_DESC].id;
+       /* support autoresume for remote wakeup testing */
+       sourcesink_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
+       sourcesink_driver.descriptors = NULL;
+       if (autoresume)
+               sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+
+       /* support OTG systems */
+       if (gadget_is_otg(cdev->gadget)) {
+               sourcesink_driver.descriptors = otg_desc;
+               sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+       }
+
        /* Register primary, then secondary configuration.  Note that
         * SH3 only allows one config...
         */
        if (loopdefault) {
                loopback_add(cdev, autoresume != 0);
-               sourcesink_add(cdev, autoresume != 0);
+               usb_add_config(cdev, &sourcesink_driver, 
sourcesink_bind_config);
        } else {
-               sourcesink_add(cdev, autoresume != 0);
+               usb_add_config(cdev, &sourcesink_driver, 
sourcesink_bind_config);
                loopback_add(cdev, autoresume != 0);
        }
 
-- 
1.7.10.4

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

Reply via email to