diff options
Diffstat (limited to 'drivers/usb/gadget/ether.c')
| -rw-r--r-- | drivers/usb/gadget/ether.c | 61 | 
1 files changed, 11 insertions, 50 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index a28f6ffcd0f..18c3f423706 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -14,8 +14,6 @@  /* #define VERBOSE_DEBUG */  #include <linux/kernel.h> -#include <linux/utsname.h> -  #if defined USB_ETH_RNDIS  #  undef USB_ETH_RNDIS @@ -102,11 +100,6 @@ static inline bool has_rndis(void)   * 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_ecm.c"  #include "f_subset.c"  #ifdef	USB_ETH_RNDIS @@ -117,6 +110,7 @@ static inline bool has_rndis(void)  #include "u_ether.c"  /*-------------------------------------------------------------------------*/ +USB_GADGET_COMPOSITE_OPTIONS();  /* DO NOT REUSE THESE IDs with a protocol-incompatible driver!!  Ever!!   * Instead:  allocate your own, using normal USB-IF procedures. @@ -195,17 +189,10 @@ 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 = PREFIX DRIVER_DESC, +	[USB_GADGET_MANUFACTURER_IDX].s = "", +	[USB_GADGET_PRODUCT_IDX].s = PREFIX DRIVER_DESC, +	[USB_GADGET_SERIAL_IDX].s = "",  	{  } /* end of list */  }; @@ -288,7 +275,6 @@ static struct usb_configuration eth_config_driver = {  static int __init eth_bind(struct usb_composite_dev *cdev)  { -	int			gcnum;  	struct usb_gadget	*gadget = cdev->gadget;  	int			status; @@ -323,42 +309,15 @@ static int __init eth_bind(struct usb_composite_dev *cdev)  		device_desc.bNumConfigurations = 2;  	} -	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, -				eth_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;  	/* register our configuration(s); RNDIS first, if it's used */  	if (has_rndis()) { @@ -372,6 +331,7 @@ static int __init eth_bind(struct usb_composite_dev *cdev)  	if (status < 0)  		goto fail; +	usb_composite_overwrite_options(cdev, &coverwrite);  	dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",  			DRIVER_DESC); @@ -388,11 +348,12 @@ static int __exit eth_unbind(struct usb_composite_dev *cdev)  	return 0;  } -static struct usb_composite_driver eth_driver = { +static __refdata struct usb_composite_driver eth_driver = {  	.name		= "g_ether",  	.dev		= &device_desc,  	.strings	= dev_strings,  	.max_speed	= USB_SPEED_SUPER, +	.bind		= eth_bind,  	.unbind		= __exit_p(eth_unbind),  }; @@ -402,7 +363,7 @@ MODULE_LICENSE("GPL");  static int __init init(void)  { -	return usb_composite_probe(ð_driver, eth_bind); +	return usb_composite_probe(ð_driver);  }  module_init(init);  |