1Software Interface ALSA-DSP MADI Driver 2 3(translated from German, so no good English ;-), 42004 - 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 326Calling 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 362 note: here the analog output is enabled (but not routed). 363