Browse Source

usb: gadget: Update function for SuperSpeedPlus

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>
John Youn 9 years ago
parent
commit
f5c61225cf
2 changed files with 11 additions and 0 deletions
  1. 6 0
      drivers/usb/gadget/config.c
  2. 5 0
      include/linux/usb/composite.h

+ 6 - 0
drivers/usb/gadget/config.c

@@ -183,6 +183,11 @@ int usb_assign_descriptors(struct usb_function *f,
 		if (!f->ss_descriptors)
 		if (!f->ss_descriptors)
 			goto err;
 			goto err;
 	}
 	}
+	if (ssp && gadget_is_superspeed_plus(g)) {
+		f->ssp_descriptors = usb_copy_descriptors(ssp);
+		if (!f->ssp_descriptors)
+			goto err;
+	}
 	return 0;
 	return 0;
 err:
 err:
 	usb_free_all_descriptors(f);
 	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->fs_descriptors);
 	usb_free_descriptors(f->hs_descriptors);
 	usb_free_descriptors(f->hs_descriptors);
 	usb_free_descriptors(f->ss_descriptors);
 	usb_free_descriptors(f->ss_descriptors);
+	usb_free_descriptors(f->ssp_descriptors);
 }
 }
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
 EXPORT_SYMBOL_GPL(usb_free_all_descriptors);
 
 

+ 5 - 0
include/linux/usb/composite.h

@@ -126,6 +126,10 @@ struct usb_os_desc_table {
  *	string identifiers assigned during @bind(). If this
  *	string identifiers assigned during @bind(). If this
  *	pointer is null after initiation, the function will not
  *	pointer is null after initiation, the function will not
  *	be available at super speed.
  *	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
  * @config: assigned when @usb_add_function() is called; this is the
  *	configuration with which this function is associated.
  *	configuration with which this function is associated.
  * @os_desc_table: Table of (interface id, os descriptors) pairs. The function
  * @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	**fs_descriptors;
 	struct usb_descriptor_header	**hs_descriptors;
 	struct usb_descriptor_header	**hs_descriptors;
 	struct usb_descriptor_header	**ss_descriptors;
 	struct usb_descriptor_header	**ss_descriptors;
+	struct usb_descriptor_header	**ssp_descriptors;
 
 
 	struct usb_configuration	*config;
 	struct usb_configuration	*config;