sound: usb: make the USB MIDI module more independent
[safe/jmp/linux-2.6] / sound / usb / usbaudio.c
index fa3f7a1..b074a59 100644 (file)
@@ -1084,7 +1084,7 @@ static int init_substream_urbs(struct snd_usb_substream *subs, unsigned int peri
                urb_packs = 1;
        urb_packs *= packs_per_ms;
        if (subs->syncpipe)
-               urb_packs = min(urb_packs, 1 << subs->syncinterval);
+               urb_packs = min(urb_packs, 1U << subs->syncinterval);
 
        /* decide how many packets to be used */
        if (is_playback) {
@@ -2126,8 +2126,8 @@ static void proc_dump_substream_formats(struct snd_usb_substream *subs, struct s
                fp = list_entry(p, struct audioformat, list);
                snd_iprintf(buffer, "  Interface %d\n", fp->iface);
                snd_iprintf(buffer, "    Altset %d\n", fp->altsetting);
-               snd_iprintf(buffer, "    Format: %#x (%d bits)\n",
-                           fp->format, snd_pcm_format_width(fp->format));
+               snd_iprintf(buffer, "    Format: %s\n",
+                           snd_pcm_format_name(fp->format));
                snd_iprintf(buffer, "    Channels: %d\n", fp->channels);
                snd_iprintf(buffer, "    Endpoint: %d %s (%s)\n",
                            fp->endpoint & USB_ENDPOINT_NUMBER_MASK,
@@ -2893,7 +2893,9 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
                if ((altsd->bInterfaceClass == USB_CLASS_AUDIO ||
                     altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) &&
                    altsd->bInterfaceSubClass == USB_SUBCLASS_MIDI_STREAMING) {
-                       if (snd_usb_create_midi_interface(chip, iface, NULL) < 0) {
+                       int err = snd_usbmidi_create(chip->card, iface,
+                                                    &chip->midi_list, NULL);
+                       if (err < 0) {
                                snd_printk(KERN_ERR "%d:%u:%d: cannot create sequencer device\n", dev->devnum, ctrlif, j);
                                continue;
                        }
@@ -3038,12 +3040,11 @@ static int create_uaxx_quirk(struct snd_usb_audio *chip,
                        .type = QUIRK_MIDI_FIXED_ENDPOINT,
                        .data = &uaxx_ep
                };
-               if (chip->usb_id == USB_ID(0x0582, 0x002b))
-                       return snd_usb_create_midi_interface(chip, iface,
-                                                            &ua700_quirk);
-               else
-                       return snd_usb_create_midi_interface(chip, iface,
-                                                            &uaxx_quirk);
+               const struct snd_usb_audio_quirk *quirk =
+                       chip->usb_id == USB_ID(0x0582, 0x002b)
+                       ? &ua700_quirk : &uaxx_quirk;
+               return snd_usbmidi_create(chip->card, iface,
+                                         &chip->midi_list, quirk);
        }
 
        if (altsd->bNumEndpoints != 1)
@@ -3370,6 +3371,13 @@ static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
        return 0; /* keep this altsetting */
 }
 
+static int create_any_midi_quirk(struct snd_usb_audio *chip,
+                                struct usb_interface *intf,
+                                const struct snd_usb_audio_quirk *quirk)
+{
+       return snd_usbmidi_create(chip->card, intf, &chip->midi_list, quirk);
+}
+
 /*
  * audio-interface quirks
  *
@@ -3387,14 +3395,14 @@ static int snd_usb_create_quirk(struct snd_usb_audio *chip,
        static const quirk_func_t quirk_funcs[] = {
                [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk,
                [QUIRK_COMPOSITE] = create_composite_quirk,
-               [QUIRK_MIDI_STANDARD_INTERFACE] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_FIXED_ENDPOINT] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_YAMAHA] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_MIDIMAN] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_NOVATION] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_FASTLANE] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_EMAGIC] = snd_usb_create_midi_interface,
-               [QUIRK_MIDI_CME] = snd_usb_create_midi_interface,
+               [QUIRK_MIDI_STANDARD_INTERFACE] = create_any_midi_quirk,
+               [QUIRK_MIDI_FIXED_ENDPOINT] = create_any_midi_quirk,
+               [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk,
+               [QUIRK_MIDI_MIDIMAN] = create_any_midi_quirk,
+               [QUIRK_MIDI_NOVATION] = create_any_midi_quirk,
+               [QUIRK_MIDI_FASTLANE] = create_any_midi_quirk,
+               [QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
+               [QUIRK_MIDI_CME] = create_any_midi_quirk,
                [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
                [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
                [QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk,