Takashi Iwai | c79b5bb | 2016-11-10 17:20:32 +0100 | [diff] [blame] | 1 | ======================================= |
| 2 | Software Interface ALSA-DSP MADI Driver |
| 3 | ======================================= |
| 4 | |
| 5 | (translated from German, so no good English ;-), |
| 6 | |
| 7 | 2004 - winfried ritsch |
| 8 | |
| 9 | |
| 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. |
| 13 | |
| 14 | |
| 15 | Hardware functionality |
| 16 | ====================== |
| 17 | |
| 18 | Audio 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 | |
| 95 | Controller |
| 96 | ---------- |
| 97 | |
| 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 |
| 102 | hwdep-interface. |
| 103 | |
| 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. |
| 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 | |
| 228 | Mixer |
| 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 | |
| 263 | Information (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 | |
| 334 | Calling 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). |