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 <johny...@synopsys.com>
---
 drivers/usb/gadget/composite.c | 53 +++++++++++++++++++++++++-----------------
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 44ad7aa..1d4f324 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -54,6 +54,36 @@ static struct usb_gadget_strings **get_containers_gs(
 }
 
 /**
+ * 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
  * @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) {
                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)
                        continue;
                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
                 * 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) {
                        struct usb_endpoint_descriptor *ep;
-- 
2.6.3

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to