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>
This commit is contained in:
parent
eeae54075c
commit
78f46f09a8
|
@ -185,6 +185,12 @@ loopback_bind(struct usb_configuration *c, struct usb_function *f)
|
||||||
return id;
|
return id;
|
||||||
loopback_intf.bInterfaceNumber = 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 */
|
/* allocate endpoints */
|
||||||
|
|
||||||
loop->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_loop_source_desc);
|
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);
|
kfree(loop);
|
||||||
return status;
|
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);
|
|
||||||
}
|
|
||||||
|
|
|
@ -19,7 +19,4 @@ void disable_endpoints(struct usb_composite_dev *cdev,
|
||||||
struct usb_ep *in, struct usb_ep *out,
|
struct usb_ep *in, struct usb_ep *out,
|
||||||
struct usb_ep *iso_in, struct usb_ep *iso_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 */
|
#endif /* __G_ZERO_H */
|
||||||
|
|
|
@ -140,12 +140,14 @@ const struct usb_descriptor_header *otg_desc[] = {
|
||||||
static char serial[] = "0123456789.0123456789.0123456789";
|
static char serial[] = "0123456789.0123456789.0123456789";
|
||||||
|
|
||||||
#define USB_GZERO_SS_DESC (USB_GADGET_FIRST_AVAIL_IDX + 0)
|
#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[] = {
|
static struct usb_string strings_dev[] = {
|
||||||
[USB_GADGET_MANUFACTURER_IDX].s = "",
|
[USB_GADGET_MANUFACTURER_IDX].s = "",
|
||||||
[USB_GADGET_PRODUCT_IDX].s = longname,
|
[USB_GADGET_PRODUCT_IDX].s = longname,
|
||||||
[USB_GADGET_SERIAL_IDX].s = serial,
|
[USB_GADGET_SERIAL_IDX].s = serial,
|
||||||
[USB_GZERO_SS_DESC].s = "source and sink data",
|
[USB_GZERO_SS_DESC].s = "source and sink data",
|
||||||
|
[USB_GZERO_LB_DESC].s = "loop input to output",
|
||||||
{ } /* end of list */
|
{ } /* 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 = {
|
static struct usb_configuration sourcesink_driver = {
|
||||||
.label = "source/sink",
|
.label = "source/sink",
|
||||||
.strings = sourcesink_strings,
|
.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);
|
setup_timer(&autoresume_timer, zero_autoresume, (unsigned long) cdev);
|
||||||
|
|
||||||
sourcesink_driver.iConfiguration = strings_dev[USB_GZERO_SS_DESC].id;
|
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 */
|
/* support autoresume for remote wakeup testing */
|
||||||
sourcesink_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
|
sourcesink_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
|
||||||
|
loopback_driver.bmAttributes &= ~USB_CONFIG_ATT_WAKEUP;
|
||||||
sourcesink_driver.descriptors = NULL;
|
sourcesink_driver.descriptors = NULL;
|
||||||
if (autoresume)
|
loopback_driver.descriptors = NULL;
|
||||||
|
if (autoresume) {
|
||||||
sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
||||||
|
loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
||||||
|
}
|
||||||
|
|
||||||
/* support OTG systems */
|
/* support OTG systems */
|
||||||
if (gadget_is_otg(cdev->gadget)) {
|
if (gadget_is_otg(cdev->gadget)) {
|
||||||
sourcesink_driver.descriptors = otg_desc;
|
sourcesink_driver.descriptors = otg_desc;
|
||||||
sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
|
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
|
/* Register primary, then secondary configuration. Note that
|
||||||
* SH3 only allows one config...
|
* SH3 only allows one config...
|
||||||
*/
|
*/
|
||||||
if (loopdefault) {
|
if (loopdefault) {
|
||||||
loopback_add(cdev, autoresume != 0);
|
usb_add_config(cdev, &loopback_driver, loopback_bind_config);
|
||||||
usb_add_config(cdev, &sourcesink_driver,
|
usb_add_config(cdev, &sourcesink_driver,
|
||||||
sourcesink_bind_config);
|
sourcesink_bind_config);
|
||||||
} else {
|
} else {
|
||||||
usb_add_config(cdev, &sourcesink_driver,
|
usb_add_config(cdev, &sourcesink_driver,
|
||||||
sourcesink_bind_config);
|
sourcesink_bind_config);
|
||||||
loopback_add(cdev, autoresume != 0);
|
usb_add_config(cdev, &loopback_driver, loopback_bind_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_composite_overwrite_options(cdev, &coverwrite);
|
usb_composite_overwrite_options(cdev, &coverwrite);
|
||||||
|
|
Loading…
Reference in New Issue