1=======================================
2Software Interface ALSA-DSP MADI Driver 
3=======================================
4
5(translated from German, so no good English ;-), 
6
72004 - winfried ritsch
8
9
10Full functionality has been added to the driver. Since some of
11the Controls and startup-options  are ALSA-Standard and only the
12special Controls are described and discussed below.
13
14
15Hardware functionality
16======================
17   
18Audio transmission
19------------------
20
21* number of channels --  depends on transmission mode
22
23		The number of channels chosen is from 1..Nmax. The reason to
24		use for a lower number of channels is only resource allocation,
25		since unused DMA channels are disabled and less memory is
26		allocated. So also the throughput of the PCI system can be
27		scaled. (Only important for low performance boards).
28
29* Single Speed -- 1..64 channels 
30
31.. note::
32		 (Note: Choosing the 56channel mode for transmission or as
33		 receiver, only 56 are transmitted/received over the MADI, but
34		 all 64 channels are available for the mixer, so channel count
35		 for the driver)
36
37* Double Speed -- 1..32 channels
38
39.. note::
40		 Note: Choosing the 56-channel mode for
41		 transmission/receive-mode , only 28 are transmitted/received
42		 over the MADI, but all 32 channels are available for the mixer,
43		 so channel count for the driver
44
45
46* Quad Speed -- 1..16 channels 
47
48.. note::
49		 Choosing the 56-channel mode for
50		 transmission/receive-mode , only 14 are transmitted/received
51		 over the MADI, but all 16 channels are available for the mixer,
52		 so channel count for the driver
53
54* Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE)
55
56* Sample Rates --
57
58       Single Speed -- 32000, 44100, 48000
59
60       Double Speed -- 64000, 88200, 96000 (untested)
61
62       Quad Speed -- 128000, 176400, 192000 (untested)
63
64* access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED)
65
66* buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples
67
68* fragments -- 2
69
70* Hardware-pointer -- 2 Modi
71
72
73		 The Card supports the readout of the actual Buffer-pointer,
74		 where DMA reads/writes. Since of the bulk mode of PCI it is only
75		 64 Byte accurate. SO it is not really usable for the
76		 ALSA-mid-level functions (here the buffer-ID gives a better
77		 result), but if MMAP is used by the application. Therefore it
78		 can be configured at load-time with the parameter
79		 precise-pointer.
80
81
82.. hint::
83		 (Hint: Experimenting I found that the pointer is maximum 64 to
84		 large never to small. So if you subtract 64 you always have a
85		 safe pointer for writing, which is used on this mode inside
86		 ALSA. In theory now you can get now a latency as low as 16
87		 Samples, which is a quarter of the interrupt possibilities.)
88
89   * Precise Pointer -- off
90					interrupt used for pointer-calculation
91				
92   * Precise Pointer -- on
93					hardware pointer used.
94
95Controller
96----------
97
98Since DSP-MADI-Mixer has 8152 Fader, it does not make sense to
99use the standard mixer-controls, since this would break most of
100(especially graphic) ALSA-Mixer GUIs. So Mixer control has be
101provided by a 2-dimensional controller using the
102hwdep-interface. 
103
104Also all 128+256 Peak and RMS-Meter can be accessed via the
105hwdep-interface. Since it could be a performance problem always
106copying and converting Peak and RMS-Levels even if you just need
107one, I decided to export the hardware structure, so that of
108needed some driver-guru can implement a memory-mapping of mixer
109or peak-meters over ioctl, or also to do only copying and no
110conversion. A test-application shows the usage of the controller.
111
112* Latency Controls --- not implemented !!!
113
114.. note::
115	   Note: Within the windows-driver the latency is accessible of a
116	   control-panel, but buffer-sizes are controlled with ALSA from
117	   hwparams-calls and should not be changed in run-state, I did not
118	   implement it here.
119
120
121* System Clock -- suspended !!!!
122
123  * Name -- "System Clock Mode"
124
125  * Access -- Read Write
126    
127  * Values -- "Master" "Slave"
128
129.. note::
130		  !!!! This is a hardware-function but is in conflict with the
131		  Clock-source controller, which is a kind of ALSA-standard. I
132		  makes sense to set the card to a special mode (master at some
133		  frequency or slave), since even not using an Audio-application
134		  a studio should have working synchronisations setup. So use
135		  Clock-source-controller instead !!!!
136
137* Clock Source  
138
139  * Name -- "Sample Clock Source"
140
141  * Access -- Read Write
142
143  * Values -- "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz",
144    "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz",
145    "Internal 96.0 kHz"
146
147		 Choose between Master at a specific Frequency and so also the
148		 Speed-mode or Slave (Autosync). Also see  "Preferred Sync Ref"
149
150.. warning::
151       !!!! This is no pure hardware function but was implemented by
152       ALSA by some ALSA-drivers before, so I use it also. !!!
153
154
155* Preferred Sync Ref
156
157  * Name -- "Preferred Sync Reference"
158
159  * Access -- Read Write
160
161  * Values -- "Word" "MADI"
162
163
164		 Within the Auto-sync-Mode the preferred Sync Source can be
165		 chosen. If it is not available another is used if possible.
166
167.. note::
168		 Note: Since MADI has a much higher bit-rate than word-clock, the
169		 card should synchronise better in MADI Mode. But since the
170		 RME-PLL is very good, there are almost no problems with
171		 word-clock too. I never found a difference.
172
173
174* TX 64 channel
175
176  * Name -- "TX 64 channels mode"
177
178  * Access -- Read Write
179
180  * Values -- 0 1
181
182		 Using 64-channel-modus (1) or 56-channel-modus for
183		 MADI-transmission (0).
184
185
186.. note::
187		 Note: This control is for output only. Input-mode is detected
188		 automatically from hardware sending MADI.
189
190
191* Clear TMS
192
193  * Name -- "Clear Track Marker"
194
195  * Access -- Read Write
196
197  * Values -- 0 1
198
199
200		 Don't use to lower 5 Audio-bits on AES as additional Bits.
201        
202
203* Safe Mode oder Auto Input
204
205  * Name -- "Safe Mode"
206
207  * Access -- Read Write
208
209  * Values -- 0 1 (default on)
210
211		 If on (1), then if either the optical or coaxial connection
212		 has a failure, there is a takeover to the working one, with no
213		 sample failure. Its only useful if you use the second as a
214		 backup connection.
215
216* Input
217
218  * Name -- "Input Select"
219
220  * Access -- Read Write
221
222  * Values -- optical coaxial
223
224
225		 Choosing the Input, optical or coaxial. If Safe-mode is active,
226		 this is the preferred Input.
227
228Mixer
229-----
230
231* Mixer
232
233  * Name -- "Mixer"
234
235  * Access -- Read Write
236
237  * Values - <channel-number 0-127> <Value 0-65535>
238
239
240		 Here as a first value the channel-index is taken to get/set the
241		 corresponding mixer channel, where 0-63 are the input to output
242		 fader and 64-127 the playback to outputs fader. Value 0
243		 is channel muted 0 and 32768 an amplification of  1.
244
245* Chn 1-64
246
247       fast mixer for the ALSA-mixer utils. The diagonal of the
248       mixer-matrix is implemented from playback to output.
249       
250
251* Line Out
252
253  * Name  -- "Line Out"
254
255  * Access -- Read Write
256
257  * Values -- 0 1
258
259		 Switching on and off the analog out, which has nothing to do
260		 with mixing or routing. the analog outs reflects channel 63,64.
261
262
263Information (only read access)
264------------------------------
265 
266* Sample Rate
267
268  * Name -- "System Sample Rate"
269
270  * Access -- Read-only
271
272		 getting the sample rate.
273
274
275* External Rate measured
276
277  * Name -- "External Rate"
278
279  * Access -- Read only
280
281
282		 Should be "Autosync Rate", but Name used is
283		 ALSA-Scheme. External Sample frequency liked used on Autosync is
284		 reported.
285
286
287* MADI Sync Status
288
289  * Name -- "MADI Sync Lock Status"
290
291  * Access -- Read
292
293  * Values -- 0,1,2
294
295       MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced.
296
297
298* Word Clock Sync Status
299
300  * Name -- "Word Clock Lock Status"
301
302  * Access -- Read
303
304  * Values -- 0,1,2
305
306       Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced.
307
308* AutoSync
309
310  * Name -- "AutoSync Reference"
311
312  * Access -- Read
313
314  * Values -- "WordClock", "MADI", "None"
315
316		 Sync-Reference is either "WordClock", "MADI" or none.
317
318* RX 64ch --- noch nicht implementiert
319
320       MADI-Receiver is in 64 channel mode oder 56 channel mode.
321
322
323* AB_inp   --- not tested 
324
325		 Used input for Auto-Input.
326
327
328* actual Buffer Position --- not implemented
329
330	   !!! this is a ALSA internal function, so no control is used !!!
331
332
333
334Calling Parameter
335=================
336
337* index int array (min = 1, max = 8) 
338
339     Index value for RME HDSPM interface. card-index within ALSA
340
341     note: ALSA-standard
342
343* id string array (min = 1, max = 8) 
344
345     ID string for RME HDSPM interface.
346
347     note: ALSA-standard
348
349* enable int array (min = 1, max = 8)
350
351     Enable/disable specific HDSPM sound-cards.
352
353     note: ALSA-standard
354
355* precise_ptr int array (min = 1, max = 8)
356
357     Enable precise pointer, or disable.
358
359.. note::
360     note: Use only when the application supports this (which is a special case).
361
362* line_outs_monitor int array (min = 1, max = 8)
363
364     Send playback streams to analog outs by default.
365
366.. note::
367	  note: each playback channel is mixed to the same numbered output
368	  channel (routed). This is against the ALSA-convention, where all
369	  channels have to be muted on after loading the driver, but was
370	  used before on other cards, so i historically use it again)
371
372
373
374* enable_monitor int array (min = 1, max = 8)
375
376     Enable Analog Out on Channel 63/64 by default.
377
378.. note ::
379      note: here the analog output is enabled (but not routed).
380