gmidi.c (4ba24fef3eb3b142197135223b90ced2f319cd53) | gmidi.c (c94e289f195e0e13cf34d27f9338d28221a85751) |
---|---|
1/* 2 * gmidi.c -- USB MIDI Gadget Driver 3 * 4 * Copyright (C) 2006 Thumtronics Pty Ltd. 5 * Developed for Thumtronics by Grey Innovation 6 * Ben Williamson <ben.williamson@greyinnovation.com> 7 * 8 * This software is distributed under the terms of the GNU General Public --- 104 unchanged lines hidden (view full) --- 113static struct usb_gadget_strings *dev_strings[] = { 114 &stringtab_dev, 115 NULL, 116}; 117 118static struct usb_function_instance *fi_midi; 119static struct usb_function *f_midi; 120 | 1/* 2 * gmidi.c -- USB MIDI Gadget Driver 3 * 4 * Copyright (C) 2006 Thumtronics Pty Ltd. 5 * Developed for Thumtronics by Grey Innovation 6 * Ben Williamson <ben.williamson@greyinnovation.com> 7 * 8 * This software is distributed under the terms of the GNU General Public --- 104 unchanged lines hidden (view full) --- 113static struct usb_gadget_strings *dev_strings[] = { 114 &stringtab_dev, 115 NULL, 116}; 117 118static struct usb_function_instance *fi_midi; 119static struct usb_function *f_midi; 120 |
121static int __exit midi_unbind(struct usb_composite_dev *dev) | 121static int midi_unbind(struct usb_composite_dev *dev) |
122{ 123 usb_put_function(f_midi); 124 usb_put_function_instance(fi_midi); 125 return 0; 126} 127 128static struct usb_configuration midi_config = { 129 .label = "MIDI Gadget", 130 .bConfigurationValue = 1, 131 /* .iConfiguration = DYNAMIC */ 132 .bmAttributes = USB_CONFIG_ATT_ONE, 133 .MaxPower = CONFIG_USB_GADGET_VBUS_DRAW, 134}; 135 | 122{ 123 usb_put_function(f_midi); 124 usb_put_function_instance(fi_midi); 125 return 0; 126} 127 128static struct usb_configuration midi_config = { 129 .label = "MIDI Gadget", 130 .bConfigurationValue = 1, 131 /* .iConfiguration = DYNAMIC */ 132 .bmAttributes = USB_CONFIG_ATT_ONE, 133 .MaxPower = CONFIG_USB_GADGET_VBUS_DRAW, 134}; 135 |
136static int __init midi_bind_config(struct usb_configuration *c) | 136static int midi_bind_config(struct usb_configuration *c) |
137{ 138 int status; 139 140 f_midi = usb_get_function(fi_midi); 141 if (IS_ERR(f_midi)) 142 return PTR_ERR(f_midi); 143 144 status = usb_add_function(c, f_midi); 145 if (status < 0) { 146 usb_put_function(f_midi); 147 return status; 148 } 149 150 return 0; 151} 152 | 137{ 138 int status; 139 140 f_midi = usb_get_function(fi_midi); 141 if (IS_ERR(f_midi)) 142 return PTR_ERR(f_midi); 143 144 status = usb_add_function(c, f_midi); 145 if (status < 0) { 146 usb_put_function(f_midi); 147 return status; 148 } 149 150 return 0; 151} 152 |
153static int __init midi_bind(struct usb_composite_dev *cdev) | 153static int midi_bind(struct usb_composite_dev *cdev) |
154{ 155 struct f_midi_opts *midi_opts; 156 int status; 157 158 fi_midi = usb_get_function_instance("midi"); 159 if (IS_ERR(fi_midi)) 160 return PTR_ERR(fi_midi); 161 --- 18 unchanged lines hidden (view full) --- 180 usb_composite_overwrite_options(cdev, &coverwrite); 181 pr_info("%s\n", longname); 182 return 0; 183put: 184 usb_put_function_instance(fi_midi); 185 return status; 186} 187 | 154{ 155 struct f_midi_opts *midi_opts; 156 int status; 157 158 fi_midi = usb_get_function_instance("midi"); 159 if (IS_ERR(fi_midi)) 160 return PTR_ERR(fi_midi); 161 --- 18 unchanged lines hidden (view full) --- 180 usb_composite_overwrite_options(cdev, &coverwrite); 181 pr_info("%s\n", longname); 182 return 0; 183put: 184 usb_put_function_instance(fi_midi); 185 return status; 186} 187 |
188static __refdata struct usb_composite_driver midi_driver = { | 188static struct usb_composite_driver midi_driver = { |
189 .name = (char *) longname, 190 .dev = &device_desc, 191 .strings = dev_strings, 192 .max_speed = USB_SPEED_HIGH, 193 .bind = midi_bind, | 189 .name = (char *) longname, 190 .dev = &device_desc, 191 .strings = dev_strings, 192 .max_speed = USB_SPEED_HIGH, 193 .bind = midi_bind, |
194 .unbind = __exit_p(midi_unbind), | 194 .unbind = midi_unbind, |
195}; 196 197module_usb_composite_driver(midi_driver); | 195}; 196 197module_usb_composite_driver(midi_driver); |