usb: gadget: move loopback's config descriptor out of f_loopback
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Sun, 23 Dec 2012 20:09:59 +0000 (21:09 +0100)
committerFelipe Balbi <balbi@ti.com>
Mon, 21 Jan 2013 18:52:39 +0000 (20:52 +0200)
f_loopback 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 <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/f_loopback.c
drivers/usb/gadget/g_zero.h
drivers/usb/gadget/zero.c

index bb39cb2bb3a3f9f1ece4879f8e3a4e48c110ba0a..3d103a2f998f13d246492f0a058fddb1e26b7cc9 100644 (file)
@@ -185,6 +185,12 @@ loopback_bind(struct usb_configuration *c, struct usb_function *f)
                return id;
        loopback_intf.bInterfaceNumber = id;
 
+       id = usb_string_id(cdev);
+       if (id < 0)
+               return id;
+       strings_loopback[0].id = id;
+       loopback_intf.iInterface = id;
+
        /* allocate endpoints */
 
        loop->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_loop_source_desc);
@@ -388,41 +394,3 @@ static int __init loopback_bind_config(struct usb_configuration *c)
                kfree(loop);
        return status;
 }
-
-static struct usb_configuration loopback_driver = {
-       .label          = "loopback",
-       .strings        = loopback_strings,
-       .bConfigurationValue = 2,
-       .bmAttributes   = USB_CONFIG_ATT_SELFPOWER,
-       /* .iConfiguration = DYNAMIC */
-};
-
-/**
- * loopback_add - add a loopback testing configuration to a device
- * @cdev: the device to support the loopback configuration
- */
-int __init loopback_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_loopback[0].id = id;
-
-       loopback_intf.iInterface = id;
-       loopback_driver.iConfiguration = id;
-
-       /* support autoresume for remote wakeup testing */
-       if (autoresume)
-               loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
-
-       /* support OTG systems */
-       if (gadget_is_otg(cdev->gadget)) {
-               loopback_driver.descriptors = otg_desc;
-               loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
-       }
-
-       return usb_add_config(cdev, &loopback_driver, loopback_bind_config);
-}
index 919eaa9ae124a662b8f7d01dd1bb5b45ef315111..281239c4e5446171cb645d173393e0263e385ca9 100644 (file)
@@ -19,7 +19,4 @@ void disable_endpoints(struct usb_composite_dev *cdev,
                struct usb_ep *in, struct usb_ep *out,
                struct usb_ep *iso_in, struct usb_ep *iso_out);
 
-/* configuration-specific linkup */
-int loopback_add(struct usb_composite_dev *cdev, bool autoresume);
-
 #endif /* __G_ZERO_H */
index ddf37cfdad979f53d7291b2be261c6fb2c6acdcb..8ba0bee4e6c01767ed1b6cc09be6f06247c4e946 100644 (file)
@@ -140,12 +140,14 @@ const struct usb_descriptor_header *otg_desc[] = {
 static char serial[] = "0123456789.0123456789.0123456789";
 
 #define USB_GZERO_SS_DESC      (USB_GADGET_FIRST_AVAIL_IDX + 0)
+#define USB_GZERO_LB_DESC      (USB_GADGET_FIRST_AVAIL_IDX + 1)
 
 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",
+       [USB_GZERO_LB_DESC].s   = "loop input to output",
        {  }                    /* end of list */
 };
 
@@ -254,6 +256,14 @@ static void zero_resume(struct usb_composite_dev *cdev)
 
 /*-------------------------------------------------------------------------*/
 
+static struct usb_configuration loopback_driver = {
+       .label          = "loopback",
+       .strings        = loopback_strings,
+       .bConfigurationValue = 2,
+       .bmAttributes   = USB_CONFIG_ATT_SELFPOWER,
+       /* .iConfiguration = DYNAMIC */
+};
+
 static struct usb_configuration sourcesink_driver = {
        .label                  = "source/sink",
        .strings                = sourcesink_strings,
@@ -281,29 +291,37 @@ 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;
+       loopback_driver.iConfiguration = strings_dev[USB_GZERO_LB_DESC].id;
+
        /* support autoresume for remote wakeup testing */
        sourcesink_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
+       loopback_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
        sourcesink_driver.descriptors = NULL;
-       if (autoresume)
+       loopback_driver.descriptors = NULL;
+       if (autoresume) {
                sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+               loopback_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;
+               loopback_driver.descriptors = otg_desc;
+               loopback_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);
+               usb_add_config(cdev, &loopback_driver, loopback_bind_config);
                usb_add_config(cdev, &sourcesink_driver,
                                sourcesink_bind_config);
        } else {
                usb_add_config(cdev, &sourcesink_driver,
                                sourcesink_bind_config);
-               loopback_add(cdev, autoresume != 0);
+               usb_add_config(cdev, &loopback_driver, loopback_bind_config);
        }
 
        usb_composite_overwrite_options(cdev, &coverwrite);