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