diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2012-12-23 21:09:59 +0100 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2013-01-21 19:52:39 +0100 |
commit | 78f46f09a80a39fe646fe415a21435f2a05df6c2 (patch) | |
tree | a1d2fab9c2dd25891751acd419778a023fa7b3c0 /drivers/usb/gadget/zero.c | |
parent | usb: gadget: move source sink's config descriptor out of f_sourcesink (diff) | |
download | linux-78f46f09a80a39fe646fe415a21435f2a05df6c2.tar.xz linux-78f46f09a80a39fe646fe415a21435f2a05df6c2.zip |
usb: gadget: move loopback's config descriptor out of f_loopback
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>
Diffstat (limited to 'drivers/usb/gadget/zero.c')
-rw-r--r-- | drivers/usb/gadget/zero.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c index ddf37cfdad97..8ba0bee4e6c0 100644 --- a/drivers/usb/gadget/zero.c +++ b/drivers/usb/gadget/zero.c @@ -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); |