usb: gadget: midi: convert to new interface of f_midi
authorAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Thu, 16 Oct 2014 11:33:28 +0000 (13:33 +0200)
committerFelipe Balbi <balbi@ti.com>
Wed, 5 Nov 2014 19:36:13 +0000 (13:36 -0600)
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>
drivers/usb/gadget/legacy/Kconfig
drivers/usb/gadget/legacy/gmidi.c

index 24392d2697094525b6b9433784d70f24c4a4bb72..8011b190e679d13ae9491dfd70c911eda8e6baa6 100644 (file)
@@ -287,6 +287,7 @@ config USB_MIDI_GADGET
        depends on SND
        select USB_LIBCOMPOSITE
        select SND_RAWMIDI
+       select USB_F_MIDI
        help
          The MIDI Gadget acts as a USB Audio device, with one MIDI
          input and one MIDI output. These MIDI jacks appear as
index f704c5557d19e9307cbe247e60489c8f327602b3..0d01e467af0946be7c06aaa4ee2e6c2a76cd787d 100644 (file)
@@ -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 = {