Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 270416
b: refs/heads/master
c: 1ef0e0a
h: refs/heads/master
v: v3
  • Loading branch information
Kristian Amlie authored and Takashi Iwai committed Aug 26, 2011
1 parent 02240de commit 8a04243
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 391e69143d0a05f960e3ab39a8c26b7b230bb8a9
refs/heads/master: 1ef0e0a05345b7411bdabbfca27f58bd33dcc7c8
27 changes: 27 additions & 0 deletions trunk/sound/usb/midi.c
Original file line number Diff line number Diff line change
Expand Up @@ -816,6 +816,22 @@ static struct usb_protocol_ops snd_usbmidi_raw_ops = {
.output = snd_usbmidi_raw_output,
};

/*
* FTDI protocol: raw MIDI bytes, but input packets have two modem status bytes.
*/

static void snd_usbmidi_ftdi_input(struct snd_usb_midi_in_endpoint* ep,
uint8_t* buffer, int buffer_length)
{
if (buffer_length > 2)
snd_usbmidi_input_data(ep, 0, buffer + 2, buffer_length - 2);
}

static struct usb_protocol_ops snd_usbmidi_ftdi_ops = {
.input = snd_usbmidi_ftdi_input,
.output = snd_usbmidi_raw_output,
};

static void snd_usbmidi_us122l_input(struct snd_usb_midi_in_endpoint *ep,
uint8_t *buffer, int buffer_length)
{
Expand Down Expand Up @@ -2163,6 +2179,17 @@ int snd_usbmidi_create(struct snd_card *card,
/* endpoint 1 is input-only */
endpoints[1].out_cables = 0;
break;
case QUIRK_MIDI_FTDI:
umidi->usb_protocol_ops = &snd_usbmidi_ftdi_ops;

/* set baud rate to 31250 (48 MHz / 16 / 96) */
err = usb_control_msg(umidi->dev, usb_sndctrlpipe(umidi->dev, 0),
3, 0x40, 0x60, 0, NULL, 0, 1000);
if (err < 0)
break;

err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
break;
default:
snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
err = -ENXIO;
Expand Down
11 changes: 11 additions & 0 deletions trunk/sound/usb/quirks-table.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@
.idProduct = prod, \
.bInterfaceClass = USB_CLASS_VENDOR_SPEC

/* FTDI devices */
{
USB_DEVICE(0x0403, 0xb8d8),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
/* .vendor_name = "STARR LABS", */
/* .product_name = "Starr Labs MIDI USB device", */
.ifnum = 0,
.type = QUIRK_MIDI_FTDI
}
},

/* Creative/Toshiba Multimedia Center SB-0500 */
{
USB_DEVICE(0x041e, 0x3048),
Expand Down
1 change: 1 addition & 0 deletions trunk/sound/usb/quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
[QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
[QUIRK_MIDI_CME] = create_any_midi_quirk,
[QUIRK_MIDI_AKAI] = create_any_midi_quirk,
[QUIRK_MIDI_FTDI] = create_any_midi_quirk,
[QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_audio_quirk,
[QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
[QUIRK_AUDIO_EDIROL_UAXX] = create_uaxx_quirk,
Expand Down
1 change: 1 addition & 0 deletions trunk/sound/usb/usbaudio.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ enum quirk_type {
QUIRK_MIDI_CME,
QUIRK_MIDI_AKAI,
QUIRK_MIDI_US122L,
QUIRK_MIDI_FTDI,
QUIRK_AUDIO_STANDARD_INTERFACE,
QUIRK_AUDIO_FIXED_ENDPOINT,
QUIRK_AUDIO_EDIROL_UAXX,
Expand Down

0 comments on commit 8a04243

Please sign in to comment.