/* usb-midi.h -- USB-MIDI driver Copyright (C) 2001 NAGANO Daisuke This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* ------------------------------------------------------------------------- */ #ifndef _USB_MIDI_H_ #define _USB_MIDI_H_ #ifndef USB_SUBCLASS_MIDISTREAMING #define USB_SUBCLASS_MIDISTREAMING 3 #endif #define USB_DT_CS_DEVICE 0x21 #define USB_DT_CS_CONFIG 0x22 #define USB_DT_CS_STRING 0x23 #define USB_DT_CS_INTERFACE 0x24 #define USB_DT_CS_ENDPOINT 0x25 /* ------------------------------------------------------------------------- */ /* Roland MIDI Devices */ #ifndef USB_VENDOR_ID_ROLAND #define USB_VENDOR_ID_ROLAND 0x0582 #endif #define USBMIDI_ROLAND_UA100G 0x0000 #define USBMIDI_ROLAND_MPU64 0x0002 #define USBMIDI_ROLAND_SC8850 0x0003 #define USBMIDI_ROLAND_UM2 0x0005 #define USBMIDI_ROLAND_SC8820 0x0007 #define USBMIDI_ROLAND_PC300 0x0008 #define USBMIDI_ROLAND_UM1 0x0009 /* YAMAHA MIDI Devices */ #ifndef USB_VENDOR_ID_YAMAHA #define USB_VENDOR_ID_YAMAHA 0x0499 #endif #define USBMIDI_YAMAHA_MU1000 0x1001 /* Steinberg MIDI Devices */ #ifndef USB_VENDOR_ID_STEINBERG #define USB_VENDOR_ID_STEINBERG 0x0763 #endif #define USBMIDI_STEINBERG_USB2MIDI 0x1001 /* Mark of the Unicorn devices */ #ifndef USB_VENDOR_ID_MOTU #define USB_VENDOR_ID_MOTU 0x07fd #endif #define USBMIDI_MOTU_FASTLANE 0x0001 /* ------------------------------------------------------------------------- */ /* Supported devices */ struct usb_midi_endpoint { int endpoint; int cableId; /* if bit-n == 1 then cableId-n is enabled (n: 0 - 15) */ }; struct usb_midi_device { char *deviceName; int idVendor; int idProduct; int interface; int altSetting; /* -1: auto detect */ struct usb_midi_endpoint in[15]; struct usb_midi_endpoint out[15]; }; static struct usb_midi_device usb_midi_devices[] = { { /* Roland UM-1 */ "Roland UM-1", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UM1, 2, -1, { { 0x81, 1 }, {-1, -1} }, { { 0x01, 1,}, {-1, -1} }, }, { /* Roland UM-2 */ "Roland UM-2" , USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UM2, 2, -1, { { 0x81, 3 }, {-1, -1} }, { { 0x01, 3,}, {-1, -1} }, }, /** Next entry courtesy research by Michael Minn **/ { /* Roland UA-100 */ "Roland UA-100", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UA100G, 2, -1, { { 0x82, 7 }, {-1, -1} }, /** cables 0,1 and 2 for SYSEX **/ { { 0x02, 7 }, {-1, -1} }, }, /** Next entry courtesy research by Michael Minn **/ { /* Roland SC8850 */ "Roland SC8850", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_SC8850, 2, -1, { { 0x81, 0x3f }, {-1, -1} }, { { 0x01, 0x3f }, {-1, -1} }, }, { /* Roland SC8820 */ "Roland SC8820", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_SC8820, 2, -1, { { 0x81, 0x13 }, {-1, -1} }, { { 0x01, 0x13 }, {-1, -1} }, }, { /* YAMAHA MU1000 */ "YAMAHA MU1000", USB_VENDOR_ID_YAMAHA, USBMIDI_YAMAHA_MU1000, 0, -1, { { 0x81, 1 }, {-1, -1} }, { { 0x01, 15 }, {-1, -1} }, }, { /* Roland PC-300 */ "Roland PC-300", USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_PC300, 2, -1, { { 0x81, 1 }, {-1, -1} }, { { 0x01, 1 }, {-1, -1} }, }, { /* MOTU Fastlane USB */ "MOTU Fastlane USB", USB_VENDOR_ID_MOTU, USBMIDI_MOTU_FASTLANE, 1, 0, { { 0x82, 3 }, {-1, -1} }, { { 0x02, 3 }, {-1, -1} }, } }; #define VENDOR_SPECIFIC_USB_MIDI_DEVICES (sizeof(usb_midi_devices)/sizeof(struct usb_midi_device)) /* for Hot-Plugging */ static struct usb_device_id usb_midi_ids [] = { { match_flags: (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS), bInterfaceClass: USB_CLASS_AUDIO, bInterfaceSubClass: USB_SUBCLASS_MIDISTREAMING}, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UM1 ) }, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UM2 ) }, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_UA100G ) }, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_PC300 ) }, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_SC8850 ) }, { USB_DEVICE( USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_SC8820 ) }, { USB_DEVICE( USB_VENDOR_ID_YAMAHA, USBMIDI_YAMAHA_MU1000 ) }, { USB_DEVICE( USB_VENDOR_ID_MOTU, USBMIDI_MOTU_FASTLANE ) }, /* { USB_DEVICE( USB_VENDOR_ID_STEINBERG, USBMIDI_STEINBERG_USB2MIDI ) },*/ { } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, usb_midi_ids); /* ------------------------------------------------------------------------- */ #endif /* _USB_MIDI_H_ */