Browse Source

usb: gadget: composite: Add function to get descriptors

There are a couple places in the code that get the function descriptors
based on the speed. Move this lookup into a function call and add
support to handle the SuperSpeedPlus descriptors as well.

Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
John Youn 9 years ago
parent
commit
f3bdbe3668
1 changed files with 32 additions and 21 deletions
  1. 32 21
      drivers/usb/gadget/composite.c

+ 32 - 21
drivers/usb/gadget/composite.c

@@ -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;