aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class/usb-midi.h
blob: 358cdef8492eafe23cb13a93ecd078d7d1e3e08f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
  usb-midi.h  --  USB-MIDI driver

  Copyright (C) 2001
      NAGANO Daisuke <breeze.nagano@nifty.ne.jp>

  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

/* ------------------------------------------------------------------------- */
/* Roland MIDI Devices */

#define USB_VENDOR_ID_ROLAND		0x0582
#define USBMIDI_ROLAND_UA100G		0x0000
#define USBMIDI_ROLAND_MPU64		0x0002
#define USBMIDI_ROLAND_SC8850		0x0003
#define USBMIDI_ROLAND_SC8820		0x0007
#define USBMIDI_ROLAND_UM2		0x0005
#define USBMIDI_ROLAND_UM1		0x0009
#define USBMIDI_ROLAND_PC300		0x0008

/* YAMAHA MIDI Devices */
#define USB_VENDOR_ID_YAMAHA		0x0499
#define USBMIDI_YAMAHA_MU1000		0x1001

/* Steinberg MIDI Devices */
#define USB_VENDOR_ID_STEINBERG		0x0763
#define USBMIDI_STEINBERG_USB2MIDI	0x1001

/* Mark of the Unicorn MIDI Devices */
#define USB_VENDOR_ID_MOTU		0x07fd
#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;

	u16    idVendor;
	u16    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 <michael@michaelminn.com> **/
  { /* 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 <michael@michaelminn.com> **/
  { /* 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} },
  },

  { /* Roland SC8820 */
    "Roland SC8820",
    USB_VENDOR_ID_ROLAND, USBMIDI_ROLAND_SC8820, 2, -1,
    { { 0x81, 17 }, {-1, -1} },
    { { 0x01, 17 }, {-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_ */