|
@@ -53,6 +53,36 @@ static struct usb_gadget_strings **get_containers_gs(
|
|
return (struct usb_gadget_strings **)uc->stash;
|
|
return (struct usb_gadget_strings **)uc->stash;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * function_descriptors() - get function descriptors for speed
|
|
|
|
+ * @f: the function
|
|
|
|
+ * @speed: the speed
|
|
|
|
+ *
|
|
|
|
+ * Returns the descriptors or NULL if not set.
|
|
|
|
+ */
|
|
|
|
+static struct usb_descriptor_header **
|
|
|
|
+function_descriptors(struct usb_function *f,
|
|
|
|
+ enum usb_device_speed speed)
|
|
|
|
+{
|
|
|
|
+ struct usb_descriptor_header **descriptors;
|
|
|
|
+
|
|
|
|
+ switch (speed) {
|
|
|
|
+ case USB_SPEED_SUPER_PLUS:
|
|
|
|
+ descriptors = f->ssp_descriptors;
|
|
|
|
+ break;
|
|
|
|
+ case USB_SPEED_SUPER:
|
|
|
|
+ descriptors = f->ss_descriptors;
|
|
|
|
+ break;
|
|
|
|
+ case USB_SPEED_HIGH:
|
|
|
|
+ descriptors = f->hs_descriptors;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ descriptors = f->fs_descriptors;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return descriptors;
|
|
|
|
+}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* next_ep_desc() - advance to the next EP descriptor
|
|
* next_ep_desc() - advance to the next EP descriptor
|
|
* @t: currect pointer within descriptor array
|
|
* @t: currect pointer within descriptor array
|
|
@@ -419,17 +449,7 @@ static int config_buf(struct usb_configuration *config,
|
|
list_for_each_entry(f, &config->functions, list) {
|
|
list_for_each_entry(f, &config->functions, list) {
|
|
struct usb_descriptor_header **descriptors;
|
|
struct usb_descriptor_header **descriptors;
|
|
|
|
|
|
- switch (speed) {
|
|
|
|
- case USB_SPEED_SUPER:
|
|
|
|
- descriptors = f->ss_descriptors;
|
|
|
|
- break;
|
|
|
|
- case USB_SPEED_HIGH:
|
|
|
|
- descriptors = f->hs_descriptors;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- descriptors = f->fs_descriptors;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ descriptors = function_descriptors(f, speed);
|
|
if (!descriptors)
|
|
if (!descriptors)
|
|
continue;
|
|
continue;
|
|
status = usb_descriptor_fillbuf(next, len,
|
|
status = usb_descriptor_fillbuf(next, len,
|
|
@@ -740,16 +760,7 @@ static int set_config(struct usb_composite_dev *cdev,
|
|
* function's setup callback instead of the current
|
|
* function's setup callback instead of the current
|
|
* configuration's setup callback.
|
|
* configuration's setup callback.
|
|
*/
|
|
*/
|
|
- switch (gadget->speed) {
|
|
|
|
- case USB_SPEED_SUPER:
|
|
|
|
- descriptors = f->ss_descriptors;
|
|
|
|
- break;
|
|
|
|
- case USB_SPEED_HIGH:
|
|
|
|
- descriptors = f->hs_descriptors;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- descriptors = f->fs_descriptors;
|
|
|
|
- }
|
|
|
|
|
|
+ descriptors = function_descriptors(f, gadget->speed);
|
|
|
|
|
|
for (; *descriptors; ++descriptors) {
|
|
for (; *descriptors; ++descriptors) {
|
|
struct usb_endpoint_descriptor *ep;
|
|
struct usb_endpoint_descriptor *ep;
|