diff options
author | Andrzej Pietrasiewicz <andrzej.p@samsung.com> | 2014-10-16 13:33:28 +0200 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2014-11-05 13:36:13 -0600 |
commit | 32522a51c7f44a48dc298fce738795dca5c8fcd6 (patch) | |
tree | c5f4c63d2d312f03c1150af713f47e4d34c3ea7b /drivers/usb/gadget/legacy/gmidi.c | |
parent | b85e9de9e818de0dcbc50b7b4242192eb6194855 (diff) | |
download | lwn-32522a51c7f44a48dc298fce738795dca5c8fcd6.tar.gz lwn-32522a51c7f44a48dc298fce738795dca5c8fcd6.zip |
usb: gadget: midi: convert to new interface of f_midi
Use the new f_midi interface so that the old can be removed.
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/gadget/legacy/gmidi.c')
-rw-r--r-- | drivers/usb/gadget/legacy/gmidi.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/drivers/usb/gadget/legacy/gmidi.c b/drivers/usb/gadget/legacy/gmidi.c index f704c5557d19..0d01e467af09 100644 --- a/drivers/usb/gadget/legacy/gmidi.c +++ b/drivers/usb/gadget/legacy/gmidi.c @@ -37,8 +37,7 @@ #include "gadget_chips.h" -#define USBF_MIDI_INCLUDED -#include "f_midi.c" +#include "u_midi.h" /*-------------------------------------------------------------------------*/ @@ -116,8 +115,13 @@ static struct usb_gadget_strings *dev_strings[] = { NULL, }; +struct usb_function_instance *fi_midi; +struct usb_function *f_midi; + static int __exit midi_unbind(struct usb_composite_dev *dev) { + usb_put_function(f_midi); + usb_put_function_instance(fi_midi); return 0; } @@ -131,28 +135,54 @@ static struct usb_configuration midi_config = { static int __init midi_bind_config(struct usb_configuration *c) { - return f_midi_bind_config(c, index, id, - in_ports, out_ports, - buflen, qlen); + int status; + + f_midi = usb_get_function(fi_midi); + if (IS_ERR(f_midi)) + return PTR_ERR(f_midi); + + status = usb_add_function(c, f_midi); + if (status < 0) { + usb_put_function(f_midi); + return status; + } + + return 0; } static int __init midi_bind(struct usb_composite_dev *cdev) { + struct f_midi_opts *midi_opts; int status; + fi_midi = usb_get_function_instance("midi"); + if (IS_ERR(fi_midi)) + return PTR_ERR(fi_midi); + + midi_opts = container_of(fi_midi, struct f_midi_opts, func_inst); + midi_opts->index = index; + midi_opts->id = id; + midi_opts->in_ports = in_ports; + midi_opts->out_ports = out_ports; + midi_opts->buflen = buflen; + midi_opts->qlen = qlen; + status = usb_string_ids_tab(cdev, strings_dev); if (status < 0) - return status; + goto put; 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; + goto put; usb_composite_overwrite_options(cdev, &coverwrite); pr_info("%s\n", longname); return 0; +put: + usb_put_function_instance(fi_midi); + return status; } static __refdata struct usb_composite_driver midi_driver = { |