usbquirks.h 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390
  1. /*
  2. * ALSA USB Audio Driver
  3. *
  4. * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
  5. * Clemens Ladisch <clemens@ladisch.de>
  6. *
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. */
  22. /*
  23. * The contents of this file are part of the driver's id_table.
  24. *
  25. * In a perfect world, this file would be empty.
  26. */
  27. /*
  28. * Use this for devices where other interfaces are standard compliant,
  29. * to prevent the quirk being applied to those interfaces. (To work with
  30. * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
  31. */
  32. #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
  33. .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
  34. USB_DEVICE_ID_MATCH_PRODUCT | \
  35. USB_DEVICE_ID_MATCH_INT_CLASS, \
  36. .idVendor = vend, \
  37. .idProduct = prod, \
  38. .bInterfaceClass = USB_CLASS_VENDOR_SPEC
  39. /*
  40. * Yamaha devices
  41. */
  42. #define YAMAHA_DEVICE(id, name) { \
  43. USB_DEVICE(0x0499, id), \
  44. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \
  45. .vendor_name = "Yamaha", \
  46. .product_name = name, \
  47. .ifnum = QUIRK_ANY_INTERFACE, \
  48. .type = QUIRK_MIDI_YAMAHA \
  49. } \
  50. }
  51. #define YAMAHA_INTERFACE(id, intf, name) { \
  52. USB_DEVICE_VENDOR_SPEC(0x0499, id), \
  53. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { \
  54. .vendor_name = "Yamaha", \
  55. .product_name = name, \
  56. .ifnum = intf, \
  57. .type = QUIRK_MIDI_YAMAHA \
  58. } \
  59. }
  60. YAMAHA_DEVICE(0x1000, "UX256"),
  61. YAMAHA_DEVICE(0x1001, "MU1000"),
  62. YAMAHA_DEVICE(0x1002, "MU2000"),
  63. YAMAHA_DEVICE(0x1003, "MU500"),
  64. YAMAHA_INTERFACE(0x1004, 3, "UW500"),
  65. YAMAHA_DEVICE(0x1005, "MOTIF6"),
  66. YAMAHA_DEVICE(0x1006, "MOTIF7"),
  67. YAMAHA_DEVICE(0x1007, "MOTIF8"),
  68. YAMAHA_DEVICE(0x1008, "UX96"),
  69. YAMAHA_DEVICE(0x1009, "UX16"),
  70. YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
  71. YAMAHA_DEVICE(0x100c, "UC-MX"),
  72. YAMAHA_DEVICE(0x100d, "UC-KX"),
  73. YAMAHA_DEVICE(0x100e, "S08"),
  74. YAMAHA_DEVICE(0x100f, "CLP-150"),
  75. YAMAHA_DEVICE(0x1010, "CLP-170"),
  76. YAMAHA_DEVICE(0x1011, "P-250"),
  77. YAMAHA_DEVICE(0x1012, "TYROS"),
  78. YAMAHA_DEVICE(0x1013, "PF-500"),
  79. YAMAHA_DEVICE(0x1014, "S90"),
  80. YAMAHA_DEVICE(0x1015, "MOTIF-R"),
  81. YAMAHA_DEVICE(0x1017, "CVP-204"),
  82. YAMAHA_DEVICE(0x1018, "CVP-206"),
  83. YAMAHA_DEVICE(0x1019, "CVP-208"),
  84. YAMAHA_DEVICE(0x101a, "CVP-210"),
  85. YAMAHA_DEVICE(0x101b, "PSR-1100"),
  86. YAMAHA_DEVICE(0x101c, "PSR-2100"),
  87. YAMAHA_DEVICE(0x101d, "CLP-175"),
  88. YAMAHA_DEVICE(0x101e, "PSR-K1"),
  89. YAMAHA_DEVICE(0x1020, "EZ-250i"),
  90. YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
  91. YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
  92. YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
  93. YAMAHA_DEVICE(0x1024, "CVP-301"),
  94. YAMAHA_DEVICE(0x1025, "CVP-303"),
  95. YAMAHA_DEVICE(0x1026, "CVP-305"),
  96. YAMAHA_DEVICE(0x1027, "CVP-307"),
  97. YAMAHA_DEVICE(0x1028, "CVP-309"),
  98. YAMAHA_DEVICE(0x1029, "CVP-309GP"),
  99. YAMAHA_DEVICE(0x102a, "PSR-1500"),
  100. YAMAHA_DEVICE(0x102b, "PSR-3000"),
  101. YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
  102. YAMAHA_DEVICE(0x1030, "PSR-295/293"),
  103. YAMAHA_DEVICE(0x1031, "DGX-205/203"),
  104. YAMAHA_DEVICE(0x1032, "DGX-305"),
  105. YAMAHA_DEVICE(0x1033, "DGX-505"),
  106. YAMAHA_DEVICE(0x1034, NULL),
  107. YAMAHA_DEVICE(0x1035, NULL),
  108. YAMAHA_DEVICE(0x1036, NULL),
  109. YAMAHA_DEVICE(0x1037, NULL),
  110. YAMAHA_DEVICE(0x1038, NULL),
  111. YAMAHA_DEVICE(0x1039, NULL),
  112. YAMAHA_DEVICE(0x103a, NULL),
  113. YAMAHA_DEVICE(0x103b, NULL),
  114. YAMAHA_DEVICE(0x103c, NULL),
  115. YAMAHA_DEVICE(0x2000, "DGP-7"),
  116. YAMAHA_DEVICE(0x2001, "DGP-5"),
  117. YAMAHA_DEVICE(0x2002, NULL),
  118. YAMAHA_DEVICE(0x5000, "CS1D"),
  119. YAMAHA_DEVICE(0x5001, "DSP1D"),
  120. YAMAHA_DEVICE(0x5002, "DME32"),
  121. YAMAHA_DEVICE(0x5003, "DM2000"),
  122. YAMAHA_DEVICE(0x5004, "02R96"),
  123. YAMAHA_DEVICE(0x5005, "ACU16-C"),
  124. YAMAHA_DEVICE(0x5006, "NHB32-C"),
  125. YAMAHA_DEVICE(0x5007, "DM1000"),
  126. YAMAHA_DEVICE(0x5008, "01V96"),
  127. YAMAHA_DEVICE(0x5009, "SPX2000"),
  128. YAMAHA_DEVICE(0x500a, "PM5D"),
  129. YAMAHA_DEVICE(0x500b, "DME64N"),
  130. YAMAHA_DEVICE(0x500c, "DME24N"),
  131. YAMAHA_DEVICE(0x500d, NULL),
  132. YAMAHA_DEVICE(0x500e, NULL),
  133. YAMAHA_DEVICE(0x7000, "DTX"),
  134. YAMAHA_DEVICE(0x7010, "UB99"),
  135. #undef YAMAHA_DEVICE
  136. #undef YAMAHA_INTERFACE
  137. /*
  138. * Roland/RolandED/Edirol/BOSS devices
  139. */
  140. {
  141. USB_DEVICE(0x0582, 0x0000),
  142. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  143. .vendor_name = "Roland",
  144. .product_name = "UA-100",
  145. .ifnum = QUIRK_ANY_INTERFACE,
  146. .type = QUIRK_COMPOSITE,
  147. .data = (const snd_usb_audio_quirk_t[]) {
  148. {
  149. .ifnum = 0,
  150. .type = QUIRK_AUDIO_FIXED_ENDPOINT,
  151. .data = & (const struct audioformat) {
  152. .format = SNDRV_PCM_FORMAT_S16_LE,
  153. .channels = 4,
  154. .iface = 0,
  155. .altsetting = 1,
  156. .altset_idx = 1,
  157. .attributes = 0,
  158. .endpoint = 0x01,
  159. .ep_attr = 0x09,
  160. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  161. .rate_min = 44100,
  162. .rate_max = 44100,
  163. }
  164. },
  165. {
  166. .ifnum = 1,
  167. .type = QUIRK_AUDIO_FIXED_ENDPOINT,
  168. .data = & (const struct audioformat) {
  169. .format = SNDRV_PCM_FORMAT_S16_LE,
  170. .channels = 2,
  171. .iface = 1,
  172. .altsetting = 1,
  173. .altset_idx = 1,
  174. .attributes = EP_CS_ATTR_FILL_MAX,
  175. .endpoint = 0x81,
  176. .ep_attr = 0x05,
  177. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  178. .rate_min = 44100,
  179. .rate_max = 44100,
  180. }
  181. },
  182. {
  183. .ifnum = 2,
  184. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  185. .data = & (const snd_usb_midi_endpoint_info_t) {
  186. .out_cables = 0x0007,
  187. .in_cables = 0x0007
  188. }
  189. },
  190. {
  191. .ifnum = -1
  192. }
  193. }
  194. }
  195. },
  196. {
  197. USB_DEVICE(0x0582, 0x0002),
  198. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  199. .vendor_name = "EDIROL",
  200. .product_name = "UM-4",
  201. .ifnum = QUIRK_ANY_INTERFACE,
  202. .type = QUIRK_COMPOSITE,
  203. .data = (const snd_usb_audio_quirk_t[]) {
  204. {
  205. .ifnum = 0,
  206. .type = QUIRK_IGNORE_INTERFACE
  207. },
  208. {
  209. .ifnum = 1,
  210. .type = QUIRK_IGNORE_INTERFACE
  211. },
  212. {
  213. .ifnum = 2,
  214. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  215. .data = & (const snd_usb_midi_endpoint_info_t) {
  216. .out_cables = 0x000f,
  217. .in_cables = 0x000f
  218. }
  219. },
  220. {
  221. .ifnum = -1
  222. }
  223. }
  224. }
  225. },
  226. {
  227. USB_DEVICE(0x0582, 0x0003),
  228. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  229. .vendor_name = "Roland",
  230. .product_name = "SC-8850",
  231. .ifnum = QUIRK_ANY_INTERFACE,
  232. .type = QUIRK_COMPOSITE,
  233. .data = (const snd_usb_audio_quirk_t[]) {
  234. {
  235. .ifnum = 0,
  236. .type = QUIRK_IGNORE_INTERFACE
  237. },
  238. {
  239. .ifnum = 1,
  240. .type = QUIRK_IGNORE_INTERFACE
  241. },
  242. {
  243. .ifnum = 2,
  244. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  245. .data = & (const snd_usb_midi_endpoint_info_t) {
  246. .out_cables = 0x003f,
  247. .in_cables = 0x003f
  248. }
  249. },
  250. {
  251. .ifnum = -1
  252. }
  253. }
  254. }
  255. },
  256. {
  257. USB_DEVICE(0x0582, 0x0004),
  258. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  259. .vendor_name = "Roland",
  260. .product_name = "U-8",
  261. .ifnum = QUIRK_ANY_INTERFACE,
  262. .type = QUIRK_COMPOSITE,
  263. .data = (const snd_usb_audio_quirk_t[]) {
  264. {
  265. .ifnum = 0,
  266. .type = QUIRK_IGNORE_INTERFACE
  267. },
  268. {
  269. .ifnum = 1,
  270. .type = QUIRK_IGNORE_INTERFACE
  271. },
  272. {
  273. .ifnum = 2,
  274. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  275. .data = & (const snd_usb_midi_endpoint_info_t) {
  276. .out_cables = 0x0005,
  277. .in_cables = 0x0005
  278. }
  279. },
  280. {
  281. .ifnum = -1
  282. }
  283. }
  284. }
  285. },
  286. {
  287. USB_DEVICE(0x0582, 0x0005),
  288. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  289. .vendor_name = "EDIROL",
  290. .product_name = "UM-2",
  291. .ifnum = QUIRK_ANY_INTERFACE,
  292. .type = QUIRK_COMPOSITE,
  293. .data = (const snd_usb_audio_quirk_t[]) {
  294. {
  295. .ifnum = 0,
  296. .type = QUIRK_IGNORE_INTERFACE
  297. },
  298. {
  299. .ifnum = 1,
  300. .type = QUIRK_IGNORE_INTERFACE
  301. },
  302. {
  303. .ifnum = 2,
  304. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  305. .data = & (const snd_usb_midi_endpoint_info_t) {
  306. .out_cables = 0x0003,
  307. .in_cables = 0x0003
  308. }
  309. },
  310. {
  311. .ifnum = -1
  312. }
  313. }
  314. }
  315. },
  316. {
  317. USB_DEVICE(0x0582, 0x0007),
  318. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  319. .vendor_name = "Roland",
  320. .product_name = "SC-8820",
  321. .ifnum = QUIRK_ANY_INTERFACE,
  322. .type = QUIRK_COMPOSITE,
  323. .data = (const snd_usb_audio_quirk_t[]) {
  324. {
  325. .ifnum = 0,
  326. .type = QUIRK_IGNORE_INTERFACE
  327. },
  328. {
  329. .ifnum = 1,
  330. .type = QUIRK_IGNORE_INTERFACE
  331. },
  332. {
  333. .ifnum = 2,
  334. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  335. .data = & (const snd_usb_midi_endpoint_info_t) {
  336. .out_cables = 0x0013,
  337. .in_cables = 0x0013
  338. }
  339. },
  340. {
  341. .ifnum = -1
  342. }
  343. }
  344. }
  345. },
  346. {
  347. USB_DEVICE(0x0582, 0x0008),
  348. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  349. .vendor_name = "Roland",
  350. .product_name = "PC-300",
  351. .ifnum = QUIRK_ANY_INTERFACE,
  352. .type = QUIRK_COMPOSITE,
  353. .data = (const snd_usb_audio_quirk_t[]) {
  354. {
  355. .ifnum = 0,
  356. .type = QUIRK_IGNORE_INTERFACE
  357. },
  358. {
  359. .ifnum = 1,
  360. .type = QUIRK_IGNORE_INTERFACE
  361. },
  362. {
  363. .ifnum = 2,
  364. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  365. .data = & (const snd_usb_midi_endpoint_info_t) {
  366. .out_cables = 0x0001,
  367. .in_cables = 0x0001
  368. }
  369. },
  370. {
  371. .ifnum = -1
  372. }
  373. }
  374. }
  375. },
  376. {
  377. USB_DEVICE(0x0582, 0x0009),
  378. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  379. .vendor_name = "EDIROL",
  380. .product_name = "UM-1",
  381. .ifnum = QUIRK_ANY_INTERFACE,
  382. .type = QUIRK_COMPOSITE,
  383. .data = (const snd_usb_audio_quirk_t[]) {
  384. {
  385. .ifnum = 0,
  386. .type = QUIRK_IGNORE_INTERFACE
  387. },
  388. {
  389. .ifnum = 1,
  390. .type = QUIRK_IGNORE_INTERFACE
  391. },
  392. {
  393. .ifnum = 2,
  394. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  395. .data = & (const snd_usb_midi_endpoint_info_t) {
  396. .out_cables = 0x0001,
  397. .in_cables = 0x0001
  398. }
  399. },
  400. {
  401. .ifnum = -1
  402. }
  403. }
  404. }
  405. },
  406. {
  407. USB_DEVICE(0x0582, 0x000b),
  408. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  409. .vendor_name = "Roland",
  410. .product_name = "SK-500",
  411. .ifnum = QUIRK_ANY_INTERFACE,
  412. .type = QUIRK_COMPOSITE,
  413. .data = (const snd_usb_audio_quirk_t[]) {
  414. {
  415. .ifnum = 0,
  416. .type = QUIRK_IGNORE_INTERFACE
  417. },
  418. {
  419. .ifnum = 1,
  420. .type = QUIRK_IGNORE_INTERFACE
  421. },
  422. {
  423. .ifnum = 2,
  424. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  425. .data = & (const snd_usb_midi_endpoint_info_t) {
  426. .out_cables = 0x0013,
  427. .in_cables = 0x0013
  428. }
  429. },
  430. {
  431. .ifnum = -1
  432. }
  433. }
  434. }
  435. },
  436. {
  437. /* thanks to Emiliano Grilli <emillo@libero.it>
  438. * for helping researching this data */
  439. USB_DEVICE(0x0582, 0x000c),
  440. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  441. .vendor_name = "Roland",
  442. .product_name = "SC-D70",
  443. .ifnum = QUIRK_ANY_INTERFACE,
  444. .type = QUIRK_COMPOSITE,
  445. .data = (const snd_usb_audio_quirk_t[]) {
  446. {
  447. .ifnum = 0,
  448. .type = QUIRK_AUDIO_FIXED_ENDPOINT,
  449. .data = & (const struct audioformat) {
  450. .format = SNDRV_PCM_FORMAT_S24_3LE,
  451. .channels = 2,
  452. .iface = 0,
  453. .altsetting = 1,
  454. .altset_idx = 1,
  455. .attributes = 0,
  456. .endpoint = 0x01,
  457. .ep_attr = 0x01,
  458. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  459. .rate_min = 44100,
  460. .rate_max = 44100,
  461. }
  462. },
  463. {
  464. .ifnum = 1,
  465. .type = QUIRK_AUDIO_FIXED_ENDPOINT,
  466. .data = & (const struct audioformat) {
  467. .format = SNDRV_PCM_FORMAT_S24_3LE,
  468. .channels = 2,
  469. .iface = 1,
  470. .altsetting = 1,
  471. .altset_idx = 1,
  472. .attributes = 0,
  473. .endpoint = 0x81,
  474. .ep_attr = 0x01,
  475. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  476. .rate_min = 44100,
  477. .rate_max = 44100,
  478. }
  479. },
  480. {
  481. .ifnum = 2,
  482. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  483. .data = & (const snd_usb_midi_endpoint_info_t) {
  484. .out_cables = 0x0007,
  485. .in_cables = 0x0007
  486. }
  487. },
  488. {
  489. .ifnum = -1
  490. }
  491. }
  492. }
  493. },
  494. { /*
  495. * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
  496. * If the advanced mode switch at the back of the unit is off, the
  497. * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
  498. * but offers only 16-bit PCM.
  499. * In advanced mode, the UA-5 will output S24_3LE samples (two
  500. * channels) at the rate indicated on the front switch, including
  501. * the 96kHz sample rate.
  502. */
  503. USB_DEVICE(0x0582, 0x0010),
  504. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  505. .vendor_name = "EDIROL",
  506. .product_name = "UA-5",
  507. .ifnum = QUIRK_ANY_INTERFACE,
  508. .type = QUIRK_COMPOSITE,
  509. .data = (const snd_usb_audio_quirk_t[]) {
  510. {
  511. .ifnum = 1,
  512. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  513. },
  514. {
  515. .ifnum = 2,
  516. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  517. },
  518. {
  519. .ifnum = -1
  520. }
  521. }
  522. }
  523. },
  524. {
  525. USB_DEVICE(0x0582, 0x0012),
  526. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  527. .vendor_name = "Roland",
  528. .product_name = "XV-5050",
  529. .ifnum = 0,
  530. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  531. .data = & (const snd_usb_midi_endpoint_info_t) {
  532. .out_cables = 0x0001,
  533. .in_cables = 0x0001
  534. }
  535. }
  536. },
  537. {
  538. USB_DEVICE(0x0582, 0x0014),
  539. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  540. .vendor_name = "EDIROL",
  541. .product_name = "UM-880",
  542. .ifnum = 0,
  543. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  544. .data = & (const snd_usb_midi_endpoint_info_t) {
  545. .out_cables = 0x01ff,
  546. .in_cables = 0x01ff
  547. }
  548. }
  549. },
  550. {
  551. USB_DEVICE(0x0582, 0x0016),
  552. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  553. .vendor_name = "EDIROL",
  554. .product_name = "SD-90",
  555. .ifnum = QUIRK_ANY_INTERFACE,
  556. .type = QUIRK_COMPOSITE,
  557. .data = (const snd_usb_audio_quirk_t[]) {
  558. {
  559. .ifnum = 0,
  560. .type = QUIRK_IGNORE_INTERFACE
  561. },
  562. {
  563. .ifnum = 1,
  564. .type = QUIRK_IGNORE_INTERFACE
  565. },
  566. {
  567. .ifnum = 2,
  568. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  569. .data = & (const snd_usb_midi_endpoint_info_t) {
  570. .out_cables = 0x000f,
  571. .in_cables = 0x000f
  572. }
  573. },
  574. {
  575. .ifnum = -1
  576. }
  577. }
  578. }
  579. },
  580. {
  581. USB_DEVICE(0x0582, 0x001b),
  582. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  583. .vendor_name = "Roland",
  584. .product_name = "MMP-2",
  585. .ifnum = QUIRK_ANY_INTERFACE,
  586. .type = QUIRK_COMPOSITE,
  587. .data = (const snd_usb_audio_quirk_t[]) {
  588. {
  589. .ifnum = 0,
  590. .type = QUIRK_IGNORE_INTERFACE
  591. },
  592. {
  593. .ifnum = 1,
  594. .type = QUIRK_IGNORE_INTERFACE
  595. },
  596. {
  597. .ifnum = 2,
  598. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  599. .data = & (const snd_usb_midi_endpoint_info_t) {
  600. .out_cables = 0x0001,
  601. .in_cables = 0x0001
  602. }
  603. },
  604. {
  605. .ifnum = -1
  606. }
  607. }
  608. }
  609. },
  610. {
  611. USB_DEVICE(0x0582, 0x001d),
  612. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  613. .vendor_name = "Roland",
  614. .product_name = "V-SYNTH",
  615. .ifnum = 0,
  616. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  617. .data = & (const snd_usb_midi_endpoint_info_t) {
  618. .out_cables = 0x0001,
  619. .in_cables = 0x0001
  620. }
  621. }
  622. },
  623. {
  624. USB_DEVICE(0x0582, 0x0023),
  625. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  626. .vendor_name = "EDIROL",
  627. .product_name = "UM-550",
  628. .ifnum = 0,
  629. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  630. .data = & (const snd_usb_midi_endpoint_info_t) {
  631. .out_cables = 0x003f,
  632. .in_cables = 0x003f
  633. }
  634. }
  635. },
  636. {
  637. /*
  638. * This quirk is for the "Advanced Driver" mode. If off, the UA-20
  639. * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
  640. * and no MIDI.
  641. */
  642. USB_DEVICE(0x0582, 0x0025),
  643. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  644. .vendor_name = "EDIROL",
  645. .product_name = "UA-20",
  646. .ifnum = QUIRK_ANY_INTERFACE,
  647. .type = QUIRK_COMPOSITE,
  648. .data = (const snd_usb_audio_quirk_t[]) {
  649. {
  650. .ifnum = 1,
  651. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  652. },
  653. {
  654. .ifnum = 2,
  655. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  656. },
  657. {
  658. .ifnum = 3,
  659. .type = QUIRK_MIDI_STANDARD_INTERFACE
  660. },
  661. {
  662. .ifnum = -1
  663. }
  664. }
  665. }
  666. },
  667. {
  668. USB_DEVICE(0x0582, 0x0027),
  669. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  670. .vendor_name = "EDIROL",
  671. .product_name = "SD-20",
  672. .ifnum = 0,
  673. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  674. .data = & (const snd_usb_midi_endpoint_info_t) {
  675. .out_cables = 0x0003,
  676. .in_cables = 0x0007
  677. }
  678. }
  679. },
  680. {
  681. USB_DEVICE(0x0582, 0x0029),
  682. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  683. .vendor_name = "EDIROL",
  684. .product_name = "SD-80",
  685. .ifnum = 0,
  686. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  687. .data = & (const snd_usb_midi_endpoint_info_t) {
  688. .out_cables = 0x000f,
  689. .in_cables = 0x000f
  690. }
  691. }
  692. },
  693. { /*
  694. * This quirk is for the "Advanced" modes of the Edirol UA-700.
  695. * If the sample format switch is not in an advanced setting, the
  696. * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
  697. * but offers only 16-bit PCM and no MIDI.
  698. */
  699. USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
  700. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  701. .vendor_name = "EDIROL",
  702. .product_name = "UA-700",
  703. .ifnum = QUIRK_ANY_INTERFACE,
  704. .type = QUIRK_COMPOSITE,
  705. .data = (const snd_usb_audio_quirk_t[]) {
  706. {
  707. .ifnum = 1,
  708. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  709. },
  710. {
  711. .ifnum = 2,
  712. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  713. },
  714. {
  715. .ifnum = 3,
  716. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  717. },
  718. {
  719. .ifnum = -1
  720. }
  721. }
  722. }
  723. },
  724. {
  725. USB_DEVICE(0x0582, 0x002d),
  726. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  727. .vendor_name = "Roland",
  728. .product_name = "XV-2020",
  729. .ifnum = 0,
  730. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  731. .data = & (const snd_usb_midi_endpoint_info_t) {
  732. .out_cables = 0x0001,
  733. .in_cables = 0x0001
  734. }
  735. }
  736. },
  737. {
  738. USB_DEVICE(0x0582, 0x002f),
  739. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  740. .vendor_name = "Roland",
  741. .product_name = "VariOS",
  742. .ifnum = 0,
  743. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  744. .data = & (const snd_usb_midi_endpoint_info_t) {
  745. .out_cables = 0x0007,
  746. .in_cables = 0x0007
  747. }
  748. }
  749. },
  750. {
  751. USB_DEVICE(0x0582, 0x0033),
  752. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  753. .vendor_name = "EDIROL",
  754. .product_name = "PCR",
  755. .ifnum = 0,
  756. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  757. .data = & (const snd_usb_midi_endpoint_info_t) {
  758. .out_cables = 0x0003,
  759. .in_cables = 0x0007
  760. }
  761. }
  762. },
  763. {
  764. USB_DEVICE(0x0582, 0x0037),
  765. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  766. .vendor_name = "Roland",
  767. .product_name = "Digital Piano",
  768. .ifnum = 0,
  769. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  770. .data = & (const snd_usb_midi_endpoint_info_t) {
  771. .out_cables = 0x0001,
  772. .in_cables = 0x0001
  773. }
  774. }
  775. },
  776. {
  777. /*
  778. * This quirk is for the "Advanced Driver" mode. If off, the GS-10
  779. * has ID 0x003c and is standard compliant, but has only 16-bit PCM
  780. * and no MIDI.
  781. */
  782. USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
  783. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  784. .vendor_name = "BOSS",
  785. .product_name = "GS-10",
  786. .ifnum = QUIRK_ANY_INTERFACE,
  787. .type = QUIRK_COMPOSITE,
  788. .data = & (const snd_usb_audio_quirk_t[]) {
  789. {
  790. .ifnum = 1,
  791. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  792. },
  793. {
  794. .ifnum = 2,
  795. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  796. },
  797. {
  798. .ifnum = 3,
  799. .type = QUIRK_MIDI_STANDARD_INTERFACE
  800. },
  801. {
  802. .ifnum = -1
  803. }
  804. }
  805. }
  806. },
  807. {
  808. USB_DEVICE(0x0582, 0x0040),
  809. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  810. .vendor_name = "Roland",
  811. .product_name = "GI-20",
  812. .ifnum = 0,
  813. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  814. .data = & (const snd_usb_midi_endpoint_info_t) {
  815. .out_cables = 0x0001,
  816. .in_cables = 0x0001
  817. }
  818. }
  819. },
  820. {
  821. USB_DEVICE(0x0582, 0x0042),
  822. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  823. .vendor_name = "Roland",
  824. .product_name = "RS-70",
  825. .ifnum = 0,
  826. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  827. .data = & (const snd_usb_midi_endpoint_info_t) {
  828. .out_cables = 0x0001,
  829. .in_cables = 0x0001
  830. }
  831. }
  832. },
  833. {
  834. USB_DEVICE(0x0582, 0x0044),
  835. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  836. .vendor_name = "Roland",
  837. .product_name = "UA-1000",
  838. .ifnum = QUIRK_ANY_INTERFACE,
  839. .type = QUIRK_COMPOSITE,
  840. .data = (const snd_usb_audio_quirk_t[]) {
  841. {
  842. .ifnum = 1,
  843. .type = QUIRK_AUDIO_EDIROL_UA1000
  844. },
  845. {
  846. .ifnum = 2,
  847. .type = QUIRK_AUDIO_EDIROL_UA1000
  848. },
  849. {
  850. .ifnum = 3,
  851. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  852. .data = & (const snd_usb_midi_endpoint_info_t) {
  853. .out_cables = 0x0003,
  854. .in_cables = 0x0003
  855. }
  856. },
  857. {
  858. .ifnum = -1
  859. }
  860. }
  861. }
  862. },
  863. {
  864. USB_DEVICE(0x0582, 0x0048),
  865. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  866. .vendor_name = "EDIROL",
  867. .product_name = "UR-80",
  868. .ifnum = 0,
  869. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  870. .data = & (const snd_usb_midi_endpoint_info_t) {
  871. .out_cables = 0x0003,
  872. .in_cables = 0x0007
  873. }
  874. }
  875. },
  876. {
  877. USB_DEVICE(0x0582, 0x004d),
  878. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  879. .vendor_name = "EDIROL",
  880. .product_name = "PCR-A",
  881. .ifnum = 0,
  882. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  883. .data = & (const snd_usb_midi_endpoint_info_t) {
  884. .out_cables = 0x0003,
  885. .in_cables = 0x0007
  886. }
  887. }
  888. },
  889. {
  890. /*
  891. * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
  892. * is standard compliant, but has only 16-bit PCM.
  893. */
  894. USB_DEVICE(0x0582, 0x0050),
  895. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  896. .vendor_name = "EDIROL",
  897. .product_name = "UA-3FX",
  898. .ifnum = QUIRK_ANY_INTERFACE,
  899. .type = QUIRK_COMPOSITE,
  900. .data = (const snd_usb_audio_quirk_t[]) {
  901. {
  902. .ifnum = 1,
  903. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  904. },
  905. {
  906. .ifnum = 2,
  907. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  908. },
  909. {
  910. .ifnum = -1
  911. }
  912. }
  913. }
  914. },
  915. {
  916. USB_DEVICE(0x0582, 0x0052),
  917. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  918. .vendor_name = "EDIROL",
  919. .product_name = "UM-1SX",
  920. .ifnum = 0,
  921. .type = QUIRK_MIDI_STANDARD_INTERFACE
  922. }
  923. },
  924. {
  925. USB_DEVICE(0x0582, 0x0065),
  926. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  927. .vendor_name = "EDIROL",
  928. .product_name = "PCR-1",
  929. .ifnum = 0,
  930. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  931. .data = & (const snd_usb_midi_endpoint_info_t) {
  932. .out_cables = 0x0001,
  933. .in_cables = 0x0003
  934. }
  935. }
  936. },
  937. {
  938. USB_DEVICE_VENDOR_SPEC(0x0582, 0x006a),
  939. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  940. .vendor_name = "Roland",
  941. .product_name = "SP-606",
  942. .ifnum = 3,
  943. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  944. .data = & (const snd_usb_midi_endpoint_info_t) {
  945. .out_cables = 0x0001,
  946. .in_cables = 0x0001
  947. }
  948. }
  949. },
  950. {
  951. USB_DEVICE(0x0582, 0x006d),
  952. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  953. .vendor_name = "Roland",
  954. .product_name = "FANTOM-X",
  955. .ifnum = 0,
  956. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  957. .data = & (const snd_usb_midi_endpoint_info_t) {
  958. .out_cables = 0x0001,
  959. .in_cables = 0x0001
  960. }
  961. }
  962. },
  963. { /*
  964. * This quirk is for the "Advanced" modes of the Edirol UA-25.
  965. * If the switch is not in an advanced setting, the UA-25 has
  966. * ID 0x0582/0x0073 and is standard compliant (no quirks), but
  967. * offers only 16-bit PCM at 44.1 kHz and no MIDI.
  968. */
  969. USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
  970. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  971. .vendor_name = "EDIROL",
  972. .product_name = "UA-25",
  973. .ifnum = QUIRK_ANY_INTERFACE,
  974. .type = QUIRK_COMPOSITE,
  975. .data = (const snd_usb_audio_quirk_t[]) {
  976. {
  977. .ifnum = 0,
  978. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  979. },
  980. {
  981. .ifnum = 1,
  982. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  983. },
  984. {
  985. .ifnum = 2,
  986. .type = QUIRK_AUDIO_EDIROL_UA700_UA25
  987. },
  988. {
  989. .ifnum = -1
  990. }
  991. }
  992. }
  993. },
  994. {
  995. USB_DEVICE(0x0582, 0x0075),
  996. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  997. .vendor_name = "BOSS",
  998. .product_name = "DR-880",
  999. .ifnum = 0,
  1000. .type = QUIRK_MIDI_FIXED_ENDPOINT,
  1001. .data = & (const snd_usb_midi_endpoint_info_t) {
  1002. .out_cables = 0x0001,
  1003. .in_cables = 0x0001
  1004. }
  1005. }
  1006. },
  1007. /* Midiman/M-Audio devices */
  1008. {
  1009. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
  1010. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1011. .vendor_name = "M-Audio",
  1012. .product_name = "MidiSport 2x2",
  1013. .ifnum = QUIRK_ANY_INTERFACE,
  1014. .type = QUIRK_MIDI_MIDIMAN,
  1015. .data = & (const snd_usb_midi_endpoint_info_t) {
  1016. .out_cables = 0x0003,
  1017. .in_cables = 0x0003
  1018. }
  1019. }
  1020. },
  1021. {
  1022. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
  1023. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1024. .vendor_name = "M-Audio",
  1025. .product_name = "MidiSport 1x1",
  1026. .ifnum = QUIRK_ANY_INTERFACE,
  1027. .type = QUIRK_MIDI_MIDIMAN,
  1028. .data = & (const snd_usb_midi_endpoint_info_t) {
  1029. .out_cables = 0x0001,
  1030. .in_cables = 0x0001
  1031. }
  1032. }
  1033. },
  1034. {
  1035. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
  1036. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1037. .vendor_name = "M-Audio",
  1038. .product_name = "Keystation",
  1039. .ifnum = QUIRK_ANY_INTERFACE,
  1040. .type = QUIRK_MIDI_MIDIMAN,
  1041. .data = & (const snd_usb_midi_endpoint_info_t) {
  1042. .out_cables = 0x0001,
  1043. .in_cables = 0x0001
  1044. }
  1045. }
  1046. },
  1047. {
  1048. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
  1049. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1050. .vendor_name = "M-Audio",
  1051. .product_name = "MidiSport 4x4",
  1052. .ifnum = QUIRK_ANY_INTERFACE,
  1053. .type = QUIRK_MIDI_MIDIMAN,
  1054. .data = & (const snd_usb_midi_endpoint_info_t) {
  1055. .out_cables = 0x000f,
  1056. .in_cables = 0x000f
  1057. }
  1058. }
  1059. },
  1060. {
  1061. /*
  1062. * For hardware revision 1.05; in the later revisions (1.10 and
  1063. * 1.21), 0x1031 is the ID for the device without firmware.
  1064. * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
  1065. */
  1066. USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
  1067. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1068. .vendor_name = "M-Audio",
  1069. .product_name = "MidiSport 8x8",
  1070. .ifnum = QUIRK_ANY_INTERFACE,
  1071. .type = QUIRK_MIDI_MIDIMAN,
  1072. .data = & (const snd_usb_midi_endpoint_info_t) {
  1073. .out_cables = 0x01ff,
  1074. .in_cables = 0x01ff
  1075. }
  1076. }
  1077. },
  1078. {
  1079. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
  1080. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1081. .vendor_name = "M-Audio",
  1082. .product_name = "MidiSport 8x8",
  1083. .ifnum = QUIRK_ANY_INTERFACE,
  1084. .type = QUIRK_MIDI_MIDIMAN,
  1085. .data = & (const snd_usb_midi_endpoint_info_t) {
  1086. .out_cables = 0x01ff,
  1087. .in_cables = 0x01ff
  1088. }
  1089. }
  1090. },
  1091. {
  1092. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
  1093. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1094. .vendor_name = "M-Audio",
  1095. .product_name = "MidiSport 2x4",
  1096. .ifnum = QUIRK_ANY_INTERFACE,
  1097. .type = QUIRK_MIDI_MIDIMAN,
  1098. .data = & (const snd_usb_midi_endpoint_info_t) {
  1099. .out_cables = 0x000f,
  1100. .in_cables = 0x0003
  1101. }
  1102. }
  1103. },
  1104. {
  1105. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
  1106. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1107. .vendor_name = "M-Audio",
  1108. .product_name = "Quattro",
  1109. .ifnum = QUIRK_ANY_INTERFACE,
  1110. .type = QUIRK_COMPOSITE,
  1111. .data = & (const snd_usb_audio_quirk_t[]) {
  1112. /*
  1113. * Interfaces 0-2 are "Windows-compatible", 16-bit only,
  1114. * and share endpoints with the other interfaces.
  1115. * Ignore them. The other interfaces can do 24 bits,
  1116. * but captured samples are big-endian (see usbaudio.c).
  1117. */
  1118. {
  1119. .ifnum = 0,
  1120. .type = QUIRK_IGNORE_INTERFACE
  1121. },
  1122. {
  1123. .ifnum = 1,
  1124. .type = QUIRK_IGNORE_INTERFACE
  1125. },
  1126. {
  1127. .ifnum = 2,
  1128. .type = QUIRK_IGNORE_INTERFACE
  1129. },
  1130. {
  1131. .ifnum = 3,
  1132. .type = QUIRK_IGNORE_INTERFACE
  1133. },
  1134. {
  1135. .ifnum = 4,
  1136. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1137. },
  1138. {
  1139. .ifnum = 5,
  1140. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1141. },
  1142. {
  1143. .ifnum = 6,
  1144. .type = QUIRK_IGNORE_INTERFACE
  1145. },
  1146. {
  1147. .ifnum = 7,
  1148. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1149. },
  1150. {
  1151. .ifnum = 8,
  1152. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1153. },
  1154. {
  1155. .ifnum = 9,
  1156. .type = QUIRK_MIDI_MIDIMAN,
  1157. .data = & (const snd_usb_midi_endpoint_info_t) {
  1158. .out_cables = 0x0001,
  1159. .in_cables = 0x0001
  1160. }
  1161. },
  1162. {
  1163. .ifnum = -1
  1164. }
  1165. }
  1166. }
  1167. },
  1168. {
  1169. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
  1170. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1171. .vendor_name = "M-Audio",
  1172. .product_name = "AudioPhile",
  1173. .ifnum = 6,
  1174. .type = QUIRK_MIDI_MIDIMAN,
  1175. .data = & (const snd_usb_midi_endpoint_info_t) {
  1176. .out_cables = 0x0001,
  1177. .in_cables = 0x0001
  1178. }
  1179. }
  1180. },
  1181. {
  1182. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
  1183. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1184. .vendor_name = "M-Audio",
  1185. .product_name = "Ozone",
  1186. .ifnum = 3,
  1187. .type = QUIRK_MIDI_MIDIMAN,
  1188. .data = & (const snd_usb_midi_endpoint_info_t) {
  1189. .out_cables = 0x0001,
  1190. .in_cables = 0x0001
  1191. }
  1192. }
  1193. },
  1194. {
  1195. USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
  1196. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1197. .vendor_name = "M-Audio",
  1198. .product_name = "OmniStudio",
  1199. .ifnum = QUIRK_ANY_INTERFACE,
  1200. .type = QUIRK_COMPOSITE,
  1201. .data = & (const snd_usb_audio_quirk_t[]) {
  1202. {
  1203. .ifnum = 0,
  1204. .type = QUIRK_IGNORE_INTERFACE
  1205. },
  1206. {
  1207. .ifnum = 1,
  1208. .type = QUIRK_IGNORE_INTERFACE
  1209. },
  1210. {
  1211. .ifnum = 2,
  1212. .type = QUIRK_IGNORE_INTERFACE
  1213. },
  1214. {
  1215. .ifnum = 3,
  1216. .type = QUIRK_IGNORE_INTERFACE
  1217. },
  1218. {
  1219. .ifnum = 4,
  1220. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1221. },
  1222. {
  1223. .ifnum = 5,
  1224. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1225. },
  1226. {
  1227. .ifnum = 6,
  1228. .type = QUIRK_IGNORE_INTERFACE
  1229. },
  1230. {
  1231. .ifnum = 7,
  1232. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1233. },
  1234. {
  1235. .ifnum = 8,
  1236. .type = QUIRK_AUDIO_STANDARD_INTERFACE
  1237. },
  1238. {
  1239. .ifnum = 9,
  1240. .type = QUIRK_MIDI_MIDIMAN,
  1241. .data = & (const snd_usb_midi_endpoint_info_t) {
  1242. .out_cables = 0x0001,
  1243. .in_cables = 0x0001
  1244. }
  1245. },
  1246. {
  1247. .ifnum = -1
  1248. }
  1249. }
  1250. }
  1251. },
  1252. /* Mark of the Unicorn devices */
  1253. {
  1254. /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
  1255. USB_DEVICE(0x07fd, 0x0001),
  1256. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1257. .vendor_name = "MOTU",
  1258. .product_name = "Fastlane",
  1259. .ifnum = QUIRK_ANY_INTERFACE,
  1260. .type = QUIRK_COMPOSITE,
  1261. .data = & (const snd_usb_audio_quirk_t[]) {
  1262. {
  1263. .ifnum = 0,
  1264. .type = QUIRK_MIDI_MOTU
  1265. },
  1266. {
  1267. .ifnum = 1,
  1268. .type = QUIRK_IGNORE_INTERFACE
  1269. },
  1270. {
  1271. .ifnum = -1
  1272. }
  1273. }
  1274. }
  1275. },
  1276. {
  1277. /* Creative Sound Blaster MP3+ */
  1278. USB_DEVICE(0x041e, 0x3010),
  1279. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1280. .vendor_name = "Creative Labs",
  1281. .product_name = "Sound Blaster MP3+",
  1282. .ifnum = QUIRK_NO_INTERFACE
  1283. }
  1284. },
  1285. /* Emagic devices */
  1286. {
  1287. USB_DEVICE(0x086a, 0x0001),
  1288. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1289. .vendor_name = "Emagic",
  1290. /* .product_name = "Unitor8", */
  1291. .ifnum = 2,
  1292. .type = QUIRK_MIDI_EMAGIC,
  1293. .data = & (const snd_usb_midi_endpoint_info_t) {
  1294. .out_cables = 0x80ff,
  1295. .in_cables = 0x80ff
  1296. }
  1297. }
  1298. },
  1299. {
  1300. USB_DEVICE(0x086a, 0x0002),
  1301. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1302. .vendor_name = "Emagic",
  1303. /* .product_name = "AMT8", */
  1304. .ifnum = 2,
  1305. .type = QUIRK_MIDI_EMAGIC,
  1306. .data = & (const snd_usb_midi_endpoint_info_t) {
  1307. .out_cables = 0x80ff,
  1308. .in_cables = 0x80ff
  1309. }
  1310. }
  1311. },
  1312. {
  1313. USB_DEVICE(0x086a, 0x0003),
  1314. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1315. .vendor_name = "Emagic",
  1316. /* .product_name = "MT4", */
  1317. .ifnum = 2,
  1318. .type = QUIRK_MIDI_EMAGIC,
  1319. .data = & (const snd_usb_midi_endpoint_info_t) {
  1320. .out_cables = 0x800f,
  1321. .in_cables = 0x8003
  1322. }
  1323. }
  1324. },
  1325. {
  1326. USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
  1327. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1328. .vendor_name = "Terratec",
  1329. .product_name = "PHASE 26",
  1330. .ifnum = 3,
  1331. .type = QUIRK_MIDI_STANDARD_INTERFACE
  1332. }
  1333. },
  1334. /* Novation EMS devices */
  1335. {
  1336. USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
  1337. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1338. .vendor_name = "Novation",
  1339. .product_name = "ReMOTE Audio/XStation",
  1340. .ifnum = 4,
  1341. .type = QUIRK_MIDI_NOVATION
  1342. }
  1343. },
  1344. {
  1345. USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
  1346. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1347. .vendor_name = "Novation",
  1348. .product_name = "Speedio",
  1349. .ifnum = 3,
  1350. .type = QUIRK_MIDI_NOVATION
  1351. }
  1352. },
  1353. {
  1354. USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
  1355. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1356. .vendor_name = "Novation",
  1357. .product_name = "ReMOTE25",
  1358. .ifnum = 0,
  1359. .type = QUIRK_MIDI_NOVATION
  1360. }
  1361. },
  1362. {
  1363. /*
  1364. * Some USB MIDI devices don't have an audio control interface,
  1365. * so we have to grab MIDI streaming interfaces here.
  1366. */
  1367. .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
  1368. USB_DEVICE_ID_MATCH_INT_SUBCLASS,
  1369. .bInterfaceClass = USB_CLASS_AUDIO,
  1370. .bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
  1371. .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
  1372. .ifnum = QUIRK_ANY_INTERFACE,
  1373. .type = QUIRK_MIDI_STANDARD_INTERFACE
  1374. }
  1375. },
  1376. #undef USB_DEVICE_VENDOR_SPEC