1 =======================================
2 Software Interface ALSA-DSP MADI Driver
3 =======================================
5 (translated from German, so no good English ;-),
10 Full functionality has been added to the driver. Since some of
11 the Controls and startup-options are ALSA-Standard and only the
12 special Controls are described and discussed below.
15 Hardware functionality
16 ======================
21 * number of channels -- depends on transmission mode
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).
29 * Single Speed -- 1..64 channels
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
37 * Double Speed -- 1..32 channels
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
46 * Quad Speed -- 1..16 channels
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
54 * Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE)
58 Single Speed -- 32000, 44100, 48000
60 Double Speed -- 64000, 88200, 96000 (untested)
62 Quad Speed -- 128000, 176400, 192000 (untested)
64 * access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED)
66 * buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples
70 * Hardware-pointer -- 2 Modi
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
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.)
89 * Precise Pointer -- off
90 interrupt used for pointer-calculation
92 * Precise Pointer -- on
93 hardware pointer used.
98 Since DSP-MADI-Mixer has 8152 Fader, it does not make sense to
99 use the standard mixer-controls, since this would break most of
100 (especially graphic) ALSA-Mixer GUIs. So Mixer control has be
101 provided by a 2-dimensional controller using the
104 Also all 128+256 Peak and RMS-Meter can be accessed via the
105 hwdep-interface. Since it could be a performance problem always
106 copying and converting Peak and RMS-Levels even if you just need
107 one, I decided to export the hardware structure, so that of
108 needed some driver-guru can implement a memory-mapping of mixer
109 or peak-meters over ioctl, or also to do only copying and no
110 conversion. A test-application shows the usage of the controller.
112 * Latency Controls --- not implemented !!!
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
121 * System Clock -- suspended !!!!
123 * Name -- "System Clock Mode"
125 * Access -- Read Write
127 * Values -- "Master" "Slave"
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 !!!!
139 * Name -- "Sample Clock Source"
141 * Access -- Read Write
143 * Values -- "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz",
144 "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz",
147 Choose between Master at a specific Frequency and so also the
148 Speed-mode or Slave (Autosync). Also see "Preferred Sync Ref"
151 !!!! This is no pure hardware function but was implemented by
152 ALSA by some ALSA-drivers before, so I use it also. !!!
157 * Name -- "Preferred Sync Reference"
159 * Access -- Read Write
161 * Values -- "Word" "MADI"
164 Within the Auto-sync-Mode the preferred Sync Source can be
165 chosen. If it is not available another is used if possible.
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.
176 * Name -- "TX 64 channels mode"
178 * Access -- Read Write
182 Using 64-channel-modus (1) or 56-channel-modus for
183 MADI-transmission (0).
187 Note: This control is for output only. Input-mode is detected
188 automatically from hardware sending MADI.
193 * Name -- "Clear Track Marker"
195 * Access -- Read Write
200 Don't use to lower 5 Audio-bits on AES as additional Bits.
203 * Safe Mode oder Auto Input
205 * Name -- "Safe Mode"
207 * Access -- Read Write
209 * Values -- 0 1 (default on)
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
218 * Name -- "Input Select"
220 * Access -- Read Write
222 * Values -- optical coaxial
225 Choosing the Input, optical or coaxial. If Safe-mode is active,
226 this is the preferred Input.
235 * Access -- Read Write
237 * Values - <channel-number 0-127> <Value 0-65535>
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.
247 fast mixer for the ALSA-mixer utils. The diagonal of the
248 mixer-matrix is implemented from playback to output.
255 * Access -- Read Write
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.
263 Information (only read access)
264 ------------------------------
268 * Name -- "System Sample Rate"
270 * Access -- Read-only
272 getting the sample rate.
275 * External Rate measured
277 * Name -- "External Rate"
279 * Access -- Read only
282 Should be "Autosync Rate", but Name used is
283 ALSA-Scheme. External Sample frequency liked used on Autosync is
289 * Name -- "MADI Sync Lock Status"
295 MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced.
298 * Word Clock Sync Status
300 * Name -- "Word Clock Lock Status"
306 Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced.
310 * Name -- "AutoSync Reference"
314 * Values -- "WordClock", "MADI", "None"
316 Sync-Reference is either "WordClock", "MADI" or none.
318 * RX 64ch --- noch nicht implementiert
320 MADI-Receiver is in 64 channel mode oder 56 channel mode.
323 * AB_inp --- not tested
325 Used input for Auto-Input.
328 * actual Buffer Position --- not implemented
330 !!! this is a ALSA internal function, so no control is used !!!
337 * index int array (min = 1, max = 8)
339 Index value for RME HDSPM interface. card-index within ALSA
343 * id string array (min = 1, max = 8)
345 ID string for RME HDSPM interface.
349 * enable int array (min = 1, max = 8)
351 Enable/disable specific HDSPM sound-cards.
355 * precise_ptr int array (min = 1, max = 8)
357 Enable precise pointer, or disable.
360 note: Use only when the application supports this (which is a special case).
362 * line_outs_monitor int array (min = 1, max = 8)
364 Send playback streams to analog outs by default.
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)
374 * enable_monitor int array (min = 1, max = 8)
376 Enable Analog Out on Channel 63/64 by default.
379 note: here the analog output is enabled (but not routed).