rme32.c 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * ALSA driver for RME Digi32, Digi32/8 and Digi32 PRO audio interfaces
  4. *
  5. * Copyright (c) 2002-2004 Martin Langer <martin-langer@gmx.de>,
  6. * Pilo Chambert <pilo.c@wanadoo.fr>
  7. *
  8. * Thanks to : Anders Torger <torger@ludd.luth.se>,
  9. * Henk Hesselink <henk@anda.nl>
  10. * for writing the digi96-driver
  11. * and RME for all informations.
  12. *
  13. * ****************************************************************************
  14. *
  15. * Note #1 "Sek'd models" ................................... martin 2002-12-07
  16. *
  17. * Identical soundcards by Sek'd were labeled:
  18. * RME Digi 32 = Sek'd Prodif 32
  19. * RME Digi 32 Pro = Sek'd Prodif 96
  20. * RME Digi 32/8 = Sek'd Prodif Gold
  21. *
  22. * ****************************************************************************
  23. *
  24. * Note #2 "full duplex mode" ............................... martin 2002-12-07
  25. *
  26. * Full duplex doesn't work. All cards (32, 32/8, 32Pro) are working identical
  27. * in this mode. Rec data and play data are using the same buffer therefore. At
  28. * first you have got the playing bits in the buffer and then (after playing
  29. * them) they were overwitten by the captured sound of the CS8412/14. Both
  30. * modes (play/record) are running harmonically hand in hand in the same buffer
  31. * and you have only one start bit plus one interrupt bit to control this
  32. * paired action.
  33. * This is opposite to the latter rme96 where playing and capturing is totally
  34. * separated and so their full duplex mode is supported by alsa (using two
  35. * start bits and two interrupts for two different buffers).
  36. * But due to the wrong sequence of playing and capturing ALSA shows no solved
  37. * full duplex support for the rme32 at the moment. That's bad, but I'm not
  38. * able to solve it. Are you motivated enough to solve this problem now? Your
  39. * patch would be welcome!
  40. *
  41. * ****************************************************************************
  42. *
  43. * "The story after the long seeking" -- tiwai
  44. *
  45. * Ok, the situation regarding the full duplex is now improved a bit.
  46. * In the fullduplex mode (given by the module parameter), the hardware buffer
  47. * is split to halves for read and write directions at the DMA pointer.
  48. * That is, the half above the current DMA pointer is used for write, and
  49. * the half below is used for read. To mangle this strange behavior, an
  50. * software intermediate buffer is introduced. This is, of course, not good
  51. * from the viewpoint of the data transfer efficiency. However, this allows
  52. * you to use arbitrary buffer sizes, instead of the fixed I/O buffer size.
  53. *
  54. * ****************************************************************************
  55. */
  56. #include <linux/delay.h>
  57. #include <linux/gfp.h>
  58. #include <linux/init.h>
  59. #include <linux/interrupt.h>
  60. #include <linux/pci.h>
  61. #include <linux/module.h>
  62. #include <linux/io.h>
  63. #include <sound/core.h>
  64. #include <sound/info.h>
  65. #include <sound/control.h>
  66. #include <sound/pcm.h>
  67. #include <sound/pcm_params.h>
  68. #include <sound/pcm-indirect.h>
  69. #include <sound/asoundef.h>
  70. #include <sound/initval.h>
  71. static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
  72. static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
  73. static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
  74. static bool fullduplex[SNDRV_CARDS]; // = {[0 ... (SNDRV_CARDS - 1)] = 1};
  75. module_param_array(index, int, NULL, 0444);
  76. MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard.");
  77. module_param_array(id, charp, NULL, 0444);
  78. MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard.");
  79. module_param_array(enable, bool, NULL, 0444);
  80. MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard.");
  81. module_param_array(fullduplex, bool, NULL, 0444);
  82. MODULE_PARM_DESC(fullduplex, "Support full-duplex mode.");
  83. MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>, Pilo Chambert <pilo.c@wanadoo.fr>");
  84. MODULE_DESCRIPTION("RME Digi32, Digi32/8, Digi32 PRO");
  85. MODULE_LICENSE("GPL");
  86. /* Defines for RME Digi32 series */
  87. #define RME32_SPDIF_NCHANNELS 2
  88. /* Playback and capture buffer size */
  89. #define RME32_BUFFER_SIZE 0x20000
  90. /* IO area size */
  91. #define RME32_IO_SIZE 0x30000
  92. /* IO area offsets */
  93. #define RME32_IO_DATA_BUFFER 0x0
  94. #define RME32_IO_CONTROL_REGISTER 0x20000
  95. #define RME32_IO_GET_POS 0x20000
  96. #define RME32_IO_CONFIRM_ACTION_IRQ 0x20004
  97. #define RME32_IO_RESET_POS 0x20100
  98. /* Write control register bits */
  99. #define RME32_WCR_START (1 << 0) /* startbit */
  100. #define RME32_WCR_MONO (1 << 1) /* 0=stereo, 1=mono
  101. Setting the whole card to mono
  102. doesn't seem to be very useful.
  103. A software-solution can handle
  104. full-duplex with one direction in
  105. stereo and the other way in mono.
  106. So, the hardware should work all
  107. the time in stereo! */
  108. #define RME32_WCR_MODE24 (1 << 2) /* 0=16bit, 1=32bit */
  109. #define RME32_WCR_SEL (1 << 3) /* 0=input on output, 1=normal playback/capture */
  110. #define RME32_WCR_FREQ_0 (1 << 4) /* frequency (play) */
  111. #define RME32_WCR_FREQ_1 (1 << 5)
  112. #define RME32_WCR_INP_0 (1 << 6) /* input switch */
  113. #define RME32_WCR_INP_1 (1 << 7)
  114. #define RME32_WCR_RESET (1 << 8) /* Reset address */
  115. #define RME32_WCR_MUTE (1 << 9) /* digital mute for output */
  116. #define RME32_WCR_PRO (1 << 10) /* 1=professional, 0=consumer */
  117. #define RME32_WCR_DS_BM (1 << 11) /* 1=DoubleSpeed (only PRO-Version); 1=BlockMode (only Adat-Version) */
  118. #define RME32_WCR_ADAT (1 << 12) /* Adat Mode (only Adat-Version) */
  119. #define RME32_WCR_AUTOSYNC (1 << 13) /* AutoSync */
  120. #define RME32_WCR_PD (1 << 14) /* DAC Reset (only PRO-Version) */
  121. #define RME32_WCR_EMP (1 << 15) /* 1=Emphasis on (only PRO-Version) */
  122. #define RME32_WCR_BITPOS_FREQ_0 4
  123. #define RME32_WCR_BITPOS_FREQ_1 5
  124. #define RME32_WCR_BITPOS_INP_0 6
  125. #define RME32_WCR_BITPOS_INP_1 7
  126. /* Read control register bits */
  127. #define RME32_RCR_AUDIO_ADDR_MASK 0x1ffff
  128. #define RME32_RCR_LOCK (1 << 23) /* 1=locked, 0=not locked */
  129. #define RME32_RCR_ERF (1 << 26) /* 1=Error, 0=no Error */
  130. #define RME32_RCR_FREQ_0 (1 << 27) /* CS841x frequency (record) */
  131. #define RME32_RCR_FREQ_1 (1 << 28)
  132. #define RME32_RCR_FREQ_2 (1 << 29)
  133. #define RME32_RCR_KMODE (1 << 30) /* card mode: 1=PLL, 0=quartz */
  134. #define RME32_RCR_IRQ (1 << 31) /* interrupt */
  135. #define RME32_RCR_BITPOS_F0 27
  136. #define RME32_RCR_BITPOS_F1 28
  137. #define RME32_RCR_BITPOS_F2 29
  138. /* Input types */
  139. #define RME32_INPUT_OPTICAL 0
  140. #define RME32_INPUT_COAXIAL 1
  141. #define RME32_INPUT_INTERNAL 2
  142. #define RME32_INPUT_XLR 3
  143. /* Clock modes */
  144. #define RME32_CLOCKMODE_SLAVE 0
  145. #define RME32_CLOCKMODE_MASTER_32 1
  146. #define RME32_CLOCKMODE_MASTER_44 2
  147. #define RME32_CLOCKMODE_MASTER_48 3
  148. /* Block sizes in bytes */
  149. #define RME32_BLOCK_SIZE 8192
  150. /* Software intermediate buffer (max) size */
  151. #define RME32_MID_BUFFER_SIZE (1024*1024)
  152. /* Hardware revisions */
  153. #define RME32_32_REVISION 192
  154. #define RME32_328_REVISION_OLD 100
  155. #define RME32_328_REVISION_NEW 101
  156. #define RME32_PRO_REVISION_WITH_8412 192
  157. #define RME32_PRO_REVISION_WITH_8414 150
  158. struct rme32 {
  159. spinlock_t lock;
  160. int irq;
  161. unsigned long port;
  162. void __iomem *iobase;
  163. u32 wcreg; /* cached write control register value */
  164. u32 wcreg_spdif; /* S/PDIF setup */
  165. u32 wcreg_spdif_stream; /* S/PDIF setup (temporary) */
  166. u32 rcreg; /* cached read control register value */
  167. u8 rev; /* card revision number */
  168. struct snd_pcm_substream *playback_substream;
  169. struct snd_pcm_substream *capture_substream;
  170. int playback_frlog; /* log2 of framesize */
  171. int capture_frlog;
  172. size_t playback_periodsize; /* in bytes, zero if not used */
  173. size_t capture_periodsize; /* in bytes, zero if not used */
  174. unsigned int fullduplex_mode;
  175. int running;
  176. struct snd_pcm_indirect playback_pcm;
  177. struct snd_pcm_indirect capture_pcm;
  178. struct snd_card *card;
  179. struct snd_pcm *spdif_pcm;
  180. struct snd_pcm *adat_pcm;
  181. struct pci_dev *pci;
  182. struct snd_kcontrol *spdif_ctl;
  183. };
  184. static const struct pci_device_id snd_rme32_ids[] = {
  185. {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32), 0,},
  186. {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8), 0,},
  187. {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_PRO), 0,},
  188. {0,}
  189. };
  190. MODULE_DEVICE_TABLE(pci, snd_rme32_ids);
  191. #define RME32_ISWORKING(rme32) ((rme32)->wcreg & RME32_WCR_START)
  192. #define RME32_PRO_WITH_8414(rme32) ((rme32)->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO && (rme32)->rev == RME32_PRO_REVISION_WITH_8414)
  193. static int snd_rme32_playback_prepare(struct snd_pcm_substream *substream);
  194. static int snd_rme32_capture_prepare(struct snd_pcm_substream *substream);
  195. static int snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd);
  196. static void snd_rme32_proc_init(struct rme32 * rme32);
  197. static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32);
  198. static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32)
  199. {
  200. return (readl(rme32->iobase + RME32_IO_GET_POS)
  201. & RME32_RCR_AUDIO_ADDR_MASK);
  202. }
  203. /* silence callback for halfduplex mode */
  204. static int snd_rme32_playback_silence(struct snd_pcm_substream *substream,
  205. int channel, unsigned long pos,
  206. unsigned long count)
  207. {
  208. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  209. memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count);
  210. return 0;
  211. }
  212. /* copy callback for halfduplex mode */
  213. static int snd_rme32_playback_copy(struct snd_pcm_substream *substream,
  214. int channel, unsigned long pos,
  215. struct iov_iter *src, unsigned long count)
  216. {
  217. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  218. return copy_from_iter_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos,
  219. src, count);
  220. }
  221. /* copy callback for halfduplex mode */
  222. static int snd_rme32_capture_copy(struct snd_pcm_substream *substream,
  223. int channel, unsigned long pos,
  224. struct iov_iter *dst, unsigned long count)
  225. {
  226. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  227. return copy_to_iter_fromio(dst,
  228. rme32->iobase + RME32_IO_DATA_BUFFER + pos,
  229. count);
  230. }
  231. /*
  232. * SPDIF I/O capabilities (half-duplex mode)
  233. */
  234. static const struct snd_pcm_hardware snd_rme32_spdif_info = {
  235. .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
  236. SNDRV_PCM_INFO_MMAP_VALID |
  237. SNDRV_PCM_INFO_INTERLEAVED |
  238. SNDRV_PCM_INFO_PAUSE |
  239. SNDRV_PCM_INFO_SYNC_START |
  240. SNDRV_PCM_INFO_SYNC_APPLPTR),
  241. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  242. SNDRV_PCM_FMTBIT_S32_LE),
  243. .rates = (SNDRV_PCM_RATE_32000 |
  244. SNDRV_PCM_RATE_44100 |
  245. SNDRV_PCM_RATE_48000),
  246. .rate_min = 32000,
  247. .rate_max = 48000,
  248. .channels_min = 2,
  249. .channels_max = 2,
  250. .buffer_bytes_max = RME32_BUFFER_SIZE,
  251. .period_bytes_min = RME32_BLOCK_SIZE,
  252. .period_bytes_max = RME32_BLOCK_SIZE,
  253. .periods_min = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
  254. .periods_max = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
  255. .fifo_size = 0,
  256. };
  257. /*
  258. * ADAT I/O capabilities (half-duplex mode)
  259. */
  260. static const struct snd_pcm_hardware snd_rme32_adat_info =
  261. {
  262. .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
  263. SNDRV_PCM_INFO_MMAP_VALID |
  264. SNDRV_PCM_INFO_INTERLEAVED |
  265. SNDRV_PCM_INFO_PAUSE |
  266. SNDRV_PCM_INFO_SYNC_START |
  267. SNDRV_PCM_INFO_SYNC_APPLPTR),
  268. .formats= SNDRV_PCM_FMTBIT_S16_LE,
  269. .rates = (SNDRV_PCM_RATE_44100 |
  270. SNDRV_PCM_RATE_48000),
  271. .rate_min = 44100,
  272. .rate_max = 48000,
  273. .channels_min = 8,
  274. .channels_max = 8,
  275. .buffer_bytes_max = RME32_BUFFER_SIZE,
  276. .period_bytes_min = RME32_BLOCK_SIZE,
  277. .period_bytes_max = RME32_BLOCK_SIZE,
  278. .periods_min = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
  279. .periods_max = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
  280. .fifo_size = 0,
  281. };
  282. /*
  283. * SPDIF I/O capabilities (full-duplex mode)
  284. */
  285. static const struct snd_pcm_hardware snd_rme32_spdif_fd_info = {
  286. .info = (SNDRV_PCM_INFO_MMAP |
  287. SNDRV_PCM_INFO_MMAP_VALID |
  288. SNDRV_PCM_INFO_INTERLEAVED |
  289. SNDRV_PCM_INFO_PAUSE |
  290. SNDRV_PCM_INFO_SYNC_START |
  291. SNDRV_PCM_INFO_SYNC_APPLPTR),
  292. .formats = (SNDRV_PCM_FMTBIT_S16_LE |
  293. SNDRV_PCM_FMTBIT_S32_LE),
  294. .rates = (SNDRV_PCM_RATE_32000 |
  295. SNDRV_PCM_RATE_44100 |
  296. SNDRV_PCM_RATE_48000),
  297. .rate_min = 32000,
  298. .rate_max = 48000,
  299. .channels_min = 2,
  300. .channels_max = 2,
  301. .buffer_bytes_max = RME32_MID_BUFFER_SIZE,
  302. .period_bytes_min = RME32_BLOCK_SIZE,
  303. .period_bytes_max = RME32_BLOCK_SIZE,
  304. .periods_min = 2,
  305. .periods_max = RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
  306. .fifo_size = 0,
  307. };
  308. /*
  309. * ADAT I/O capabilities (full-duplex mode)
  310. */
  311. static const struct snd_pcm_hardware snd_rme32_adat_fd_info =
  312. {
  313. .info = (SNDRV_PCM_INFO_MMAP |
  314. SNDRV_PCM_INFO_MMAP_VALID |
  315. SNDRV_PCM_INFO_INTERLEAVED |
  316. SNDRV_PCM_INFO_PAUSE |
  317. SNDRV_PCM_INFO_SYNC_START |
  318. SNDRV_PCM_INFO_SYNC_APPLPTR),
  319. .formats= SNDRV_PCM_FMTBIT_S16_LE,
  320. .rates = (SNDRV_PCM_RATE_44100 |
  321. SNDRV_PCM_RATE_48000),
  322. .rate_min = 44100,
  323. .rate_max = 48000,
  324. .channels_min = 8,
  325. .channels_max = 8,
  326. .buffer_bytes_max = RME32_MID_BUFFER_SIZE,
  327. .period_bytes_min = RME32_BLOCK_SIZE,
  328. .period_bytes_max = RME32_BLOCK_SIZE,
  329. .periods_min = 2,
  330. .periods_max = RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
  331. .fifo_size = 0,
  332. };
  333. static void snd_rme32_reset_dac(struct rme32 *rme32)
  334. {
  335. writel(rme32->wcreg | RME32_WCR_PD,
  336. rme32->iobase + RME32_IO_CONTROL_REGISTER);
  337. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  338. }
  339. static int snd_rme32_playback_getrate(struct rme32 * rme32)
  340. {
  341. int rate;
  342. rate = ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) +
  343. (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1);
  344. switch (rate) {
  345. case 1:
  346. rate = 32000;
  347. break;
  348. case 2:
  349. rate = 44100;
  350. break;
  351. case 3:
  352. rate = 48000;
  353. break;
  354. default:
  355. return -1;
  356. }
  357. return (rme32->wcreg & RME32_WCR_DS_BM) ? rate << 1 : rate;
  358. }
  359. static int snd_rme32_capture_getrate(struct rme32 * rme32, int *is_adat)
  360. {
  361. int n;
  362. *is_adat = 0;
  363. if (rme32->rcreg & RME32_RCR_LOCK) {
  364. /* ADAT rate */
  365. *is_adat = 1;
  366. }
  367. if (rme32->rcreg & RME32_RCR_ERF) {
  368. return -1;
  369. }
  370. /* S/PDIF rate */
  371. n = ((rme32->rcreg >> RME32_RCR_BITPOS_F0) & 1) +
  372. (((rme32->rcreg >> RME32_RCR_BITPOS_F1) & 1) << 1) +
  373. (((rme32->rcreg >> RME32_RCR_BITPOS_F2) & 1) << 2);
  374. if (RME32_PRO_WITH_8414(rme32))
  375. switch (n) { /* supporting the CS8414 */
  376. case 0:
  377. case 1:
  378. case 2:
  379. return -1;
  380. case 3:
  381. return 96000;
  382. case 4:
  383. return 88200;
  384. case 5:
  385. return 48000;
  386. case 6:
  387. return 44100;
  388. case 7:
  389. return 32000;
  390. default:
  391. return -1;
  392. }
  393. else
  394. switch (n) { /* supporting the CS8412 */
  395. case 0:
  396. return -1;
  397. case 1:
  398. return 48000;
  399. case 2:
  400. return 44100;
  401. case 3:
  402. return 32000;
  403. case 4:
  404. return 48000;
  405. case 5:
  406. return 44100;
  407. case 6:
  408. return 44056;
  409. case 7:
  410. return 32000;
  411. default:
  412. break;
  413. }
  414. return -1;
  415. }
  416. static int snd_rme32_playback_setrate(struct rme32 * rme32, int rate)
  417. {
  418. int ds;
  419. ds = rme32->wcreg & RME32_WCR_DS_BM;
  420. switch (rate) {
  421. case 32000:
  422. rme32->wcreg &= ~RME32_WCR_DS_BM;
  423. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
  424. ~RME32_WCR_FREQ_1;
  425. break;
  426. case 44100:
  427. rme32->wcreg &= ~RME32_WCR_DS_BM;
  428. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) &
  429. ~RME32_WCR_FREQ_0;
  430. break;
  431. case 48000:
  432. rme32->wcreg &= ~RME32_WCR_DS_BM;
  433. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
  434. RME32_WCR_FREQ_1;
  435. break;
  436. case 64000:
  437. if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
  438. return -EINVAL;
  439. rme32->wcreg |= RME32_WCR_DS_BM;
  440. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
  441. ~RME32_WCR_FREQ_1;
  442. break;
  443. case 88200:
  444. if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
  445. return -EINVAL;
  446. rme32->wcreg |= RME32_WCR_DS_BM;
  447. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) &
  448. ~RME32_WCR_FREQ_0;
  449. break;
  450. case 96000:
  451. if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
  452. return -EINVAL;
  453. rme32->wcreg |= RME32_WCR_DS_BM;
  454. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
  455. RME32_WCR_FREQ_1;
  456. break;
  457. default:
  458. return -EINVAL;
  459. }
  460. if ((!ds && rme32->wcreg & RME32_WCR_DS_BM) ||
  461. (ds && !(rme32->wcreg & RME32_WCR_DS_BM)))
  462. {
  463. /* change to/from double-speed: reset the DAC (if available) */
  464. snd_rme32_reset_dac(rme32);
  465. } else {
  466. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  467. }
  468. return 0;
  469. }
  470. static int snd_rme32_setclockmode(struct rme32 * rme32, int mode)
  471. {
  472. switch (mode) {
  473. case RME32_CLOCKMODE_SLAVE:
  474. /* AutoSync */
  475. rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) &
  476. ~RME32_WCR_FREQ_1;
  477. break;
  478. case RME32_CLOCKMODE_MASTER_32:
  479. /* Internal 32.0kHz */
  480. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
  481. ~RME32_WCR_FREQ_1;
  482. break;
  483. case RME32_CLOCKMODE_MASTER_44:
  484. /* Internal 44.1kHz */
  485. rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) |
  486. RME32_WCR_FREQ_1;
  487. break;
  488. case RME32_CLOCKMODE_MASTER_48:
  489. /* Internal 48.0kHz */
  490. rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
  491. RME32_WCR_FREQ_1;
  492. break;
  493. default:
  494. return -EINVAL;
  495. }
  496. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  497. return 0;
  498. }
  499. static int snd_rme32_getclockmode(struct rme32 * rme32)
  500. {
  501. return ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) +
  502. (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1);
  503. }
  504. static int snd_rme32_setinputtype(struct rme32 * rme32, int type)
  505. {
  506. switch (type) {
  507. case RME32_INPUT_OPTICAL:
  508. rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) &
  509. ~RME32_WCR_INP_1;
  510. break;
  511. case RME32_INPUT_COAXIAL:
  512. rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) &
  513. ~RME32_WCR_INP_1;
  514. break;
  515. case RME32_INPUT_INTERNAL:
  516. rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) |
  517. RME32_WCR_INP_1;
  518. break;
  519. case RME32_INPUT_XLR:
  520. rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) |
  521. RME32_WCR_INP_1;
  522. break;
  523. default:
  524. return -EINVAL;
  525. }
  526. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  527. return 0;
  528. }
  529. static int snd_rme32_getinputtype(struct rme32 * rme32)
  530. {
  531. return ((rme32->wcreg >> RME32_WCR_BITPOS_INP_0) & 1) +
  532. (((rme32->wcreg >> RME32_WCR_BITPOS_INP_1) & 1) << 1);
  533. }
  534. static void
  535. snd_rme32_setframelog(struct rme32 * rme32, int n_channels, int is_playback)
  536. {
  537. int frlog;
  538. if (n_channels == 2) {
  539. frlog = 1;
  540. } else {
  541. /* assume 8 channels */
  542. frlog = 3;
  543. }
  544. if (is_playback) {
  545. frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1;
  546. rme32->playback_frlog = frlog;
  547. } else {
  548. frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1;
  549. rme32->capture_frlog = frlog;
  550. }
  551. }
  552. static int snd_rme32_setformat(struct rme32 *rme32, snd_pcm_format_t format)
  553. {
  554. switch (format) {
  555. case SNDRV_PCM_FORMAT_S16_LE:
  556. rme32->wcreg &= ~RME32_WCR_MODE24;
  557. break;
  558. case SNDRV_PCM_FORMAT_S32_LE:
  559. rme32->wcreg |= RME32_WCR_MODE24;
  560. break;
  561. default:
  562. return -EINVAL;
  563. }
  564. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  565. return 0;
  566. }
  567. static int
  568. snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
  569. struct snd_pcm_hw_params *params)
  570. {
  571. int err, rate, dummy;
  572. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  573. struct snd_pcm_runtime *runtime = substream->runtime;
  574. if (!rme32->fullduplex_mode) {
  575. runtime->dma_area = (void __force *)(rme32->iobase +
  576. RME32_IO_DATA_BUFFER);
  577. runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
  578. runtime->dma_bytes = RME32_BUFFER_SIZE;
  579. }
  580. spin_lock_irq(&rme32->lock);
  581. rate = 0;
  582. if (rme32->rcreg & RME32_RCR_KMODE)
  583. rate = snd_rme32_capture_getrate(rme32, &dummy);
  584. if (rate > 0) {
  585. /* AutoSync */
  586. if ((int)params_rate(params) != rate) {
  587. spin_unlock_irq(&rme32->lock);
  588. return -EIO;
  589. }
  590. } else {
  591. err = snd_rme32_playback_setrate(rme32, params_rate(params));
  592. if (err < 0) {
  593. spin_unlock_irq(&rme32->lock);
  594. return err;
  595. }
  596. }
  597. err = snd_rme32_setformat(rme32, params_format(params));
  598. if (err < 0) {
  599. spin_unlock_irq(&rme32->lock);
  600. return err;
  601. }
  602. snd_rme32_setframelog(rme32, params_channels(params), 1);
  603. if (rme32->capture_periodsize != 0) {
  604. if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) {
  605. spin_unlock_irq(&rme32->lock);
  606. return -EBUSY;
  607. }
  608. }
  609. rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog;
  610. /* S/PDIF setup */
  611. if ((rme32->wcreg & RME32_WCR_ADAT) == 0) {
  612. rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
  613. rme32->wcreg |= rme32->wcreg_spdif_stream;
  614. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  615. }
  616. spin_unlock_irq(&rme32->lock);
  617. return 0;
  618. }
  619. static int
  620. snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
  621. struct snd_pcm_hw_params *params)
  622. {
  623. int err, isadat, rate;
  624. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  625. struct snd_pcm_runtime *runtime = substream->runtime;
  626. if (!rme32->fullduplex_mode) {
  627. runtime->dma_area = (void __force *)rme32->iobase +
  628. RME32_IO_DATA_BUFFER;
  629. runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
  630. runtime->dma_bytes = RME32_BUFFER_SIZE;
  631. }
  632. spin_lock_irq(&rme32->lock);
  633. /* enable AutoSync for record-preparing */
  634. rme32->wcreg |= RME32_WCR_AUTOSYNC;
  635. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  636. err = snd_rme32_setformat(rme32, params_format(params));
  637. if (err < 0) {
  638. spin_unlock_irq(&rme32->lock);
  639. return err;
  640. }
  641. err = snd_rme32_playback_setrate(rme32, params_rate(params));
  642. if (err < 0) {
  643. spin_unlock_irq(&rme32->lock);
  644. return err;
  645. }
  646. rate = snd_rme32_capture_getrate(rme32, &isadat);
  647. if (rate > 0) {
  648. if ((int)params_rate(params) != rate) {
  649. spin_unlock_irq(&rme32->lock);
  650. return -EIO;
  651. }
  652. if ((isadat && runtime->hw.channels_min == 2) ||
  653. (!isadat && runtime->hw.channels_min == 8)) {
  654. spin_unlock_irq(&rme32->lock);
  655. return -EIO;
  656. }
  657. }
  658. /* AutoSync off for recording */
  659. rme32->wcreg &= ~RME32_WCR_AUTOSYNC;
  660. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  661. snd_rme32_setframelog(rme32, params_channels(params), 0);
  662. if (rme32->playback_periodsize != 0) {
  663. if (params_period_size(params) << rme32->capture_frlog !=
  664. rme32->playback_periodsize) {
  665. spin_unlock_irq(&rme32->lock);
  666. return -EBUSY;
  667. }
  668. }
  669. rme32->capture_periodsize =
  670. params_period_size(params) << rme32->capture_frlog;
  671. spin_unlock_irq(&rme32->lock);
  672. return 0;
  673. }
  674. static void snd_rme32_pcm_start(struct rme32 * rme32, int from_pause)
  675. {
  676. if (!from_pause) {
  677. writel(0, rme32->iobase + RME32_IO_RESET_POS);
  678. }
  679. rme32->wcreg |= RME32_WCR_START;
  680. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  681. }
  682. static void snd_rme32_pcm_stop(struct rme32 * rme32, int to_pause)
  683. {
  684. /*
  685. * Check if there is an unconfirmed IRQ, if so confirm it, or else
  686. * the hardware will not stop generating interrupts
  687. */
  688. rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
  689. if (rme32->rcreg & RME32_RCR_IRQ) {
  690. writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
  691. }
  692. rme32->wcreg &= ~RME32_WCR_START;
  693. if (rme32->wcreg & RME32_WCR_SEL)
  694. rme32->wcreg |= RME32_WCR_MUTE;
  695. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  696. if (! to_pause)
  697. writel(0, rme32->iobase + RME32_IO_RESET_POS);
  698. }
  699. static irqreturn_t snd_rme32_interrupt(int irq, void *dev_id)
  700. {
  701. struct rme32 *rme32 = (struct rme32 *) dev_id;
  702. rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
  703. if (!(rme32->rcreg & RME32_RCR_IRQ)) {
  704. return IRQ_NONE;
  705. } else {
  706. if (rme32->capture_substream) {
  707. snd_pcm_period_elapsed(rme32->capture_substream);
  708. }
  709. if (rme32->playback_substream) {
  710. snd_pcm_period_elapsed(rme32->playback_substream);
  711. }
  712. writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
  713. }
  714. return IRQ_HANDLED;
  715. }
  716. static const unsigned int period_bytes[] = { RME32_BLOCK_SIZE };
  717. static const struct snd_pcm_hw_constraint_list hw_constraints_period_bytes = {
  718. .count = ARRAY_SIZE(period_bytes),
  719. .list = period_bytes,
  720. .mask = 0
  721. };
  722. static void snd_rme32_set_buffer_constraint(struct rme32 *rme32, struct snd_pcm_runtime *runtime)
  723. {
  724. if (! rme32->fullduplex_mode) {
  725. snd_pcm_hw_constraint_single(runtime,
  726. SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
  727. RME32_BUFFER_SIZE);
  728. snd_pcm_hw_constraint_list(runtime, 0,
  729. SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
  730. &hw_constraints_period_bytes);
  731. }
  732. }
  733. static int snd_rme32_playback_spdif_open(struct snd_pcm_substream *substream)
  734. {
  735. int rate, dummy;
  736. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  737. struct snd_pcm_runtime *runtime = substream->runtime;
  738. snd_pcm_set_sync(substream);
  739. spin_lock_irq(&rme32->lock);
  740. if (rme32->playback_substream != NULL) {
  741. spin_unlock_irq(&rme32->lock);
  742. return -EBUSY;
  743. }
  744. rme32->wcreg &= ~RME32_WCR_ADAT;
  745. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  746. rme32->playback_substream = substream;
  747. spin_unlock_irq(&rme32->lock);
  748. if (rme32->fullduplex_mode)
  749. runtime->hw = snd_rme32_spdif_fd_info;
  750. else
  751. runtime->hw = snd_rme32_spdif_info;
  752. if (rme32->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO) {
  753. runtime->hw.rates |= SNDRV_PCM_RATE_64000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
  754. runtime->hw.rate_max = 96000;
  755. }
  756. rate = 0;
  757. if (rme32->rcreg & RME32_RCR_KMODE)
  758. rate = snd_rme32_capture_getrate(rme32, &dummy);
  759. if (rate > 0) {
  760. /* AutoSync */
  761. runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
  762. runtime->hw.rate_min = rate;
  763. runtime->hw.rate_max = rate;
  764. }
  765. snd_rme32_set_buffer_constraint(rme32, runtime);
  766. rme32->wcreg_spdif_stream = rme32->wcreg_spdif;
  767. rme32->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
  768. snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE |
  769. SNDRV_CTL_EVENT_MASK_INFO, &rme32->spdif_ctl->id);
  770. return 0;
  771. }
  772. static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
  773. {
  774. int isadat, rate;
  775. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  776. struct snd_pcm_runtime *runtime = substream->runtime;
  777. snd_pcm_set_sync(substream);
  778. spin_lock_irq(&rme32->lock);
  779. if (rme32->capture_substream != NULL) {
  780. spin_unlock_irq(&rme32->lock);
  781. return -EBUSY;
  782. }
  783. rme32->capture_substream = substream;
  784. spin_unlock_irq(&rme32->lock);
  785. if (rme32->fullduplex_mode)
  786. runtime->hw = snd_rme32_spdif_fd_info;
  787. else
  788. runtime->hw = snd_rme32_spdif_info;
  789. if (RME32_PRO_WITH_8414(rme32)) {
  790. runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
  791. runtime->hw.rate_max = 96000;
  792. }
  793. rate = snd_rme32_capture_getrate(rme32, &isadat);
  794. if (rate > 0) {
  795. if (isadat) {
  796. return -EIO;
  797. }
  798. runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
  799. runtime->hw.rate_min = rate;
  800. runtime->hw.rate_max = rate;
  801. }
  802. snd_rme32_set_buffer_constraint(rme32, runtime);
  803. return 0;
  804. }
  805. static int
  806. snd_rme32_playback_adat_open(struct snd_pcm_substream *substream)
  807. {
  808. int rate, dummy;
  809. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  810. struct snd_pcm_runtime *runtime = substream->runtime;
  811. snd_pcm_set_sync(substream);
  812. spin_lock_irq(&rme32->lock);
  813. if (rme32->playback_substream != NULL) {
  814. spin_unlock_irq(&rme32->lock);
  815. return -EBUSY;
  816. }
  817. rme32->wcreg |= RME32_WCR_ADAT;
  818. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  819. rme32->playback_substream = substream;
  820. spin_unlock_irq(&rme32->lock);
  821. if (rme32->fullduplex_mode)
  822. runtime->hw = snd_rme32_adat_fd_info;
  823. else
  824. runtime->hw = snd_rme32_adat_info;
  825. rate = 0;
  826. if (rme32->rcreg & RME32_RCR_KMODE)
  827. rate = snd_rme32_capture_getrate(rme32, &dummy);
  828. if (rate > 0) {
  829. /* AutoSync */
  830. runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
  831. runtime->hw.rate_min = rate;
  832. runtime->hw.rate_max = rate;
  833. }
  834. snd_rme32_set_buffer_constraint(rme32, runtime);
  835. return 0;
  836. }
  837. static int
  838. snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
  839. {
  840. int isadat, rate;
  841. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  842. struct snd_pcm_runtime *runtime = substream->runtime;
  843. if (rme32->fullduplex_mode)
  844. runtime->hw = snd_rme32_adat_fd_info;
  845. else
  846. runtime->hw = snd_rme32_adat_info;
  847. rate = snd_rme32_capture_getrate(rme32, &isadat);
  848. if (rate > 0) {
  849. if (!isadat) {
  850. return -EIO;
  851. }
  852. runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
  853. runtime->hw.rate_min = rate;
  854. runtime->hw.rate_max = rate;
  855. }
  856. snd_pcm_set_sync(substream);
  857. spin_lock_irq(&rme32->lock);
  858. if (rme32->capture_substream != NULL) {
  859. spin_unlock_irq(&rme32->lock);
  860. return -EBUSY;
  861. }
  862. rme32->capture_substream = substream;
  863. spin_unlock_irq(&rme32->lock);
  864. snd_rme32_set_buffer_constraint(rme32, runtime);
  865. return 0;
  866. }
  867. static int snd_rme32_playback_close(struct snd_pcm_substream *substream)
  868. {
  869. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  870. int spdif = 0;
  871. spin_lock_irq(&rme32->lock);
  872. rme32->playback_substream = NULL;
  873. rme32->playback_periodsize = 0;
  874. spdif = (rme32->wcreg & RME32_WCR_ADAT) == 0;
  875. spin_unlock_irq(&rme32->lock);
  876. if (spdif) {
  877. rme32->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
  878. snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE |
  879. SNDRV_CTL_EVENT_MASK_INFO,
  880. &rme32->spdif_ctl->id);
  881. }
  882. return 0;
  883. }
  884. static int snd_rme32_capture_close(struct snd_pcm_substream *substream)
  885. {
  886. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  887. spin_lock_irq(&rme32->lock);
  888. rme32->capture_substream = NULL;
  889. rme32->capture_periodsize = 0;
  890. spin_unlock_irq(&rme32->lock);
  891. return 0;
  892. }
  893. static int snd_rme32_playback_prepare(struct snd_pcm_substream *substream)
  894. {
  895. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  896. spin_lock_irq(&rme32->lock);
  897. if (rme32->fullduplex_mode) {
  898. memset(&rme32->playback_pcm, 0, sizeof(rme32->playback_pcm));
  899. rme32->playback_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
  900. rme32->playback_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
  901. } else {
  902. writel(0, rme32->iobase + RME32_IO_RESET_POS);
  903. }
  904. if (rme32->wcreg & RME32_WCR_SEL)
  905. rme32->wcreg &= ~RME32_WCR_MUTE;
  906. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  907. spin_unlock_irq(&rme32->lock);
  908. return 0;
  909. }
  910. static int snd_rme32_capture_prepare(struct snd_pcm_substream *substream)
  911. {
  912. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  913. spin_lock_irq(&rme32->lock);
  914. if (rme32->fullduplex_mode) {
  915. memset(&rme32->capture_pcm, 0, sizeof(rme32->capture_pcm));
  916. rme32->capture_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
  917. rme32->capture_pcm.hw_queue_size = RME32_BUFFER_SIZE / 2;
  918. rme32->capture_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
  919. } else {
  920. writel(0, rme32->iobase + RME32_IO_RESET_POS);
  921. }
  922. spin_unlock_irq(&rme32->lock);
  923. return 0;
  924. }
  925. static int
  926. snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
  927. {
  928. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  929. struct snd_pcm_substream *s;
  930. spin_lock(&rme32->lock);
  931. snd_pcm_group_for_each_entry(s, substream) {
  932. if (s != rme32->playback_substream &&
  933. s != rme32->capture_substream)
  934. continue;
  935. switch (cmd) {
  936. case SNDRV_PCM_TRIGGER_START:
  937. rme32->running |= (1 << s->stream);
  938. if (rme32->fullduplex_mode) {
  939. /* remember the current DMA position */
  940. if (s == rme32->playback_substream) {
  941. rme32->playback_pcm.hw_io =
  942. rme32->playback_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
  943. } else {
  944. rme32->capture_pcm.hw_io =
  945. rme32->capture_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
  946. }
  947. }
  948. break;
  949. case SNDRV_PCM_TRIGGER_STOP:
  950. rme32->running &= ~(1 << s->stream);
  951. break;
  952. }
  953. snd_pcm_trigger_done(s, substream);
  954. }
  955. switch (cmd) {
  956. case SNDRV_PCM_TRIGGER_START:
  957. if (rme32->running && ! RME32_ISWORKING(rme32))
  958. snd_rme32_pcm_start(rme32, 0);
  959. break;
  960. case SNDRV_PCM_TRIGGER_STOP:
  961. if (! rme32->running && RME32_ISWORKING(rme32))
  962. snd_rme32_pcm_stop(rme32, 0);
  963. break;
  964. case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
  965. if (rme32->running && RME32_ISWORKING(rme32))
  966. snd_rme32_pcm_stop(rme32, 1);
  967. break;
  968. case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
  969. if (rme32->running && ! RME32_ISWORKING(rme32))
  970. snd_rme32_pcm_start(rme32, 1);
  971. break;
  972. }
  973. spin_unlock(&rme32->lock);
  974. return 0;
  975. }
  976. /* pointer callback for halfduplex mode */
  977. static snd_pcm_uframes_t
  978. snd_rme32_playback_pointer(struct snd_pcm_substream *substream)
  979. {
  980. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  981. return snd_rme32_pcm_byteptr(rme32) >> rme32->playback_frlog;
  982. }
  983. static snd_pcm_uframes_t
  984. snd_rme32_capture_pointer(struct snd_pcm_substream *substream)
  985. {
  986. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  987. return snd_rme32_pcm_byteptr(rme32) >> rme32->capture_frlog;
  988. }
  989. /* ack and pointer callbacks for fullduplex mode */
  990. static void snd_rme32_pb_trans_copy(struct snd_pcm_substream *substream,
  991. struct snd_pcm_indirect *rec, size_t bytes)
  992. {
  993. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  994. memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
  995. substream->runtime->dma_area + rec->sw_data, bytes);
  996. }
  997. static int snd_rme32_playback_fd_ack(struct snd_pcm_substream *substream)
  998. {
  999. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  1000. struct snd_pcm_indirect *rec, *cprec;
  1001. rec = &rme32->playback_pcm;
  1002. cprec = &rme32->capture_pcm;
  1003. spin_lock(&rme32->lock);
  1004. rec->hw_queue_size = RME32_BUFFER_SIZE;
  1005. if (rme32->running & (1 << SNDRV_PCM_STREAM_CAPTURE))
  1006. rec->hw_queue_size -= cprec->hw_ready;
  1007. spin_unlock(&rme32->lock);
  1008. return snd_pcm_indirect_playback_transfer(substream, rec,
  1009. snd_rme32_pb_trans_copy);
  1010. }
  1011. static void snd_rme32_cp_trans_copy(struct snd_pcm_substream *substream,
  1012. struct snd_pcm_indirect *rec, size_t bytes)
  1013. {
  1014. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  1015. memcpy_fromio(substream->runtime->dma_area + rec->sw_data,
  1016. rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
  1017. bytes);
  1018. }
  1019. static int snd_rme32_capture_fd_ack(struct snd_pcm_substream *substream)
  1020. {
  1021. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  1022. return snd_pcm_indirect_capture_transfer(substream, &rme32->capture_pcm,
  1023. snd_rme32_cp_trans_copy);
  1024. }
  1025. static snd_pcm_uframes_t
  1026. snd_rme32_playback_fd_pointer(struct snd_pcm_substream *substream)
  1027. {
  1028. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  1029. return snd_pcm_indirect_playback_pointer(substream, &rme32->playback_pcm,
  1030. snd_rme32_pcm_byteptr(rme32));
  1031. }
  1032. static snd_pcm_uframes_t
  1033. snd_rme32_capture_fd_pointer(struct snd_pcm_substream *substream)
  1034. {
  1035. struct rme32 *rme32 = snd_pcm_substream_chip(substream);
  1036. return snd_pcm_indirect_capture_pointer(substream, &rme32->capture_pcm,
  1037. snd_rme32_pcm_byteptr(rme32));
  1038. }
  1039. /* for halfduplex mode */
  1040. static const struct snd_pcm_ops snd_rme32_playback_spdif_ops = {
  1041. .open = snd_rme32_playback_spdif_open,
  1042. .close = snd_rme32_playback_close,
  1043. .hw_params = snd_rme32_playback_hw_params,
  1044. .prepare = snd_rme32_playback_prepare,
  1045. .trigger = snd_rme32_pcm_trigger,
  1046. .pointer = snd_rme32_playback_pointer,
  1047. .copy = snd_rme32_playback_copy,
  1048. .fill_silence = snd_rme32_playback_silence,
  1049. .mmap = snd_pcm_lib_mmap_iomem,
  1050. };
  1051. static const struct snd_pcm_ops snd_rme32_capture_spdif_ops = {
  1052. .open = snd_rme32_capture_spdif_open,
  1053. .close = snd_rme32_capture_close,
  1054. .hw_params = snd_rme32_capture_hw_params,
  1055. .prepare = snd_rme32_capture_prepare,
  1056. .trigger = snd_rme32_pcm_trigger,
  1057. .pointer = snd_rme32_capture_pointer,
  1058. .copy = snd_rme32_capture_copy,
  1059. .mmap = snd_pcm_lib_mmap_iomem,
  1060. };
  1061. static const struct snd_pcm_ops snd_rme32_playback_adat_ops = {
  1062. .open = snd_rme32_playback_adat_open,
  1063. .close = snd_rme32_playback_close,
  1064. .hw_params = snd_rme32_playback_hw_params,
  1065. .prepare = snd_rme32_playback_prepare,
  1066. .trigger = snd_rme32_pcm_trigger,
  1067. .pointer = snd_rme32_playback_pointer,
  1068. .copy = snd_rme32_playback_copy,
  1069. .fill_silence = snd_rme32_playback_silence,
  1070. .mmap = snd_pcm_lib_mmap_iomem,
  1071. };
  1072. static const struct snd_pcm_ops snd_rme32_capture_adat_ops = {
  1073. .open = snd_rme32_capture_adat_open,
  1074. .close = snd_rme32_capture_close,
  1075. .hw_params = snd_rme32_capture_hw_params,
  1076. .prepare = snd_rme32_capture_prepare,
  1077. .trigger = snd_rme32_pcm_trigger,
  1078. .pointer = snd_rme32_capture_pointer,
  1079. .copy = snd_rme32_capture_copy,
  1080. .mmap = snd_pcm_lib_mmap_iomem,
  1081. };
  1082. /* for fullduplex mode */
  1083. static const struct snd_pcm_ops snd_rme32_playback_spdif_fd_ops = {
  1084. .open = snd_rme32_playback_spdif_open,
  1085. .close = snd_rme32_playback_close,
  1086. .hw_params = snd_rme32_playback_hw_params,
  1087. .prepare = snd_rme32_playback_prepare,
  1088. .trigger = snd_rme32_pcm_trigger,
  1089. .pointer = snd_rme32_playback_fd_pointer,
  1090. .ack = snd_rme32_playback_fd_ack,
  1091. };
  1092. static const struct snd_pcm_ops snd_rme32_capture_spdif_fd_ops = {
  1093. .open = snd_rme32_capture_spdif_open,
  1094. .close = snd_rme32_capture_close,
  1095. .hw_params = snd_rme32_capture_hw_params,
  1096. .prepare = snd_rme32_capture_prepare,
  1097. .trigger = snd_rme32_pcm_trigger,
  1098. .pointer = snd_rme32_capture_fd_pointer,
  1099. .ack = snd_rme32_capture_fd_ack,
  1100. };
  1101. static const struct snd_pcm_ops snd_rme32_playback_adat_fd_ops = {
  1102. .open = snd_rme32_playback_adat_open,
  1103. .close = snd_rme32_playback_close,
  1104. .hw_params = snd_rme32_playback_hw_params,
  1105. .prepare = snd_rme32_playback_prepare,
  1106. .trigger = snd_rme32_pcm_trigger,
  1107. .pointer = snd_rme32_playback_fd_pointer,
  1108. .ack = snd_rme32_playback_fd_ack,
  1109. };
  1110. static const struct snd_pcm_ops snd_rme32_capture_adat_fd_ops = {
  1111. .open = snd_rme32_capture_adat_open,
  1112. .close = snd_rme32_capture_close,
  1113. .hw_params = snd_rme32_capture_hw_params,
  1114. .prepare = snd_rme32_capture_prepare,
  1115. .trigger = snd_rme32_pcm_trigger,
  1116. .pointer = snd_rme32_capture_fd_pointer,
  1117. .ack = snd_rme32_capture_fd_ack,
  1118. };
  1119. static void snd_rme32_free(struct rme32 *rme32)
  1120. {
  1121. if (rme32->irq >= 0)
  1122. snd_rme32_pcm_stop(rme32, 0);
  1123. }
  1124. static void snd_rme32_free_spdif_pcm(struct snd_pcm *pcm)
  1125. {
  1126. struct rme32 *rme32 = (struct rme32 *) pcm->private_data;
  1127. rme32->spdif_pcm = NULL;
  1128. }
  1129. static void
  1130. snd_rme32_free_adat_pcm(struct snd_pcm *pcm)
  1131. {
  1132. struct rme32 *rme32 = (struct rme32 *) pcm->private_data;
  1133. rme32->adat_pcm = NULL;
  1134. }
  1135. static int snd_rme32_create(struct rme32 *rme32)
  1136. {
  1137. struct pci_dev *pci = rme32->pci;
  1138. int err;
  1139. rme32->irq = -1;
  1140. spin_lock_init(&rme32->lock);
  1141. err = pcim_enable_device(pci);
  1142. if (err < 0)
  1143. return err;
  1144. err = pci_request_regions(pci, "RME32");
  1145. if (err < 0)
  1146. return err;
  1147. rme32->port = pci_resource_start(rme32->pci, 0);
  1148. rme32->iobase = devm_ioremap(&pci->dev, rme32->port, RME32_IO_SIZE);
  1149. if (!rme32->iobase) {
  1150. dev_err(rme32->card->dev,
  1151. "unable to remap memory region 0x%lx-0x%lx\n",
  1152. rme32->port, rme32->port + RME32_IO_SIZE - 1);
  1153. return -ENOMEM;
  1154. }
  1155. if (devm_request_irq(&pci->dev, pci->irq, snd_rme32_interrupt,
  1156. IRQF_SHARED, KBUILD_MODNAME, rme32)) {
  1157. dev_err(rme32->card->dev, "unable to grab IRQ %d\n", pci->irq);
  1158. return -EBUSY;
  1159. }
  1160. rme32->irq = pci->irq;
  1161. rme32->card->sync_irq = rme32->irq;
  1162. /* read the card's revision number */
  1163. pci_read_config_byte(pci, 8, &rme32->rev);
  1164. /* set up ALSA pcm device for S/PDIF */
  1165. err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm);
  1166. if (err < 0)
  1167. return err;
  1168. rme32->spdif_pcm->private_data = rme32;
  1169. rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
  1170. strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
  1171. if (rme32->fullduplex_mode) {
  1172. snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
  1173. &snd_rme32_playback_spdif_fd_ops);
  1174. snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
  1175. &snd_rme32_capture_spdif_fd_ops);
  1176. snd_pcm_set_managed_buffer_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
  1177. NULL, 0, RME32_MID_BUFFER_SIZE);
  1178. rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
  1179. } else {
  1180. snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
  1181. &snd_rme32_playback_spdif_ops);
  1182. snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
  1183. &snd_rme32_capture_spdif_ops);
  1184. rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
  1185. }
  1186. /* set up ALSA pcm device for ADAT */
  1187. if ((pci->device == PCI_DEVICE_ID_RME_DIGI32) ||
  1188. (pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO)) {
  1189. /* ADAT is not available on DIGI32 and DIGI32 Pro */
  1190. rme32->adat_pcm = NULL;
  1191. }
  1192. else {
  1193. err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1,
  1194. 1, 1, &rme32->adat_pcm);
  1195. if (err < 0)
  1196. return err;
  1197. rme32->adat_pcm->private_data = rme32;
  1198. rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
  1199. strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
  1200. if (rme32->fullduplex_mode) {
  1201. snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK,
  1202. &snd_rme32_playback_adat_fd_ops);
  1203. snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE,
  1204. &snd_rme32_capture_adat_fd_ops);
  1205. snd_pcm_set_managed_buffer_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
  1206. NULL,
  1207. 0, RME32_MID_BUFFER_SIZE);
  1208. rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
  1209. } else {
  1210. snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK,
  1211. &snd_rme32_playback_adat_ops);
  1212. snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE,
  1213. &snd_rme32_capture_adat_ops);
  1214. rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
  1215. }
  1216. }
  1217. rme32->playback_periodsize = 0;
  1218. rme32->capture_periodsize = 0;
  1219. /* make sure playback/capture is stopped, if by some reason active */
  1220. snd_rme32_pcm_stop(rme32, 0);
  1221. /* reset DAC */
  1222. snd_rme32_reset_dac(rme32);
  1223. /* reset buffer pointer */
  1224. writel(0, rme32->iobase + RME32_IO_RESET_POS);
  1225. /* set default values in registers */
  1226. rme32->wcreg = RME32_WCR_SEL | /* normal playback */
  1227. RME32_WCR_INP_0 | /* input select */
  1228. RME32_WCR_MUTE; /* muting on */
  1229. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  1230. /* init switch interface */
  1231. err = snd_rme32_create_switches(rme32->card, rme32);
  1232. if (err < 0)
  1233. return err;
  1234. /* init proc interface */
  1235. snd_rme32_proc_init(rme32);
  1236. rme32->capture_substream = NULL;
  1237. rme32->playback_substream = NULL;
  1238. return 0;
  1239. }
  1240. /*
  1241. * proc interface
  1242. */
  1243. static void
  1244. snd_rme32_proc_read(struct snd_info_entry * entry, struct snd_info_buffer *buffer)
  1245. {
  1246. int n;
  1247. struct rme32 *rme32 = (struct rme32 *) entry->private_data;
  1248. rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
  1249. snd_iprintf(buffer, rme32->card->longname);
  1250. snd_iprintf(buffer, " (index #%d)\n", rme32->card->number + 1);
  1251. snd_iprintf(buffer, "\nGeneral settings\n");
  1252. if (rme32->fullduplex_mode)
  1253. snd_iprintf(buffer, " Full-duplex mode\n");
  1254. else
  1255. snd_iprintf(buffer, " Half-duplex mode\n");
  1256. if (RME32_PRO_WITH_8414(rme32)) {
  1257. snd_iprintf(buffer, " receiver: CS8414\n");
  1258. } else {
  1259. snd_iprintf(buffer, " receiver: CS8412\n");
  1260. }
  1261. if (rme32->wcreg & RME32_WCR_MODE24) {
  1262. snd_iprintf(buffer, " format: 24 bit");
  1263. } else {
  1264. snd_iprintf(buffer, " format: 16 bit");
  1265. }
  1266. if (rme32->wcreg & RME32_WCR_MONO) {
  1267. snd_iprintf(buffer, ", Mono\n");
  1268. } else {
  1269. snd_iprintf(buffer, ", Stereo\n");
  1270. }
  1271. snd_iprintf(buffer, "\nInput settings\n");
  1272. switch (snd_rme32_getinputtype(rme32)) {
  1273. case RME32_INPUT_OPTICAL:
  1274. snd_iprintf(buffer, " input: optical");
  1275. break;
  1276. case RME32_INPUT_COAXIAL:
  1277. snd_iprintf(buffer, " input: coaxial");
  1278. break;
  1279. case RME32_INPUT_INTERNAL:
  1280. snd_iprintf(buffer, " input: internal");
  1281. break;
  1282. case RME32_INPUT_XLR:
  1283. snd_iprintf(buffer, " input: XLR");
  1284. break;
  1285. }
  1286. if (snd_rme32_capture_getrate(rme32, &n) < 0) {
  1287. snd_iprintf(buffer, "\n sample rate: no valid signal\n");
  1288. } else {
  1289. if (n) {
  1290. snd_iprintf(buffer, " (8 channels)\n");
  1291. } else {
  1292. snd_iprintf(buffer, " (2 channels)\n");
  1293. }
  1294. snd_iprintf(buffer, " sample rate: %d Hz\n",
  1295. snd_rme32_capture_getrate(rme32, &n));
  1296. }
  1297. snd_iprintf(buffer, "\nOutput settings\n");
  1298. if (rme32->wcreg & RME32_WCR_SEL) {
  1299. snd_iprintf(buffer, " output signal: normal playback");
  1300. } else {
  1301. snd_iprintf(buffer, " output signal: same as input");
  1302. }
  1303. if (rme32->wcreg & RME32_WCR_MUTE) {
  1304. snd_iprintf(buffer, " (muted)\n");
  1305. } else {
  1306. snd_iprintf(buffer, "\n");
  1307. }
  1308. /* master output frequency */
  1309. if (!
  1310. ((!(rme32->wcreg & RME32_WCR_FREQ_0))
  1311. && (!(rme32->wcreg & RME32_WCR_FREQ_1)))) {
  1312. snd_iprintf(buffer, " sample rate: %d Hz\n",
  1313. snd_rme32_playback_getrate(rme32));
  1314. }
  1315. if (rme32->rcreg & RME32_RCR_KMODE) {
  1316. snd_iprintf(buffer, " sample clock source: AutoSync\n");
  1317. } else {
  1318. snd_iprintf(buffer, " sample clock source: Internal\n");
  1319. }
  1320. if (rme32->wcreg & RME32_WCR_PRO) {
  1321. snd_iprintf(buffer, " format: AES/EBU (professional)\n");
  1322. } else {
  1323. snd_iprintf(buffer, " format: IEC958 (consumer)\n");
  1324. }
  1325. if (rme32->wcreg & RME32_WCR_EMP) {
  1326. snd_iprintf(buffer, " emphasis: on\n");
  1327. } else {
  1328. snd_iprintf(buffer, " emphasis: off\n");
  1329. }
  1330. }
  1331. static void snd_rme32_proc_init(struct rme32 *rme32)
  1332. {
  1333. snd_card_ro_proc_new(rme32->card, "rme32", rme32, snd_rme32_proc_read);
  1334. }
  1335. /*
  1336. * control interface
  1337. */
  1338. #define snd_rme32_info_loopback_control snd_ctl_boolean_mono_info
  1339. static int
  1340. snd_rme32_get_loopback_control(struct snd_kcontrol *kcontrol,
  1341. struct snd_ctl_elem_value *ucontrol)
  1342. {
  1343. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1344. spin_lock_irq(&rme32->lock);
  1345. ucontrol->value.integer.value[0] =
  1346. rme32->wcreg & RME32_WCR_SEL ? 0 : 1;
  1347. spin_unlock_irq(&rme32->lock);
  1348. return 0;
  1349. }
  1350. static int
  1351. snd_rme32_put_loopback_control(struct snd_kcontrol *kcontrol,
  1352. struct snd_ctl_elem_value *ucontrol)
  1353. {
  1354. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1355. unsigned int val;
  1356. int change;
  1357. val = ucontrol->value.integer.value[0] ? 0 : RME32_WCR_SEL;
  1358. spin_lock_irq(&rme32->lock);
  1359. val = (rme32->wcreg & ~RME32_WCR_SEL) | val;
  1360. change = val != rme32->wcreg;
  1361. if (ucontrol->value.integer.value[0])
  1362. val &= ~RME32_WCR_MUTE;
  1363. else
  1364. val |= RME32_WCR_MUTE;
  1365. rme32->wcreg = val;
  1366. writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  1367. spin_unlock_irq(&rme32->lock);
  1368. return change;
  1369. }
  1370. static int
  1371. snd_rme32_info_inputtype_control(struct snd_kcontrol *kcontrol,
  1372. struct snd_ctl_elem_info *uinfo)
  1373. {
  1374. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1375. static const char * const texts[4] = {
  1376. "Optical", "Coaxial", "Internal", "XLR"
  1377. };
  1378. int num_items;
  1379. switch (rme32->pci->device) {
  1380. case PCI_DEVICE_ID_RME_DIGI32:
  1381. case PCI_DEVICE_ID_RME_DIGI32_8:
  1382. num_items = 3;
  1383. break;
  1384. case PCI_DEVICE_ID_RME_DIGI32_PRO:
  1385. num_items = 4;
  1386. break;
  1387. default:
  1388. snd_BUG();
  1389. return -EINVAL;
  1390. }
  1391. return snd_ctl_enum_info(uinfo, 1, num_items, texts);
  1392. }
  1393. static int
  1394. snd_rme32_get_inputtype_control(struct snd_kcontrol *kcontrol,
  1395. struct snd_ctl_elem_value *ucontrol)
  1396. {
  1397. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1398. unsigned int items = 3;
  1399. spin_lock_irq(&rme32->lock);
  1400. ucontrol->value.enumerated.item[0] = snd_rme32_getinputtype(rme32);
  1401. switch (rme32->pci->device) {
  1402. case PCI_DEVICE_ID_RME_DIGI32:
  1403. case PCI_DEVICE_ID_RME_DIGI32_8:
  1404. items = 3;
  1405. break;
  1406. case PCI_DEVICE_ID_RME_DIGI32_PRO:
  1407. items = 4;
  1408. break;
  1409. default:
  1410. snd_BUG();
  1411. break;
  1412. }
  1413. if (ucontrol->value.enumerated.item[0] >= items) {
  1414. ucontrol->value.enumerated.item[0] = items - 1;
  1415. }
  1416. spin_unlock_irq(&rme32->lock);
  1417. return 0;
  1418. }
  1419. static int
  1420. snd_rme32_put_inputtype_control(struct snd_kcontrol *kcontrol,
  1421. struct snd_ctl_elem_value *ucontrol)
  1422. {
  1423. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1424. unsigned int val;
  1425. int change, items = 3;
  1426. switch (rme32->pci->device) {
  1427. case PCI_DEVICE_ID_RME_DIGI32:
  1428. case PCI_DEVICE_ID_RME_DIGI32_8:
  1429. items = 3;
  1430. break;
  1431. case PCI_DEVICE_ID_RME_DIGI32_PRO:
  1432. items = 4;
  1433. break;
  1434. default:
  1435. snd_BUG();
  1436. break;
  1437. }
  1438. val = ucontrol->value.enumerated.item[0] % items;
  1439. spin_lock_irq(&rme32->lock);
  1440. change = val != (unsigned int)snd_rme32_getinputtype(rme32);
  1441. snd_rme32_setinputtype(rme32, val);
  1442. spin_unlock_irq(&rme32->lock);
  1443. return change;
  1444. }
  1445. static int
  1446. snd_rme32_info_clockmode_control(struct snd_kcontrol *kcontrol,
  1447. struct snd_ctl_elem_info *uinfo)
  1448. {
  1449. static const char * const texts[4] = { "AutoSync",
  1450. "Internal 32.0kHz",
  1451. "Internal 44.1kHz",
  1452. "Internal 48.0kHz" };
  1453. return snd_ctl_enum_info(uinfo, 1, 4, texts);
  1454. }
  1455. static int
  1456. snd_rme32_get_clockmode_control(struct snd_kcontrol *kcontrol,
  1457. struct snd_ctl_elem_value *ucontrol)
  1458. {
  1459. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1460. spin_lock_irq(&rme32->lock);
  1461. ucontrol->value.enumerated.item[0] = snd_rme32_getclockmode(rme32);
  1462. spin_unlock_irq(&rme32->lock);
  1463. return 0;
  1464. }
  1465. static int
  1466. snd_rme32_put_clockmode_control(struct snd_kcontrol *kcontrol,
  1467. struct snd_ctl_elem_value *ucontrol)
  1468. {
  1469. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1470. unsigned int val;
  1471. int change;
  1472. val = ucontrol->value.enumerated.item[0] % 3;
  1473. spin_lock_irq(&rme32->lock);
  1474. change = val != (unsigned int)snd_rme32_getclockmode(rme32);
  1475. snd_rme32_setclockmode(rme32, val);
  1476. spin_unlock_irq(&rme32->lock);
  1477. return change;
  1478. }
  1479. static u32 snd_rme32_convert_from_aes(struct snd_aes_iec958 * aes)
  1480. {
  1481. u32 val = 0;
  1482. val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? RME32_WCR_PRO : 0;
  1483. if (val & RME32_WCR_PRO)
  1484. val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? RME32_WCR_EMP : 0;
  1485. else
  1486. val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? RME32_WCR_EMP : 0;
  1487. return val;
  1488. }
  1489. static void snd_rme32_convert_to_aes(struct snd_aes_iec958 * aes, u32 val)
  1490. {
  1491. aes->status[0] = ((val & RME32_WCR_PRO) ? IEC958_AES0_PROFESSIONAL : 0);
  1492. if (val & RME32_WCR_PRO)
  1493. aes->status[0] |= (val & RME32_WCR_EMP) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
  1494. else
  1495. aes->status[0] |= (val & RME32_WCR_EMP) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
  1496. }
  1497. static int snd_rme32_control_spdif_info(struct snd_kcontrol *kcontrol,
  1498. struct snd_ctl_elem_info *uinfo)
  1499. {
  1500. uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
  1501. uinfo->count = 1;
  1502. return 0;
  1503. }
  1504. static int snd_rme32_control_spdif_get(struct snd_kcontrol *kcontrol,
  1505. struct snd_ctl_elem_value *ucontrol)
  1506. {
  1507. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1508. snd_rme32_convert_to_aes(&ucontrol->value.iec958,
  1509. rme32->wcreg_spdif);
  1510. return 0;
  1511. }
  1512. static int snd_rme32_control_spdif_put(struct snd_kcontrol *kcontrol,
  1513. struct snd_ctl_elem_value *ucontrol)
  1514. {
  1515. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1516. int change;
  1517. u32 val;
  1518. val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
  1519. spin_lock_irq(&rme32->lock);
  1520. change = val != rme32->wcreg_spdif;
  1521. rme32->wcreg_spdif = val;
  1522. spin_unlock_irq(&rme32->lock);
  1523. return change;
  1524. }
  1525. static int snd_rme32_control_spdif_stream_info(struct snd_kcontrol *kcontrol,
  1526. struct snd_ctl_elem_info *uinfo)
  1527. {
  1528. uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
  1529. uinfo->count = 1;
  1530. return 0;
  1531. }
  1532. static int snd_rme32_control_spdif_stream_get(struct snd_kcontrol *kcontrol,
  1533. struct snd_ctl_elem_value *
  1534. ucontrol)
  1535. {
  1536. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1537. snd_rme32_convert_to_aes(&ucontrol->value.iec958,
  1538. rme32->wcreg_spdif_stream);
  1539. return 0;
  1540. }
  1541. static int snd_rme32_control_spdif_stream_put(struct snd_kcontrol *kcontrol,
  1542. struct snd_ctl_elem_value *
  1543. ucontrol)
  1544. {
  1545. struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
  1546. int change;
  1547. u32 val;
  1548. val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
  1549. spin_lock_irq(&rme32->lock);
  1550. change = val != rme32->wcreg_spdif_stream;
  1551. rme32->wcreg_spdif_stream = val;
  1552. rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
  1553. rme32->wcreg |= val;
  1554. writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
  1555. spin_unlock_irq(&rme32->lock);
  1556. return change;
  1557. }
  1558. static int snd_rme32_control_spdif_mask_info(struct snd_kcontrol *kcontrol,
  1559. struct snd_ctl_elem_info *uinfo)
  1560. {
  1561. uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
  1562. uinfo->count = 1;
  1563. return 0;
  1564. }
  1565. static int snd_rme32_control_spdif_mask_get(struct snd_kcontrol *kcontrol,
  1566. struct snd_ctl_elem_value *
  1567. ucontrol)
  1568. {
  1569. ucontrol->value.iec958.status[0] = kcontrol->private_value;
  1570. return 0;
  1571. }
  1572. static const struct snd_kcontrol_new snd_rme32_controls[] = {
  1573. {
  1574. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  1575. .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
  1576. .info = snd_rme32_control_spdif_info,
  1577. .get = snd_rme32_control_spdif_get,
  1578. .put = snd_rme32_control_spdif_put
  1579. },
  1580. {
  1581. .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
  1582. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  1583. .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PCM_STREAM),
  1584. .info = snd_rme32_control_spdif_stream_info,
  1585. .get = snd_rme32_control_spdif_stream_get,
  1586. .put = snd_rme32_control_spdif_stream_put
  1587. },
  1588. {
  1589. .access = SNDRV_CTL_ELEM_ACCESS_READ,
  1590. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  1591. .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
  1592. .info = snd_rme32_control_spdif_mask_info,
  1593. .get = snd_rme32_control_spdif_mask_get,
  1594. .private_value = IEC958_AES0_PROFESSIONAL | IEC958_AES0_CON_EMPHASIS
  1595. },
  1596. {
  1597. .access = SNDRV_CTL_ELEM_ACCESS_READ,
  1598. .iface = SNDRV_CTL_ELEM_IFACE_PCM,
  1599. .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
  1600. .info = snd_rme32_control_spdif_mask_info,
  1601. .get = snd_rme32_control_spdif_mask_get,
  1602. .private_value = IEC958_AES0_PROFESSIONAL | IEC958_AES0_PRO_EMPHASIS
  1603. },
  1604. {
  1605. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  1606. .name = "Input Connector",
  1607. .info = snd_rme32_info_inputtype_control,
  1608. .get = snd_rme32_get_inputtype_control,
  1609. .put = snd_rme32_put_inputtype_control
  1610. },
  1611. {
  1612. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  1613. .name = "Loopback Input",
  1614. .info = snd_rme32_info_loopback_control,
  1615. .get = snd_rme32_get_loopback_control,
  1616. .put = snd_rme32_put_loopback_control
  1617. },
  1618. {
  1619. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  1620. .name = "Sample Clock Source",
  1621. .info = snd_rme32_info_clockmode_control,
  1622. .get = snd_rme32_get_clockmode_control,
  1623. .put = snd_rme32_put_clockmode_control
  1624. }
  1625. };
  1626. static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32)
  1627. {
  1628. int idx, err;
  1629. struct snd_kcontrol *kctl;
  1630. for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
  1631. kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32);
  1632. err = snd_ctl_add(card, kctl);
  1633. if (err < 0)
  1634. return err;
  1635. if (idx == 1) /* IEC958 (S/PDIF) Stream */
  1636. rme32->spdif_ctl = kctl;
  1637. }
  1638. return 0;
  1639. }
  1640. /*
  1641. * Card initialisation
  1642. */
  1643. static void snd_rme32_card_free(struct snd_card *card)
  1644. {
  1645. snd_rme32_free(card->private_data);
  1646. }
  1647. static int
  1648. __snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
  1649. {
  1650. static int dev;
  1651. struct rme32 *rme32;
  1652. struct snd_card *card;
  1653. int err;
  1654. if (dev >= SNDRV_CARDS) {
  1655. return -ENODEV;
  1656. }
  1657. if (!enable[dev]) {
  1658. dev++;
  1659. return -ENOENT;
  1660. }
  1661. err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
  1662. sizeof(*rme32), &card);
  1663. if (err < 0)
  1664. return err;
  1665. card->private_free = snd_rme32_card_free;
  1666. rme32 = (struct rme32 *) card->private_data;
  1667. rme32->card = card;
  1668. rme32->pci = pci;
  1669. if (fullduplex[dev])
  1670. rme32->fullduplex_mode = 1;
  1671. err = snd_rme32_create(rme32);
  1672. if (err < 0)
  1673. return err;
  1674. strcpy(card->driver, "Digi32");
  1675. switch (rme32->pci->device) {
  1676. case PCI_DEVICE_ID_RME_DIGI32:
  1677. strcpy(card->shortname, "RME Digi32");
  1678. break;
  1679. case PCI_DEVICE_ID_RME_DIGI32_8:
  1680. strcpy(card->shortname, "RME Digi32/8");
  1681. break;
  1682. case PCI_DEVICE_ID_RME_DIGI32_PRO:
  1683. strcpy(card->shortname, "RME Digi32 PRO");
  1684. break;
  1685. }
  1686. sprintf(card->longname, "%s (Rev. %d) at 0x%lx, irq %d",
  1687. card->shortname, rme32->rev, rme32->port, rme32->irq);
  1688. err = snd_card_register(card);
  1689. if (err < 0)
  1690. return err;
  1691. pci_set_drvdata(pci, card);
  1692. dev++;
  1693. return 0;
  1694. }
  1695. static int
  1696. snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
  1697. {
  1698. return snd_card_free_on_error(&pci->dev, __snd_rme32_probe(pci, pci_id));
  1699. }
  1700. static struct pci_driver rme32_driver = {
  1701. .name = KBUILD_MODNAME,
  1702. .id_table = snd_rme32_ids,
  1703. .probe = snd_rme32_probe,
  1704. };
  1705. module_pci_driver(rme32_driver);