diff options
Diffstat (limited to 'drivers/usb/gadget/gmidi.c')
| -rw-r--r-- | drivers/usb/gadget/gmidi.c | 61 | 
1 files changed, 16 insertions, 45 deletions
diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c index 681bd038b1d..881aab86ae9 100644 --- a/drivers/usb/gadget/gmidi.c +++ b/drivers/usb/gadget/gmidi.c @@ -22,7 +22,6 @@  #include <linux/kernel.h>  #include <linux/slab.h> -#include <linux/utsname.h>  #include <linux/module.h>  #include <linux/device.h> @@ -31,16 +30,13 @@  #include <sound/rawmidi.h>  #include <linux/usb/ch9.h> +#include <linux/usb/composite.h>  #include <linux/usb/gadget.h>  #include <linux/usb/audio.h>  #include <linux/usb/midi.h>  #include "gadget_chips.h" -#include "composite.c" -#include "usbstring.c" -#include "config.c" -#include "epautoconf.c"  #include "f_midi.c"  /*-------------------------------------------------------------------------*/ @@ -51,6 +47,8 @@ MODULE_LICENSE("GPL v2");  static const char shortname[] = "g_midi";  static const char longname[] = "MIDI Gadget"; +USB_GADGET_COMPOSITE_OPTIONS(); +  static int index = SNDRV_DEFAULT_IDX1;  module_param(index, int, S_IRUGO);  MODULE_PARM_DESC(index, "Index value for the USB MIDI Gadget adapter."); @@ -85,9 +83,7 @@ MODULE_PARM_DESC(out_ports, "Number of MIDI output ports");  /* string IDs are assigned dynamically */ -#define STRING_MANUFACTURER_IDX		0 -#define STRING_PRODUCT_IDX		1 -#define STRING_DESCRIPTION_IDX		2 +#define STRING_DESCRIPTION_IDX		USB_GADGET_FIRST_AVAIL_IDX  static struct usb_device_descriptor device_desc = {  	.bLength =		USB_DT_DEVICE_SIZE, @@ -102,8 +98,9 @@ static struct usb_device_descriptor device_desc = {  };  static struct usb_string strings_dev[] = { -	[STRING_MANUFACTURER_IDX].s	= "Grey Innovation", -	[STRING_PRODUCT_IDX].s		= "MIDI Gadget", +	[USB_GADGET_MANUFACTURER_IDX].s	= "Grey Innovation", +	[USB_GADGET_PRODUCT_IDX].s	= "MIDI Gadget", +	[USB_GADGET_SERIAL_IDX].s	= "",  	[STRING_DESCRIPTION_IDX].s	= "MIDI",  	{  } /* end of list */  }; @@ -140,61 +137,35 @@ static int __init midi_bind_config(struct usb_configuration *c)  static int __init midi_bind(struct usb_composite_dev *cdev)  { -	struct usb_gadget *gadget = cdev->gadget; -	int gcnum, status; - -	status = usb_string_id(cdev); -	if (status < 0) -		return status; -	strings_dev[STRING_MANUFACTURER_IDX].id = status; -	device_desc.iManufacturer = status; - -	status = usb_string_id(cdev); -	if (status < 0) -		return status; -	strings_dev[STRING_PRODUCT_IDX].id = status; -	device_desc.iProduct = status; +	int status; -	/* config description */ -	status = usb_string_id(cdev); +	status = usb_string_ids_tab(cdev, strings_dev);  	if (status < 0)  		return status; -	strings_dev[STRING_DESCRIPTION_IDX].id = status; - -	midi_config.iConfiguration = status; - -	gcnum = usb_gadget_controller_number(gadget); -	if (gcnum < 0) { -		/* gmidi is so simple (no altsettings) that -		 * it SHOULD NOT have problems with bulk-capable hardware. -		 * so warn about unrecognized controllers, don't panic. -		 */ -		pr_warning("%s: controller '%s' not recognized\n", -			   __func__, gadget->name); -		device_desc.bcdDevice = cpu_to_le16(0x9999); -	} else { -		device_desc.bcdDevice = cpu_to_le16(0x0200 + gcnum); -	} +	device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id; +	device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id; +	midi_config.iConfiguration = strings_dev[STRING_DESCRIPTION_IDX].id;  	status = usb_add_config(cdev, &midi_config, midi_bind_config);  	if (status < 0)  		return status; - +	usb_composite_overwrite_options(cdev, &coverwrite);  	pr_info("%s\n", longname);  	return 0;  } -static struct usb_composite_driver midi_driver = { +static __refdata struct usb_composite_driver midi_driver = {  	.name		= (char *) longname,  	.dev		= &device_desc,  	.strings	= dev_strings,  	.max_speed	= USB_SPEED_HIGH, +	.bind		= midi_bind,  	.unbind		= __exit_p(midi_unbind),  };  static int __init midi_init(void)  { -	return usb_composite_probe(&midi_driver, midi_bind); +	return usb_composite_probe(&midi_driver);  }  module_init(midi_init);  |