diff options
Diffstat (limited to 'drivers/usb/gadget/ncm.c')
| -rw-r--r-- | drivers/usb/gadget/ncm.c | 62 | 
1 files changed, 13 insertions, 49 deletions
diff --git a/drivers/usb/gadget/ncm.c b/drivers/usb/gadget/ncm.c index 89530034dff..a22ad9af056 100644 --- a/drivers/usb/gadget/ncm.c +++ b/drivers/usb/gadget/ncm.c @@ -20,8 +20,8 @@  /* #define VERBOSE_DEBUG */  #include <linux/kernel.h> -#include <linux/utsname.h> - +#include <linux/module.h> +#include <linux/usb/composite.h>  #include "u_ether.h" @@ -36,11 +36,6 @@   * the runtime footprint, and giving us at least some parts of what   * a "gcc --combine ... part1.c part2.c part3.c ... " build would.   */ -#include "composite.c" -#include "usbstring.c" -#include "config.c" -#include "epautoconf.c" -  #include "f_ncm.c"  #include "u_ether.c" @@ -57,6 +52,7 @@  #define CDC_PRODUCT_NUM		0xa4a1	/* Linux-USB Ethernet Gadget */  /*-------------------------------------------------------------------------*/ +USB_GADGET_COMPOSITE_OPTIONS();  static struct usb_device_descriptor device_desc = {  	.bLength =		sizeof device_desc, @@ -97,17 +93,11 @@ static const struct usb_descriptor_header *otg_desc[] = {  	NULL,  }; -  /* string IDs are assigned dynamically */ - -#define STRING_MANUFACTURER_IDX		0 -#define STRING_PRODUCT_IDX		1 - -static char manufacturer[50]; -  static struct usb_string strings_dev[] = { -	[STRING_MANUFACTURER_IDX].s = manufacturer, -	[STRING_PRODUCT_IDX].s = DRIVER_DESC, +	[USB_GADGET_MANUFACTURER_IDX].s = "", +	[USB_GADGET_PRODUCT_IDX].s = DRIVER_DESC, +	[USB_GADGET_SERIAL_IDX].s = "",  	{  } /* end of list */  }; @@ -149,7 +139,6 @@ static struct usb_configuration ncm_config_driver = {  static int __init gncm_bind(struct usb_composite_dev *cdev)  { -	int			gcnum;  	struct usb_gadget	*gadget = cdev->gadget;  	int			status; @@ -158,48 +147,22 @@ static int __init gncm_bind(struct usb_composite_dev *cdev)  	if (status < 0)  		return status; -	gcnum = usb_gadget_controller_number(gadget); -	if (gcnum >= 0) -		device_desc.bcdDevice = cpu_to_le16(0x0300 | gcnum); -	else { -		/* We assume that can_support_ecm() tells the truth; -		 * but if the controller isn't recognized at all then -		 * that assumption is a bit more likely to be wrong. -		 */ -		dev_warn(&gadget->dev, -			 "controller '%s' not recognized; trying %s\n", -			 gadget->name, -			 ncm_config_driver.label); -		device_desc.bcdDevice = -			cpu_to_le16(0x0300 | 0x0099); -	} - -  	/* Allocate string descriptor numbers ... note that string  	 * contents can be overridden by the composite_dev glue.  	 */ -	/* device descriptor strings: manufacturer, product */ -	snprintf(manufacturer, sizeof manufacturer, "%s %s with %s", -		init_utsname()->sysname, init_utsname()->release, -		gadget->name); -	status = usb_string_id(cdev); -	if (status < 0) -		goto fail; -	strings_dev[STRING_MANUFACTURER_IDX].id = status; -	device_desc.iManufacturer = status; - -	status = usb_string_id(cdev); +	status = usb_string_ids_tab(cdev, strings_dev);  	if (status < 0)  		goto fail; -	strings_dev[STRING_PRODUCT_IDX].id = status; -	device_desc.iProduct = status; +	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; +	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;  	status = usb_add_config(cdev, &ncm_config_driver,  				ncm_do_config);  	if (status < 0)  		goto fail; +	usb_composite_overwrite_options(cdev, &coverwrite);  	dev_info(&gadget->dev, "%s\n", DRIVER_DESC);  	return 0; @@ -215,11 +178,12 @@ static int __exit gncm_unbind(struct usb_composite_dev *cdev)  	return 0;  } -static struct usb_composite_driver ncm_driver = { +static __refdata struct usb_composite_driver ncm_driver = {  	.name		= "g_ncm",  	.dev		= &device_desc,  	.strings	= dev_strings,  	.max_speed	= USB_SPEED_HIGH, +	.bind		= gncm_bind,  	.unbind		= __exit_p(gncm_unbind),  }; @@ -229,7 +193,7 @@ MODULE_LICENSE("GPL");  static int __init init(void)  { -	return usb_composite_probe(&ncm_driver, gncm_bind); +	return usb_composite_probe(&ncm_driver);  }  module_init(init);  |