lkml.org 
[lkml]   [2009]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 34/87] sound: usb-audio: make the MotU Fastlane work again
    2.6.29-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Clemens Ladisch <clemens@ladisch.de>

    commit 55de5ef970c680d8d75f2a9aa7e4f172140dbd9c upstream.

    Kernel 2.6.18 broke the MotU Fastlane, which uses duplicate endpoint
    numbers in a manner that is not only illegal but also confuses the
    kernel's endpoint descriptor caching mechanism. To work around this, we
    have to add a separate usb_set_interface() call to guide the USB core to
    the correct descriptors.

    Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
    Reported-and-tested-by: David Fries <david@fries.net>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    sound/usb/usbaudio.c | 2 +-
    sound/usb/usbaudio.h | 2 +-
    sound/usb/usbmidi.c | 12 +++++++++++-
    sound/usb/usbquirks.h | 2 +-
    4 files changed, 14 insertions(+), 4 deletions(-)

    --- a/sound/usb/usbaudio.c
    +++ b/sound/usb/usbaudio.c
    @@ -3375,7 +3375,7 @@ static int snd_usb_create_quirk(struct s
    [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_RAW] = 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_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
    --- a/sound/usb/usbaudio.h
    +++ b/sound/usb/usbaudio.h
    @@ -153,7 +153,7 @@ enum quirk_type {
    QUIRK_MIDI_YAMAHA,
    QUIRK_MIDI_MIDIMAN,
    QUIRK_MIDI_NOVATION,
    - QUIRK_MIDI_RAW,
    + QUIRK_MIDI_FASTLANE,
    QUIRK_MIDI_EMAGIC,
    QUIRK_MIDI_CME,
    QUIRK_MIDI_US122L,
    --- a/sound/usb/usbmidi.c
    +++ b/sound/usb/usbmidi.c
    @@ -1778,8 +1778,18 @@ int snd_usb_create_midi_interface(struct
    umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
    err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
    break;
    - case QUIRK_MIDI_RAW:
    + case QUIRK_MIDI_FASTLANE:
    umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
    + /*
    + * Interface 1 contains isochronous endpoints, but with the same
    + * numbers as in interface 0. Since it is interface 1 that the
    + * USB core has most recently seen, these descriptors are now
    + * associated with the endpoint numbers. This will foul up our
    + * attempts to submit bulk/interrupt URBs to the endpoints in
    + * interface 0, so we have to make sure that the USB core looks
    + * again at interface 0 by calling usb_set_interface() on it.
    + */
    + usb_set_interface(umidi->chip->dev, 0, 0);
    err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
    break;
    case QUIRK_MIDI_EMAGIC:
    --- a/sound/usb/usbquirks.h
    +++ b/sound/usb/usbquirks.h
    @@ -1858,7 +1858,7 @@ YAMAHA_DEVICE(0x7010, "UB99"),
    .data = & (const struct snd_usb_audio_quirk[]) {
    {
    .ifnum = 0,
    - .type = QUIRK_MIDI_RAW
    + .type = QUIRK_MIDI_FASTLANE
    },
    {
    .ifnum = 1,



    \
     
     \ /
      Last update: 2009-06-09 12:33    [W:4.128 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site