quirks-table.h 87 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * ALSA USB Audio Driver
  4. *
  5. * Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>,
  6. * Clemens Ladisch <clemens@ladisch.de>
  7. */
  8. /*
  9. * The contents of this file are part of the driver's id_table.
  10. *
  11. * In a perfect world, this file would be empty.
  12. */
  13. /*
  14. * Use this for devices where other interfaces are standard compliant,
  15. * to prevent the quirk being applied to those interfaces. (To work with
  16. * hotplugging, bDeviceClass must be set to USB_CLASS_PER_INTERFACE.)
  17. */
  18. #define USB_DEVICE_VENDOR_SPEC(vend, prod) \
  19. .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
  20. USB_DEVICE_ID_MATCH_PRODUCT | \
  21. USB_DEVICE_ID_MATCH_INT_CLASS, \
  22. .idVendor = vend, \
  23. .idProduct = prod, \
  24. .bInterfaceClass = USB_CLASS_VENDOR_SPEC
  25. /* A standard entry matching with vid/pid and the audio class/subclass */
  26. #define USB_AUDIO_DEVICE(vend, prod) \
  27. .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
  28. USB_DEVICE_ID_MATCH_INT_CLASS | \
  29. USB_DEVICE_ID_MATCH_INT_SUBCLASS, \
  30. .idVendor = vend, \
  31. .idProduct = prod, \
  32. .bInterfaceClass = USB_CLASS_AUDIO, \
  33. .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL
  34. /* Quirk .driver_info, followed by the definition of the quirk entry;
  35. * put like QUIRK_DRIVER_INFO { ... } in each entry of the quirk table
  36. */
  37. #define QUIRK_DRIVER_INFO \
  38. .driver_info = (unsigned long)&(const struct snd_usb_audio_quirk)
  39. /*
  40. * Macros for quirk data entries
  41. */
  42. /* Quirk data entry for ignoring the interface */
  43. #define QUIRK_DATA_IGNORE(_ifno) \
  44. .ifnum = (_ifno), .type = QUIRK_IGNORE_INTERFACE
  45. /* Quirk data entry for a standard audio interface */
  46. #define QUIRK_DATA_STANDARD_AUDIO(_ifno) \
  47. .ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_INTERFACE
  48. /* Quirk data entry for a standard MIDI interface */
  49. #define QUIRK_DATA_STANDARD_MIDI(_ifno) \
  50. .ifnum = (_ifno), .type = QUIRK_MIDI_STANDARD_INTERFACE
  51. /* Quirk data entry for a standard mixer interface */
  52. #define QUIRK_DATA_STANDARD_MIXER(_ifno) \
  53. .ifnum = (_ifno), .type = QUIRK_AUDIO_STANDARD_MIXER
  54. /* Quirk data entry for Yamaha MIDI */
  55. #define QUIRK_DATA_MIDI_YAMAHA(_ifno) \
  56. .ifnum = (_ifno), .type = QUIRK_MIDI_YAMAHA
  57. /* Quirk data entry for Edirol UAxx */
  58. #define QUIRK_DATA_EDIROL_UAXX(_ifno) \
  59. .ifnum = (_ifno), .type = QUIRK_AUDIO_EDIROL_UAXX
  60. /* Quirk data entry for raw bytes interface */
  61. #define QUIRK_DATA_RAW_BYTES(_ifno) \
  62. .ifnum = (_ifno), .type = QUIRK_MIDI_RAW_BYTES
  63. /* Quirk composite array terminator */
  64. #define QUIRK_COMPOSITE_END { .ifnum = -1 }
  65. /* Quirk data entry for composite quirks;
  66. * followed by the quirk array that is terminated with QUIRK_COMPOSITE_END
  67. * e.g. QUIRK_DATA_COMPOSITE { { quirk1 }, { quirk2 },..., QUIRK_COMPOSITE_END }
  68. */
  69. #define QUIRK_DATA_COMPOSITE \
  70. .ifnum = QUIRK_ANY_INTERFACE, \
  71. .type = QUIRK_COMPOSITE, \
  72. .data = &(const struct snd_usb_audio_quirk[])
  73. /* Quirk data entry for a fixed audio endpoint;
  74. * followed by audioformat definition
  75. * e.g. QUIRK_DATA_AUDIOFORMAT(n) { .formats = xxx, ... }
  76. */
  77. #define QUIRK_DATA_AUDIOFORMAT(_ifno) \
  78. .ifnum = (_ifno), \
  79. .type = QUIRK_AUDIO_FIXED_ENDPOINT, \
  80. .data = &(const struct audioformat)
  81. /* Quirk data entry for a fixed MIDI endpoint;
  82. * followed by snd_usb_midi_endpoint_info definition
  83. * e.g. QUIRK_DATA_MIDI_FIXED_ENDPOINT(n) { .out_cables = x, .in_cables = y }
  84. */
  85. #define QUIRK_DATA_MIDI_FIXED_ENDPOINT(_ifno) \
  86. .ifnum = (_ifno), \
  87. .type = QUIRK_MIDI_FIXED_ENDPOINT, \
  88. .data = &(const struct snd_usb_midi_endpoint_info)
  89. /* Quirk data entry for a MIDIMAN MIDI endpoint */
  90. #define QUIRK_DATA_MIDI_MIDIMAN(_ifno) \
  91. .ifnum = (_ifno), \
  92. .type = QUIRK_MIDI_MIDIMAN, \
  93. .data = &(const struct snd_usb_midi_endpoint_info)
  94. /* Quirk data entry for a EMAGIC MIDI endpoint */
  95. #define QUIRK_DATA_MIDI_EMAGIC(_ifno) \
  96. .ifnum = (_ifno), \
  97. .type = QUIRK_MIDI_EMAGIC, \
  98. .data = &(const struct snd_usb_midi_endpoint_info)
  99. /*
  100. * Here we go... the quirk table definition begins:
  101. */
  102. /* FTDI devices */
  103. {
  104. USB_DEVICE(0x0403, 0xb8d8),
  105. QUIRK_DRIVER_INFO {
  106. /* .vendor_name = "STARR LABS", */
  107. /* .product_name = "Starr Labs MIDI USB device", */
  108. .ifnum = 0,
  109. .type = QUIRK_MIDI_FTDI
  110. }
  111. },
  112. {
  113. /* Creative BT-D1 */
  114. USB_DEVICE(0x041e, 0x0005),
  115. QUIRK_DRIVER_INFO {
  116. QUIRK_DATA_AUDIOFORMAT(1) {
  117. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  118. .channels = 2,
  119. .iface = 1,
  120. .altsetting = 1,
  121. .altset_idx = 1,
  122. .endpoint = 0x03,
  123. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  124. .attributes = 0,
  125. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  126. .rate_min = 48000,
  127. .rate_max = 48000,
  128. }
  129. }
  130. },
  131. /* E-Mu 0202 USB */
  132. { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f02) },
  133. /* E-Mu 0404 USB */
  134. { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f04) },
  135. /* E-Mu Tracker Pre */
  136. { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f0a) },
  137. /* E-Mu 0204 USB */
  138. { USB_DEVICE_VENDOR_SPEC(0x041e, 0x3f19) },
  139. /* Ktmicro Usb_audio device */
  140. { USB_DEVICE_VENDOR_SPEC(0x31b2, 0x0011) },
  141. /*
  142. * Creative Technology, Ltd Live! Cam Sync HD [VF0770]
  143. * The device advertises 8 formats, but only a rate of 48kHz is honored by the
  144. * hardware and 24 bits give chopped audio, so only report the one working
  145. * combination.
  146. */
  147. {
  148. USB_AUDIO_DEVICE(0x041e, 0x4095),
  149. QUIRK_DRIVER_INFO {
  150. QUIRK_DATA_COMPOSITE {
  151. { QUIRK_DATA_STANDARD_MIXER(2) },
  152. {
  153. QUIRK_DATA_AUDIOFORMAT(3) {
  154. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  155. .channels = 2,
  156. .fmt_bits = 16,
  157. .iface = 3,
  158. .altsetting = 4,
  159. .altset_idx = 4,
  160. .endpoint = 0x82,
  161. .ep_attr = 0x05,
  162. .rates = SNDRV_PCM_RATE_48000,
  163. .rate_min = 48000,
  164. .rate_max = 48000,
  165. .nr_rates = 1,
  166. .rate_table = (unsigned int[]) { 48000 },
  167. },
  168. },
  169. QUIRK_COMPOSITE_END
  170. },
  171. },
  172. },
  173. /*
  174. * HP Wireless Audio
  175. * When not ignored, causes instability issues for some users, forcing them to
  176. * skip the entire module.
  177. */
  178. {
  179. USB_DEVICE(0x0424, 0xb832),
  180. QUIRK_DRIVER_INFO {
  181. .vendor_name = "Standard Microsystems Corp.",
  182. .product_name = "HP Wireless Audio",
  183. QUIRK_DATA_COMPOSITE {
  184. /* Mixer */
  185. { QUIRK_DATA_IGNORE(0) },
  186. /* Playback */
  187. { QUIRK_DATA_IGNORE(1) },
  188. /* Capture */
  189. { QUIRK_DATA_IGNORE(2) },
  190. /* HID Device, .ifnum = 3 */
  191. QUIRK_COMPOSITE_END
  192. }
  193. }
  194. },
  195. /*
  196. * Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
  197. * class matches do not take effect without an explicit ID match.
  198. */
  199. { USB_AUDIO_DEVICE(0x046d, 0x0850) },
  200. { USB_AUDIO_DEVICE(0x046d, 0x08ae) },
  201. { USB_AUDIO_DEVICE(0x046d, 0x08c6) },
  202. { USB_AUDIO_DEVICE(0x046d, 0x08f0) },
  203. { USB_AUDIO_DEVICE(0x046d, 0x08f5) },
  204. { USB_AUDIO_DEVICE(0x046d, 0x08f6) },
  205. { USB_AUDIO_DEVICE(0x046d, 0x0990) },
  206. /*
  207. * Yamaha devices
  208. */
  209. #define YAMAHA_DEVICE(id, name) { \
  210. USB_DEVICE(0x0499, id), \
  211. QUIRK_DRIVER_INFO { \
  212. .vendor_name = "Yamaha", \
  213. .product_name = name, \
  214. QUIRK_DATA_MIDI_YAMAHA(QUIRK_ANY_INTERFACE) \
  215. } \
  216. }
  217. #define YAMAHA_INTERFACE(id, intf, name) { \
  218. USB_DEVICE_VENDOR_SPEC(0x0499, id), \
  219. QUIRK_DRIVER_INFO { \
  220. .vendor_name = "Yamaha", \
  221. .product_name = name, \
  222. QUIRK_DATA_MIDI_YAMAHA(intf) \
  223. } \
  224. }
  225. YAMAHA_DEVICE(0x1000, "UX256"),
  226. YAMAHA_DEVICE(0x1001, "MU1000"),
  227. YAMAHA_DEVICE(0x1002, "MU2000"),
  228. YAMAHA_DEVICE(0x1003, "MU500"),
  229. YAMAHA_INTERFACE(0x1004, 3, "UW500"),
  230. YAMAHA_DEVICE(0x1005, "MOTIF6"),
  231. YAMAHA_DEVICE(0x1006, "MOTIF7"),
  232. YAMAHA_DEVICE(0x1007, "MOTIF8"),
  233. YAMAHA_DEVICE(0x1008, "UX96"),
  234. YAMAHA_DEVICE(0x1009, "UX16"),
  235. YAMAHA_INTERFACE(0x100a, 3, "EOS BX"),
  236. YAMAHA_DEVICE(0x100c, "UC-MX"),
  237. YAMAHA_DEVICE(0x100d, "UC-KX"),
  238. YAMAHA_DEVICE(0x100e, "S08"),
  239. YAMAHA_DEVICE(0x100f, "CLP-150"),
  240. YAMAHA_DEVICE(0x1010, "CLP-170"),
  241. YAMAHA_DEVICE(0x1011, "P-250"),
  242. YAMAHA_DEVICE(0x1012, "TYROS"),
  243. YAMAHA_DEVICE(0x1013, "PF-500"),
  244. YAMAHA_DEVICE(0x1014, "S90"),
  245. YAMAHA_DEVICE(0x1015, "MOTIF-R"),
  246. YAMAHA_DEVICE(0x1016, "MDP-5"),
  247. YAMAHA_DEVICE(0x1017, "CVP-204"),
  248. YAMAHA_DEVICE(0x1018, "CVP-206"),
  249. YAMAHA_DEVICE(0x1019, "CVP-208"),
  250. YAMAHA_DEVICE(0x101a, "CVP-210"),
  251. YAMAHA_DEVICE(0x101b, "PSR-1100"),
  252. YAMAHA_DEVICE(0x101c, "PSR-2100"),
  253. YAMAHA_DEVICE(0x101d, "CLP-175"),
  254. YAMAHA_DEVICE(0x101e, "PSR-K1"),
  255. YAMAHA_DEVICE(0x101f, "EZ-J24"),
  256. YAMAHA_DEVICE(0x1020, "EZ-250i"),
  257. YAMAHA_DEVICE(0x1021, "MOTIF ES 6"),
  258. YAMAHA_DEVICE(0x1022, "MOTIF ES 7"),
  259. YAMAHA_DEVICE(0x1023, "MOTIF ES 8"),
  260. YAMAHA_DEVICE(0x1024, "CVP-301"),
  261. YAMAHA_DEVICE(0x1025, "CVP-303"),
  262. YAMAHA_DEVICE(0x1026, "CVP-305"),
  263. YAMAHA_DEVICE(0x1027, "CVP-307"),
  264. YAMAHA_DEVICE(0x1028, "CVP-309"),
  265. YAMAHA_DEVICE(0x1029, "CVP-309GP"),
  266. YAMAHA_DEVICE(0x102a, "PSR-1500"),
  267. YAMAHA_DEVICE(0x102b, "PSR-3000"),
  268. YAMAHA_DEVICE(0x102e, "ELS-01/01C"),
  269. YAMAHA_DEVICE(0x1030, "PSR-295/293"),
  270. YAMAHA_DEVICE(0x1031, "DGX-205/203"),
  271. YAMAHA_DEVICE(0x1032, "DGX-305"),
  272. YAMAHA_DEVICE(0x1033, "DGX-505"),
  273. YAMAHA_DEVICE(0x1034, NULL),
  274. YAMAHA_DEVICE(0x1035, NULL),
  275. YAMAHA_DEVICE(0x1036, NULL),
  276. YAMAHA_DEVICE(0x1037, NULL),
  277. YAMAHA_DEVICE(0x1038, NULL),
  278. YAMAHA_DEVICE(0x1039, NULL),
  279. YAMAHA_DEVICE(0x103a, NULL),
  280. YAMAHA_DEVICE(0x103b, NULL),
  281. YAMAHA_DEVICE(0x103c, NULL),
  282. YAMAHA_DEVICE(0x103d, NULL),
  283. YAMAHA_DEVICE(0x103e, NULL),
  284. YAMAHA_DEVICE(0x103f, NULL),
  285. YAMAHA_DEVICE(0x1040, NULL),
  286. YAMAHA_DEVICE(0x1041, NULL),
  287. YAMAHA_DEVICE(0x1042, NULL),
  288. YAMAHA_DEVICE(0x1043, NULL),
  289. YAMAHA_DEVICE(0x1044, NULL),
  290. YAMAHA_DEVICE(0x1045, NULL),
  291. YAMAHA_INTERFACE(0x104e, 0, NULL),
  292. YAMAHA_DEVICE(0x104f, NULL),
  293. YAMAHA_DEVICE(0x1050, NULL),
  294. YAMAHA_DEVICE(0x1051, NULL),
  295. YAMAHA_DEVICE(0x1052, NULL),
  296. YAMAHA_INTERFACE(0x1053, 0, NULL),
  297. YAMAHA_INTERFACE(0x1054, 0, NULL),
  298. YAMAHA_DEVICE(0x1055, NULL),
  299. YAMAHA_DEVICE(0x1056, NULL),
  300. YAMAHA_DEVICE(0x1057, NULL),
  301. YAMAHA_DEVICE(0x1058, NULL),
  302. YAMAHA_DEVICE(0x1059, NULL),
  303. YAMAHA_DEVICE(0x105a, NULL),
  304. YAMAHA_DEVICE(0x105b, NULL),
  305. YAMAHA_DEVICE(0x105c, NULL),
  306. YAMAHA_DEVICE(0x105d, NULL),
  307. {
  308. USB_DEVICE(0x0499, 0x1503),
  309. QUIRK_DRIVER_INFO {
  310. /* .vendor_name = "Yamaha", */
  311. /* .product_name = "MOX6/MOX8", */
  312. QUIRK_DATA_COMPOSITE {
  313. { QUIRK_DATA_STANDARD_AUDIO(1) },
  314. { QUIRK_DATA_STANDARD_AUDIO(2) },
  315. { QUIRK_DATA_MIDI_YAMAHA(3) },
  316. QUIRK_COMPOSITE_END
  317. }
  318. }
  319. },
  320. {
  321. USB_DEVICE(0x0499, 0x1507),
  322. QUIRK_DRIVER_INFO {
  323. /* .vendor_name = "Yamaha", */
  324. /* .product_name = "THR10", */
  325. QUIRK_DATA_COMPOSITE {
  326. { QUIRK_DATA_STANDARD_AUDIO(1) },
  327. { QUIRK_DATA_STANDARD_AUDIO(2) },
  328. { QUIRK_DATA_MIDI_YAMAHA(3) },
  329. QUIRK_COMPOSITE_END
  330. }
  331. }
  332. },
  333. {
  334. USB_DEVICE(0x0499, 0x1509),
  335. QUIRK_DRIVER_INFO {
  336. /* .vendor_name = "Yamaha", */
  337. /* .product_name = "Steinberg UR22", */
  338. QUIRK_DATA_COMPOSITE {
  339. { QUIRK_DATA_STANDARD_AUDIO(1) },
  340. { QUIRK_DATA_STANDARD_AUDIO(2) },
  341. { QUIRK_DATA_MIDI_YAMAHA(3) },
  342. { QUIRK_DATA_IGNORE(4) },
  343. QUIRK_COMPOSITE_END
  344. }
  345. }
  346. },
  347. {
  348. USB_DEVICE(0x0499, 0x150a),
  349. QUIRK_DRIVER_INFO {
  350. /* .vendor_name = "Yamaha", */
  351. /* .product_name = "THR5A", */
  352. QUIRK_DATA_COMPOSITE {
  353. { QUIRK_DATA_STANDARD_AUDIO(1) },
  354. { QUIRK_DATA_STANDARD_AUDIO(2) },
  355. { QUIRK_DATA_MIDI_YAMAHA(3) },
  356. QUIRK_COMPOSITE_END
  357. }
  358. }
  359. },
  360. {
  361. USB_DEVICE(0x0499, 0x150c),
  362. QUIRK_DRIVER_INFO {
  363. /* .vendor_name = "Yamaha", */
  364. /* .product_name = "THR10C", */
  365. QUIRK_DATA_COMPOSITE {
  366. { QUIRK_DATA_STANDARD_AUDIO(1) },
  367. { QUIRK_DATA_STANDARD_AUDIO(2) },
  368. { QUIRK_DATA_MIDI_YAMAHA(3) },
  369. QUIRK_COMPOSITE_END
  370. }
  371. }
  372. },
  373. {
  374. USB_DEVICE(0x0499, 0x1718),
  375. QUIRK_DRIVER_INFO {
  376. /* .vendor_name = "Yamaha", */
  377. /* .product_name = "P-125", */
  378. QUIRK_DATA_COMPOSITE {
  379. { QUIRK_DATA_STANDARD_AUDIO(1) },
  380. { QUIRK_DATA_STANDARD_AUDIO(2) },
  381. { QUIRK_DATA_MIDI_YAMAHA(3) },
  382. QUIRK_COMPOSITE_END
  383. }
  384. }
  385. },
  386. YAMAHA_DEVICE(0x2000, "DGP-7"),
  387. YAMAHA_DEVICE(0x2001, "DGP-5"),
  388. YAMAHA_DEVICE(0x2002, NULL),
  389. YAMAHA_DEVICE(0x2003, NULL),
  390. YAMAHA_DEVICE(0x5000, "CS1D"),
  391. YAMAHA_DEVICE(0x5001, "DSP1D"),
  392. YAMAHA_DEVICE(0x5002, "DME32"),
  393. YAMAHA_DEVICE(0x5003, "DM2000"),
  394. YAMAHA_DEVICE(0x5004, "02R96"),
  395. YAMAHA_DEVICE(0x5005, "ACU16-C"),
  396. YAMAHA_DEVICE(0x5006, "NHB32-C"),
  397. YAMAHA_DEVICE(0x5007, "DM1000"),
  398. YAMAHA_DEVICE(0x5008, "01V96"),
  399. YAMAHA_DEVICE(0x5009, "SPX2000"),
  400. YAMAHA_DEVICE(0x500a, "PM5D"),
  401. YAMAHA_DEVICE(0x500b, "DME64N"),
  402. YAMAHA_DEVICE(0x500c, "DME24N"),
  403. YAMAHA_DEVICE(0x500d, NULL),
  404. YAMAHA_DEVICE(0x500e, NULL),
  405. YAMAHA_DEVICE(0x500f, NULL),
  406. YAMAHA_DEVICE(0x7000, "DTX"),
  407. YAMAHA_DEVICE(0x7010, "UB99"),
  408. #undef YAMAHA_DEVICE
  409. #undef YAMAHA_INTERFACE
  410. /* this catches most recent vendor-specific Yamaha devices */
  411. {
  412. .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
  413. USB_DEVICE_ID_MATCH_INT_CLASS,
  414. .idVendor = 0x0499,
  415. .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
  416. QUIRK_DRIVER_INFO {
  417. .ifnum = QUIRK_ANY_INTERFACE,
  418. .type = QUIRK_AUTODETECT
  419. }
  420. },
  421. /*
  422. * Roland/RolandED/Edirol/BOSS devices
  423. */
  424. {
  425. USB_DEVICE(0x0582, 0x0000),
  426. QUIRK_DRIVER_INFO {
  427. .vendor_name = "Roland",
  428. .product_name = "UA-100",
  429. QUIRK_DATA_COMPOSITE {
  430. {
  431. QUIRK_DATA_AUDIOFORMAT(0) {
  432. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  433. .channels = 4,
  434. .iface = 0,
  435. .altsetting = 1,
  436. .altset_idx = 1,
  437. .attributes = 0,
  438. .endpoint = 0x01,
  439. .ep_attr = 0x09,
  440. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  441. .rate_min = 44100,
  442. .rate_max = 44100,
  443. }
  444. },
  445. {
  446. QUIRK_DATA_AUDIOFORMAT(1) {
  447. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  448. .channels = 2,
  449. .iface = 1,
  450. .altsetting = 1,
  451. .altset_idx = 1,
  452. .attributes = UAC_EP_CS_ATTR_FILL_MAX,
  453. .endpoint = 0x81,
  454. .ep_attr = 0x05,
  455. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  456. .rate_min = 44100,
  457. .rate_max = 44100,
  458. }
  459. },
  460. {
  461. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  462. .out_cables = 0x0007,
  463. .in_cables = 0x0007
  464. }
  465. },
  466. QUIRK_COMPOSITE_END
  467. }
  468. }
  469. },
  470. {
  471. USB_DEVICE(0x0582, 0x0002),
  472. QUIRK_DRIVER_INFO {
  473. .vendor_name = "EDIROL",
  474. .product_name = "UM-4",
  475. QUIRK_DATA_COMPOSITE {
  476. { QUIRK_DATA_IGNORE(0) },
  477. { QUIRK_DATA_IGNORE(1) },
  478. {
  479. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  480. .out_cables = 0x000f,
  481. .in_cables = 0x000f
  482. }
  483. },
  484. QUIRK_COMPOSITE_END
  485. }
  486. }
  487. },
  488. {
  489. USB_DEVICE(0x0582, 0x0003),
  490. QUIRK_DRIVER_INFO {
  491. .vendor_name = "Roland",
  492. .product_name = "SC-8850",
  493. QUIRK_DATA_COMPOSITE {
  494. { QUIRK_DATA_IGNORE(0) },
  495. { QUIRK_DATA_IGNORE(1) },
  496. {
  497. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  498. .out_cables = 0x003f,
  499. .in_cables = 0x003f
  500. }
  501. },
  502. QUIRK_COMPOSITE_END
  503. }
  504. }
  505. },
  506. {
  507. USB_DEVICE(0x0582, 0x0004),
  508. QUIRK_DRIVER_INFO {
  509. .vendor_name = "Roland",
  510. .product_name = "U-8",
  511. QUIRK_DATA_COMPOSITE {
  512. { QUIRK_DATA_IGNORE(0) },
  513. { QUIRK_DATA_IGNORE(1) },
  514. {
  515. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  516. .out_cables = 0x0005,
  517. .in_cables = 0x0005
  518. }
  519. },
  520. QUIRK_COMPOSITE_END
  521. }
  522. }
  523. },
  524. {
  525. /* Has ID 0x0099 when not in "Advanced Driver" mode.
  526. * The UM-2EX has only one input, but we cannot detect this. */
  527. USB_DEVICE(0x0582, 0x0005),
  528. QUIRK_DRIVER_INFO {
  529. .vendor_name = "EDIROL",
  530. .product_name = "UM-2",
  531. QUIRK_DATA_COMPOSITE {
  532. { QUIRK_DATA_IGNORE(0) },
  533. { QUIRK_DATA_IGNORE(1) },
  534. {
  535. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  536. .out_cables = 0x0003,
  537. .in_cables = 0x0003
  538. }
  539. },
  540. QUIRK_COMPOSITE_END
  541. }
  542. }
  543. },
  544. {
  545. USB_DEVICE(0x0582, 0x0007),
  546. QUIRK_DRIVER_INFO {
  547. .vendor_name = "Roland",
  548. .product_name = "SC-8820",
  549. QUIRK_DATA_COMPOSITE {
  550. { QUIRK_DATA_IGNORE(0) },
  551. { QUIRK_DATA_IGNORE(1) },
  552. {
  553. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  554. .out_cables = 0x0013,
  555. .in_cables = 0x0013
  556. }
  557. },
  558. QUIRK_COMPOSITE_END
  559. }
  560. }
  561. },
  562. {
  563. USB_DEVICE(0x0582, 0x0008),
  564. QUIRK_DRIVER_INFO {
  565. .vendor_name = "Roland",
  566. .product_name = "PC-300",
  567. QUIRK_DATA_COMPOSITE {
  568. { QUIRK_DATA_IGNORE(0) },
  569. { QUIRK_DATA_IGNORE(1) },
  570. {
  571. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  572. .out_cables = 0x0001,
  573. .in_cables = 0x0001
  574. }
  575. },
  576. QUIRK_COMPOSITE_END
  577. }
  578. }
  579. },
  580. {
  581. /* has ID 0x009d when not in "Advanced Driver" mode */
  582. USB_DEVICE(0x0582, 0x0009),
  583. QUIRK_DRIVER_INFO {
  584. .vendor_name = "EDIROL",
  585. .product_name = "UM-1",
  586. QUIRK_DATA_COMPOSITE {
  587. { QUIRK_DATA_IGNORE(0) },
  588. { QUIRK_DATA_IGNORE(1) },
  589. {
  590. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  591. .out_cables = 0x0001,
  592. .in_cables = 0x0001
  593. }
  594. },
  595. QUIRK_COMPOSITE_END
  596. }
  597. }
  598. },
  599. {
  600. USB_DEVICE(0x0582, 0x000b),
  601. QUIRK_DRIVER_INFO {
  602. .vendor_name = "Roland",
  603. .product_name = "SK-500",
  604. QUIRK_DATA_COMPOSITE {
  605. { QUIRK_DATA_IGNORE(0) },
  606. { QUIRK_DATA_IGNORE(1) },
  607. {
  608. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  609. .out_cables = 0x0013,
  610. .in_cables = 0x0013
  611. }
  612. },
  613. QUIRK_COMPOSITE_END
  614. }
  615. }
  616. },
  617. {
  618. /* thanks to Emiliano Grilli <emillo@libero.it>
  619. * for helping researching this data */
  620. USB_DEVICE(0x0582, 0x000c),
  621. QUIRK_DRIVER_INFO {
  622. .vendor_name = "Roland",
  623. .product_name = "SC-D70",
  624. QUIRK_DATA_COMPOSITE {
  625. { QUIRK_DATA_STANDARD_AUDIO(0) },
  626. { QUIRK_DATA_STANDARD_AUDIO(1) },
  627. {
  628. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  629. .out_cables = 0x0007,
  630. .in_cables = 0x0007
  631. }
  632. },
  633. QUIRK_COMPOSITE_END
  634. }
  635. }
  636. },
  637. { /*
  638. * This quirk is for the "Advanced Driver" mode of the Edirol UA-5.
  639. * If the advanced mode switch at the back of the unit is off, the
  640. * UA-5 has ID 0x0582/0x0011 and is standard compliant (no quirks),
  641. * but offers only 16-bit PCM.
  642. * In advanced mode, the UA-5 will output S24_3LE samples (two
  643. * channels) at the rate indicated on the front switch, including
  644. * the 96kHz sample rate.
  645. */
  646. USB_DEVICE(0x0582, 0x0010),
  647. QUIRK_DRIVER_INFO {
  648. .vendor_name = "EDIROL",
  649. .product_name = "UA-5",
  650. QUIRK_DATA_COMPOSITE {
  651. { QUIRK_DATA_STANDARD_AUDIO(1) },
  652. { QUIRK_DATA_STANDARD_AUDIO(2) },
  653. QUIRK_COMPOSITE_END
  654. }
  655. }
  656. },
  657. {
  658. /* has ID 0x0013 when not in "Advanced Driver" mode */
  659. USB_DEVICE(0x0582, 0x0012),
  660. QUIRK_DRIVER_INFO {
  661. .vendor_name = "Roland",
  662. .product_name = "XV-5050",
  663. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  664. .out_cables = 0x0001,
  665. .in_cables = 0x0001
  666. }
  667. }
  668. },
  669. {
  670. /* has ID 0x0015 when not in "Advanced Driver" mode */
  671. USB_DEVICE(0x0582, 0x0014),
  672. QUIRK_DRIVER_INFO {
  673. .vendor_name = "EDIROL",
  674. .product_name = "UM-880",
  675. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  676. .out_cables = 0x01ff,
  677. .in_cables = 0x01ff
  678. }
  679. }
  680. },
  681. {
  682. /* has ID 0x0017 when not in "Advanced Driver" mode */
  683. USB_DEVICE(0x0582, 0x0016),
  684. QUIRK_DRIVER_INFO {
  685. .vendor_name = "EDIROL",
  686. .product_name = "SD-90",
  687. QUIRK_DATA_COMPOSITE {
  688. { QUIRK_DATA_STANDARD_AUDIO(0) },
  689. { QUIRK_DATA_STANDARD_AUDIO(1) },
  690. {
  691. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  692. .out_cables = 0x000f,
  693. .in_cables = 0x000f
  694. }
  695. },
  696. QUIRK_COMPOSITE_END
  697. }
  698. }
  699. },
  700. {
  701. /* has ID 0x001c when not in "Advanced Driver" mode */
  702. USB_DEVICE(0x0582, 0x001b),
  703. QUIRK_DRIVER_INFO {
  704. .vendor_name = "Roland",
  705. .product_name = "MMP-2",
  706. QUIRK_DATA_COMPOSITE {
  707. { QUIRK_DATA_IGNORE(0) },
  708. { QUIRK_DATA_IGNORE(1) },
  709. {
  710. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  711. .out_cables = 0x0001,
  712. .in_cables = 0x0001
  713. }
  714. },
  715. QUIRK_COMPOSITE_END
  716. }
  717. }
  718. },
  719. {
  720. /* has ID 0x001e when not in "Advanced Driver" mode */
  721. USB_DEVICE(0x0582, 0x001d),
  722. QUIRK_DRIVER_INFO {
  723. .vendor_name = "Roland",
  724. .product_name = "V-SYNTH",
  725. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  726. .out_cables = 0x0001,
  727. .in_cables = 0x0001
  728. }
  729. }
  730. },
  731. {
  732. /* has ID 0x0024 when not in "Advanced Driver" mode */
  733. USB_DEVICE(0x0582, 0x0023),
  734. QUIRK_DRIVER_INFO {
  735. .vendor_name = "EDIROL",
  736. .product_name = "UM-550",
  737. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  738. .out_cables = 0x003f,
  739. .in_cables = 0x003f
  740. }
  741. }
  742. },
  743. {
  744. /*
  745. * This quirk is for the "Advanced Driver" mode. If off, the UA-20
  746. * has ID 0x0026 and is standard compliant, but has only 16-bit PCM
  747. * and no MIDI.
  748. */
  749. USB_DEVICE(0x0582, 0x0025),
  750. QUIRK_DRIVER_INFO {
  751. .vendor_name = "EDIROL",
  752. .product_name = "UA-20",
  753. QUIRK_DATA_COMPOSITE {
  754. { QUIRK_DATA_IGNORE(0) },
  755. {
  756. QUIRK_DATA_AUDIOFORMAT(1) {
  757. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  758. .channels = 2,
  759. .iface = 1,
  760. .altsetting = 1,
  761. .altset_idx = 1,
  762. .attributes = 0,
  763. .endpoint = 0x01,
  764. .ep_attr = 0x01,
  765. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  766. .rate_min = 44100,
  767. .rate_max = 44100,
  768. }
  769. },
  770. {
  771. QUIRK_DATA_AUDIOFORMAT(2) {
  772. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  773. .channels = 2,
  774. .iface = 2,
  775. .altsetting = 1,
  776. .altset_idx = 1,
  777. .attributes = 0,
  778. .endpoint = 0x82,
  779. .ep_attr = 0x01,
  780. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  781. .rate_min = 44100,
  782. .rate_max = 44100,
  783. }
  784. },
  785. {
  786. QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
  787. .out_cables = 0x0001,
  788. .in_cables = 0x0001
  789. }
  790. },
  791. QUIRK_COMPOSITE_END
  792. }
  793. }
  794. },
  795. {
  796. /* has ID 0x0028 when not in "Advanced Driver" mode */
  797. USB_DEVICE(0x0582, 0x0027),
  798. QUIRK_DRIVER_INFO {
  799. .vendor_name = "EDIROL",
  800. .product_name = "SD-20",
  801. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  802. .out_cables = 0x0003,
  803. .in_cables = 0x0007
  804. }
  805. }
  806. },
  807. {
  808. /* has ID 0x002a when not in "Advanced Driver" mode */
  809. USB_DEVICE(0x0582, 0x0029),
  810. QUIRK_DRIVER_INFO {
  811. .vendor_name = "EDIROL",
  812. .product_name = "SD-80",
  813. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  814. .out_cables = 0x000f,
  815. .in_cables = 0x000f
  816. }
  817. }
  818. },
  819. { /*
  820. * This quirk is for the "Advanced" modes of the Edirol UA-700.
  821. * If the sample format switch is not in an advanced setting, the
  822. * UA-700 has ID 0x0582/0x002c and is standard compliant (no quirks),
  823. * but offers only 16-bit PCM and no MIDI.
  824. */
  825. USB_DEVICE_VENDOR_SPEC(0x0582, 0x002b),
  826. QUIRK_DRIVER_INFO {
  827. .vendor_name = "EDIROL",
  828. .product_name = "UA-700",
  829. QUIRK_DATA_COMPOSITE {
  830. { QUIRK_DATA_EDIROL_UAXX(1) },
  831. { QUIRK_DATA_EDIROL_UAXX(2) },
  832. { QUIRK_DATA_EDIROL_UAXX(3) },
  833. QUIRK_COMPOSITE_END
  834. }
  835. }
  836. },
  837. {
  838. /* has ID 0x002e when not in "Advanced Driver" mode */
  839. USB_DEVICE(0x0582, 0x002d),
  840. QUIRK_DRIVER_INFO {
  841. .vendor_name = "Roland",
  842. .product_name = "XV-2020",
  843. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  844. .out_cables = 0x0001,
  845. .in_cables = 0x0001
  846. }
  847. }
  848. },
  849. {
  850. /* has ID 0x0030 when not in "Advanced Driver" mode */
  851. USB_DEVICE(0x0582, 0x002f),
  852. QUIRK_DRIVER_INFO {
  853. .vendor_name = "Roland",
  854. .product_name = "VariOS",
  855. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  856. .out_cables = 0x0007,
  857. .in_cables = 0x0007
  858. }
  859. }
  860. },
  861. {
  862. /* has ID 0x0034 when not in "Advanced Driver" mode */
  863. USB_DEVICE(0x0582, 0x0033),
  864. QUIRK_DRIVER_INFO {
  865. .vendor_name = "EDIROL",
  866. .product_name = "PCR",
  867. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  868. .out_cables = 0x0003,
  869. .in_cables = 0x0007
  870. }
  871. }
  872. },
  873. {
  874. /*
  875. * Has ID 0x0038 when not in "Advanced Driver" mode;
  876. * later revisions use IDs 0x0054 and 0x00a2.
  877. */
  878. USB_DEVICE(0x0582, 0x0037),
  879. QUIRK_DRIVER_INFO {
  880. .vendor_name = "Roland",
  881. .product_name = "Digital Piano",
  882. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  883. .out_cables = 0x0001,
  884. .in_cables = 0x0001
  885. }
  886. }
  887. },
  888. {
  889. /*
  890. * This quirk is for the "Advanced Driver" mode. If off, the GS-10
  891. * has ID 0x003c and is standard compliant, but has only 16-bit PCM
  892. * and no MIDI.
  893. */
  894. USB_DEVICE_VENDOR_SPEC(0x0582, 0x003b),
  895. QUIRK_DRIVER_INFO {
  896. .vendor_name = "BOSS",
  897. .product_name = "GS-10",
  898. QUIRK_DATA_COMPOSITE {
  899. { QUIRK_DATA_STANDARD_AUDIO(1) },
  900. { QUIRK_DATA_STANDARD_AUDIO(2) },
  901. { QUIRK_DATA_STANDARD_MIDI(3) },
  902. QUIRK_COMPOSITE_END
  903. }
  904. }
  905. },
  906. {
  907. /* has ID 0x0041 when not in "Advanced Driver" mode */
  908. USB_DEVICE(0x0582, 0x0040),
  909. QUIRK_DRIVER_INFO {
  910. .vendor_name = "Roland",
  911. .product_name = "GI-20",
  912. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  913. .out_cables = 0x0001,
  914. .in_cables = 0x0001
  915. }
  916. }
  917. },
  918. {
  919. /* has ID 0x0043 when not in "Advanced Driver" mode */
  920. USB_DEVICE(0x0582, 0x0042),
  921. QUIRK_DRIVER_INFO {
  922. .vendor_name = "Roland",
  923. .product_name = "RS-70",
  924. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  925. .out_cables = 0x0001,
  926. .in_cables = 0x0001
  927. }
  928. }
  929. },
  930. {
  931. /* has ID 0x0049 when not in "Advanced Driver" mode */
  932. USB_DEVICE(0x0582, 0x0047),
  933. QUIRK_DRIVER_INFO {
  934. /* .vendor_name = "EDIROL", */
  935. /* .product_name = "UR-80", */
  936. QUIRK_DATA_COMPOSITE {
  937. /* in the 96 kHz modes, only interface 1 is there */
  938. { QUIRK_DATA_STANDARD_AUDIO(1) },
  939. { QUIRK_DATA_STANDARD_AUDIO(2) },
  940. QUIRK_COMPOSITE_END
  941. }
  942. }
  943. },
  944. {
  945. /* has ID 0x004a when not in "Advanced Driver" mode */
  946. USB_DEVICE(0x0582, 0x0048),
  947. QUIRK_DRIVER_INFO {
  948. /* .vendor_name = "EDIROL", */
  949. /* .product_name = "UR-80", */
  950. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  951. .out_cables = 0x0003,
  952. .in_cables = 0x0007
  953. }
  954. }
  955. },
  956. {
  957. /* has ID 0x004e when not in "Advanced Driver" mode */
  958. USB_DEVICE(0x0582, 0x004c),
  959. QUIRK_DRIVER_INFO {
  960. .vendor_name = "EDIROL",
  961. .product_name = "PCR-A",
  962. QUIRK_DATA_COMPOSITE {
  963. { QUIRK_DATA_STANDARD_AUDIO(1) },
  964. { QUIRK_DATA_STANDARD_AUDIO(2) },
  965. QUIRK_COMPOSITE_END
  966. }
  967. }
  968. },
  969. {
  970. /* has ID 0x004f when not in "Advanced Driver" mode */
  971. USB_DEVICE(0x0582, 0x004d),
  972. QUIRK_DRIVER_INFO {
  973. .vendor_name = "EDIROL",
  974. .product_name = "PCR-A",
  975. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  976. .out_cables = 0x0003,
  977. .in_cables = 0x0007
  978. }
  979. }
  980. },
  981. {
  982. /*
  983. * This quirk is for the "Advanced Driver" mode. If off, the UA-3FX
  984. * is standard compliant, but has only 16-bit PCM.
  985. */
  986. USB_DEVICE(0x0582, 0x0050),
  987. QUIRK_DRIVER_INFO {
  988. .vendor_name = "EDIROL",
  989. .product_name = "UA-3FX",
  990. QUIRK_DATA_COMPOSITE {
  991. { QUIRK_DATA_STANDARD_AUDIO(1) },
  992. { QUIRK_DATA_STANDARD_AUDIO(2) },
  993. QUIRK_COMPOSITE_END
  994. }
  995. }
  996. },
  997. {
  998. USB_DEVICE(0x0582, 0x0052),
  999. QUIRK_DRIVER_INFO {
  1000. .vendor_name = "EDIROL",
  1001. .product_name = "UM-1SX",
  1002. QUIRK_DATA_STANDARD_MIDI(0)
  1003. }
  1004. },
  1005. {
  1006. USB_DEVICE(0x0582, 0x0060),
  1007. QUIRK_DRIVER_INFO {
  1008. .vendor_name = "Roland",
  1009. .product_name = "EXR Series",
  1010. QUIRK_DATA_STANDARD_MIDI(0)
  1011. }
  1012. },
  1013. {
  1014. /* has ID 0x0066 when not in "Advanced Driver" mode */
  1015. USB_DEVICE(0x0582, 0x0064),
  1016. QUIRK_DRIVER_INFO {
  1017. /* .vendor_name = "EDIROL", */
  1018. /* .product_name = "PCR-1", */
  1019. QUIRK_DATA_COMPOSITE {
  1020. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1021. { QUIRK_DATA_STANDARD_AUDIO(2) },
  1022. QUIRK_COMPOSITE_END
  1023. }
  1024. }
  1025. },
  1026. {
  1027. /* has ID 0x0067 when not in "Advanced Driver" mode */
  1028. USB_DEVICE(0x0582, 0x0065),
  1029. QUIRK_DRIVER_INFO {
  1030. /* .vendor_name = "EDIROL", */
  1031. /* .product_name = "PCR-1", */
  1032. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1033. .out_cables = 0x0001,
  1034. .in_cables = 0x0003
  1035. }
  1036. }
  1037. },
  1038. {
  1039. /* has ID 0x006e when not in "Advanced Driver" mode */
  1040. USB_DEVICE(0x0582, 0x006d),
  1041. QUIRK_DRIVER_INFO {
  1042. .vendor_name = "Roland",
  1043. .product_name = "FANTOM-X",
  1044. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1045. .out_cables = 0x0001,
  1046. .in_cables = 0x0001
  1047. }
  1048. }
  1049. },
  1050. { /*
  1051. * This quirk is for the "Advanced" modes of the Edirol UA-25.
  1052. * If the switch is not in an advanced setting, the UA-25 has
  1053. * ID 0x0582/0x0073 and is standard compliant (no quirks), but
  1054. * offers only 16-bit PCM at 44.1 kHz and no MIDI.
  1055. */
  1056. USB_DEVICE_VENDOR_SPEC(0x0582, 0x0074),
  1057. QUIRK_DRIVER_INFO {
  1058. .vendor_name = "EDIROL",
  1059. .product_name = "UA-25",
  1060. QUIRK_DATA_COMPOSITE {
  1061. { QUIRK_DATA_EDIROL_UAXX(0) },
  1062. { QUIRK_DATA_EDIROL_UAXX(1) },
  1063. { QUIRK_DATA_EDIROL_UAXX(2) },
  1064. QUIRK_COMPOSITE_END
  1065. }
  1066. }
  1067. },
  1068. {
  1069. /* has ID 0x0076 when not in "Advanced Driver" mode */
  1070. USB_DEVICE(0x0582, 0x0075),
  1071. QUIRK_DRIVER_INFO {
  1072. .vendor_name = "BOSS",
  1073. .product_name = "DR-880",
  1074. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1075. .out_cables = 0x0001,
  1076. .in_cables = 0x0001
  1077. }
  1078. }
  1079. },
  1080. {
  1081. /* has ID 0x007b when not in "Advanced Driver" mode */
  1082. USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
  1083. QUIRK_DRIVER_INFO {
  1084. .vendor_name = "Roland",
  1085. /* "RD" or "RD-700SX"? */
  1086. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1087. .out_cables = 0x0003,
  1088. .in_cables = 0x0003
  1089. }
  1090. }
  1091. },
  1092. {
  1093. /* has ID 0x0081 when not in "Advanced Driver" mode */
  1094. USB_DEVICE(0x0582, 0x0080),
  1095. QUIRK_DRIVER_INFO {
  1096. .vendor_name = "Roland",
  1097. .product_name = "G-70",
  1098. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1099. .out_cables = 0x0001,
  1100. .in_cables = 0x0001
  1101. }
  1102. }
  1103. },
  1104. {
  1105. /* has ID 0x008c when not in "Advanced Driver" mode */
  1106. USB_DEVICE(0x0582, 0x008b),
  1107. QUIRK_DRIVER_INFO {
  1108. .vendor_name = "EDIROL",
  1109. .product_name = "PC-50",
  1110. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1111. .out_cables = 0x0001,
  1112. .in_cables = 0x0001
  1113. }
  1114. }
  1115. },
  1116. {
  1117. /*
  1118. * This quirk is for the "Advanced Driver" mode. If off, the UA-4FX
  1119. * is standard compliant, but has only 16-bit PCM and no MIDI.
  1120. */
  1121. USB_DEVICE(0x0582, 0x00a3),
  1122. QUIRK_DRIVER_INFO {
  1123. .vendor_name = "EDIROL",
  1124. .product_name = "UA-4FX",
  1125. QUIRK_DATA_COMPOSITE {
  1126. { QUIRK_DATA_EDIROL_UAXX(0) },
  1127. { QUIRK_DATA_EDIROL_UAXX(1) },
  1128. { QUIRK_DATA_EDIROL_UAXX(2) },
  1129. QUIRK_COMPOSITE_END
  1130. }
  1131. }
  1132. },
  1133. {
  1134. /* Edirol M-16DX */
  1135. USB_DEVICE(0x0582, 0x00c4),
  1136. QUIRK_DRIVER_INFO {
  1137. QUIRK_DATA_COMPOSITE {
  1138. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1139. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1140. {
  1141. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  1142. .out_cables = 0x0001,
  1143. .in_cables = 0x0001
  1144. }
  1145. },
  1146. QUIRK_COMPOSITE_END
  1147. }
  1148. }
  1149. },
  1150. {
  1151. /* Advanced modes of the Edirol UA-25EX.
  1152. * For the standard mode, UA-25EX has ID 0582:00e7, which
  1153. * offers only 16-bit PCM at 44.1 kHz and no MIDI.
  1154. */
  1155. USB_DEVICE_VENDOR_SPEC(0x0582, 0x00e6),
  1156. QUIRK_DRIVER_INFO {
  1157. .vendor_name = "EDIROL",
  1158. .product_name = "UA-25EX",
  1159. QUIRK_DATA_COMPOSITE {
  1160. { QUIRK_DATA_EDIROL_UAXX(0) },
  1161. { QUIRK_DATA_EDIROL_UAXX(1) },
  1162. { QUIRK_DATA_EDIROL_UAXX(2) },
  1163. QUIRK_COMPOSITE_END
  1164. }
  1165. }
  1166. },
  1167. {
  1168. /* Edirol UM-3G */
  1169. USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108),
  1170. QUIRK_DRIVER_INFO {
  1171. QUIRK_DATA_MIDI_FIXED_ENDPOINT(0) {
  1172. .out_cables = 0x0007,
  1173. .in_cables = 0x0007
  1174. }
  1175. }
  1176. },
  1177. {
  1178. /* BOSS ME-25 */
  1179. USB_DEVICE(0x0582, 0x0113),
  1180. QUIRK_DRIVER_INFO {
  1181. QUIRK_DATA_COMPOSITE {
  1182. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1183. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1184. {
  1185. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  1186. .out_cables = 0x0001,
  1187. .in_cables = 0x0001
  1188. }
  1189. },
  1190. QUIRK_COMPOSITE_END
  1191. }
  1192. }
  1193. },
  1194. {
  1195. /* only 44.1 kHz works at the moment */
  1196. USB_DEVICE(0x0582, 0x0120),
  1197. QUIRK_DRIVER_INFO {
  1198. /* .vendor_name = "Roland", */
  1199. /* .product_name = "OCTO-CAPTURE", */
  1200. QUIRK_DATA_COMPOSITE {
  1201. {
  1202. QUIRK_DATA_AUDIOFORMAT(0) {
  1203. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  1204. .channels = 10,
  1205. .iface = 0,
  1206. .altsetting = 1,
  1207. .altset_idx = 1,
  1208. .endpoint = 0x05,
  1209. .ep_attr = 0x05,
  1210. .rates = SNDRV_PCM_RATE_44100,
  1211. .rate_min = 44100,
  1212. .rate_max = 44100,
  1213. .nr_rates = 1,
  1214. .rate_table = (unsigned int[]) { 44100 }
  1215. }
  1216. },
  1217. {
  1218. QUIRK_DATA_AUDIOFORMAT(1) {
  1219. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  1220. .channels = 12,
  1221. .iface = 1,
  1222. .altsetting = 1,
  1223. .altset_idx = 1,
  1224. .endpoint = 0x85,
  1225. .ep_attr = 0x25,
  1226. .rates = SNDRV_PCM_RATE_44100,
  1227. .rate_min = 44100,
  1228. .rate_max = 44100,
  1229. .nr_rates = 1,
  1230. .rate_table = (unsigned int[]) { 44100 }
  1231. }
  1232. },
  1233. {
  1234. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  1235. .out_cables = 0x0001,
  1236. .in_cables = 0x0001
  1237. }
  1238. },
  1239. { QUIRK_DATA_IGNORE(3) },
  1240. { QUIRK_DATA_IGNORE(4) },
  1241. QUIRK_COMPOSITE_END
  1242. }
  1243. }
  1244. },
  1245. {
  1246. /* only 44.1 kHz works at the moment */
  1247. USB_DEVICE(0x0582, 0x012f),
  1248. QUIRK_DRIVER_INFO {
  1249. /* .vendor_name = "Roland", */
  1250. /* .product_name = "QUAD-CAPTURE", */
  1251. QUIRK_DATA_COMPOSITE {
  1252. {
  1253. QUIRK_DATA_AUDIOFORMAT(0) {
  1254. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  1255. .channels = 4,
  1256. .iface = 0,
  1257. .altsetting = 1,
  1258. .altset_idx = 1,
  1259. .endpoint = 0x05,
  1260. .ep_attr = 0x05,
  1261. .rates = SNDRV_PCM_RATE_44100,
  1262. .rate_min = 44100,
  1263. .rate_max = 44100,
  1264. .nr_rates = 1,
  1265. .rate_table = (unsigned int[]) { 44100 }
  1266. }
  1267. },
  1268. {
  1269. QUIRK_DATA_AUDIOFORMAT(1) {
  1270. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  1271. .channels = 6,
  1272. .iface = 1,
  1273. .altsetting = 1,
  1274. .altset_idx = 1,
  1275. .endpoint = 0x85,
  1276. .ep_attr = 0x25,
  1277. .rates = SNDRV_PCM_RATE_44100,
  1278. .rate_min = 44100,
  1279. .rate_max = 44100,
  1280. .nr_rates = 1,
  1281. .rate_table = (unsigned int[]) { 44100 }
  1282. }
  1283. },
  1284. {
  1285. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  1286. .out_cables = 0x0001,
  1287. .in_cables = 0x0001
  1288. }
  1289. },
  1290. { QUIRK_DATA_IGNORE(3) },
  1291. { QUIRK_DATA_IGNORE(4) },
  1292. QUIRK_COMPOSITE_END
  1293. }
  1294. }
  1295. },
  1296. {
  1297. USB_DEVICE(0x0582, 0x0159),
  1298. QUIRK_DRIVER_INFO {
  1299. /* .vendor_name = "Roland", */
  1300. /* .product_name = "UA-22", */
  1301. QUIRK_DATA_COMPOSITE {
  1302. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1303. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1304. {
  1305. QUIRK_DATA_MIDI_FIXED_ENDPOINT(2) {
  1306. .out_cables = 0x0001,
  1307. .in_cables = 0x0001
  1308. }
  1309. },
  1310. QUIRK_COMPOSITE_END
  1311. }
  1312. }
  1313. },
  1314. /* UA101 and co are supported by another driver */
  1315. {
  1316. USB_DEVICE(0x0582, 0x0044), /* UA-1000 high speed */
  1317. QUIRK_DRIVER_INFO {
  1318. .ifnum = QUIRK_NODEV_INTERFACE
  1319. },
  1320. },
  1321. {
  1322. USB_DEVICE(0x0582, 0x007d), /* UA-101 high speed */
  1323. QUIRK_DRIVER_INFO {
  1324. .ifnum = QUIRK_NODEV_INTERFACE
  1325. },
  1326. },
  1327. {
  1328. USB_DEVICE(0x0582, 0x008d), /* UA-101 full speed */
  1329. QUIRK_DRIVER_INFO {
  1330. .ifnum = QUIRK_NODEV_INTERFACE
  1331. },
  1332. },
  1333. /* this catches most recent vendor-specific Roland devices */
  1334. {
  1335. .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
  1336. USB_DEVICE_ID_MATCH_INT_CLASS,
  1337. .idVendor = 0x0582,
  1338. .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
  1339. QUIRK_DRIVER_INFO {
  1340. .ifnum = QUIRK_ANY_INTERFACE,
  1341. .type = QUIRK_AUTODETECT
  1342. }
  1343. },
  1344. /* Guillemot devices */
  1345. {
  1346. /*
  1347. * This is for the "Windows Edition" where the external MIDI ports are
  1348. * the only MIDI ports; the control data is reported through HID
  1349. * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
  1350. * compliant USB MIDI ports for external MIDI and controls.
  1351. */
  1352. USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
  1353. QUIRK_DRIVER_INFO {
  1354. .vendor_name = "Hercules",
  1355. .product_name = "DJ Console (WE)",
  1356. QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) {
  1357. .out_cables = 0x0001,
  1358. .in_cables = 0x0001
  1359. }
  1360. }
  1361. },
  1362. /* Midiman/M-Audio devices */
  1363. {
  1364. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1002),
  1365. QUIRK_DRIVER_INFO {
  1366. .vendor_name = "M-Audio",
  1367. .product_name = "MidiSport 2x2",
  1368. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1369. .out_cables = 0x0003,
  1370. .in_cables = 0x0003
  1371. }
  1372. }
  1373. },
  1374. {
  1375. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1011),
  1376. QUIRK_DRIVER_INFO {
  1377. .vendor_name = "M-Audio",
  1378. .product_name = "MidiSport 1x1",
  1379. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1380. .out_cables = 0x0001,
  1381. .in_cables = 0x0001
  1382. }
  1383. }
  1384. },
  1385. {
  1386. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1015),
  1387. QUIRK_DRIVER_INFO {
  1388. .vendor_name = "M-Audio",
  1389. .product_name = "Keystation",
  1390. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1391. .out_cables = 0x0001,
  1392. .in_cables = 0x0001
  1393. }
  1394. }
  1395. },
  1396. {
  1397. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1021),
  1398. QUIRK_DRIVER_INFO {
  1399. .vendor_name = "M-Audio",
  1400. .product_name = "MidiSport 4x4",
  1401. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1402. .out_cables = 0x000f,
  1403. .in_cables = 0x000f
  1404. }
  1405. }
  1406. },
  1407. {
  1408. /*
  1409. * For hardware revision 1.05; in the later revisions (1.10 and
  1410. * 1.21), 0x1031 is the ID for the device without firmware.
  1411. * Thanks to Olaf Giesbrecht <Olaf_Giesbrecht@yahoo.de>
  1412. */
  1413. USB_DEVICE_VER(0x0763, 0x1031, 0x0100, 0x0109),
  1414. QUIRK_DRIVER_INFO {
  1415. .vendor_name = "M-Audio",
  1416. .product_name = "MidiSport 8x8",
  1417. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1418. .out_cables = 0x01ff,
  1419. .in_cables = 0x01ff
  1420. }
  1421. }
  1422. },
  1423. {
  1424. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1033),
  1425. QUIRK_DRIVER_INFO {
  1426. .vendor_name = "M-Audio",
  1427. .product_name = "MidiSport 8x8",
  1428. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1429. .out_cables = 0x01ff,
  1430. .in_cables = 0x01ff
  1431. }
  1432. }
  1433. },
  1434. {
  1435. USB_DEVICE_VENDOR_SPEC(0x0763, 0x1041),
  1436. QUIRK_DRIVER_INFO {
  1437. .vendor_name = "M-Audio",
  1438. .product_name = "MidiSport 2x4",
  1439. QUIRK_DATA_MIDI_MIDIMAN(QUIRK_ANY_INTERFACE) {
  1440. .out_cables = 0x000f,
  1441. .in_cables = 0x0003
  1442. }
  1443. }
  1444. },
  1445. {
  1446. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2001),
  1447. QUIRK_DRIVER_INFO {
  1448. .vendor_name = "M-Audio",
  1449. .product_name = "Quattro",
  1450. QUIRK_DATA_COMPOSITE {
  1451. /*
  1452. * Interfaces 0-2 are "Windows-compatible", 16-bit only,
  1453. * and share endpoints with the other interfaces.
  1454. * Ignore them. The other interfaces can do 24 bits,
  1455. * but captured samples are big-endian (see usbaudio.c).
  1456. */
  1457. { QUIRK_DATA_IGNORE(0) },
  1458. { QUIRK_DATA_IGNORE(1) },
  1459. { QUIRK_DATA_IGNORE(2) },
  1460. { QUIRK_DATA_IGNORE(3) },
  1461. { QUIRK_DATA_STANDARD_AUDIO(4) },
  1462. { QUIRK_DATA_STANDARD_AUDIO(5) },
  1463. { QUIRK_DATA_IGNORE(6) },
  1464. { QUIRK_DATA_STANDARD_AUDIO(7) },
  1465. { QUIRK_DATA_STANDARD_AUDIO(8) },
  1466. {
  1467. QUIRK_DATA_MIDI_MIDIMAN(9) {
  1468. .out_cables = 0x0001,
  1469. .in_cables = 0x0001
  1470. }
  1471. },
  1472. QUIRK_COMPOSITE_END
  1473. }
  1474. }
  1475. },
  1476. {
  1477. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2003),
  1478. QUIRK_DRIVER_INFO {
  1479. .vendor_name = "M-Audio",
  1480. .product_name = "AudioPhile",
  1481. QUIRK_DATA_MIDI_MIDIMAN(6) {
  1482. .out_cables = 0x0001,
  1483. .in_cables = 0x0001
  1484. }
  1485. }
  1486. },
  1487. {
  1488. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2008),
  1489. QUIRK_DRIVER_INFO {
  1490. .vendor_name = "M-Audio",
  1491. .product_name = "Ozone",
  1492. QUIRK_DATA_MIDI_MIDIMAN(3) {
  1493. .out_cables = 0x0001,
  1494. .in_cables = 0x0001
  1495. }
  1496. }
  1497. },
  1498. {
  1499. USB_DEVICE_VENDOR_SPEC(0x0763, 0x200d),
  1500. QUIRK_DRIVER_INFO {
  1501. .vendor_name = "M-Audio",
  1502. .product_name = "OmniStudio",
  1503. QUIRK_DATA_COMPOSITE {
  1504. { QUIRK_DATA_IGNORE(0) },
  1505. { QUIRK_DATA_IGNORE(1) },
  1506. { QUIRK_DATA_IGNORE(2) },
  1507. { QUIRK_DATA_IGNORE(3) },
  1508. { QUIRK_DATA_STANDARD_AUDIO(4) },
  1509. { QUIRK_DATA_STANDARD_AUDIO(5) },
  1510. { QUIRK_DATA_IGNORE(6) },
  1511. { QUIRK_DATA_STANDARD_AUDIO(7) },
  1512. { QUIRK_DATA_STANDARD_AUDIO(8) },
  1513. {
  1514. QUIRK_DATA_MIDI_MIDIMAN(9) {
  1515. .out_cables = 0x0001,
  1516. .in_cables = 0x0001
  1517. }
  1518. },
  1519. QUIRK_COMPOSITE_END
  1520. }
  1521. }
  1522. },
  1523. {
  1524. USB_DEVICE(0x0763, 0x2019),
  1525. QUIRK_DRIVER_INFO {
  1526. /* .vendor_name = "M-Audio", */
  1527. /* .product_name = "Ozone Academic", */
  1528. QUIRK_DATA_COMPOSITE {
  1529. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1530. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1531. { QUIRK_DATA_STANDARD_AUDIO(2) },
  1532. {
  1533. QUIRK_DATA_MIDI_MIDIMAN(3) {
  1534. .out_cables = 0x0001,
  1535. .in_cables = 0x0001
  1536. }
  1537. },
  1538. QUIRK_COMPOSITE_END
  1539. }
  1540. }
  1541. },
  1542. {
  1543. /* M-Audio Micro */
  1544. USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a),
  1545. },
  1546. {
  1547. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030),
  1548. QUIRK_DRIVER_INFO {
  1549. /* .vendor_name = "M-Audio", */
  1550. /* .product_name = "Fast Track C400", */
  1551. QUIRK_DATA_COMPOSITE {
  1552. { QUIRK_DATA_STANDARD_MIXER(1) },
  1553. /* Playback */
  1554. {
  1555. QUIRK_DATA_AUDIOFORMAT(2) {
  1556. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1557. .channels = 6,
  1558. .iface = 2,
  1559. .altsetting = 1,
  1560. .altset_idx = 1,
  1561. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1562. .endpoint = 0x01,
  1563. .ep_attr = 0x09,
  1564. .rates = SNDRV_PCM_RATE_44100 |
  1565. SNDRV_PCM_RATE_48000 |
  1566. SNDRV_PCM_RATE_88200 |
  1567. SNDRV_PCM_RATE_96000,
  1568. .rate_min = 44100,
  1569. .rate_max = 96000,
  1570. .nr_rates = 4,
  1571. .rate_table = (unsigned int[]) {
  1572. 44100, 48000, 88200, 96000
  1573. },
  1574. .clock = 0x80,
  1575. }
  1576. },
  1577. /* Capture */
  1578. {
  1579. QUIRK_DATA_AUDIOFORMAT(3) {
  1580. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1581. .channels = 4,
  1582. .iface = 3,
  1583. .altsetting = 1,
  1584. .altset_idx = 1,
  1585. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1586. .endpoint = 0x81,
  1587. .ep_attr = 0x05,
  1588. .rates = SNDRV_PCM_RATE_44100 |
  1589. SNDRV_PCM_RATE_48000 |
  1590. SNDRV_PCM_RATE_88200 |
  1591. SNDRV_PCM_RATE_96000,
  1592. .rate_min = 44100,
  1593. .rate_max = 96000,
  1594. .nr_rates = 4,
  1595. .rate_table = (unsigned int[]) {
  1596. 44100, 48000, 88200, 96000
  1597. },
  1598. .clock = 0x80,
  1599. }
  1600. },
  1601. /* MIDI: Interface = 4*/
  1602. QUIRK_COMPOSITE_END
  1603. }
  1604. }
  1605. },
  1606. {
  1607. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2031),
  1608. QUIRK_DRIVER_INFO {
  1609. /* .vendor_name = "M-Audio", */
  1610. /* .product_name = "Fast Track C600", */
  1611. QUIRK_DATA_COMPOSITE {
  1612. { QUIRK_DATA_STANDARD_MIXER(1) },
  1613. /* Playback */
  1614. {
  1615. QUIRK_DATA_AUDIOFORMAT(2) {
  1616. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1617. .channels = 8,
  1618. .iface = 2,
  1619. .altsetting = 1,
  1620. .altset_idx = 1,
  1621. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1622. .endpoint = 0x01,
  1623. .ep_attr = 0x09,
  1624. .rates = SNDRV_PCM_RATE_44100 |
  1625. SNDRV_PCM_RATE_48000 |
  1626. SNDRV_PCM_RATE_88200 |
  1627. SNDRV_PCM_RATE_96000,
  1628. .rate_min = 44100,
  1629. .rate_max = 96000,
  1630. .nr_rates = 4,
  1631. .rate_table = (unsigned int[]) {
  1632. 44100, 48000, 88200, 96000
  1633. },
  1634. .clock = 0x80,
  1635. }
  1636. },
  1637. /* Capture */
  1638. {
  1639. QUIRK_DATA_AUDIOFORMAT(3) {
  1640. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1641. .channels = 6,
  1642. .iface = 3,
  1643. .altsetting = 1,
  1644. .altset_idx = 1,
  1645. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1646. .endpoint = 0x81,
  1647. .ep_attr = 0x05,
  1648. .rates = SNDRV_PCM_RATE_44100 |
  1649. SNDRV_PCM_RATE_48000 |
  1650. SNDRV_PCM_RATE_88200 |
  1651. SNDRV_PCM_RATE_96000,
  1652. .rate_min = 44100,
  1653. .rate_max = 96000,
  1654. .nr_rates = 4,
  1655. .rate_table = (unsigned int[]) {
  1656. 44100, 48000, 88200, 96000
  1657. },
  1658. .clock = 0x80,
  1659. }
  1660. },
  1661. /* MIDI: Interface = 4 */
  1662. QUIRK_COMPOSITE_END
  1663. }
  1664. }
  1665. },
  1666. {
  1667. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2080),
  1668. QUIRK_DRIVER_INFO {
  1669. /* .vendor_name = "M-Audio", */
  1670. /* .product_name = "Fast Track Ultra", */
  1671. QUIRK_DATA_COMPOSITE {
  1672. { QUIRK_DATA_STANDARD_MIXER(0) },
  1673. {
  1674. QUIRK_DATA_AUDIOFORMAT(1) {
  1675. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1676. .channels = 8,
  1677. .iface = 1,
  1678. .altsetting = 1,
  1679. .altset_idx = 1,
  1680. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1681. .endpoint = 0x01,
  1682. .ep_attr = 0x09,
  1683. .rates = SNDRV_PCM_RATE_44100 |
  1684. SNDRV_PCM_RATE_48000 |
  1685. SNDRV_PCM_RATE_88200 |
  1686. SNDRV_PCM_RATE_96000,
  1687. .rate_min = 44100,
  1688. .rate_max = 96000,
  1689. .nr_rates = 4,
  1690. .rate_table = (unsigned int[]) {
  1691. 44100, 48000, 88200, 96000
  1692. }
  1693. }
  1694. },
  1695. {
  1696. QUIRK_DATA_AUDIOFORMAT(2) {
  1697. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1698. .channels = 8,
  1699. .iface = 2,
  1700. .altsetting = 1,
  1701. .altset_idx = 1,
  1702. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1703. .endpoint = 0x81,
  1704. .ep_attr = 0x05,
  1705. .rates = SNDRV_PCM_RATE_44100 |
  1706. SNDRV_PCM_RATE_48000 |
  1707. SNDRV_PCM_RATE_88200 |
  1708. SNDRV_PCM_RATE_96000,
  1709. .rate_min = 44100,
  1710. .rate_max = 96000,
  1711. .nr_rates = 4,
  1712. .rate_table = (unsigned int[]) {
  1713. 44100, 48000, 88200, 96000
  1714. }
  1715. }
  1716. },
  1717. /* interface 3 (MIDI) is standard compliant */
  1718. QUIRK_COMPOSITE_END
  1719. }
  1720. }
  1721. },
  1722. {
  1723. USB_DEVICE_VENDOR_SPEC(0x0763, 0x2081),
  1724. QUIRK_DRIVER_INFO {
  1725. /* .vendor_name = "M-Audio", */
  1726. /* .product_name = "Fast Track Ultra 8R", */
  1727. QUIRK_DATA_COMPOSITE {
  1728. { QUIRK_DATA_STANDARD_MIXER(0) },
  1729. {
  1730. QUIRK_DATA_AUDIOFORMAT(1) {
  1731. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1732. .channels = 8,
  1733. .iface = 1,
  1734. .altsetting = 1,
  1735. .altset_idx = 1,
  1736. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1737. .endpoint = 0x01,
  1738. .ep_attr = 0x09,
  1739. .rates = SNDRV_PCM_RATE_44100 |
  1740. SNDRV_PCM_RATE_48000 |
  1741. SNDRV_PCM_RATE_88200 |
  1742. SNDRV_PCM_RATE_96000,
  1743. .rate_min = 44100,
  1744. .rate_max = 96000,
  1745. .nr_rates = 4,
  1746. .rate_table = (unsigned int[]) {
  1747. 44100, 48000, 88200, 96000
  1748. }
  1749. }
  1750. },
  1751. {
  1752. QUIRK_DATA_AUDIOFORMAT(2) {
  1753. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  1754. .channels = 8,
  1755. .iface = 2,
  1756. .altsetting = 1,
  1757. .altset_idx = 1,
  1758. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  1759. .endpoint = 0x81,
  1760. .ep_attr = 0x05,
  1761. .rates = SNDRV_PCM_RATE_44100 |
  1762. SNDRV_PCM_RATE_48000 |
  1763. SNDRV_PCM_RATE_88200 |
  1764. SNDRV_PCM_RATE_96000,
  1765. .rate_min = 44100,
  1766. .rate_max = 96000,
  1767. .nr_rates = 4,
  1768. .rate_table = (unsigned int[]) {
  1769. 44100, 48000, 88200, 96000
  1770. }
  1771. }
  1772. },
  1773. /* interface 3 (MIDI) is standard compliant */
  1774. QUIRK_COMPOSITE_END
  1775. }
  1776. }
  1777. },
  1778. /* Casio devices */
  1779. {
  1780. USB_DEVICE(0x07cf, 0x6801),
  1781. QUIRK_DRIVER_INFO {
  1782. .vendor_name = "Casio",
  1783. .product_name = "PL-40R",
  1784. QUIRK_DATA_MIDI_YAMAHA(0)
  1785. }
  1786. },
  1787. {
  1788. /* this ID is used by several devices without a product ID */
  1789. USB_DEVICE(0x07cf, 0x6802),
  1790. QUIRK_DRIVER_INFO {
  1791. .vendor_name = "Casio",
  1792. .product_name = "Keyboard",
  1793. QUIRK_DATA_MIDI_YAMAHA(0)
  1794. }
  1795. },
  1796. /* Mark of the Unicorn devices */
  1797. {
  1798. /* thanks to Robert A. Lerche <ral 'at' msbit.com> */
  1799. .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
  1800. USB_DEVICE_ID_MATCH_PRODUCT |
  1801. USB_DEVICE_ID_MATCH_DEV_SUBCLASS,
  1802. .idVendor = 0x07fd,
  1803. .idProduct = 0x0001,
  1804. .bDeviceSubClass = 2,
  1805. QUIRK_DRIVER_INFO {
  1806. .vendor_name = "MOTU",
  1807. .product_name = "Fastlane",
  1808. QUIRK_DATA_COMPOSITE {
  1809. { QUIRK_DATA_RAW_BYTES(0) },
  1810. { QUIRK_DATA_IGNORE(1) },
  1811. QUIRK_COMPOSITE_END
  1812. }
  1813. }
  1814. },
  1815. /* Emagic devices */
  1816. {
  1817. USB_DEVICE(0x086a, 0x0001),
  1818. QUIRK_DRIVER_INFO {
  1819. .vendor_name = "Emagic",
  1820. .product_name = "Unitor8",
  1821. QUIRK_DATA_MIDI_EMAGIC(2) {
  1822. .out_cables = 0x80ff,
  1823. .in_cables = 0x80ff
  1824. }
  1825. }
  1826. },
  1827. {
  1828. USB_DEVICE(0x086a, 0x0002),
  1829. QUIRK_DRIVER_INFO {
  1830. .vendor_name = "Emagic",
  1831. /* .product_name = "AMT8", */
  1832. QUIRK_DATA_MIDI_EMAGIC(2) {
  1833. .out_cables = 0x80ff,
  1834. .in_cables = 0x80ff
  1835. }
  1836. }
  1837. },
  1838. {
  1839. USB_DEVICE(0x086a, 0x0003),
  1840. QUIRK_DRIVER_INFO {
  1841. .vendor_name = "Emagic",
  1842. /* .product_name = "MT4", */
  1843. QUIRK_DATA_MIDI_EMAGIC(2) {
  1844. .out_cables = 0x800f,
  1845. .in_cables = 0x8003
  1846. }
  1847. }
  1848. },
  1849. /* KORG devices */
  1850. {
  1851. USB_DEVICE_VENDOR_SPEC(0x0944, 0x0200),
  1852. QUIRK_DRIVER_INFO {
  1853. .vendor_name = "KORG, Inc.",
  1854. /* .product_name = "PANDORA PX5D", */
  1855. QUIRK_DATA_STANDARD_MIDI(3)
  1856. }
  1857. },
  1858. {
  1859. USB_DEVICE_VENDOR_SPEC(0x0944, 0x0201),
  1860. QUIRK_DRIVER_INFO {
  1861. .vendor_name = "KORG, Inc.",
  1862. /* .product_name = "ToneLab ST", */
  1863. QUIRK_DATA_STANDARD_MIDI(3)
  1864. }
  1865. },
  1866. {
  1867. USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
  1868. QUIRK_DRIVER_INFO {
  1869. .vendor_name = "KORG, Inc.",
  1870. /* .product_name = "ToneLab EX", */
  1871. QUIRK_DATA_STANDARD_MIDI(3)
  1872. }
  1873. },
  1874. /* AKAI devices */
  1875. {
  1876. USB_DEVICE(0x09e8, 0x0062),
  1877. QUIRK_DRIVER_INFO {
  1878. .vendor_name = "AKAI",
  1879. .product_name = "MPD16",
  1880. .ifnum = 0,
  1881. .type = QUIRK_MIDI_AKAI,
  1882. }
  1883. },
  1884. {
  1885. /* Akai MPC Element */
  1886. USB_DEVICE(0x09e8, 0x0021),
  1887. QUIRK_DRIVER_INFO {
  1888. QUIRK_DATA_COMPOSITE {
  1889. { QUIRK_DATA_IGNORE(0) },
  1890. { QUIRK_DATA_STANDARD_MIDI(1) },
  1891. QUIRK_COMPOSITE_END
  1892. }
  1893. }
  1894. },
  1895. /* Steinberg devices */
  1896. {
  1897. /* Steinberg MI2 */
  1898. USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
  1899. QUIRK_DRIVER_INFO {
  1900. QUIRK_DATA_COMPOSITE {
  1901. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1902. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1903. { QUIRK_DATA_STANDARD_AUDIO(2) },
  1904. {
  1905. QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
  1906. .out_cables = 0x0001,
  1907. .in_cables = 0x0001
  1908. }
  1909. },
  1910. QUIRK_COMPOSITE_END
  1911. }
  1912. }
  1913. },
  1914. {
  1915. /* Steinberg MI4 */
  1916. USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
  1917. QUIRK_DRIVER_INFO {
  1918. QUIRK_DATA_COMPOSITE {
  1919. { QUIRK_DATA_STANDARD_AUDIO(0) },
  1920. { QUIRK_DATA_STANDARD_AUDIO(1) },
  1921. { QUIRK_DATA_STANDARD_AUDIO(2) },
  1922. {
  1923. QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
  1924. .out_cables = 0x0001,
  1925. .in_cables = 0x0001
  1926. }
  1927. },
  1928. QUIRK_COMPOSITE_END
  1929. }
  1930. }
  1931. },
  1932. /* TerraTec devices */
  1933. {
  1934. USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
  1935. QUIRK_DRIVER_INFO {
  1936. .vendor_name = "TerraTec",
  1937. .product_name = "PHASE 26",
  1938. QUIRK_DATA_STANDARD_MIDI(3)
  1939. }
  1940. },
  1941. {
  1942. USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
  1943. QUIRK_DRIVER_INFO {
  1944. .vendor_name = "TerraTec",
  1945. .product_name = "PHASE 26",
  1946. QUIRK_DATA_STANDARD_MIDI(3)
  1947. }
  1948. },
  1949. {
  1950. USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0014),
  1951. QUIRK_DRIVER_INFO {
  1952. .vendor_name = "TerraTec",
  1953. .product_name = "PHASE 26",
  1954. QUIRK_DATA_STANDARD_MIDI(3)
  1955. }
  1956. },
  1957. {
  1958. USB_DEVICE(0x0ccd, 0x0035),
  1959. QUIRK_DRIVER_INFO {
  1960. .vendor_name = "Miditech",
  1961. .product_name = "Play'n Roll",
  1962. .ifnum = 0,
  1963. .type = QUIRK_MIDI_CME
  1964. }
  1965. },
  1966. /* Stanton ScratchAmp */
  1967. { USB_DEVICE(0x103d, 0x0100) },
  1968. { USB_DEVICE(0x103d, 0x0101) },
  1969. /* Novation EMS devices */
  1970. {
  1971. USB_DEVICE_VENDOR_SPEC(0x1235, 0x0001),
  1972. QUIRK_DRIVER_INFO {
  1973. .vendor_name = "Novation",
  1974. .product_name = "ReMOTE Audio/XStation",
  1975. .ifnum = 4,
  1976. .type = QUIRK_MIDI_NOVATION
  1977. }
  1978. },
  1979. {
  1980. USB_DEVICE_VENDOR_SPEC(0x1235, 0x0002),
  1981. QUIRK_DRIVER_INFO {
  1982. .vendor_name = "Novation",
  1983. .product_name = "Speedio",
  1984. .ifnum = 3,
  1985. .type = QUIRK_MIDI_NOVATION
  1986. }
  1987. },
  1988. {
  1989. USB_DEVICE(0x1235, 0x000a),
  1990. QUIRK_DRIVER_INFO {
  1991. /* .vendor_name = "Novation", */
  1992. /* .product_name = "Nocturn", */
  1993. QUIRK_DATA_RAW_BYTES(0)
  1994. }
  1995. },
  1996. {
  1997. USB_DEVICE(0x1235, 0x000e),
  1998. QUIRK_DRIVER_INFO {
  1999. /* .vendor_name = "Novation", */
  2000. /* .product_name = "Launchpad", */
  2001. QUIRK_DATA_RAW_BYTES(0)
  2002. }
  2003. },
  2004. {
  2005. USB_DEVICE(0x1235, 0x0010),
  2006. QUIRK_DRIVER_INFO {
  2007. .vendor_name = "Focusrite",
  2008. .product_name = "Saffire 6 USB",
  2009. QUIRK_DATA_COMPOSITE {
  2010. { QUIRK_DATA_STANDARD_MIXER(0) },
  2011. {
  2012. QUIRK_DATA_AUDIOFORMAT(0) {
  2013. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2014. .channels = 4,
  2015. .iface = 0,
  2016. .altsetting = 1,
  2017. .altset_idx = 1,
  2018. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  2019. .endpoint = 0x01,
  2020. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2021. .datainterval = 1,
  2022. .maxpacksize = 0x024c,
  2023. .rates = SNDRV_PCM_RATE_44100 |
  2024. SNDRV_PCM_RATE_48000,
  2025. .rate_min = 44100,
  2026. .rate_max = 48000,
  2027. .nr_rates = 2,
  2028. .rate_table = (unsigned int[]) {
  2029. 44100, 48000
  2030. },
  2031. .sync_ep = 0x82,
  2032. .sync_iface = 0,
  2033. .sync_altsetting = 1,
  2034. .sync_ep_idx = 1,
  2035. .implicit_fb = 1,
  2036. }
  2037. },
  2038. {
  2039. QUIRK_DATA_AUDIOFORMAT(0) {
  2040. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2041. .channels = 2,
  2042. .iface = 0,
  2043. .altsetting = 1,
  2044. .altset_idx = 1,
  2045. .attributes = 0,
  2046. .endpoint = 0x82,
  2047. .ep_idx = 1,
  2048. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2049. .datainterval = 1,
  2050. .maxpacksize = 0x0126,
  2051. .rates = SNDRV_PCM_RATE_44100 |
  2052. SNDRV_PCM_RATE_48000,
  2053. .rate_min = 44100,
  2054. .rate_max = 48000,
  2055. .nr_rates = 2,
  2056. .rate_table = (unsigned int[]) {
  2057. 44100, 48000
  2058. }
  2059. }
  2060. },
  2061. { QUIRK_DATA_RAW_BYTES(1) },
  2062. QUIRK_COMPOSITE_END
  2063. }
  2064. }
  2065. },
  2066. {
  2067. USB_DEVICE(0x1235, 0x0018),
  2068. QUIRK_DRIVER_INFO {
  2069. .vendor_name = "Novation",
  2070. .product_name = "Twitch",
  2071. QUIRK_DATA_COMPOSITE {
  2072. {
  2073. QUIRK_DATA_AUDIOFORMAT(0) {
  2074. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2075. .channels = 4,
  2076. .iface = 0,
  2077. .altsetting = 1,
  2078. .altset_idx = 1,
  2079. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  2080. .endpoint = 0x01,
  2081. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2082. .rates = SNDRV_PCM_RATE_44100 |
  2083. SNDRV_PCM_RATE_48000,
  2084. .rate_min = 44100,
  2085. .rate_max = 48000,
  2086. .nr_rates = 2,
  2087. .rate_table = (unsigned int[]) {
  2088. 44100, 48000
  2089. }
  2090. }
  2091. },
  2092. { QUIRK_DATA_RAW_BYTES(1) },
  2093. QUIRK_COMPOSITE_END
  2094. }
  2095. }
  2096. },
  2097. {
  2098. USB_DEVICE_VENDOR_SPEC(0x1235, 0x4661),
  2099. QUIRK_DRIVER_INFO {
  2100. .vendor_name = "Novation",
  2101. .product_name = "ReMOTE25",
  2102. .ifnum = 0,
  2103. .type = QUIRK_MIDI_NOVATION
  2104. }
  2105. },
  2106. /* Access Music devices */
  2107. {
  2108. /* VirusTI Desktop */
  2109. USB_DEVICE_VENDOR_SPEC(0x133e, 0x0815),
  2110. QUIRK_DRIVER_INFO {
  2111. QUIRK_DATA_COMPOSITE {
  2112. {
  2113. QUIRK_DATA_MIDI_FIXED_ENDPOINT(3) {
  2114. .out_cables = 0x0003,
  2115. .in_cables = 0x0003
  2116. }
  2117. },
  2118. { QUIRK_DATA_IGNORE(4) },
  2119. QUIRK_COMPOSITE_END
  2120. }
  2121. }
  2122. },
  2123. /* Native Instruments MK2 series */
  2124. {
  2125. /* Komplete Audio 6 */
  2126. .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  2127. .idVendor = 0x17cc,
  2128. .idProduct = 0x1000,
  2129. },
  2130. {
  2131. /* Traktor Audio 6 */
  2132. .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  2133. .idVendor = 0x17cc,
  2134. .idProduct = 0x1010,
  2135. },
  2136. {
  2137. /* Traktor Audio 10 */
  2138. .match_flags = USB_DEVICE_ID_MATCH_DEVICE,
  2139. .idVendor = 0x17cc,
  2140. .idProduct = 0x1020,
  2141. },
  2142. /* QinHeng devices */
  2143. {
  2144. USB_DEVICE(0x1a86, 0x752d),
  2145. QUIRK_DRIVER_INFO {
  2146. .vendor_name = "QinHeng",
  2147. .product_name = "CH345",
  2148. .ifnum = 1,
  2149. .type = QUIRK_MIDI_CH345
  2150. }
  2151. },
  2152. /* KeithMcMillen Stringport */
  2153. { USB_DEVICE(0x1f38, 0x0001) }, /* FIXME: should be more restrictive matching */
  2154. /* Miditech devices */
  2155. {
  2156. USB_DEVICE(0x4752, 0x0011),
  2157. QUIRK_DRIVER_INFO {
  2158. .vendor_name = "Miditech",
  2159. .product_name = "Midistart-2",
  2160. .ifnum = 0,
  2161. .type = QUIRK_MIDI_CME
  2162. }
  2163. },
  2164. /* Central Music devices */
  2165. {
  2166. /* this ID used by both Miditech MidiStudio-2 and CME UF-x */
  2167. USB_DEVICE(0x7104, 0x2202),
  2168. QUIRK_DRIVER_INFO {
  2169. .ifnum = 0,
  2170. .type = QUIRK_MIDI_CME
  2171. }
  2172. },
  2173. /* Digidesign Mbox */
  2174. {
  2175. /* Thanks to Clemens Ladisch <clemens@ladisch.de> */
  2176. USB_DEVICE(0x0dba, 0x1000),
  2177. QUIRK_DRIVER_INFO {
  2178. .vendor_name = "Digidesign",
  2179. .product_name = "MBox",
  2180. QUIRK_DATA_COMPOSITE{
  2181. { QUIRK_DATA_STANDARD_MIXER(0) },
  2182. {
  2183. QUIRK_DATA_AUDIOFORMAT(1) {
  2184. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2185. .channels = 2,
  2186. .iface = 1,
  2187. .altsetting = 1,
  2188. .altset_idx = 1,
  2189. .attributes = 0x4,
  2190. .endpoint = 0x02,
  2191. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2192. USB_ENDPOINT_SYNC_SYNC,
  2193. .maxpacksize = 0x130,
  2194. .rates = SNDRV_PCM_RATE_48000,
  2195. .rate_min = 48000,
  2196. .rate_max = 48000,
  2197. .nr_rates = 1,
  2198. .rate_table = (unsigned int[]) {
  2199. 48000
  2200. }
  2201. }
  2202. },
  2203. {
  2204. QUIRK_DATA_AUDIOFORMAT(1) {
  2205. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2206. .channels = 2,
  2207. .iface = 1,
  2208. .altsetting = 1,
  2209. .altset_idx = 1,
  2210. .attributes = 0x4,
  2211. .endpoint = 0x81,
  2212. .ep_idx = 1,
  2213. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2214. USB_ENDPOINT_SYNC_ASYNC,
  2215. .maxpacksize = 0x130,
  2216. .rates = SNDRV_PCM_RATE_48000,
  2217. .rate_min = 48000,
  2218. .rate_max = 48000,
  2219. .nr_rates = 1,
  2220. .rate_table = (unsigned int[]) {
  2221. 48000
  2222. }
  2223. }
  2224. },
  2225. QUIRK_COMPOSITE_END
  2226. }
  2227. }
  2228. },
  2229. /* DIGIDESIGN MBOX 2 */
  2230. {
  2231. USB_DEVICE(0x0dba, 0x3000),
  2232. QUIRK_DRIVER_INFO {
  2233. .vendor_name = "Digidesign",
  2234. .product_name = "Mbox 2",
  2235. QUIRK_DATA_COMPOSITE {
  2236. { QUIRK_DATA_IGNORE(0) },
  2237. { QUIRK_DATA_IGNORE(1) },
  2238. {
  2239. QUIRK_DATA_AUDIOFORMAT(2) {
  2240. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2241. .channels = 2,
  2242. .iface = 2,
  2243. .altsetting = 2,
  2244. .altset_idx = 1,
  2245. .attributes = 0x00,
  2246. .endpoint = 0x03,
  2247. .ep_attr = USB_ENDPOINT_SYNC_ASYNC,
  2248. .rates = SNDRV_PCM_RATE_48000,
  2249. .rate_min = 48000,
  2250. .rate_max = 48000,
  2251. .nr_rates = 1,
  2252. .rate_table = (unsigned int[]) {
  2253. 48000
  2254. }
  2255. }
  2256. },
  2257. { QUIRK_DATA_IGNORE(3) },
  2258. {
  2259. QUIRK_DATA_AUDIOFORMAT(4) {
  2260. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2261. .channels = 2,
  2262. .iface = 4,
  2263. .altsetting = 2,
  2264. .altset_idx = 1,
  2265. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  2266. .endpoint = 0x85,
  2267. .ep_attr = USB_ENDPOINT_SYNC_SYNC,
  2268. .rates = SNDRV_PCM_RATE_48000,
  2269. .rate_min = 48000,
  2270. .rate_max = 48000,
  2271. .nr_rates = 1,
  2272. .rate_table = (unsigned int[]) {
  2273. 48000
  2274. }
  2275. }
  2276. },
  2277. { QUIRK_DATA_IGNORE(5) },
  2278. {
  2279. QUIRK_DATA_MIDI_MIDIMAN(6) {
  2280. .out_ep = 0x02,
  2281. .out_cables = 0x0001,
  2282. .in_ep = 0x81,
  2283. .in_interval = 0x01,
  2284. .in_cables = 0x0001
  2285. }
  2286. },
  2287. QUIRK_COMPOSITE_END
  2288. }
  2289. }
  2290. },
  2291. /* DIGIDESIGN MBOX 3 */
  2292. {
  2293. USB_DEVICE(0x0dba, 0x5000),
  2294. QUIRK_DRIVER_INFO {
  2295. .vendor_name = "Digidesign",
  2296. .product_name = "Mbox 3",
  2297. QUIRK_DATA_COMPOSITE {
  2298. { QUIRK_DATA_IGNORE(0) },
  2299. { QUIRK_DATA_IGNORE(1) },
  2300. {
  2301. QUIRK_DATA_AUDIOFORMAT(2) {
  2302. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2303. .fmt_bits = 24,
  2304. .channels = 4,
  2305. .iface = 2,
  2306. .altsetting = 1,
  2307. .altset_idx = 1,
  2308. .attributes = 0x00,
  2309. .endpoint = USB_RECIP_INTERFACE | USB_DIR_OUT,
  2310. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2311. USB_ENDPOINT_SYNC_ASYNC,
  2312. .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
  2313. SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
  2314. .rate_min = 44100,
  2315. .rate_max = 96000,
  2316. .nr_rates = 4,
  2317. .rate_table = (unsigned int[]) {
  2318. 44100, 48000, 88200, 96000
  2319. },
  2320. .sync_ep = USB_RECIP_INTERFACE | USB_DIR_IN,
  2321. .sync_iface = 3,
  2322. .sync_altsetting = 1,
  2323. .sync_ep_idx = 1,
  2324. .implicit_fb = 1,
  2325. }
  2326. },
  2327. {
  2328. QUIRK_DATA_AUDIOFORMAT(3) {
  2329. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2330. .fmt_bits = 24,
  2331. .channels = 4,
  2332. .iface = 3,
  2333. .altsetting = 1,
  2334. .altset_idx = 1,
  2335. .attributes = 0x00,
  2336. .endpoint = USB_RECIP_INTERFACE | USB_DIR_IN,
  2337. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2338. USB_ENDPOINT_SYNC_ASYNC,
  2339. .maxpacksize = 0x009c,
  2340. .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
  2341. SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
  2342. .rate_min = 44100,
  2343. .rate_max = 96000,
  2344. .nr_rates = 4,
  2345. .rate_table = (unsigned int[]) {
  2346. 44100, 48000, 88200, 96000
  2347. },
  2348. .implicit_fb = 0,
  2349. }
  2350. },
  2351. {
  2352. QUIRK_DATA_MIDI_FIXED_ENDPOINT(4) {
  2353. .out_cables = 0x0001,
  2354. .in_cables = 0x0001
  2355. }
  2356. },
  2357. QUIRK_COMPOSITE_END
  2358. }
  2359. }
  2360. },
  2361. {
  2362. /* Tascam US122 MKII - playback-only support */
  2363. USB_DEVICE_VENDOR_SPEC(0x0644, 0x8021),
  2364. QUIRK_DRIVER_INFO {
  2365. .vendor_name = "TASCAM",
  2366. .product_name = "US122 MKII",
  2367. QUIRK_DATA_COMPOSITE {
  2368. { QUIRK_DATA_IGNORE(0) },
  2369. {
  2370. QUIRK_DATA_AUDIOFORMAT(1) {
  2371. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2372. .channels = 2,
  2373. .iface = 1,
  2374. .altsetting = 1,
  2375. .altset_idx = 1,
  2376. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  2377. .endpoint = 0x02,
  2378. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2379. .rates = SNDRV_PCM_RATE_44100 |
  2380. SNDRV_PCM_RATE_48000 |
  2381. SNDRV_PCM_RATE_88200 |
  2382. SNDRV_PCM_RATE_96000,
  2383. .rate_min = 44100,
  2384. .rate_max = 96000,
  2385. .nr_rates = 4,
  2386. .rate_table = (unsigned int[]) {
  2387. 44100, 48000, 88200, 96000
  2388. }
  2389. }
  2390. },
  2391. QUIRK_COMPOSITE_END
  2392. }
  2393. }
  2394. },
  2395. /* Denon DN-X1600 */
  2396. {
  2397. USB_AUDIO_DEVICE(0x154e, 0x500e),
  2398. QUIRK_DRIVER_INFO {
  2399. .vendor_name = "Denon",
  2400. .product_name = "DN-X1600",
  2401. QUIRK_DATA_COMPOSITE{
  2402. { QUIRK_DATA_IGNORE(0) },
  2403. {
  2404. QUIRK_DATA_AUDIOFORMAT(1) {
  2405. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2406. .channels = 8,
  2407. .iface = 1,
  2408. .altsetting = 1,
  2409. .altset_idx = 1,
  2410. .attributes = 0x0,
  2411. .endpoint = 0x01,
  2412. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2413. USB_ENDPOINT_SYNC_ADAPTIVE,
  2414. .maxpacksize = 0x138,
  2415. .rates = SNDRV_PCM_RATE_48000,
  2416. .rate_min = 48000,
  2417. .rate_max = 48000,
  2418. .nr_rates = 1,
  2419. .rate_table = (unsigned int[]) {
  2420. 48000
  2421. }
  2422. }
  2423. },
  2424. {
  2425. QUIRK_DATA_AUDIOFORMAT(2) {
  2426. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2427. .channels = 8,
  2428. .iface = 2,
  2429. .altsetting = 1,
  2430. .altset_idx = 1,
  2431. .attributes = 0x0,
  2432. .endpoint = 0x85,
  2433. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2434. USB_ENDPOINT_SYNC_ADAPTIVE,
  2435. .maxpacksize = 0x138,
  2436. .rates = SNDRV_PCM_RATE_48000,
  2437. .rate_min = 48000,
  2438. .rate_max = 48000,
  2439. .nr_rates = 1,
  2440. .rate_table = (unsigned int[]) {
  2441. 48000
  2442. }
  2443. }
  2444. },
  2445. { QUIRK_DATA_STANDARD_MIDI(4) },
  2446. QUIRK_COMPOSITE_END
  2447. }
  2448. }
  2449. },
  2450. /* Microsoft XboxLive Headset/Xbox Communicator */
  2451. {
  2452. USB_DEVICE(0x045e, 0x0283),
  2453. .bInterfaceClass = USB_CLASS_PER_INTERFACE,
  2454. QUIRK_DRIVER_INFO {
  2455. .vendor_name = "Microsoft",
  2456. .product_name = "XboxLive Headset/Xbox Communicator",
  2457. QUIRK_DATA_COMPOSITE {
  2458. {
  2459. /* playback */
  2460. QUIRK_DATA_AUDIOFORMAT(0) {
  2461. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2462. .channels = 1,
  2463. .iface = 0,
  2464. .altsetting = 0,
  2465. .altset_idx = 0,
  2466. .attributes = 0,
  2467. .endpoint = 0x04,
  2468. .ep_attr = 0x05,
  2469. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  2470. .rate_min = 22050,
  2471. .rate_max = 22050
  2472. }
  2473. },
  2474. {
  2475. /* capture */
  2476. QUIRK_DATA_AUDIOFORMAT(1) {
  2477. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2478. .channels = 1,
  2479. .iface = 1,
  2480. .altsetting = 0,
  2481. .altset_idx = 0,
  2482. .attributes = 0,
  2483. .endpoint = 0x85,
  2484. .ep_attr = 0x05,
  2485. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  2486. .rate_min = 16000,
  2487. .rate_max = 16000
  2488. }
  2489. },
  2490. QUIRK_COMPOSITE_END
  2491. }
  2492. }
  2493. },
  2494. /* Reloop Play */
  2495. {
  2496. USB_DEVICE(0x200c, 0x100b),
  2497. .bInterfaceClass = USB_CLASS_PER_INTERFACE,
  2498. QUIRK_DRIVER_INFO {
  2499. QUIRK_DATA_COMPOSITE {
  2500. { QUIRK_DATA_STANDARD_MIXER(0) },
  2501. {
  2502. QUIRK_DATA_AUDIOFORMAT(1) {
  2503. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2504. .channels = 4,
  2505. .iface = 1,
  2506. .altsetting = 1,
  2507. .altset_idx = 1,
  2508. .attributes = UAC_EP_CS_ATTR_SAMPLE_RATE,
  2509. .endpoint = 0x01,
  2510. .ep_attr = USB_ENDPOINT_SYNC_ADAPTIVE,
  2511. .rates = SNDRV_PCM_RATE_44100 |
  2512. SNDRV_PCM_RATE_48000,
  2513. .rate_min = 44100,
  2514. .rate_max = 48000,
  2515. .nr_rates = 2,
  2516. .rate_table = (unsigned int[]) {
  2517. 44100, 48000
  2518. }
  2519. }
  2520. },
  2521. QUIRK_COMPOSITE_END
  2522. }
  2523. }
  2524. },
  2525. {
  2526. /*
  2527. * ZOOM R16/24 in audio interface mode.
  2528. * Playback requires an extra four byte LE length indicator
  2529. * at the start of each isochronous packet. This quirk is
  2530. * enabled in create_standard_audio_quirk().
  2531. */
  2532. USB_DEVICE(0x1686, 0x00dd),
  2533. QUIRK_DRIVER_INFO {
  2534. QUIRK_DATA_COMPOSITE {
  2535. { QUIRK_DATA_STANDARD_AUDIO(1) }, /* Playback */
  2536. { QUIRK_DATA_STANDARD_AUDIO(2) }, /* Capture */
  2537. { QUIRK_DATA_STANDARD_MIDI(3) }, /* Midi */
  2538. QUIRK_COMPOSITE_END
  2539. }
  2540. }
  2541. },
  2542. {
  2543. /*
  2544. * Some USB MIDI devices don't have an audio control interface,
  2545. * so we have to grab MIDI streaming interfaces here.
  2546. */
  2547. .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
  2548. USB_DEVICE_ID_MATCH_INT_SUBCLASS,
  2549. .bInterfaceClass = USB_CLASS_AUDIO,
  2550. .bInterfaceSubClass = USB_SUBCLASS_MIDISTREAMING,
  2551. QUIRK_DRIVER_INFO {
  2552. QUIRK_DATA_STANDARD_MIDI(QUIRK_ANY_INTERFACE)
  2553. }
  2554. },
  2555. /* Rane SL-1 */
  2556. {
  2557. USB_DEVICE(0x13e5, 0x0001),
  2558. QUIRK_DRIVER_INFO {
  2559. QUIRK_DATA_STANDARD_AUDIO(QUIRK_ANY_INTERFACE)
  2560. }
  2561. },
  2562. /* disabled due to regression for other devices;
  2563. * see https://bugzilla.kernel.org/show_bug.cgi?id=199905
  2564. */
  2565. #if 0
  2566. {
  2567. /*
  2568. * Nura's first gen headphones use Cambridge Silicon Radio's vendor
  2569. * ID, but it looks like the product ID actually is only for Nura.
  2570. * The capture interface does not work at all (even on Windows),
  2571. * and only the 48 kHz sample rate works for the playback interface.
  2572. */
  2573. USB_DEVICE(0x0a12, 0x1243),
  2574. QUIRK_DRIVER_INFO {
  2575. QUIRK_DATA_COMPOSITE {
  2576. { QUIRK_DATA_STANDARD_MIXER(0) },
  2577. { QUIRK_DATA_IGNORE(1) }, /* Capture */
  2578. /* Playback */
  2579. {
  2580. QUIRK_DATA_AUDIOFORMAT(2) {
  2581. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2582. .channels = 2,
  2583. .iface = 2,
  2584. .altsetting = 1,
  2585. .altset_idx = 1,
  2586. .attributes = UAC_EP_CS_ATTR_FILL_MAX |
  2587. UAC_EP_CS_ATTR_SAMPLE_RATE,
  2588. .endpoint = 0x03,
  2589. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2590. .rates = SNDRV_PCM_RATE_48000,
  2591. .rate_min = 48000,
  2592. .rate_max = 48000,
  2593. .nr_rates = 1,
  2594. .rate_table = (unsigned int[]) {
  2595. 48000
  2596. }
  2597. }
  2598. },
  2599. QUIRK_COMPOSITE_END
  2600. }
  2601. }
  2602. },
  2603. #endif /* disabled */
  2604. {
  2605. /*
  2606. * Bower's & Wilkins PX headphones only support the 48 kHz sample rate
  2607. * even though it advertises more. The capture interface doesn't work
  2608. * even on windows.
  2609. */
  2610. USB_DEVICE(0x19b5, 0x0021),
  2611. QUIRK_DRIVER_INFO {
  2612. QUIRK_DATA_COMPOSITE {
  2613. { QUIRK_DATA_STANDARD_MIXER(0) },
  2614. /* Playback */
  2615. {
  2616. QUIRK_DATA_AUDIOFORMAT(1) {
  2617. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  2618. .channels = 2,
  2619. .iface = 1,
  2620. .altsetting = 1,
  2621. .altset_idx = 1,
  2622. .attributes = UAC_EP_CS_ATTR_FILL_MAX |
  2623. UAC_EP_CS_ATTR_SAMPLE_RATE,
  2624. .endpoint = 0x03,
  2625. .ep_attr = USB_ENDPOINT_XFER_ISOC,
  2626. .rates = SNDRV_PCM_RATE_48000,
  2627. .rate_min = 48000,
  2628. .rate_max = 48000,
  2629. .nr_rates = 1,
  2630. .rate_table = (unsigned int[]) {
  2631. 48000
  2632. }
  2633. }
  2634. },
  2635. QUIRK_COMPOSITE_END
  2636. }
  2637. }
  2638. },
  2639. /* MOTU Microbook II */
  2640. {
  2641. USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
  2642. QUIRK_DRIVER_INFO {
  2643. .vendor_name = "MOTU",
  2644. .product_name = "MicroBookII",
  2645. QUIRK_DATA_COMPOSITE {
  2646. { QUIRK_DATA_STANDARD_MIXER(0) },
  2647. {
  2648. QUIRK_DATA_AUDIOFORMAT(0) {
  2649. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2650. .channels = 6,
  2651. .iface = 0,
  2652. .altsetting = 1,
  2653. .altset_idx = 1,
  2654. .attributes = 0,
  2655. .endpoint = 0x84,
  2656. .rates = SNDRV_PCM_RATE_96000,
  2657. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2658. USB_ENDPOINT_SYNC_ASYNC,
  2659. .rate_min = 96000,
  2660. .rate_max = 96000,
  2661. .nr_rates = 1,
  2662. .maxpacksize = 0x00d8,
  2663. .rate_table = (unsigned int[]) {
  2664. 96000
  2665. }
  2666. }
  2667. },
  2668. {
  2669. QUIRK_DATA_AUDIOFORMAT(0) {
  2670. .formats = SNDRV_PCM_FMTBIT_S24_3BE,
  2671. .channels = 8,
  2672. .iface = 0,
  2673. .altsetting = 1,
  2674. .altset_idx = 1,
  2675. .attributes = 0,
  2676. .endpoint = 0x03,
  2677. .ep_idx = 1,
  2678. .rates = SNDRV_PCM_RATE_96000,
  2679. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  2680. USB_ENDPOINT_SYNC_ASYNC,
  2681. .rate_min = 96000,
  2682. .rate_max = 96000,
  2683. .nr_rates = 1,
  2684. .maxpacksize = 0x0120,
  2685. .rate_table = (unsigned int[]) {
  2686. 96000
  2687. }
  2688. }
  2689. },
  2690. QUIRK_COMPOSITE_END
  2691. }
  2692. }
  2693. },
  2694. {
  2695. /*
  2696. * PIONEER DJ DDJ-SX3
  2697. * PCM is 12 channels out, 10 channels in @ 44.1 fixed
  2698. * interface 0, vendor class alt setting 1 for endpoints 5 and 0x86
  2699. * The feedback for the output is the input.
  2700. */
  2701. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0023),
  2702. QUIRK_DRIVER_INFO {
  2703. QUIRK_DATA_COMPOSITE {
  2704. {
  2705. QUIRK_DATA_AUDIOFORMAT(0) {
  2706. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  2707. .channels = 12,
  2708. .iface = 0,
  2709. .altsetting = 1,
  2710. .altset_idx = 1,
  2711. .endpoint = 0x05,
  2712. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2713. USB_ENDPOINT_SYNC_ASYNC,
  2714. .rates = SNDRV_PCM_RATE_44100,
  2715. .rate_min = 44100,
  2716. .rate_max = 44100,
  2717. .nr_rates = 1,
  2718. .rate_table = (unsigned int[]) { 44100 }
  2719. }
  2720. },
  2721. {
  2722. QUIRK_DATA_AUDIOFORMAT(0) {
  2723. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  2724. .channels = 10,
  2725. .iface = 0,
  2726. .altsetting = 1,
  2727. .altset_idx = 1,
  2728. .endpoint = 0x86,
  2729. .ep_idx = 1,
  2730. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2731. USB_ENDPOINT_SYNC_ASYNC|
  2732. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  2733. .rates = SNDRV_PCM_RATE_44100,
  2734. .rate_min = 44100,
  2735. .rate_max = 44100,
  2736. .nr_rates = 1,
  2737. .rate_table = (unsigned int[]) { 44100 }
  2738. }
  2739. },
  2740. QUIRK_COMPOSITE_END
  2741. }
  2742. }
  2743. },
  2744. {
  2745. /*
  2746. * Pioneer DJ DJM-250MK2
  2747. * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
  2748. * and 8 channels in @ 48 fixed (endpoint 0x82).
  2749. *
  2750. * Both playback and recording is working, even simultaneously.
  2751. *
  2752. * Playback channels could be mapped to:
  2753. * - CH1
  2754. * - CH2
  2755. * - AUX
  2756. *
  2757. * Recording channels could be mapped to:
  2758. * - Post CH1 Fader
  2759. * - Post CH2 Fader
  2760. * - Cross Fader A
  2761. * - Cross Fader B
  2762. * - MIC
  2763. * - AUX
  2764. * - REC OUT
  2765. *
  2766. * There is remaining problem with recording directly from PHONO/LINE.
  2767. * If we map a channel to:
  2768. * - CH1 Control Tone PHONO
  2769. * - CH1 Control Tone LINE
  2770. * - CH2 Control Tone PHONO
  2771. * - CH2 Control Tone LINE
  2772. * it is silent.
  2773. * There is no signal even on other operating systems with official drivers.
  2774. * The signal appears only when a supported application is started.
  2775. * This needs to be investigated yet...
  2776. * (there is quite a lot communication on the USB in both directions)
  2777. *
  2778. * In current version this mixer could be used for playback
  2779. * and for recording from vinyls (through Post CH* Fader)
  2780. * but not for DVS (Digital Vinyl Systems) like in Mixxx.
  2781. */
  2782. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0017),
  2783. QUIRK_DRIVER_INFO {
  2784. QUIRK_DATA_COMPOSITE {
  2785. {
  2786. QUIRK_DATA_AUDIOFORMAT(0) {
  2787. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2788. .channels = 8, // outputs
  2789. .iface = 0,
  2790. .altsetting = 1,
  2791. .altset_idx = 1,
  2792. .endpoint = 0x01,
  2793. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2794. USB_ENDPOINT_SYNC_ASYNC,
  2795. .rates = SNDRV_PCM_RATE_48000,
  2796. .rate_min = 48000,
  2797. .rate_max = 48000,
  2798. .nr_rates = 1,
  2799. .rate_table = (unsigned int[]) { 48000 }
  2800. }
  2801. },
  2802. {
  2803. QUIRK_DATA_AUDIOFORMAT(0) {
  2804. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2805. .channels = 8, // inputs
  2806. .iface = 0,
  2807. .altsetting = 1,
  2808. .altset_idx = 1,
  2809. .endpoint = 0x82,
  2810. .ep_idx = 1,
  2811. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2812. USB_ENDPOINT_SYNC_ASYNC|
  2813. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  2814. .rates = SNDRV_PCM_RATE_48000,
  2815. .rate_min = 48000,
  2816. .rate_max = 48000,
  2817. .nr_rates = 1,
  2818. .rate_table = (unsigned int[]) { 48000 }
  2819. }
  2820. },
  2821. QUIRK_COMPOSITE_END
  2822. }
  2823. }
  2824. },
  2825. {
  2826. /*
  2827. * PIONEER DJ DDJ-RB
  2828. * PCM is 4 channels out, 2 dummy channels in @ 44.1 fixed
  2829. * The feedback for the output is the dummy input.
  2830. */
  2831. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000e),
  2832. QUIRK_DRIVER_INFO {
  2833. QUIRK_DATA_COMPOSITE {
  2834. {
  2835. QUIRK_DATA_AUDIOFORMAT(0) {
  2836. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2837. .channels = 4,
  2838. .iface = 0,
  2839. .altsetting = 1,
  2840. .altset_idx = 1,
  2841. .endpoint = 0x01,
  2842. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2843. USB_ENDPOINT_SYNC_ASYNC,
  2844. .rates = SNDRV_PCM_RATE_44100,
  2845. .rate_min = 44100,
  2846. .rate_max = 44100,
  2847. .nr_rates = 1,
  2848. .rate_table = (unsigned int[]) { 44100 }
  2849. }
  2850. },
  2851. {
  2852. QUIRK_DATA_AUDIOFORMAT(0) {
  2853. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2854. .channels = 2,
  2855. .iface = 0,
  2856. .altsetting = 1,
  2857. .altset_idx = 1,
  2858. .endpoint = 0x82,
  2859. .ep_idx = 1,
  2860. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2861. USB_ENDPOINT_SYNC_ASYNC|
  2862. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  2863. .rates = SNDRV_PCM_RATE_44100,
  2864. .rate_min = 44100,
  2865. .rate_max = 44100,
  2866. .nr_rates = 1,
  2867. .rate_table = (unsigned int[]) { 44100 }
  2868. }
  2869. },
  2870. QUIRK_COMPOSITE_END
  2871. }
  2872. }
  2873. },
  2874. {
  2875. /*
  2876. * PIONEER DJ DDJ-RR
  2877. * PCM is 6 channels out & 4 channels in @ 44.1 fixed
  2878. */
  2879. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000d),
  2880. QUIRK_DRIVER_INFO {
  2881. QUIRK_DATA_COMPOSITE {
  2882. {
  2883. QUIRK_DATA_AUDIOFORMAT(0) {
  2884. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2885. .channels = 6, //Master, Headphones & Booth
  2886. .iface = 0,
  2887. .altsetting = 1,
  2888. .altset_idx = 1,
  2889. .endpoint = 0x01,
  2890. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2891. USB_ENDPOINT_SYNC_ASYNC,
  2892. .rates = SNDRV_PCM_RATE_44100,
  2893. .rate_min = 44100,
  2894. .rate_max = 44100,
  2895. .nr_rates = 1,
  2896. .rate_table = (unsigned int[]) { 44100 }
  2897. }
  2898. },
  2899. {
  2900. QUIRK_DATA_AUDIOFORMAT(0) {
  2901. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2902. .channels = 4, //2x RCA inputs (CH1 & CH2)
  2903. .iface = 0,
  2904. .altsetting = 1,
  2905. .altset_idx = 1,
  2906. .endpoint = 0x82,
  2907. .ep_idx = 1,
  2908. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2909. USB_ENDPOINT_SYNC_ASYNC|
  2910. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  2911. .rates = SNDRV_PCM_RATE_44100,
  2912. .rate_min = 44100,
  2913. .rate_max = 44100,
  2914. .nr_rates = 1,
  2915. .rate_table = (unsigned int[]) { 44100 }
  2916. }
  2917. },
  2918. QUIRK_COMPOSITE_END
  2919. }
  2920. }
  2921. },
  2922. {
  2923. /*
  2924. * PIONEER DJ DDJ-SR2
  2925. * PCM is 4 channels out, 6 channels in @ 44.1 fixed
  2926. * The Feedback for the output is the input
  2927. */
  2928. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001e),
  2929. QUIRK_DRIVER_INFO {
  2930. QUIRK_DATA_COMPOSITE {
  2931. {
  2932. QUIRK_DATA_AUDIOFORMAT(0) {
  2933. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2934. .channels = 4,
  2935. .iface = 0,
  2936. .altsetting = 1,
  2937. .altset_idx = 1,
  2938. .endpoint = 0x01,
  2939. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2940. USB_ENDPOINT_SYNC_ASYNC,
  2941. .rates = SNDRV_PCM_RATE_44100,
  2942. .rate_min = 44100,
  2943. .rate_max = 44100,
  2944. .nr_rates = 1,
  2945. .rate_table = (unsigned int[]) { 44100 }
  2946. }
  2947. },
  2948. {
  2949. QUIRK_DATA_AUDIOFORMAT(0) {
  2950. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2951. .channels = 6,
  2952. .iface = 0,
  2953. .altsetting = 1,
  2954. .altset_idx = 1,
  2955. .endpoint = 0x82,
  2956. .ep_idx = 1,
  2957. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2958. USB_ENDPOINT_SYNC_ASYNC|
  2959. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  2960. .rates = SNDRV_PCM_RATE_44100,
  2961. .rate_min = 44100,
  2962. .rate_max = 44100,
  2963. .nr_rates = 1,
  2964. .rate_table = (unsigned int[]) { 44100 }
  2965. }
  2966. },
  2967. QUIRK_COMPOSITE_END
  2968. }
  2969. }
  2970. },
  2971. {
  2972. /*
  2973. * Pioneer DJ DJM-900NXS2
  2974. * 10 channels playback & 12 channels capture @ 44.1/48/96kHz S24LE
  2975. */
  2976. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x000a),
  2977. QUIRK_DRIVER_INFO {
  2978. QUIRK_DATA_COMPOSITE {
  2979. {
  2980. QUIRK_DATA_AUDIOFORMAT(0) {
  2981. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  2982. .channels = 10,
  2983. .iface = 0,
  2984. .altsetting = 1,
  2985. .altset_idx = 1,
  2986. .endpoint = 0x01,
  2987. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  2988. USB_ENDPOINT_SYNC_ASYNC,
  2989. .rates = SNDRV_PCM_RATE_44100|
  2990. SNDRV_PCM_RATE_48000|
  2991. SNDRV_PCM_RATE_96000,
  2992. .rate_min = 44100,
  2993. .rate_max = 96000,
  2994. .nr_rates = 3,
  2995. .rate_table = (unsigned int[]) {
  2996. 44100, 48000, 96000
  2997. }
  2998. }
  2999. },
  3000. {
  3001. QUIRK_DATA_AUDIOFORMAT(0) {
  3002. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3003. .channels = 12,
  3004. .iface = 0,
  3005. .altsetting = 1,
  3006. .altset_idx = 1,
  3007. .endpoint = 0x82,
  3008. .ep_idx = 1,
  3009. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3010. USB_ENDPOINT_SYNC_ASYNC|
  3011. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3012. .rates = SNDRV_PCM_RATE_44100|
  3013. SNDRV_PCM_RATE_48000|
  3014. SNDRV_PCM_RATE_96000,
  3015. .rate_min = 44100,
  3016. .rate_max = 96000,
  3017. .nr_rates = 3,
  3018. .rate_table = (unsigned int[]) {
  3019. 44100, 48000, 96000
  3020. }
  3021. }
  3022. },
  3023. QUIRK_COMPOSITE_END
  3024. }
  3025. }
  3026. },
  3027. {
  3028. /*
  3029. * PIONEER DJ DDJ-800
  3030. * PCM is 6 channels out, 6 channels in @ 44.1 fixed
  3031. * The Feedback for the output is the input
  3032. */
  3033. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0029),
  3034. QUIRK_DRIVER_INFO {
  3035. QUIRK_DATA_COMPOSITE {
  3036. {
  3037. QUIRK_DATA_AUDIOFORMAT(0) {
  3038. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3039. .channels = 6,
  3040. .iface = 0,
  3041. .altsetting = 1,
  3042. .altset_idx = 1,
  3043. .endpoint = 0x01,
  3044. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3045. USB_ENDPOINT_SYNC_ASYNC,
  3046. .rates = SNDRV_PCM_RATE_44100,
  3047. .rate_min = 44100,
  3048. .rate_max = 44100,
  3049. .nr_rates = 1,
  3050. .rate_table = (unsigned int[]) { 44100 }
  3051. }
  3052. },
  3053. {
  3054. QUIRK_DATA_AUDIOFORMAT(0) {
  3055. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3056. .channels = 6,
  3057. .iface = 0,
  3058. .altsetting = 1,
  3059. .altset_idx = 1,
  3060. .endpoint = 0x82,
  3061. .ep_idx = 1,
  3062. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3063. USB_ENDPOINT_SYNC_ASYNC|
  3064. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3065. .rates = SNDRV_PCM_RATE_44100,
  3066. .rate_min = 44100,
  3067. .rate_max = 44100,
  3068. .nr_rates = 1,
  3069. .rate_table = (unsigned int[]) { 44100 }
  3070. }
  3071. },
  3072. QUIRK_COMPOSITE_END
  3073. }
  3074. }
  3075. },
  3076. /*
  3077. * MacroSilicon MS2100/MS2106 based AV capture cards
  3078. *
  3079. * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
  3080. * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
  3081. * they pretend to be 96kHz mono as a workaround for stereo being broken
  3082. * by that...
  3083. *
  3084. * They also have an issue with initial stream alignment that causes the
  3085. * channels to be swapped and out of phase, which is dealt with in quirks.c.
  3086. */
  3087. {
  3088. USB_AUDIO_DEVICE(0x534d, 0x0021),
  3089. QUIRK_DRIVER_INFO {
  3090. .vendor_name = "MacroSilicon",
  3091. .product_name = "MS210x",
  3092. QUIRK_DATA_COMPOSITE {
  3093. { QUIRK_DATA_STANDARD_MIXER(2) },
  3094. {
  3095. QUIRK_DATA_AUDIOFORMAT(3) {
  3096. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  3097. .channels = 2,
  3098. .iface = 3,
  3099. .altsetting = 1,
  3100. .altset_idx = 1,
  3101. .attributes = 0,
  3102. .endpoint = 0x82,
  3103. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3104. USB_ENDPOINT_SYNC_ASYNC,
  3105. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  3106. .rate_min = 48000,
  3107. .rate_max = 48000,
  3108. }
  3109. },
  3110. QUIRK_COMPOSITE_END
  3111. }
  3112. }
  3113. },
  3114. /*
  3115. * MacroSilicon MS2109 based HDMI capture cards
  3116. *
  3117. * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
  3118. * They also need QUIRK_FLAG_ALIGN_TRANSFER, which makes one wonder if
  3119. * they pretend to be 96kHz mono as a workaround for stereo being broken
  3120. * by that...
  3121. *
  3122. * They also have an issue with initial stream alignment that causes the
  3123. * channels to be swapped and out of phase, which is dealt with in quirks.c.
  3124. */
  3125. {
  3126. USB_AUDIO_DEVICE(0x534d, 0x2109),
  3127. QUIRK_DRIVER_INFO {
  3128. .vendor_name = "MacroSilicon",
  3129. .product_name = "MS2109",
  3130. QUIRK_DATA_COMPOSITE {
  3131. { QUIRK_DATA_STANDARD_MIXER(2) },
  3132. {
  3133. QUIRK_DATA_AUDIOFORMAT(3) {
  3134. .formats = SNDRV_PCM_FMTBIT_S16_LE,
  3135. .channels = 2,
  3136. .iface = 3,
  3137. .altsetting = 1,
  3138. .altset_idx = 1,
  3139. .attributes = 0,
  3140. .endpoint = 0x82,
  3141. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3142. USB_ENDPOINT_SYNC_ASYNC,
  3143. .rates = SNDRV_PCM_RATE_CONTINUOUS,
  3144. .rate_min = 48000,
  3145. .rate_max = 48000,
  3146. }
  3147. },
  3148. QUIRK_COMPOSITE_END
  3149. }
  3150. }
  3151. },
  3152. {
  3153. /*
  3154. * Pioneer DJ DJM-750
  3155. * 8 channels playback & 8 channels capture @ 44.1/48/96kHz S24LE
  3156. */
  3157. USB_DEVICE_VENDOR_SPEC(0x08e4, 0x017f),
  3158. QUIRK_DRIVER_INFO {
  3159. QUIRK_DATA_COMPOSITE {
  3160. {
  3161. QUIRK_DATA_AUDIOFORMAT(0) {
  3162. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3163. .channels = 8,
  3164. .iface = 0,
  3165. .altsetting = 1,
  3166. .altset_idx = 1,
  3167. .endpoint = 0x05,
  3168. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3169. USB_ENDPOINT_SYNC_ASYNC,
  3170. .rates = SNDRV_PCM_RATE_44100|
  3171. SNDRV_PCM_RATE_48000|
  3172. SNDRV_PCM_RATE_96000,
  3173. .rate_min = 44100,
  3174. .rate_max = 96000,
  3175. .nr_rates = 3,
  3176. .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
  3177. }
  3178. },
  3179. {
  3180. QUIRK_DATA_AUDIOFORMAT(0) {
  3181. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3182. .channels = 8,
  3183. .iface = 0,
  3184. .altsetting = 1,
  3185. .altset_idx = 1,
  3186. .endpoint = 0x86,
  3187. .ep_idx = 1,
  3188. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3189. USB_ENDPOINT_SYNC_ASYNC|
  3190. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3191. .rates = SNDRV_PCM_RATE_44100|
  3192. SNDRV_PCM_RATE_48000|
  3193. SNDRV_PCM_RATE_96000,
  3194. .rate_min = 44100,
  3195. .rate_max = 96000,
  3196. .nr_rates = 3,
  3197. .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
  3198. }
  3199. },
  3200. QUIRK_COMPOSITE_END
  3201. }
  3202. }
  3203. },
  3204. {
  3205. /*
  3206. * Pioneer DJ DJM-750MK2
  3207. * 10 channels playback & 12 channels capture @ 48kHz S24LE
  3208. */
  3209. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x001b),
  3210. QUIRK_DRIVER_INFO {
  3211. QUIRK_DATA_COMPOSITE {
  3212. {
  3213. QUIRK_DATA_AUDIOFORMAT(0) {
  3214. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3215. .channels = 10,
  3216. .iface = 0,
  3217. .altsetting = 1,
  3218. .altset_idx = 1,
  3219. .endpoint = 0x01,
  3220. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3221. USB_ENDPOINT_SYNC_ASYNC,
  3222. .rates = SNDRV_PCM_RATE_48000,
  3223. .rate_min = 48000,
  3224. .rate_max = 48000,
  3225. .nr_rates = 1,
  3226. .rate_table = (unsigned int[]) {
  3227. 48000
  3228. }
  3229. }
  3230. },
  3231. {
  3232. QUIRK_DATA_AUDIOFORMAT(0) {
  3233. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3234. .channels = 12,
  3235. .iface = 0,
  3236. .altsetting = 1,
  3237. .altset_idx = 1,
  3238. .endpoint = 0x82,
  3239. .ep_idx = 1,
  3240. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3241. USB_ENDPOINT_SYNC_ASYNC|
  3242. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3243. .rates = SNDRV_PCM_RATE_48000,
  3244. .rate_min = 48000,
  3245. .rate_max = 48000,
  3246. .nr_rates = 1,
  3247. .rate_table = (unsigned int[]) { 48000 }
  3248. }
  3249. },
  3250. QUIRK_COMPOSITE_END
  3251. }
  3252. }
  3253. },
  3254. {
  3255. /*
  3256. * Pioneer DJ DJM-850
  3257. * 8 channels playback and 8 channels capture @ 44.1/48/96kHz S24LE
  3258. * Playback on EP 0x05
  3259. * Capture on EP 0x86
  3260. */
  3261. USB_DEVICE_VENDOR_SPEC(0x08e4, 0x0163),
  3262. QUIRK_DRIVER_INFO {
  3263. QUIRK_DATA_COMPOSITE {
  3264. {
  3265. QUIRK_DATA_AUDIOFORMAT(0) {
  3266. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3267. .channels = 8,
  3268. .iface = 0,
  3269. .altsetting = 1,
  3270. .altset_idx = 1,
  3271. .endpoint = 0x05,
  3272. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3273. USB_ENDPOINT_SYNC_ASYNC|
  3274. USB_ENDPOINT_USAGE_DATA,
  3275. .rates = SNDRV_PCM_RATE_44100|
  3276. SNDRV_PCM_RATE_48000|
  3277. SNDRV_PCM_RATE_96000,
  3278. .rate_min = 44100,
  3279. .rate_max = 96000,
  3280. .nr_rates = 3,
  3281. .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
  3282. }
  3283. },
  3284. {
  3285. QUIRK_DATA_AUDIOFORMAT(0) {
  3286. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3287. .channels = 8,
  3288. .iface = 0,
  3289. .altsetting = 1,
  3290. .altset_idx = 1,
  3291. .endpoint = 0x86,
  3292. .ep_idx = 1,
  3293. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3294. USB_ENDPOINT_SYNC_ASYNC|
  3295. USB_ENDPOINT_USAGE_DATA,
  3296. .rates = SNDRV_PCM_RATE_44100|
  3297. SNDRV_PCM_RATE_48000|
  3298. SNDRV_PCM_RATE_96000,
  3299. .rate_min = 44100,
  3300. .rate_max = 96000,
  3301. .nr_rates = 3,
  3302. .rate_table = (unsigned int[]) { 44100, 48000, 96000 }
  3303. }
  3304. },
  3305. QUIRK_COMPOSITE_END
  3306. }
  3307. }
  3308. },
  3309. {
  3310. /*
  3311. * Pioneer DJ DJM-450
  3312. * PCM is 8 channels out @ 48 fixed (endpoint 0x01)
  3313. * and 8 channels in @ 48 fixed (endpoint 0x82).
  3314. */
  3315. USB_DEVICE_VENDOR_SPEC(0x2b73, 0x0013),
  3316. QUIRK_DRIVER_INFO {
  3317. QUIRK_DATA_COMPOSITE {
  3318. {
  3319. QUIRK_DATA_AUDIOFORMAT(0) {
  3320. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3321. .channels = 8, // outputs
  3322. .iface = 0,
  3323. .altsetting = 1,
  3324. .altset_idx = 1,
  3325. .endpoint = 0x01,
  3326. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3327. USB_ENDPOINT_SYNC_ASYNC,
  3328. .rates = SNDRV_PCM_RATE_48000,
  3329. .rate_min = 48000,
  3330. .rate_max = 48000,
  3331. .nr_rates = 1,
  3332. .rate_table = (unsigned int[]) { 48000 }
  3333. }
  3334. },
  3335. {
  3336. QUIRK_DATA_AUDIOFORMAT(0) {
  3337. .formats = SNDRV_PCM_FMTBIT_S24_3LE,
  3338. .channels = 8, // inputs
  3339. .iface = 0,
  3340. .altsetting = 1,
  3341. .altset_idx = 1,
  3342. .endpoint = 0x82,
  3343. .ep_idx = 1,
  3344. .ep_attr = USB_ENDPOINT_XFER_ISOC|
  3345. USB_ENDPOINT_SYNC_ASYNC|
  3346. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3347. .rates = SNDRV_PCM_RATE_48000,
  3348. .rate_min = 48000,
  3349. .rate_max = 48000,
  3350. .nr_rates = 1,
  3351. .rate_table = (unsigned int[]) { 48000 }
  3352. }
  3353. },
  3354. QUIRK_COMPOSITE_END
  3355. }
  3356. }
  3357. },
  3358. {
  3359. /*
  3360. * Sennheiser GSP670
  3361. * Change order of interfaces loaded
  3362. */
  3363. USB_DEVICE(0x1395, 0x0300),
  3364. .bInterfaceClass = USB_CLASS_PER_INTERFACE,
  3365. QUIRK_DRIVER_INFO {
  3366. QUIRK_DATA_COMPOSITE {
  3367. // Communication
  3368. { QUIRK_DATA_STANDARD_AUDIO(3) },
  3369. // Recording
  3370. { QUIRK_DATA_STANDARD_AUDIO(4) },
  3371. // Main
  3372. { QUIRK_DATA_STANDARD_AUDIO(1) },
  3373. QUIRK_COMPOSITE_END
  3374. }
  3375. }
  3376. },
  3377. {
  3378. /*
  3379. * Fiero SC-01 (firmware v1.0.0 @ 48 kHz)
  3380. */
  3381. USB_DEVICE(0x2b53, 0x0023),
  3382. QUIRK_DRIVER_INFO {
  3383. .vendor_name = "Fiero",
  3384. .product_name = "SC-01",
  3385. QUIRK_DATA_COMPOSITE {
  3386. { QUIRK_DATA_STANDARD_AUDIO(0) },
  3387. /* Playback */
  3388. {
  3389. QUIRK_DATA_AUDIOFORMAT(1) {
  3390. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3391. .channels = 2,
  3392. .fmt_bits = 24,
  3393. .iface = 1,
  3394. .altsetting = 1,
  3395. .altset_idx = 1,
  3396. .endpoint = 0x01,
  3397. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3398. USB_ENDPOINT_SYNC_ASYNC,
  3399. .rates = SNDRV_PCM_RATE_48000,
  3400. .rate_min = 48000,
  3401. .rate_max = 48000,
  3402. .nr_rates = 1,
  3403. .rate_table = (unsigned int[]) { 48000 },
  3404. .clock = 0x29
  3405. }
  3406. },
  3407. /* Capture */
  3408. {
  3409. QUIRK_DATA_AUDIOFORMAT(2) {
  3410. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3411. .channels = 2,
  3412. .fmt_bits = 24,
  3413. .iface = 2,
  3414. .altsetting = 1,
  3415. .altset_idx = 1,
  3416. .endpoint = 0x82,
  3417. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3418. USB_ENDPOINT_SYNC_ASYNC |
  3419. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3420. .rates = SNDRV_PCM_RATE_48000,
  3421. .rate_min = 48000,
  3422. .rate_max = 48000,
  3423. .nr_rates = 1,
  3424. .rate_table = (unsigned int[]) { 48000 },
  3425. .clock = 0x29
  3426. }
  3427. },
  3428. QUIRK_COMPOSITE_END
  3429. }
  3430. }
  3431. },
  3432. {
  3433. /*
  3434. * Fiero SC-01 (firmware v1.0.0 @ 96 kHz)
  3435. */
  3436. USB_DEVICE(0x2b53, 0x0024),
  3437. QUIRK_DRIVER_INFO {
  3438. .vendor_name = "Fiero",
  3439. .product_name = "SC-01",
  3440. QUIRK_DATA_COMPOSITE {
  3441. { QUIRK_DATA_STANDARD_AUDIO(0) },
  3442. /* Playback */
  3443. {
  3444. QUIRK_DATA_AUDIOFORMAT(1) {
  3445. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3446. .channels = 2,
  3447. .fmt_bits = 24,
  3448. .iface = 1,
  3449. .altsetting = 1,
  3450. .altset_idx = 1,
  3451. .endpoint = 0x01,
  3452. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3453. USB_ENDPOINT_SYNC_ASYNC,
  3454. .rates = SNDRV_PCM_RATE_96000,
  3455. .rate_min = 96000,
  3456. .rate_max = 96000,
  3457. .nr_rates = 1,
  3458. .rate_table = (unsigned int[]) { 96000 },
  3459. .clock = 0x29
  3460. }
  3461. },
  3462. /* Capture */
  3463. {
  3464. QUIRK_DATA_AUDIOFORMAT(2) {
  3465. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3466. .channels = 2,
  3467. .fmt_bits = 24,
  3468. .iface = 2,
  3469. .altsetting = 1,
  3470. .altset_idx = 1,
  3471. .endpoint = 0x82,
  3472. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3473. USB_ENDPOINT_SYNC_ASYNC |
  3474. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3475. .rates = SNDRV_PCM_RATE_96000,
  3476. .rate_min = 96000,
  3477. .rate_max = 96000,
  3478. .nr_rates = 1,
  3479. .rate_table = (unsigned int[]) { 96000 },
  3480. .clock = 0x29
  3481. }
  3482. },
  3483. QUIRK_COMPOSITE_END
  3484. }
  3485. }
  3486. },
  3487. {
  3488. /*
  3489. * Fiero SC-01 (firmware v1.1.0)
  3490. */
  3491. USB_DEVICE(0x2b53, 0x0031),
  3492. QUIRK_DRIVER_INFO {
  3493. .vendor_name = "Fiero",
  3494. .product_name = "SC-01",
  3495. QUIRK_DATA_COMPOSITE {
  3496. { QUIRK_DATA_STANDARD_AUDIO(0) },
  3497. /* Playback */
  3498. {
  3499. QUIRK_DATA_AUDIOFORMAT(1) {
  3500. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3501. .channels = 2,
  3502. .fmt_bits = 24,
  3503. .iface = 1,
  3504. .altsetting = 1,
  3505. .altset_idx = 1,
  3506. .endpoint = 0x01,
  3507. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3508. USB_ENDPOINT_SYNC_ASYNC,
  3509. .rates = SNDRV_PCM_RATE_48000 |
  3510. SNDRV_PCM_RATE_96000,
  3511. .rate_min = 48000,
  3512. .rate_max = 96000,
  3513. .nr_rates = 2,
  3514. .rate_table = (unsigned int[]) { 48000, 96000 },
  3515. .clock = 0x29
  3516. }
  3517. },
  3518. /* Capture */
  3519. {
  3520. QUIRK_DATA_AUDIOFORMAT(2) {
  3521. .formats = SNDRV_PCM_FMTBIT_S32_LE,
  3522. .channels = 2,
  3523. .fmt_bits = 24,
  3524. .iface = 2,
  3525. .altsetting = 1,
  3526. .altset_idx = 1,
  3527. .endpoint = 0x82,
  3528. .ep_attr = USB_ENDPOINT_XFER_ISOC |
  3529. USB_ENDPOINT_SYNC_ASYNC |
  3530. USB_ENDPOINT_USAGE_IMPLICIT_FB,
  3531. .rates = SNDRV_PCM_RATE_48000 |
  3532. SNDRV_PCM_RATE_96000,
  3533. .rate_min = 48000,
  3534. .rate_max = 96000,
  3535. .nr_rates = 2,
  3536. .rate_table = (unsigned int[]) { 48000, 96000 },
  3537. .clock = 0x29
  3538. }
  3539. },
  3540. QUIRK_COMPOSITE_END
  3541. }
  3542. }
  3543. },
  3544. {
  3545. /* Advanced modes of the Mythware XA001AU.
  3546. * For the standard mode, Mythware XA001AU has ID ffad:a001
  3547. */
  3548. USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001),
  3549. QUIRK_DRIVER_INFO {
  3550. .vendor_name = "Mythware",
  3551. .product_name = "XA001AU",
  3552. QUIRK_DATA_COMPOSITE {
  3553. { QUIRK_DATA_IGNORE(0) },
  3554. { QUIRK_DATA_STANDARD_AUDIO(1) },
  3555. { QUIRK_DATA_STANDARD_AUDIO(2) },
  3556. QUIRK_COMPOSITE_END
  3557. }
  3558. }
  3559. },
  3560. #define QUIRK_RME_DIGIFACE(pid) \
  3561. { \
  3562. /* Only claim interface 0 */ \
  3563. .match_flags = USB_DEVICE_ID_MATCH_VENDOR | \
  3564. USB_DEVICE_ID_MATCH_PRODUCT | \
  3565. USB_DEVICE_ID_MATCH_INT_CLASS | \
  3566. USB_DEVICE_ID_MATCH_INT_NUMBER, \
  3567. .idVendor = 0x2a39, \
  3568. .idProduct = pid, \
  3569. .bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
  3570. .bInterfaceNumber = 0, \
  3571. QUIRK_DRIVER_INFO { \
  3572. QUIRK_DATA_COMPOSITE { \
  3573. /*
  3574. * Three modes depending on sample rate band,
  3575. * with different channel counts for in/out
  3576. */ \
  3577. { QUIRK_DATA_STANDARD_MIXER(0) }, \
  3578. { \
  3579. QUIRK_DATA_AUDIOFORMAT(0) { \
  3580. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3581. .channels = 34, /* outputs */ \
  3582. .fmt_bits = 24, \
  3583. .iface = 0, \
  3584. .altsetting = 1, \
  3585. .altset_idx = 1, \
  3586. .endpoint = 0x02, \
  3587. .ep_idx = 1, \
  3588. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3589. USB_ENDPOINT_SYNC_ASYNC, \
  3590. .rates = SNDRV_PCM_RATE_32000 | \
  3591. SNDRV_PCM_RATE_44100 | \
  3592. SNDRV_PCM_RATE_48000, \
  3593. .rate_min = 32000, \
  3594. .rate_max = 48000, \
  3595. .nr_rates = 3, \
  3596. .rate_table = (unsigned int[]) { \
  3597. 32000, 44100, 48000, \
  3598. }, \
  3599. .sync_ep = 0x81, \
  3600. .sync_iface = 0, \
  3601. .sync_altsetting = 1, \
  3602. .sync_ep_idx = 0, \
  3603. .implicit_fb = 1, \
  3604. }, \
  3605. }, \
  3606. { \
  3607. QUIRK_DATA_AUDIOFORMAT(0) { \
  3608. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3609. .channels = 18, /* outputs */ \
  3610. .fmt_bits = 24, \
  3611. .iface = 0, \
  3612. .altsetting = 1, \
  3613. .altset_idx = 1, \
  3614. .endpoint = 0x02, \
  3615. .ep_idx = 1, \
  3616. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3617. USB_ENDPOINT_SYNC_ASYNC, \
  3618. .rates = SNDRV_PCM_RATE_64000 | \
  3619. SNDRV_PCM_RATE_88200 | \
  3620. SNDRV_PCM_RATE_96000, \
  3621. .rate_min = 64000, \
  3622. .rate_max = 96000, \
  3623. .nr_rates = 3, \
  3624. .rate_table = (unsigned int[]) { \
  3625. 64000, 88200, 96000, \
  3626. }, \
  3627. .sync_ep = 0x81, \
  3628. .sync_iface = 0, \
  3629. .sync_altsetting = 1, \
  3630. .sync_ep_idx = 0, \
  3631. .implicit_fb = 1, \
  3632. }, \
  3633. }, \
  3634. { \
  3635. QUIRK_DATA_AUDIOFORMAT(0) { \
  3636. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3637. .channels = 10, /* outputs */ \
  3638. .fmt_bits = 24, \
  3639. .iface = 0, \
  3640. .altsetting = 1, \
  3641. .altset_idx = 1, \
  3642. .endpoint = 0x02, \
  3643. .ep_idx = 1, \
  3644. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3645. USB_ENDPOINT_SYNC_ASYNC, \
  3646. .rates = SNDRV_PCM_RATE_KNOT | \
  3647. SNDRV_PCM_RATE_176400 | \
  3648. SNDRV_PCM_RATE_192000, \
  3649. .rate_min = 128000, \
  3650. .rate_max = 192000, \
  3651. .nr_rates = 3, \
  3652. .rate_table = (unsigned int[]) { \
  3653. 128000, 176400, 192000, \
  3654. }, \
  3655. .sync_ep = 0x81, \
  3656. .sync_iface = 0, \
  3657. .sync_altsetting = 1, \
  3658. .sync_ep_idx = 0, \
  3659. .implicit_fb = 1, \
  3660. }, \
  3661. }, \
  3662. { \
  3663. QUIRK_DATA_AUDIOFORMAT(0) { \
  3664. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3665. .channels = 32, /* inputs */ \
  3666. .fmt_bits = 24, \
  3667. .iface = 0, \
  3668. .altsetting = 1, \
  3669. .altset_idx = 1, \
  3670. .endpoint = 0x81, \
  3671. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3672. USB_ENDPOINT_SYNC_ASYNC, \
  3673. .rates = SNDRV_PCM_RATE_32000 | \
  3674. SNDRV_PCM_RATE_44100 | \
  3675. SNDRV_PCM_RATE_48000, \
  3676. .rate_min = 32000, \
  3677. .rate_max = 48000, \
  3678. .nr_rates = 3, \
  3679. .rate_table = (unsigned int[]) { \
  3680. 32000, 44100, 48000, \
  3681. } \
  3682. } \
  3683. }, \
  3684. { \
  3685. QUIRK_DATA_AUDIOFORMAT(0) { \
  3686. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3687. .channels = 16, /* inputs */ \
  3688. .fmt_bits = 24, \
  3689. .iface = 0, \
  3690. .altsetting = 1, \
  3691. .altset_idx = 1, \
  3692. .endpoint = 0x81, \
  3693. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3694. USB_ENDPOINT_SYNC_ASYNC, \
  3695. .rates = SNDRV_PCM_RATE_64000 | \
  3696. SNDRV_PCM_RATE_88200 | \
  3697. SNDRV_PCM_RATE_96000, \
  3698. .rate_min = 64000, \
  3699. .rate_max = 96000, \
  3700. .nr_rates = 3, \
  3701. .rate_table = (unsigned int[]) { \
  3702. 64000, 88200, 96000, \
  3703. } \
  3704. } \
  3705. }, \
  3706. { \
  3707. QUIRK_DATA_AUDIOFORMAT(0) { \
  3708. .formats = SNDRV_PCM_FMTBIT_S32_LE, \
  3709. .channels = 8, /* inputs */ \
  3710. .fmt_bits = 24, \
  3711. .iface = 0, \
  3712. .altsetting = 1, \
  3713. .altset_idx = 1, \
  3714. .endpoint = 0x81, \
  3715. .ep_attr = USB_ENDPOINT_XFER_ISOC | \
  3716. USB_ENDPOINT_SYNC_ASYNC, \
  3717. .rates = SNDRV_PCM_RATE_KNOT | \
  3718. SNDRV_PCM_RATE_176400 | \
  3719. SNDRV_PCM_RATE_192000, \
  3720. .rate_min = 128000, \
  3721. .rate_max = 192000, \
  3722. .nr_rates = 3, \
  3723. .rate_table = (unsigned int[]) { \
  3724. 128000, 176400, 192000, \
  3725. } \
  3726. } \
  3727. }, \
  3728. QUIRK_COMPOSITE_END \
  3729. } \
  3730. } \
  3731. }
  3732. QUIRK_RME_DIGIFACE(0x3f8c),
  3733. QUIRK_RME_DIGIFACE(0x3fa0),
  3734. #undef USB_DEVICE_VENDOR_SPEC
  3735. #undef USB_AUDIO_DEVICE