lkml.org 
[lkml]   [2010]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH][ALSA] usbmidi support for Access Music synths.
    Hello,

    Thanks for your advice!

    Clemens Ladisch wrote:
    > For only one interface, you don't need to use QUIRK_COMPOSITE; see the
    > entry for the UM-880.

    I've replaced the QUIRK_COMPOSITE by a QUIRK_MIDI_FIXED_ENDPOINT, the module also probes (and fails) the USB interface 4 (I don't know what this interface is for on this device) which results in the printing of an error in the kernel log. How can I inform the snd-usb-audio driver that the USB interface 4 should be left alone?

    Please find an updated (and shrinked!) patch below.

    Signed-off-by: Sebastien Alaiwan <sebastien.alaiwan@gmail.com>
    ---
    diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
    index 9edef46..aaf8f7c 100644
    --- a/sound/usb/usbaudio.c
    +++ b/sound/usb/usbaudio.c
    @@ -3327,6 +3327,31 @@ static int snd_usb_cm6206_boot_quirk(struct usb_device *dev)
    }

    /*
    + * This call will put the synth in "USB send" mode, i.e it will send MIDI
    + * messages through USB (this is disabled at startup). The synth will aknowledge
    + * by sending a sysex on endpoint 0x85 and by displaying a USB sign on its LCD.
    + * Values here are chosen based on sniffing USB traffic under Windows.
    + */
    +static int snd_usb_accessmusic_boot_quirk(struct usb_device *dev)
    +{
    + int err, actual_length;
    +
    + /* "midi send" enable */
    + static const u8 seq[] = { 0x4e, 0x73, 0x52, 0x01 };
    +
    + void *buf = kmemdup(seq, ARRAY_SIZE(seq), GFP_KERNEL);
    + if (!buf)
    + return -ENOMEM;
    + err = usb_interrupt_msg(dev, usb_sndintpipe(dev, 0x05), buf,
    + ARRAY_SIZE(seq), &actual_length, 1000);
    + kfree(buf);
    + if (err < 0)
    + return err;
    +
    + return 0;
    +}
    +
    +/*
    * Setup quirks
    */
    #define AUDIOPHILE_SET 0x01 /* if set, parse device_setup */
    @@ -3624,6 +3649,12 @@ static void *snd_usb_audio_probe(struct usb_device *dev,
    goto __err_val;
    }

    + /* Access Music VirusTI Desktop */
    + if (id == USB_ID(0x133e, 0x0815)) {
    + if (snd_usb_accessmusic_boot_quirk(dev) < 0)
    + goto __err_val;
    + }
    +
    /*
    * found a config. now register to ALSA
    */
    diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
    index 6e89b83..8f5bc1e 100644
    --- a/sound/usb/usbmidi.c
    +++ b/sound/usb/usbmidi.c
    @@ -1407,6 +1407,12 @@ static struct port_info {
    EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
    EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
    EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
    + /* Access Music Virus TI */
    + EXTERNAL_PORT(0x133e, 0x0815, 0, "%s MIDI"),
    + PORT_INFO(0x133e, 0x0815, 1, "%s Synth", 0,
    + SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
    + SNDRV_SEQ_PORT_TYPE_HARDWARE |
    + SNDRV_SEQ_PORT_TYPE_SYNTHESIZER),
    };

    static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
    diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
    index a892bda..853788d 100644
    --- a/sound/usb/usbquirks.h
    +++ b/sound/usb/usbquirks.h
    @@ -2073,6 +2073,20 @@ YAMAHA_DEVICE(0x7010, "UB99"),
    }
    },

    +/* Access Music devices */
    +{
    + /* VirusTI Desktop */
    + USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
    + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
    + .ifnum = 3,
    + .type = QUIRK_MIDI_FIXED_ENDPOINT,
    + .data = &(const struct snd_usb_midi_endpoint_info) {
    + .out_cables = 0x0003,
    + .in_cables = 0x0003
    + }
    + }
    +},
    +
    /* */
    {
    /* aka. Serato Scratch Live DJ Box */


    \
     
     \ /
      Last update: 2010-02-11 20:41    [W:6.387 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site