treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / Documentation / sound / cards / hdspm.rst
blob5373e51ed076f7b76c5cba4d777c9fdde0be1e27
1 =======================================
2 Software Interface ALSA-DSP MADI Driver 
3 =======================================
5 (translated from German, so no good English ;-), 
7 2004 - winfried ritsch
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.
15 Hardware functionality
16 ======================
17    
18 Audio transmission
19 ------------------
21 * number of channels --  depends on transmission mode
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).
29 * Single Speed -- 1..64 channels 
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)
37 * Double Speed -- 1..32 channels
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
46 * Quad Speed -- 1..16 channels 
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
54 * Format -- signed 32 Bit Little Endian (SNDRV_PCM_FMTBIT_S32_LE)
56 * Sample Rates --
58        Single Speed -- 32000, 44100, 48000
60        Double Speed -- 64000, 88200, 96000 (untested)
62        Quad Speed -- 128000, 176400, 192000 (untested)
64 * access-mode -- MMAP (memory mapped), Not interleaved (PCM_NON-INTERLEAVED)
66 * buffer-sizes -- 64,128,256,512,1024,2048,8192 Samples
68 * fragments -- 2
70 * Hardware-pointer -- 2 Modi
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.
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.)
89    * Precise Pointer -- off
90                                         interrupt used for pointer-calculation
91                                 
92    * Precise Pointer -- on
93                                         hardware pointer used.
95 Controller
96 ----------
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. 
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.
112 * Latency Controls --- not implemented !!!
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.
121 * System Clock -- suspended !!!!
123   * Name -- "System Clock Mode"
125   * Access -- Read Write
126     
127   * Values -- "Master" "Slave"
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 !!!!
137 * Clock Source  
139   * Name -- "Sample Clock Source"
141   * Access -- Read Write
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"
147                  Choose between Master at a specific Frequency and so also the
148                  Speed-mode or Slave (Autosync). Also see  "Preferred Sync Ref"
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. !!!
155 * Preferred Sync Ref
157   * Name -- "Preferred Sync Reference"
159   * Access -- Read Write
161   * Values -- "Word" "MADI"
164                  Within the Auto-sync-Mode the preferred Sync Source can be
165                  chosen. If it is not available another is used if possible.
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.
174 * TX 64 channel
176   * Name -- "TX 64 channels mode"
178   * Access -- Read Write
180   * Values -- 0 1
182                  Using 64-channel-modus (1) or 56-channel-modus for
183                  MADI-transmission (0).
186 .. note::
187                  Note: This control is for output only. Input-mode is detected
188                  automatically from hardware sending MADI.
191 * Clear TMS
193   * Name -- "Clear Track Marker"
195   * Access -- Read Write
197   * Values -- 0 1
200                  Don't use to lower 5 Audio-bits on AES as additional Bits.
201         
203 * Safe Mode oder Auto Input
205   * Name -- "Safe Mode"
207   * Access -- Read Write
209   * Values -- 0 1 (default on)
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.
216 * Input
218   * Name -- "Input Select"
220   * Access -- Read Write
222   * Values -- optical coaxial
225                  Choosing the Input, optical or coaxial. If Safe-mode is active,
226                  this is the preferred Input.
228 Mixer
229 -----
231 * Mixer
233   * Name -- "Mixer"
235   * Access -- Read Write
237   * Values - <channel-number 0-127> <Value 0-65535>
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.
245 * Chn 1-64
247        fast mixer for the ALSA-mixer utils. The diagonal of the
248        mixer-matrix is implemented from playback to output.
249        
251 * Line Out
253   * Name  -- "Line Out"
255   * Access -- Read Write
257   * Values -- 0 1
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.
263 Information (only read access)
264 ------------------------------
266 * Sample Rate
268   * Name -- "System Sample Rate"
270   * Access -- Read-only
272                  getting the sample rate.
275 * External Rate measured
277   * Name -- "External Rate"
279   * Access -- Read only
282                  Should be "Autosync Rate", but Name used is
283                  ALSA-Scheme. External Sample frequency liked used on Autosync is
284                  reported.
287 * MADI Sync Status
289   * Name -- "MADI Sync Lock Status"
291   * Access -- Read
293   * Values -- 0,1,2
295        MADI-Input is 0=Unlocked, 1=Locked, or 2=Synced.
298 * Word Clock Sync Status
300   * Name -- "Word Clock Lock Status"
302   * Access -- Read
304   * Values -- 0,1,2
306        Word Clock Input is 0=Unlocked, 1=Locked, or 2=Synced.
308 * AutoSync
310   * Name -- "AutoSync Reference"
312   * Access -- Read
314   * Values -- "WordClock", "MADI", "None"
316                  Sync-Reference is either "WordClock", "MADI" or none.
318 * RX 64ch --- noch nicht implementiert
320        MADI-Receiver is in 64 channel mode oder 56 channel mode.
323 * AB_inp   --- not tested 
325                  Used input for Auto-Input.
328 * actual Buffer Position --- not implemented
330            !!! this is a ALSA internal function, so no control is used !!!
334 Calling Parameter
335 =================
337 * index int array (min = 1, max = 8) 
339      Index value for RME HDSPM interface. card-index within ALSA
341      note: ALSA-standard
343 * id string array (min = 1, max = 8) 
345      ID string for RME HDSPM interface.
347      note: ALSA-standard
349 * enable int array (min = 1, max = 8)
351      Enable/disable specific HDSPM sound-cards.
353      note: ALSA-standard
355 * precise_ptr int array (min = 1, max = 8)
357      Enable precise pointer, or disable.
359 .. note::
360      note: Use only when the application supports this (which is a special case).
362 * line_outs_monitor int array (min = 1, max = 8)
364      Send playback streams to analog outs by default.
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)
374 * enable_monitor int array (min = 1, max = 8)
376      Enable Analog Out on Channel 63/64 by default.
378 .. note ::
379       note: here the analog output is enabled (but not routed).