usb: gadget: Update function for SuperSpeedPlus
authorJohn Youn <John.Youn@synopsys.com>
Sat, 6 Feb 2016 01:06:21 +0000 (17:06 -0800)
committerFelipe Balbi <balbi@kernel.org>
Fri, 4 Mar 2016 13:14:23 +0000 (15:14 +0200)
Add a ssp_descriptors member to struct usb_function and handle the
initialization and cleanup of it. This holds the SuperSpeedPlus
descriptors for a function that supports SuperSpeedPlus. This is added
by usb_assign_descriptors().

Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
drivers/usb/gadget/config.c
include/linux/usb/composite.h

index 62ba4c1b69ec8033a5921987104caab82f7ff712..e6c0542a063bfa33ba090357ebb1e16df696430e 100644 (file)
@@ -183,6 +183,11 @@ int usb_assign_descriptors(struct usb_function *f,
                if (!f->ss_descriptors)
                        goto err;
        }
+       if (ssp && gadget_is_superspeed_plus(g)) {
+               f->ssp_descriptors = usb_copy_descriptors(ssp);
+               if (!f->ssp_descriptors)
+                       goto err;
+       }
        return 0;
 err:
        usb_free_all_descriptors(f);
@@ -195,6 +200,7 @@ void usb_free_all_descriptors(struct usb_function *f)
        usb_free_descriptors(f->fs_descriptors);
        usb_free_descriptors(f->hs_descriptors);
        usb_free_descriptors(f->ss_descriptors);
+       usb_free_descriptors(f->ssp_descriptors);
 }
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
 
index 1074b8921a5dc59dda948ef39e7281f63d420efb..9ff1e465d307727ec46466a5a5fe002bb5af92a2 100644 (file)
@@ -126,6 +126,10 @@ struct usb_os_desc_table {
  *     string identifiers assigned during @bind(). If this
  *     pointer is null after initiation, the function will not
  *     be available at super speed.
+ * @ssp_descriptors: Table of super speed plus descriptors, using
+ *     interface and string identifiers assigned during @bind(). If
+ *     this pointer is null after initiation, the function will not
+ *     be available at super speed plus.
  * @config: assigned when @usb_add_function() is called; this is the
  *     configuration with which this function is associated.
  * @os_desc_table: Table of (interface id, os descriptors) pairs. The function
@@ -186,6 +190,7 @@ struct usb_function {
        struct usb_descriptor_header    **fs_descriptors;
        struct usb_descriptor_header    **hs_descriptors;
        struct usb_descriptor_header    **ss_descriptors;
+       struct usb_descriptor_header    **ssp_descriptors;
 
        struct usb_configuration        *config;