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);