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