162306a36Sopenharmony_ci======================================= 262306a36Sopenharmony_ciSoftware Interface ALSA-DSP MADI Driver 362306a36Sopenharmony_ci======================================= 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci(translated from German, so no good English ;-), 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci2004 - winfried ritsch 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciFull functionality has been added to the driver. Since some of 1162306a36Sopenharmony_cithe Controls and startup-options are ALSA-Standard and only the 1262306a36Sopenharmony_cispecial Controls are described and discussed below. 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciHardware functionality 1662306a36Sopenharmony_ci====================== 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciAudio transmission 1962306a36Sopenharmony_ci------------------ 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci* number of channels -- depends on transmission mode 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci The number of channels chosen is from 1..Nmax. The reason to 2462306a36Sopenharmony_ci use for a lower number of channels is only resource allocation, 2562306a36Sopenharmony_ci since unused DMA channels are disabled and less memory is 2662306a36Sopenharmony_ci allocated. So also the throughput of the PCI system can be 2762306a36Sopenharmony_ci scaled. (Only important for low performance boards). 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci* Single Speed -- 1..64 channels 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci.. note:: 3262306a36Sopenharmony_ci (Note: Choosing the 56channel mode for transmission or as 3362306a36Sopenharmony_ci receiver, only 56 are transmitted/received over the MADI, but 3462306a36Sopenharmony_ci all 64 channels are available for the mixer, so channel count 3562306a36Sopenharmony_ci for the driver) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci* Double Speed -- 1..32 channels 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci.. note:: 4062306a36Sopenharmony_ci Note: Choosing the 56-channel mode for 4162306a36Sopenharmony_ci transmission/receive-mode , only 28 are transmitted/received 4262306a36Sopenharmony_ci over the MADI, but all 32 channels are available for the mixer, 4362306a36Sopenharmony_ci so channel count for the driver 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci* Quad Speed -- 1..16 channels 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci.. note:: 4962306a36Sopenharmony_ci Choosing the 56-channel mode for 5062306a36Sopenharmony_ci transmission/receive-mode , only 14 are transmitted/received 5162306a36Sopenharmony_ci over the MADI, but all 16 channels are available for the mixer, 5262306a36Sopenharmony_ci so channel count for the driver 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci* Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci* Sample Rates -- 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci Single Speed -- 32000, 44100, 48000 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci Double Speed -- 64000, 88200, 96000 (untested) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci Quad Speed -- 128000, 176400, 192000 (untested) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci* access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED) 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci* buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci* fragments -- 2 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci* Hardware-pointer -- 2 Modi 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci The Card supports the readout of the actual Buffer-pointer, 7462306a36Sopenharmony_ci where DMA reads/writes. Since of the bulk mode of PCI it is only 7562306a36Sopenharmony_ci 64 Byte accurate. SO it is not really usable for the 7662306a36Sopenharmony_ci ALSA-mid-level functions (here the buffer-ID gives a better 7762306a36Sopenharmony_ci result), but if MMAP is used by the application. Therefore it 7862306a36Sopenharmony_ci can be configured at load-time with the parameter 7962306a36Sopenharmony_ci precise-pointer. 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci.. hint:: 8362306a36Sopenharmony_ci (Hint: Experimenting I found that the pointer is maximum 64 to 8462306a36Sopenharmony_ci large never to small. So if you subtract 64 you always have a 8562306a36Sopenharmony_ci safe pointer for writing, which is used on this mode inside 8662306a36Sopenharmony_ci ALSA. In theory now you can get now a latency as low as 16 8762306a36Sopenharmony_ci Samples, which is a quarter of the interrupt possibilities.) 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci * Precise Pointer -- off 9062306a36Sopenharmony_ci interrupt used for pointer-calculation 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci * Precise Pointer -- on 9362306a36Sopenharmony_ci hardware pointer used. 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ciController 9662306a36Sopenharmony_ci---------- 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciSince DSP-MADI-Mixer has 8152 Fader, it does not make sense to 9962306a36Sopenharmony_ciuse the standard mixer-controls, since this would break most of 10062306a36Sopenharmony_ci(especially graphic) ALSA-Mixer GUIs. So Mixer control has be 10162306a36Sopenharmony_ciprovided by a 2-dimensional controller using the 10262306a36Sopenharmony_cihwdep-interface. 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ciAlso all 128+256 Peak and RMS-Meter can be accessed via the 10562306a36Sopenharmony_cihwdep-interface. Since it could be a performance problem always 10662306a36Sopenharmony_cicopying and converting Peak and RMS-Levels even if you just need 10762306a36Sopenharmony_cione, I decided to export the hardware structure, so that of 10862306a36Sopenharmony_cineeded some driver-guru can implement a memory-mapping of mixer 10962306a36Sopenharmony_cior peak-meters over ioctl, or also to do only copying and no 11062306a36Sopenharmony_ciconversion. A test-application shows the usage of the controller. 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci* Latency Controls --- not implemented !!! 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci.. note:: 11562306a36Sopenharmony_ci Note: Within the windows-driver the latency is accessible of a 11662306a36Sopenharmony_ci control-panel, but buffer-sizes are controlled with ALSA from 11762306a36Sopenharmony_ci hwparams-calls and should not be changed in run-state, I did not 11862306a36Sopenharmony_ci implement it here. 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci* System Clock -- suspended !!!! 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci * Name -- "System Clock Mode" 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci * Access -- Read Write 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci * Values -- "Master" "Slave" 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci.. note:: 13062306a36Sopenharmony_ci !!!! This is a hardware-function but is in conflict with the 13162306a36Sopenharmony_ci Clock-source controller, which is a kind of ALSA-standard. I 13262306a36Sopenharmony_ci makes sense to set the card to a special mode (master at some 13362306a36Sopenharmony_ci frequency or slave), since even not using an Audio-application 13462306a36Sopenharmony_ci a studio should have working synchronisations setup. So use 13562306a36Sopenharmony_ci Clock-source-controller instead !!!! 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci* Clock Source 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci * Name -- "Sample Clock Source" 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci * Access -- Read Write 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci * Values -- "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", 14462306a36Sopenharmony_ci "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", 14562306a36Sopenharmony_ci "Internal 96.0 kHz" 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci Choose between Master at a specific Frequency and so also the 14862306a36Sopenharmony_ci Speed-mode or Slave (Autosync). Also see "Preferred Sync Ref" 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci.. warning:: 15162306a36Sopenharmony_ci !!!! This is no pure hardware function but was implemented by 15262306a36Sopenharmony_ci ALSA by some ALSA-drivers before, so I use it also. !!! 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci* Preferred Sync Ref 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci * Name -- "Preferred Sync Reference" 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci * Access -- Read Write 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci * Values -- "Word" "MADI" 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci Within the Auto-sync-Mode the preferred Sync Source can be 16562306a36Sopenharmony_ci chosen. If it is not available another is used if possible. 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci.. note:: 16862306a36Sopenharmony_ci Note: Since MADI has a much higher bit-rate than word-clock, the 16962306a36Sopenharmony_ci card should synchronise better in MADI Mode. But since the 17062306a36Sopenharmony_ci RME-PLL is very good, there are almost no problems with 17162306a36Sopenharmony_ci word-clock too. I never found a difference. 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci* TX 64 channel 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci * Name -- "TX 64 channels mode" 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci * Access -- Read Write 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci * Values -- 0 1 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci Using 64-channel-modus (1) or 56-channel-modus for 18362306a36Sopenharmony_ci MADI-transmission (0). 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci.. note:: 18762306a36Sopenharmony_ci Note: This control is for output only. Input-mode is detected 18862306a36Sopenharmony_ci automatically from hardware sending MADI. 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci* Clear TMS 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci * Name -- "Clear Track Marker" 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci * Access -- Read Write 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci * Values -- 0 1 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci Don't use to lower 5 Audio-bits on AES as additional Bits. 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci* Safe Mode oder Auto Input 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci * Name -- "Safe Mode" 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci * Access -- Read Write 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci * Values -- 0 1 (default on) 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci If on (1), then if either the optical or coaxial connection 21262306a36Sopenharmony_ci has a failure, there is a takeover to the working one, with no 21362306a36Sopenharmony_ci sample failure. Its only useful if you use the second as a 21462306a36Sopenharmony_ci backup connection. 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci* Input 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci * Name -- "Input Select" 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci * Access -- Read Write 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci * Values -- optical coaxial 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci Choosing the Input, optical or coaxial. If Safe-mode is active, 22662306a36Sopenharmony_ci this is the preferred Input. 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ciMixer 22962306a36Sopenharmony_ci----- 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci* Mixer 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci * Name -- "Mixer" 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_ci * Access -- Read Write 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci * Values - <channel-number 0-127> <Value 0-65535> 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci Here as a first value the channel-index is taken to get/set the 24162306a36Sopenharmony_ci corresponding mixer channel, where 0-63 are the input to output 24262306a36Sopenharmony_ci fader and 64-127 the playback to outputs fader. Value 0 24362306a36Sopenharmony_ci is channel muted 0 and 32768 an amplification of 1. 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci* Chn 1-64 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_ci fast mixer for the ALSA-mixer utils. The diagonal of the 24862306a36Sopenharmony_ci mixer-matrix is implemented from playback to output. 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci* Line Out 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ci * Name -- "Line Out" 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci * Access -- Read Write 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci * Values -- 0 1 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci Switching on and off the analog out, which has nothing to do 26062306a36Sopenharmony_ci with mixing or routing. the analog outs reflects channel 63,64. 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ciInformation (only read access) 26462306a36Sopenharmony_ci------------------------------ 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci* Sample Rate 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci * Name -- "System Sample Rate" 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci * Access -- Read-only 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci getting the sample rate. 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci* External Rate measured 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci * Name -- "External Rate" 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci * Access -- Read only 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci Should be "Autosync Rate", but Name used is 28362306a36Sopenharmony_ci ALSA-Scheme. External Sample frequency liked used on Autosync is 28462306a36Sopenharmony_ci reported. 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci* MADI Sync Status 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci * Name -- "MADI Sync Lock Status" 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci * Access -- Read 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci * Values -- 0,1,2 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced. 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci 29862306a36Sopenharmony_ci* Word Clock Sync Status 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci * Name -- "Word Clock Lock Status" 30162306a36Sopenharmony_ci 30262306a36Sopenharmony_ci * Access -- Read 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci * Values -- 0,1,2 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced. 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci* AutoSync 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci * Name -- "AutoSync Reference" 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci * Access -- Read 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci * Values -- "WordClock", "MADI", "None" 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci Sync-Reference is either "WordClock", "MADI" or none. 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci* RX 64ch --- noch nicht implementiert 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci MADI-Receiver is in 64 channel mode oder 56 channel mode. 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci* AB_inp --- not tested 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci Used input for Auto-Input. 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci* actual Buffer Position --- not implemented 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci !!! this is a ALSA internal function, so no control is used !!! 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ciCalling Parameter 33562306a36Sopenharmony_ci================= 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ci* index int array (min = 1, max = 8) 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci Index value for RME HDSPM interface. card-index within ALSA 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci note: ALSA-standard 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci* id string array (min = 1, max = 8) 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci ID string for RME HDSPM interface. 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci note: ALSA-standard 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci* enable int array (min = 1, max = 8) 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci Enable/disable specific HDSPM sound-cards. 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci note: ALSA-standard 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ci* precise_ptr int array (min = 1, max = 8) 35662306a36Sopenharmony_ci 35762306a36Sopenharmony_ci Enable precise pointer, or disable. 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci.. note:: 36062306a36Sopenharmony_ci note: Use only when the application supports this (which is a special case). 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci* line_outs_monitor int array (min = 1, max = 8) 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci Send playback streams to analog outs by default. 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_ci.. note:: 36762306a36Sopenharmony_ci note: each playback channel is mixed to the same numbered output 36862306a36Sopenharmony_ci channel (routed). This is against the ALSA-convention, where all 36962306a36Sopenharmony_ci channels have to be muted on after loading the driver, but was 37062306a36Sopenharmony_ci used before on other cards, so i historically use it again) 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci* enable_monitor int array (min = 1, max = 8) 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci Enable Analog Out on Channel 63/64 by default. 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci.. note :: 37962306a36Sopenharmony_ci note: here the analog output is enabled (but not routed). 380