Takashi Iwai | 5470440 | 2005-06-03 11:27:00 +0200 | [diff] [blame] | 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 | |
| 362 | note: here the analog output is enabled (but not routed). |