jffs2: Fix if/else empty body warnings
[platform/kernel/linux-rpi.git] / sound / pci / rme9652 / hdsp.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *   ALSA driver for RME Hammerfall DSP audio interface(s)
4  *
5  *      Copyright (c) 2002  Paul Davis
6  *                          Marcus Andersson
7  *                          Thomas Charbonnel
8  */
9
10 #include <linux/init.h>
11 #include <linux/delay.h>
12 #include <linux/interrupt.h>
13 #include <linux/pci.h>
14 #include <linux/firmware.h>
15 #include <linux/module.h>
16 #include <linux/math64.h>
17 #include <linux/vmalloc.h>
18 #include <linux/io.h>
19 #include <linux/nospec.h>
20
21 #include <sound/core.h>
22 #include <sound/control.h>
23 #include <sound/pcm.h>
24 #include <sound/info.h>
25 #include <sound/asoundef.h>
26 #include <sound/rawmidi.h>
27 #include <sound/hwdep.h>
28 #include <sound/initval.h>
29 #include <sound/hdsp.h>
30
31 #include <asm/byteorder.h>
32 #include <asm/current.h>
33
34 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 0-MAX */
35 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
36 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;     /* Enable this card */
37
38 module_param_array(index, int, NULL, 0444);
39 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface.");
40 module_param_array(id, charp, NULL, 0444);
41 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface.");
42 module_param_array(enable, bool, NULL, 0444);
43 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards.");
44 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>");
45 MODULE_DESCRIPTION("RME Hammerfall DSP");
46 MODULE_LICENSE("GPL");
47 MODULE_SUPPORTED_DEVICE("{{RME Hammerfall-DSP},"
48                 "{RME HDSP-9652},"
49                 "{RME HDSP-9632}}");
50 MODULE_FIRMWARE("rpm_firmware.bin");
51 MODULE_FIRMWARE("multiface_firmware.bin");
52 MODULE_FIRMWARE("multiface_firmware_rev11.bin");
53 MODULE_FIRMWARE("digiface_firmware.bin");
54 MODULE_FIRMWARE("digiface_firmware_rev11.bin");
55
56 #define HDSP_MAX_CHANNELS        26
57 #define HDSP_MAX_DS_CHANNELS     14
58 #define HDSP_MAX_QS_CHANNELS     8
59 #define DIGIFACE_SS_CHANNELS     26
60 #define DIGIFACE_DS_CHANNELS     14
61 #define MULTIFACE_SS_CHANNELS    18
62 #define MULTIFACE_DS_CHANNELS    14
63 #define H9652_SS_CHANNELS        26
64 #define H9652_DS_CHANNELS        14
65 /* This does not include possible Analog Extension Boards
66    AEBs are detected at card initialization
67 */
68 #define H9632_SS_CHANNELS        12
69 #define H9632_DS_CHANNELS        8
70 #define H9632_QS_CHANNELS        4
71 #define RPM_CHANNELS             6
72
73 /* Write registers. These are defined as byte-offsets from the iobase value.
74  */
75 #define HDSP_resetPointer               0
76 #define HDSP_freqReg                    0
77 #define HDSP_outputBufferAddress        32
78 #define HDSP_inputBufferAddress         36
79 #define HDSP_controlRegister            64
80 #define HDSP_interruptConfirmation      96
81 #define HDSP_outputEnable               128
82 #define HDSP_control2Reg                256
83 #define HDSP_midiDataOut0               352
84 #define HDSP_midiDataOut1               356
85 #define HDSP_fifoData                   368
86 #define HDSP_inputEnable                384
87
88 /* Read registers. These are defined as byte-offsets from the iobase value
89  */
90
91 #define HDSP_statusRegister    0
92 #define HDSP_timecode        128
93 #define HDSP_status2Register 192
94 #define HDSP_midiDataIn0     360
95 #define HDSP_midiDataIn1     364
96 #define HDSP_midiStatusOut0  384
97 #define HDSP_midiStatusOut1  388
98 #define HDSP_midiStatusIn0   392
99 #define HDSP_midiStatusIn1   396
100 #define HDSP_fifoStatus      400
101
102 /* the meters are regular i/o-mapped registers, but offset
103    considerably from the rest. the peak registers are reset
104    when read; the least-significant 4 bits are full-scale counters;
105    the actual peak value is in the most-significant 24 bits.
106 */
107
108 #define HDSP_playbackPeakLevel  4096  /* 26 * 32 bit values */
109 #define HDSP_inputPeakLevel     4224  /* 26 * 32 bit values */
110 #define HDSP_outputPeakLevel    4352  /* (26+2) * 32 bit values */
111 #define HDSP_playbackRmsLevel   4612  /* 26 * 64 bit values */
112 #define HDSP_inputRmsLevel      4868  /* 26 * 64 bit values */
113
114
115 /* This is for H9652 cards
116    Peak values are read downward from the base
117    Rms values are read upward
118    There are rms values for the outputs too
119    26*3 values are read in ss mode
120    14*3 in ds mode, with no gap between values
121 */
122 #define HDSP_9652_peakBase      7164
123 #define HDSP_9652_rmsBase       4096
124
125 /* c.f. the hdsp_9632_meters_t struct */
126 #define HDSP_9632_metersBase    4096
127
128 #define HDSP_IO_EXTENT     7168
129
130 /* control2 register bits */
131
132 #define HDSP_TMS                0x01
133 #define HDSP_TCK                0x02
134 #define HDSP_TDI                0x04
135 #define HDSP_JTAG               0x08
136 #define HDSP_PWDN               0x10
137 #define HDSP_PROGRAM            0x020
138 #define HDSP_CONFIG_MODE_0      0x040
139 #define HDSP_CONFIG_MODE_1      0x080
140 #define HDSP_VERSION_BIT        (0x100 | HDSP_S_LOAD)
141 #define HDSP_BIGENDIAN_MODE     0x200
142 #define HDSP_RD_MULTIPLE        0x400
143 #define HDSP_9652_ENABLE_MIXER  0x800
144 #define HDSP_S200               0x800
145 #define HDSP_S300               (0x100 | HDSP_S200) /* dummy, purpose of 0x100 unknown */
146 #define HDSP_CYCLIC_MODE        0x1000
147 #define HDSP_TDO                0x10000000
148
149 #define HDSP_S_PROGRAM      (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_0)
150 #define HDSP_S_LOAD         (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_1)
151
152 /* Control Register bits */
153
154 #define HDSP_Start                (1<<0)  /* start engine */
155 #define HDSP_Latency0             (1<<1)  /* buffer size = 2^n where n is defined by Latency{2,1,0} */
156 #define HDSP_Latency1             (1<<2)  /* [ see above ] */
157 #define HDSP_Latency2             (1<<3)  /* [ see above ] */
158 #define HDSP_ClockModeMaster      (1<<4)  /* 1=Master, 0=Slave/Autosync */
159 #define HDSP_AudioInterruptEnable (1<<5)  /* what do you think ? */
160 #define HDSP_Frequency0           (1<<6)  /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */
161 #define HDSP_Frequency1           (1<<7)  /* 0=32kHz/64kHz/128kHz */
162 #define HDSP_DoubleSpeed          (1<<8)  /* 0=normal speed, 1=double speed */
163 #define HDSP_SPDIFProfessional    (1<<9)  /* 0=consumer, 1=professional */
164 #define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
165 #define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
166 #define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
167 #define HDSP_SyncRef2             (1<<13)
168 #define HDSP_SPDIFInputSelect0    (1<<14)
169 #define HDSP_SPDIFInputSelect1    (1<<15)
170 #define HDSP_SyncRef0             (1<<16)
171 #define HDSP_SyncRef1             (1<<17)
172 #define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */
173 #define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
174 #define HDSP_Midi0InterruptEnable (1<<22)
175 #define HDSP_Midi1InterruptEnable (1<<23)
176 #define HDSP_LineOut              (1<<24)
177 #define HDSP_ADGain0              (1<<25) /* From here : H9632 specific */
178 #define HDSP_ADGain1              (1<<26)
179 #define HDSP_DAGain0              (1<<27)
180 #define HDSP_DAGain1              (1<<28)
181 #define HDSP_PhoneGain0           (1<<29)
182 #define HDSP_PhoneGain1           (1<<30)
183 #define HDSP_QuadSpeed            (1<<31)
184
185 /* RPM uses some of the registers for special purposes */
186 #define HDSP_RPM_Inp12            0x04A00
187 #define HDSP_RPM_Inp12_Phon_6dB   0x00800  /* Dolby */
188 #define HDSP_RPM_Inp12_Phon_0dB   0x00000  /* .. */
189 #define HDSP_RPM_Inp12_Phon_n6dB  0x04000  /* inp_0 */
190 #define HDSP_RPM_Inp12_Line_0dB   0x04200  /* Dolby+PRO */
191 #define HDSP_RPM_Inp12_Line_n6dB  0x00200  /* PRO */
192
193 #define HDSP_RPM_Inp34            0x32000
194 #define HDSP_RPM_Inp34_Phon_6dB   0x20000  /* SyncRef1 */
195 #define HDSP_RPM_Inp34_Phon_0dB   0x00000  /* .. */
196 #define HDSP_RPM_Inp34_Phon_n6dB  0x02000  /* SyncRef2 */
197 #define HDSP_RPM_Inp34_Line_0dB   0x30000  /* SyncRef1+SyncRef0 */
198 #define HDSP_RPM_Inp34_Line_n6dB  0x10000  /* SyncRef0 */
199
200 #define HDSP_RPM_Bypass           0x01000
201
202 #define HDSP_RPM_Disconnect       0x00001
203
204 #define HDSP_ADGainMask       (HDSP_ADGain0|HDSP_ADGain1)
205 #define HDSP_ADGainMinus10dBV  HDSP_ADGainMask
206 #define HDSP_ADGainPlus4dBu   (HDSP_ADGain0)
207 #define HDSP_ADGainLowGain     0
208
209 #define HDSP_DAGainMask         (HDSP_DAGain0|HDSP_DAGain1)
210 #define HDSP_DAGainHighGain      HDSP_DAGainMask
211 #define HDSP_DAGainPlus4dBu     (HDSP_DAGain0)
212 #define HDSP_DAGainMinus10dBV    0
213
214 #define HDSP_PhoneGainMask      (HDSP_PhoneGain0|HDSP_PhoneGain1)
215 #define HDSP_PhoneGain0dB        HDSP_PhoneGainMask
216 #define HDSP_PhoneGainMinus6dB  (HDSP_PhoneGain0)
217 #define HDSP_PhoneGainMinus12dB  0
218
219 #define HDSP_LatencyMask    (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2)
220 #define HDSP_FrequencyMask  (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed)
221
222 #define HDSP_SPDIFInputMask    (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
223 #define HDSP_SPDIFInputADAT1    0
224 #define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0)
225 #define HDSP_SPDIFInputCdrom   (HDSP_SPDIFInputSelect1)
226 #define HDSP_SPDIFInputAES     (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
227
228 #define HDSP_SyncRefMask        (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2)
229 #define HDSP_SyncRef_ADAT1       0
230 #define HDSP_SyncRef_ADAT2      (HDSP_SyncRef0)
231 #define HDSP_SyncRef_ADAT3      (HDSP_SyncRef1)
232 #define HDSP_SyncRef_SPDIF      (HDSP_SyncRef0|HDSP_SyncRef1)
233 #define HDSP_SyncRef_WORD       (HDSP_SyncRef2)
234 #define HDSP_SyncRef_ADAT_SYNC  (HDSP_SyncRef0|HDSP_SyncRef2)
235
236 /* Sample Clock Sources */
237
238 #define HDSP_CLOCK_SOURCE_AUTOSYNC           0
239 #define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ     1
240 #define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ   2
241 #define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ     3
242 #define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ     4
243 #define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ   5
244 #define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ     6
245 #define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ    7
246 #define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ  8
247 #define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ    9
248
249 /* Preferred sync reference choices - used by "pref_sync_ref" control switch */
250
251 #define HDSP_SYNC_FROM_WORD      0
252 #define HDSP_SYNC_FROM_SPDIF     1
253 #define HDSP_SYNC_FROM_ADAT1     2
254 #define HDSP_SYNC_FROM_ADAT_SYNC 3
255 #define HDSP_SYNC_FROM_ADAT2     4
256 #define HDSP_SYNC_FROM_ADAT3     5
257
258 /* SyncCheck status */
259
260 #define HDSP_SYNC_CHECK_NO_LOCK 0
261 #define HDSP_SYNC_CHECK_LOCK    1
262 #define HDSP_SYNC_CHECK_SYNC    2
263
264 /* AutoSync references - used by "autosync_ref" control switch */
265
266 #define HDSP_AUTOSYNC_FROM_WORD      0
267 #define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1
268 #define HDSP_AUTOSYNC_FROM_SPDIF     2
269 #define HDSP_AUTOSYNC_FROM_NONE      3
270 #define HDSP_AUTOSYNC_FROM_ADAT1     4
271 #define HDSP_AUTOSYNC_FROM_ADAT2     5
272 #define HDSP_AUTOSYNC_FROM_ADAT3     6
273
274 /* Possible sources of S/PDIF input */
275
276 #define HDSP_SPDIFIN_OPTICAL  0 /* optical  (ADAT1) */
277 #define HDSP_SPDIFIN_COAXIAL  1 /* coaxial (RCA) */
278 #define HDSP_SPDIFIN_INTERNAL 2 /* internal (CDROM) */
279 #define HDSP_SPDIFIN_AES      3 /* xlr for H9632 (AES)*/
280
281 #define HDSP_Frequency32KHz    HDSP_Frequency0
282 #define HDSP_Frequency44_1KHz  HDSP_Frequency1
283 #define HDSP_Frequency48KHz    (HDSP_Frequency1|HDSP_Frequency0)
284 #define HDSP_Frequency64KHz    (HDSP_DoubleSpeed|HDSP_Frequency0)
285 #define HDSP_Frequency88_2KHz  (HDSP_DoubleSpeed|HDSP_Frequency1)
286 #define HDSP_Frequency96KHz    (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
287 /* For H9632 cards */
288 #define HDSP_Frequency128KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0)
289 #define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1)
290 #define HDSP_Frequency192KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
291 /* RME says n = 104857600000000, but in the windows MADI driver, I see:
292         return 104857600000000 / rate; // 100 MHz
293         return 110100480000000 / rate; // 105 MHz
294 */
295 #define DDS_NUMERATOR 104857600000000ULL;  /*  =  2^20 * 10^8 */
296
297 #define hdsp_encode_latency(x)       (((x)<<1) & HDSP_LatencyMask)
298 #define hdsp_decode_latency(x)       (((x) & HDSP_LatencyMask)>>1)
299
300 #define hdsp_encode_spdif_in(x) (((x)&0x3)<<14)
301 #define hdsp_decode_spdif_in(x) (((x)>>14)&0x3)
302
303 /* Status Register bits */
304
305 #define HDSP_audioIRQPending    (1<<0)
306 #define HDSP_Lock2              (1<<1)     /* this is for Digiface and H9652 */
307 #define HDSP_spdifFrequency3    HDSP_Lock2 /* this is for H9632 only */
308 #define HDSP_Lock1              (1<<2)
309 #define HDSP_Lock0              (1<<3)
310 #define HDSP_SPDIFSync          (1<<4)
311 #define HDSP_TimecodeLock       (1<<5)
312 #define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */
313 #define HDSP_Sync2              (1<<16)
314 #define HDSP_Sync1              (1<<17)
315 #define HDSP_Sync0              (1<<18)
316 #define HDSP_DoubleSpeedStatus  (1<<19)
317 #define HDSP_ConfigError        (1<<20)
318 #define HDSP_DllError           (1<<21)
319 #define HDSP_spdifFrequency0    (1<<22)
320 #define HDSP_spdifFrequency1    (1<<23)
321 #define HDSP_spdifFrequency2    (1<<24)
322 #define HDSP_SPDIFErrorFlag     (1<<25)
323 #define HDSP_BufferID           (1<<26)
324 #define HDSP_TimecodeSync       (1<<27)
325 #define HDSP_AEBO               (1<<28) /* H9632 specific Analog Extension Boards */
326 #define HDSP_AEBI               (1<<29) /* 0 = present, 1 = absent */
327 #define HDSP_midi0IRQPending    (1<<30)
328 #define HDSP_midi1IRQPending    (1<<31)
329
330 #define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
331 #define HDSP_spdifFrequencyMask_9632 (HDSP_spdifFrequency0|\
332                                       HDSP_spdifFrequency1|\
333                                       HDSP_spdifFrequency2|\
334                                       HDSP_spdifFrequency3)
335
336 #define HDSP_spdifFrequency32KHz   (HDSP_spdifFrequency0)
337 #define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1)
338 #define HDSP_spdifFrequency48KHz   (HDSP_spdifFrequency0|HDSP_spdifFrequency1)
339
340 #define HDSP_spdifFrequency64KHz   (HDSP_spdifFrequency2)
341 #define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2)
342 #define HDSP_spdifFrequency96KHz   (HDSP_spdifFrequency2|HDSP_spdifFrequency1)
343
344 /* This is for H9632 cards */
345 #define HDSP_spdifFrequency128KHz   (HDSP_spdifFrequency0|\
346                                      HDSP_spdifFrequency1|\
347                                      HDSP_spdifFrequency2)
348 #define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3
349 #define HDSP_spdifFrequency192KHz   (HDSP_spdifFrequency3|HDSP_spdifFrequency0)
350
351 /* Status2 Register bits */
352
353 #define HDSP_version0     (1<<0)
354 #define HDSP_version1     (1<<1)
355 #define HDSP_version2     (1<<2)
356 #define HDSP_wc_lock      (1<<3)
357 #define HDSP_wc_sync      (1<<4)
358 #define HDSP_inp_freq0    (1<<5)
359 #define HDSP_inp_freq1    (1<<6)
360 #define HDSP_inp_freq2    (1<<7)
361 #define HDSP_SelSyncRef0  (1<<8)
362 #define HDSP_SelSyncRef1  (1<<9)
363 #define HDSP_SelSyncRef2  (1<<10)
364
365 #define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync)
366
367 #define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2)
368 #define HDSP_systemFrequency32   (HDSP_inp_freq0)
369 #define HDSP_systemFrequency44_1 (HDSP_inp_freq1)
370 #define HDSP_systemFrequency48   (HDSP_inp_freq0|HDSP_inp_freq1)
371 #define HDSP_systemFrequency64   (HDSP_inp_freq2)
372 #define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2)
373 #define HDSP_systemFrequency96   (HDSP_inp_freq1|HDSP_inp_freq2)
374 /* FIXME : more values for 9632 cards ? */
375
376 #define HDSP_SelSyncRefMask        (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2)
377 #define HDSP_SelSyncRef_ADAT1      0
378 #define HDSP_SelSyncRef_ADAT2      (HDSP_SelSyncRef0)
379 #define HDSP_SelSyncRef_ADAT3      (HDSP_SelSyncRef1)
380 #define HDSP_SelSyncRef_SPDIF      (HDSP_SelSyncRef0|HDSP_SelSyncRef1)
381 #define HDSP_SelSyncRef_WORD       (HDSP_SelSyncRef2)
382 #define HDSP_SelSyncRef_ADAT_SYNC  (HDSP_SelSyncRef0|HDSP_SelSyncRef2)
383
384 /* Card state flags */
385
386 #define HDSP_InitializationComplete  (1<<0)
387 #define HDSP_FirmwareLoaded          (1<<1)
388 #define HDSP_FirmwareCached          (1<<2)
389
390 /* FIFO wait times, defined in terms of 1/10ths of msecs */
391
392 #define HDSP_LONG_WAIT   5000
393 #define HDSP_SHORT_WAIT  30
394
395 #define UNITY_GAIN                       32768
396 #define MINUS_INFINITY_GAIN              0
397
398 /* the size of a substream (1 mono data stream) */
399
400 #define HDSP_CHANNEL_BUFFER_SAMPLES  (16*1024)
401 #define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
402
403 /* the size of the area we need to allocate for DMA transfers. the
404    size is the same regardless of the number of channels - the
405    Multiface still uses the same memory area.
406
407    Note that we allocate 1 more channel than is apparently needed
408    because the h/w seems to write 1 byte beyond the end of the last
409    page. Sigh.
410 */
411
412 #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES)
413 #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024)
414
415 #define HDSP_FIRMWARE_SIZE      (24413 * 4)
416
417 struct hdsp_9632_meters {
418     u32 input_peak[16];
419     u32 playback_peak[16];
420     u32 output_peak[16];
421     u32 xxx_peak[16];
422     u32 padding[64];
423     u32 input_rms_low[16];
424     u32 playback_rms_low[16];
425     u32 output_rms_low[16];
426     u32 xxx_rms_low[16];
427     u32 input_rms_high[16];
428     u32 playback_rms_high[16];
429     u32 output_rms_high[16];
430     u32 xxx_rms_high[16];
431 };
432
433 struct hdsp_midi {
434     struct hdsp             *hdsp;
435     int                      id;
436     struct snd_rawmidi           *rmidi;
437     struct snd_rawmidi_substream *input;
438     struct snd_rawmidi_substream *output;
439     char                     istimer; /* timer in use */
440     struct timer_list        timer;
441     spinlock_t               lock;
442     int                      pending;
443 };
444
445 struct hdsp {
446         spinlock_t            lock;
447         struct snd_pcm_substream *capture_substream;
448         struct snd_pcm_substream *playback_substream;
449         struct hdsp_midi      midi[2];
450         struct work_struct    midi_work;
451         int                   use_midi_work;
452         int                   precise_ptr;
453         u32                   control_register;      /* cached value */
454         u32                   control2_register;     /* cached value */
455         u32                   creg_spdif;
456         u32                   creg_spdif_stream;
457         int                   clock_source_locked;
458         char                 *card_name;         /* digiface/multiface/rpm */
459         enum HDSP_IO_Type     io_type;               /* ditto, but for code use */
460         unsigned short        firmware_rev;
461         unsigned short        state;                 /* stores state bits */
462         const struct firmware *firmware;
463         u32                  *fw_uploaded;
464         size_t                period_bytes;          /* guess what this is */
465         unsigned char         max_channels;
466         unsigned char         qs_in_channels;        /* quad speed mode for H9632 */
467         unsigned char         ds_in_channels;
468         unsigned char         ss_in_channels;       /* different for multiface/digiface */
469         unsigned char         qs_out_channels;
470         unsigned char         ds_out_channels;
471         unsigned char         ss_out_channels;
472
473         struct snd_dma_buffer capture_dma_buf;
474         struct snd_dma_buffer playback_dma_buf;
475         unsigned char        *capture_buffer;       /* suitably aligned address */
476         unsigned char        *playback_buffer;      /* suitably aligned address */
477
478         pid_t                 capture_pid;
479         pid_t                 playback_pid;
480         int                   running;
481         int                   system_sample_rate;
482         const char           *channel_map;
483         int                   dev;
484         int                   irq;
485         unsigned long         port;
486         void __iomem         *iobase;
487         struct snd_card *card;
488         struct snd_pcm *pcm;
489         struct snd_hwdep          *hwdep;
490         struct pci_dev       *pci;
491         struct snd_kcontrol *spdif_ctl;
492         unsigned short        mixer_matrix[HDSP_MATRIX_MIXER_SIZE];
493         unsigned int          dds_value; /* last value written to freq register */
494 };
495
496 /* These tables map the ALSA channels 1..N to the channels that we
497    need to use in order to find the relevant channel buffer. RME
498    refer to this kind of mapping as between "the ADAT channel and
499    the DMA channel." We index it using the logical audio channel,
500    and the value is the DMA channel (i.e. channel buffer number)
501    where the data for that channel can be read/written from/to.
502 */
503
504 static const char channel_map_df_ss[HDSP_MAX_CHANNELS] = {
505         0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
506         18, 19, 20, 21, 22, 23, 24, 25
507 };
508
509 static const char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
510         /* Analog */
511         0, 1, 2, 3, 4, 5, 6, 7,
512         /* ADAT 2 */
513         16, 17, 18, 19, 20, 21, 22, 23,
514         /* SPDIF */
515         24, 25,
516         -1, -1, -1, -1, -1, -1, -1, -1
517 };
518
519 static const char channel_map_ds[HDSP_MAX_CHANNELS] = {
520         /* ADAT channels are remapped */
521         1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
522         /* channels 12 and 13 are S/PDIF */
523         24, 25,
524         /* others don't exist */
525         -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
526 };
527
528 static const char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {
529         /* ADAT channels */
530         0, 1, 2, 3, 4, 5, 6, 7,
531         /* SPDIF */
532         8, 9,
533         /* Analog */
534         10, 11,
535         /* AO4S-192 and AI4S-192 extension boards */
536         12, 13, 14, 15,
537         /* others don't exist */
538         -1, -1, -1, -1, -1, -1, -1, -1,
539         -1, -1
540 };
541
542 static const char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {
543         /* ADAT */
544         1, 3, 5, 7,
545         /* SPDIF */
546         8, 9,
547         /* Analog */
548         10, 11,
549         /* AO4S-192 and AI4S-192 extension boards */
550         12, 13, 14, 15,
551         /* others don't exist */
552         -1, -1, -1, -1, -1, -1, -1, -1,
553         -1, -1, -1, -1, -1, -1
554 };
555
556 static const char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = {
557         /* ADAT is disabled in this mode */
558         /* SPDIF */
559         8, 9,
560         /* Analog */
561         10, 11,
562         /* AO4S-192 and AI4S-192 extension boards */
563         12, 13, 14, 15,
564         /* others don't exist */
565         -1, -1, -1, -1, -1, -1, -1, -1,
566         -1, -1, -1, -1, -1, -1, -1, -1,
567         -1, -1
568 };
569
570 static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size)
571 {
572         return snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, size, dmab);
573 }
574
575 static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci)
576 {
577         if (dmab->area)
578                 snd_dma_free_pages(dmab);
579 }
580
581
582 static const struct pci_device_id snd_hdsp_ids[] = {
583         {
584                 .vendor = PCI_VENDOR_ID_XILINX,
585                 .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
586                 .subvendor = PCI_ANY_ID,
587                 .subdevice = PCI_ANY_ID,
588         }, /* RME Hammerfall-DSP */
589         { 0, },
590 };
591
592 MODULE_DEVICE_TABLE(pci, snd_hdsp_ids);
593
594 /* prototypes */
595 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp);
596 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp);
597 static int snd_hdsp_enable_io (struct hdsp *hdsp);
598 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp);
599 static void snd_hdsp_initialize_channels (struct hdsp *hdsp);
600 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout);
601 static int hdsp_autosync_ref(struct hdsp *hdsp);
602 static int snd_hdsp_set_defaults(struct hdsp *hdsp);
603 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp);
604
605 static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out)
606 {
607         switch (hdsp->io_type) {
608         case Multiface:
609         case Digiface:
610         case RPM:
611         default:
612                 if (hdsp->firmware_rev == 0xa)
613                         return (64 * out) + (32 + (in));
614                 else
615                         return (52 * out) + (26 + (in));
616         case H9632:
617                 return (32 * out) + (16 + (in));
618         case H9652:
619                 return (52 * out) + (26 + (in));
620         }
621 }
622
623 static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out)
624 {
625         switch (hdsp->io_type) {
626         case Multiface:
627         case Digiface:
628         case RPM:
629         default:
630                 if (hdsp->firmware_rev == 0xa)
631                         return (64 * out) + in;
632                 else
633                         return (52 * out) + in;
634         case H9632:
635                 return (32 * out) + in;
636         case H9652:
637                 return (52 * out) + in;
638         }
639 }
640
641 static void hdsp_write(struct hdsp *hdsp, int reg, int val)
642 {
643         writel(val, hdsp->iobase + reg);
644 }
645
646 static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
647 {
648         return readl (hdsp->iobase + reg);
649 }
650
651 static int hdsp_check_for_iobox (struct hdsp *hdsp)
652 {
653         int i;
654
655         if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
656         for (i = 0; i < 500; i++) {
657                 if (0 == (hdsp_read(hdsp, HDSP_statusRegister) &
658                                         HDSP_ConfigError)) {
659                         if (i) {
660                                 dev_dbg(hdsp->card->dev,
661                                         "IO box found after %d ms\n",
662                                                 (20 * i));
663                         }
664                         return 0;
665                 }
666                 msleep(20);
667         }
668         dev_err(hdsp->card->dev, "no IO box connected!\n");
669         hdsp->state &= ~HDSP_FirmwareLoaded;
670         return -EIO;
671 }
672
673 static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
674                                unsigned int delay)
675 {
676         unsigned int i;
677
678         if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
679                 return 0;
680
681         for (i = 0; i != loops; ++i) {
682                 if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
683                         msleep(delay);
684                 else {
685                         dev_dbg(hdsp->card->dev, "iobox found after %ums!\n",
686                                    i * delay);
687                         return 0;
688                 }
689         }
690
691         dev_info(hdsp->card->dev, "no IO box connected!\n");
692         hdsp->state &= ~HDSP_FirmwareLoaded;
693         return -EIO;
694 }
695
696 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
697
698         int i;
699         unsigned long flags;
700         const u32 *cache;
701
702         if (hdsp->fw_uploaded)
703                 cache = hdsp->fw_uploaded;
704         else {
705                 if (!hdsp->firmware)
706                         return -ENODEV;
707                 cache = (u32 *)hdsp->firmware->data;
708                 if (!cache)
709                         return -ENODEV;
710         }
711
712         if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
713
714                 dev_info(hdsp->card->dev, "loading firmware\n");
715
716                 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
717                 hdsp_write (hdsp, HDSP_fifoData, 0);
718
719                 if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
720                         dev_info(hdsp->card->dev,
721                                  "timeout waiting for download preparation\n");
722                         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
723                         return -EIO;
724                 }
725
726                 hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
727
728                 for (i = 0; i < HDSP_FIRMWARE_SIZE / 4; ++i) {
729                         hdsp_write(hdsp, HDSP_fifoData, cache[i]);
730                         if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
731                                 dev_info(hdsp->card->dev,
732                                          "timeout during firmware loading\n");
733                                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
734                                 return -EIO;
735                         }
736                 }
737
738                 hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT);
739                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
740
741                 ssleep(3);
742 #ifdef SNDRV_BIG_ENDIAN
743                 hdsp->control2_register = HDSP_BIGENDIAN_MODE;
744 #else
745                 hdsp->control2_register = 0;
746 #endif
747                 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
748                 dev_info(hdsp->card->dev, "finished firmware loading\n");
749
750         }
751         if (hdsp->state & HDSP_InitializationComplete) {
752                 dev_info(hdsp->card->dev,
753                          "firmware loaded from cache, restoring defaults\n");
754                 spin_lock_irqsave(&hdsp->lock, flags);
755                 snd_hdsp_set_defaults(hdsp);
756                 spin_unlock_irqrestore(&hdsp->lock, flags);
757         }
758
759         hdsp->state |= HDSP_FirmwareLoaded;
760
761         return 0;
762 }
763
764 static int hdsp_get_iobox_version (struct hdsp *hdsp)
765 {
766         if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
767
768                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
769                 hdsp_write(hdsp, HDSP_fifoData, 0);
770
771                 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
772                         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
773                         hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
774                 }
775
776                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
777                 hdsp_write (hdsp, HDSP_fifoData, 0);
778                 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
779                         goto set_multi;
780
781                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
782                 hdsp_write(hdsp, HDSP_fifoData, 0);
783                 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
784                         hdsp->io_type = Digiface;
785                         dev_info(hdsp->card->dev, "Digiface found\n");
786                         return 0;
787                 }
788
789                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
790                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
791                 hdsp_write(hdsp, HDSP_fifoData, 0);
792                 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
793                         goto set_multi;
794
795                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
796                 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
797                 hdsp_write(hdsp, HDSP_fifoData, 0);
798                 if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
799                         goto set_multi;
800
801                 hdsp->io_type = RPM;
802                 dev_info(hdsp->card->dev, "RPM found\n");
803                 return 0;
804         } else {
805                 /* firmware was already loaded, get iobox type */
806                 if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
807                         hdsp->io_type = RPM;
808                 else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
809                         hdsp->io_type = Multiface;
810                 else
811                         hdsp->io_type = Digiface;
812         }
813         return 0;
814
815 set_multi:
816         hdsp->io_type = Multiface;
817         dev_info(hdsp->card->dev, "Multiface found\n");
818         return 0;
819 }
820
821
822 static int hdsp_request_fw_loader(struct hdsp *hdsp);
823
824 static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
825 {
826         if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
827                 return 0;
828         if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
829                 hdsp->state &= ~HDSP_FirmwareLoaded;
830                 if (! load_on_demand)
831                         return -EIO;
832                 dev_err(hdsp->card->dev, "firmware not present.\n");
833                 /* try to load firmware */
834                 if (! (hdsp->state & HDSP_FirmwareCached)) {
835                         if (! hdsp_request_fw_loader(hdsp))
836                                 return 0;
837                         dev_err(hdsp->card->dev,
838                                    "No firmware loaded nor cached, please upload firmware.\n");
839                         return -EIO;
840                 }
841                 if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
842                         dev_err(hdsp->card->dev,
843                                    "Firmware loading from cache failed, please upload manually.\n");
844                         return -EIO;
845                 }
846         }
847         return 0;
848 }
849
850
851 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
852 {
853         int i;
854
855         /* the fifoStatus registers reports on how many words
856            are available in the command FIFO.
857         */
858
859         for (i = 0; i < timeout; i++) {
860
861                 if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
862                         return 0;
863
864                 /* not very friendly, but we only do this during a firmware
865                    load and changing the mixer, so we just put up with it.
866                 */
867
868                 udelay (100);
869         }
870
871         dev_warn(hdsp->card->dev,
872                  "wait for FIFO status <= %d failed after %d iterations\n",
873                     count, timeout);
874         return -1;
875 }
876
877 static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr)
878 {
879         if (addr >= HDSP_MATRIX_MIXER_SIZE)
880                 return 0;
881
882         return hdsp->mixer_matrix[addr];
883 }
884
885 static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data)
886 {
887         unsigned int ad;
888
889         if (addr >= HDSP_MATRIX_MIXER_SIZE)
890                 return -1;
891
892         if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
893
894                 /* from martin bjornsen:
895
896                    "You can only write dwords to the
897                    mixer memory which contain two
898                    mixer values in the low and high
899                    word. So if you want to change
900                    value 0 you have to read value 1
901                    from the cache and write both to
902                    the first dword in the mixer
903                    memory."
904                 */
905
906                 if (hdsp->io_type == H9632 && addr >= 512)
907                         return 0;
908
909                 if (hdsp->io_type == H9652 && addr >= 1352)
910                         return 0;
911
912                 hdsp->mixer_matrix[addr] = data;
913
914
915                 /* `addr' addresses a 16-bit wide address, but
916                    the address space accessed via hdsp_write
917                    uses byte offsets. put another way, addr
918                    varies from 0 to 1351, but to access the
919                    corresponding memory location, we need
920                    to access 0 to 2703 ...
921                 */
922                 ad = addr/2;
923
924                 hdsp_write (hdsp, 4096 + (ad*4),
925                             (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
926                             hdsp->mixer_matrix[addr&0x7fe]);
927
928                 return 0;
929
930         } else {
931
932                 ad = (addr << 16) + data;
933
934                 if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
935                         return -1;
936
937                 hdsp_write (hdsp, HDSP_fifoData, ad);
938                 hdsp->mixer_matrix[addr] = data;
939
940         }
941
942         return 0;
943 }
944
945 static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp)
946 {
947         unsigned long flags;
948         int ret = 1;
949
950         spin_lock_irqsave(&hdsp->lock, flags);
951         if ((hdsp->playback_pid != hdsp->capture_pid) &&
952             (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0))
953                 ret = 0;
954         spin_unlock_irqrestore(&hdsp->lock, flags);
955         return ret;
956 }
957
958 static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
959 {
960         unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
961         unsigned int rate_bits = (status & HDSP_spdifFrequencyMask);
962
963         /* For the 9632, the mask is different */
964         if (hdsp->io_type == H9632)
965                  rate_bits = (status & HDSP_spdifFrequencyMask_9632);
966
967         if (status & HDSP_SPDIFErrorFlag)
968                 return 0;
969
970         switch (rate_bits) {
971         case HDSP_spdifFrequency32KHz: return 32000;
972         case HDSP_spdifFrequency44_1KHz: return 44100;
973         case HDSP_spdifFrequency48KHz: return 48000;
974         case HDSP_spdifFrequency64KHz: return 64000;
975         case HDSP_spdifFrequency88_2KHz: return 88200;
976         case HDSP_spdifFrequency96KHz: return 96000;
977         case HDSP_spdifFrequency128KHz:
978                 if (hdsp->io_type == H9632) return 128000;
979                 break;
980         case HDSP_spdifFrequency176_4KHz:
981                 if (hdsp->io_type == H9632) return 176400;
982                 break;
983         case HDSP_spdifFrequency192KHz:
984                 if (hdsp->io_type == H9632) return 192000;
985                 break;
986         default:
987                 break;
988         }
989         dev_warn(hdsp->card->dev,
990                  "unknown spdif frequency status; bits = 0x%x, status = 0x%x\n",
991                  rate_bits, status);
992         return 0;
993 }
994
995 static int hdsp_external_sample_rate(struct hdsp *hdsp)
996 {
997         unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
998         unsigned int rate_bits = status2 & HDSP_systemFrequencyMask;
999
1000         /* For the 9632 card, there seems to be no bit for indicating external
1001          * sample rate greater than 96kHz. The card reports the corresponding
1002          * single speed. So the best means seems to get spdif rate when
1003          * autosync reference is spdif */
1004         if (hdsp->io_type == H9632 &&
1005             hdsp_autosync_ref(hdsp) == HDSP_AUTOSYNC_FROM_SPDIF)
1006                  return hdsp_spdif_sample_rate(hdsp);
1007
1008         switch (rate_bits) {
1009         case HDSP_systemFrequency32:   return 32000;
1010         case HDSP_systemFrequency44_1: return 44100;
1011         case HDSP_systemFrequency48:   return 48000;
1012         case HDSP_systemFrequency64:   return 64000;
1013         case HDSP_systemFrequency88_2: return 88200;
1014         case HDSP_systemFrequency96:   return 96000;
1015         default:
1016                 return 0;
1017         }
1018 }
1019
1020 static void hdsp_compute_period_size(struct hdsp *hdsp)
1021 {
1022         hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
1023 }
1024
1025 static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
1026 {
1027         int position;
1028
1029         position = hdsp_read(hdsp, HDSP_statusRegister);
1030
1031         if (!hdsp->precise_ptr)
1032                 return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0;
1033
1034         position &= HDSP_BufferPositionMask;
1035         position /= 4;
1036         position &= (hdsp->period_bytes/2) - 1;
1037         return position;
1038 }
1039
1040 static void hdsp_reset_hw_pointer(struct hdsp *hdsp)
1041 {
1042         hdsp_write (hdsp, HDSP_resetPointer, 0);
1043         if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1044                 /* HDSP_resetPointer = HDSP_freqReg, which is strange and
1045                  * requires (?) to write again DDS value after a reset pointer
1046                  * (at least, it works like this) */
1047                 hdsp_write (hdsp, HDSP_freqReg, hdsp->dds_value);
1048 }
1049
1050 static void hdsp_start_audio(struct hdsp *s)
1051 {
1052         s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start);
1053         hdsp_write(s, HDSP_controlRegister, s->control_register);
1054 }
1055
1056 static void hdsp_stop_audio(struct hdsp *s)
1057 {
1058         s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable);
1059         hdsp_write(s, HDSP_controlRegister, s->control_register);
1060 }
1061
1062 static void hdsp_silence_playback(struct hdsp *hdsp)
1063 {
1064         memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
1065 }
1066
1067 static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames)
1068 {
1069         int n;
1070
1071         spin_lock_irq(&s->lock);
1072
1073         frames >>= 7;
1074         n = 0;
1075         while (frames) {
1076                 n++;
1077                 frames >>= 1;
1078         }
1079
1080         s->control_register &= ~HDSP_LatencyMask;
1081         s->control_register |= hdsp_encode_latency(n);
1082
1083         hdsp_write(s, HDSP_controlRegister, s->control_register);
1084
1085         hdsp_compute_period_size(s);
1086
1087         spin_unlock_irq(&s->lock);
1088
1089         return 0;
1090 }
1091
1092 static void hdsp_set_dds_value(struct hdsp *hdsp, int rate)
1093 {
1094         u64 n;
1095
1096         if (rate >= 112000)
1097                 rate /= 4;
1098         else if (rate >= 56000)
1099                 rate /= 2;
1100
1101         n = DDS_NUMERATOR;
1102         n = div_u64(n, rate);
1103         /* n should be less than 2^32 for being written to FREQ register */
1104         snd_BUG_ON(n >> 32);
1105         /* HDSP_freqReg and HDSP_resetPointer are the same, so keep the DDS
1106            value to write it after a reset */
1107         hdsp->dds_value = n;
1108         hdsp_write(hdsp, HDSP_freqReg, hdsp->dds_value);
1109 }
1110
1111 static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
1112 {
1113         int reject_if_open = 0;
1114         int current_rate;
1115         int rate_bits;
1116
1117         /* ASSUMPTION: hdsp->lock is either held, or
1118            there is no need for it (e.g. during module
1119            initialization).
1120         */
1121
1122         if (!(hdsp->control_register & HDSP_ClockModeMaster)) {
1123                 if (called_internally) {
1124                         /* request from ctl or card initialization */
1125                         dev_err(hdsp->card->dev,
1126                                 "device is not running as a clock master: cannot set sample rate.\n");
1127                         return -1;
1128                 } else {
1129                         /* hw_param request while in AutoSync mode */
1130                         int external_freq = hdsp_external_sample_rate(hdsp);
1131                         int spdif_freq = hdsp_spdif_sample_rate(hdsp);
1132
1133                         if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1134                                 dev_info(hdsp->card->dev,
1135                                          "Detected ADAT in double speed mode\n");
1136                         else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1137                                 dev_info(hdsp->card->dev,
1138                                          "Detected ADAT in quad speed mode\n");
1139                         else if (rate != external_freq) {
1140                                 dev_info(hdsp->card->dev,
1141                                          "No AutoSync source for requested rate\n");
1142                                 return -1;
1143                         }
1144                 }
1145         }
1146
1147         current_rate = hdsp->system_sample_rate;
1148
1149         /* Changing from a "single speed" to a "double speed" rate is
1150            not allowed if any substreams are open. This is because
1151            such a change causes a shift in the location of
1152            the DMA buffers and a reduction in the number of available
1153            buffers.
1154
1155            Note that a similar but essentially insoluble problem
1156            exists for externally-driven rate changes. All we can do
1157            is to flag rate changes in the read/write routines.  */
1158
1159         if (rate > 96000 && hdsp->io_type != H9632)
1160                 return -EINVAL;
1161
1162         switch (rate) {
1163         case 32000:
1164                 if (current_rate > 48000)
1165                         reject_if_open = 1;
1166                 rate_bits = HDSP_Frequency32KHz;
1167                 break;
1168         case 44100:
1169                 if (current_rate > 48000)
1170                         reject_if_open = 1;
1171                 rate_bits = HDSP_Frequency44_1KHz;
1172                 break;
1173         case 48000:
1174                 if (current_rate > 48000)
1175                         reject_if_open = 1;
1176                 rate_bits = HDSP_Frequency48KHz;
1177                 break;
1178         case 64000:
1179                 if (current_rate <= 48000 || current_rate > 96000)
1180                         reject_if_open = 1;
1181                 rate_bits = HDSP_Frequency64KHz;
1182                 break;
1183         case 88200:
1184                 if (current_rate <= 48000 || current_rate > 96000)
1185                         reject_if_open = 1;
1186                 rate_bits = HDSP_Frequency88_2KHz;
1187                 break;
1188         case 96000:
1189                 if (current_rate <= 48000 || current_rate > 96000)
1190                         reject_if_open = 1;
1191                 rate_bits = HDSP_Frequency96KHz;
1192                 break;
1193         case 128000:
1194                 if (current_rate < 128000)
1195                         reject_if_open = 1;
1196                 rate_bits = HDSP_Frequency128KHz;
1197                 break;
1198         case 176400:
1199                 if (current_rate < 128000)
1200                         reject_if_open = 1;
1201                 rate_bits = HDSP_Frequency176_4KHz;
1202                 break;
1203         case 192000:
1204                 if (current_rate < 128000)
1205                         reject_if_open = 1;
1206                 rate_bits = HDSP_Frequency192KHz;
1207                 break;
1208         default:
1209                 return -EINVAL;
1210         }
1211
1212         if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) {
1213                 dev_warn(hdsp->card->dev,
1214                          "cannot change speed mode (capture PID = %d, playback PID = %d)\n",
1215                             hdsp->capture_pid,
1216                             hdsp->playback_pid);
1217                 return -EBUSY;
1218         }
1219
1220         hdsp->control_register &= ~HDSP_FrequencyMask;
1221         hdsp->control_register |= rate_bits;
1222         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1223
1224         /* For HDSP9632 rev 152, need to set DDS value in FREQ register */
1225         if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1226                 hdsp_set_dds_value(hdsp, rate);
1227
1228         if (rate >= 128000) {
1229                 hdsp->channel_map = channel_map_H9632_qs;
1230         } else if (rate > 48000) {
1231                 if (hdsp->io_type == H9632)
1232                         hdsp->channel_map = channel_map_H9632_ds;
1233                 else
1234                         hdsp->channel_map = channel_map_ds;
1235         } else {
1236                 switch (hdsp->io_type) {
1237                 case RPM:
1238                 case Multiface:
1239                         hdsp->channel_map = channel_map_mf_ss;
1240                         break;
1241                 case Digiface:
1242                 case H9652:
1243                         hdsp->channel_map = channel_map_df_ss;
1244                         break;
1245                 case H9632:
1246                         hdsp->channel_map = channel_map_H9632_ss;
1247                         break;
1248                 default:
1249                         /* should never happen */
1250                         break;
1251                 }
1252         }
1253
1254         hdsp->system_sample_rate = rate;
1255
1256         return 0;
1257 }
1258
1259 /*----------------------------------------------------------------------------
1260    MIDI
1261   ----------------------------------------------------------------------------*/
1262
1263 static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id)
1264 {
1265         /* the hardware already does the relevant bit-mask with 0xff */
1266         if (id)
1267                 return hdsp_read(hdsp, HDSP_midiDataIn1);
1268         else
1269                 return hdsp_read(hdsp, HDSP_midiDataIn0);
1270 }
1271
1272 static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val)
1273 {
1274         /* the hardware already does the relevant bit-mask with 0xff */
1275         if (id)
1276                 hdsp_write(hdsp, HDSP_midiDataOut1, val);
1277         else
1278                 hdsp_write(hdsp, HDSP_midiDataOut0, val);
1279 }
1280
1281 static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id)
1282 {
1283         if (id)
1284                 return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff);
1285         else
1286                 return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff);
1287 }
1288
1289 static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id)
1290 {
1291         int fifo_bytes_used;
1292
1293         if (id)
1294                 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff;
1295         else
1296                 fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff;
1297
1298         if (fifo_bytes_used < 128)
1299                 return  128 - fifo_bytes_used;
1300         else
1301                 return 0;
1302 }
1303
1304 static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
1305 {
1306         while (snd_hdsp_midi_input_available (hdsp, id))
1307                 snd_hdsp_midi_read_byte (hdsp, id);
1308 }
1309
1310 static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
1311 {
1312         unsigned long flags;
1313         int n_pending;
1314         int to_write;
1315         int i;
1316         unsigned char buf[128];
1317
1318         /* Output is not interrupt driven */
1319
1320         spin_lock_irqsave (&hmidi->lock, flags);
1321         if (hmidi->output) {
1322                 if (!snd_rawmidi_transmit_empty (hmidi->output)) {
1323                         if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) {
1324                                 if (n_pending > (int)sizeof (buf))
1325                                         n_pending = sizeof (buf);
1326
1327                                 if ((to_write = snd_rawmidi_transmit (hmidi->output, buf, n_pending)) > 0) {
1328                                         for (i = 0; i < to_write; ++i)
1329                                                 snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
1330                                 }
1331                         }
1332                 }
1333         }
1334         spin_unlock_irqrestore (&hmidi->lock, flags);
1335         return 0;
1336 }
1337
1338 static int snd_hdsp_midi_input_read (struct hdsp_midi *hmidi)
1339 {
1340         unsigned char buf[128]; /* this buffer is designed to match the MIDI input FIFO size */
1341         unsigned long flags;
1342         int n_pending;
1343         int i;
1344
1345         spin_lock_irqsave (&hmidi->lock, flags);
1346         if ((n_pending = snd_hdsp_midi_input_available (hmidi->hdsp, hmidi->id)) > 0) {
1347                 if (hmidi->input) {
1348                         if (n_pending > (int)sizeof (buf))
1349                                 n_pending = sizeof (buf);
1350                         for (i = 0; i < n_pending; ++i)
1351                                 buf[i] = snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id);
1352                         if (n_pending)
1353                                 snd_rawmidi_receive (hmidi->input, buf, n_pending);
1354                 } else {
1355                         /* flush the MIDI input FIFO */
1356                         while (--n_pending)
1357                                 snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id);
1358                 }
1359         }
1360         hmidi->pending = 0;
1361         if (hmidi->id)
1362                 hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable;
1363         else
1364                 hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable;
1365         hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register);
1366         spin_unlock_irqrestore (&hmidi->lock, flags);
1367         return snd_hdsp_midi_output_write (hmidi);
1368 }
1369
1370 static void snd_hdsp_midi_input_trigger(struct snd_rawmidi_substream *substream, int up)
1371 {
1372         struct hdsp *hdsp;
1373         struct hdsp_midi *hmidi;
1374         unsigned long flags;
1375         u32 ie;
1376
1377         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1378         hdsp = hmidi->hdsp;
1379         ie = hmidi->id ? HDSP_Midi1InterruptEnable : HDSP_Midi0InterruptEnable;
1380         spin_lock_irqsave (&hdsp->lock, flags);
1381         if (up) {
1382                 if (!(hdsp->control_register & ie)) {
1383                         snd_hdsp_flush_midi_input (hdsp, hmidi->id);
1384                         hdsp->control_register |= ie;
1385                 }
1386         } else {
1387                 hdsp->control_register &= ~ie;
1388         }
1389
1390         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1391         spin_unlock_irqrestore (&hdsp->lock, flags);
1392 }
1393
1394 static void snd_hdsp_midi_output_timer(struct timer_list *t)
1395 {
1396         struct hdsp_midi *hmidi = from_timer(hmidi, t, timer);
1397         unsigned long flags;
1398
1399         snd_hdsp_midi_output_write(hmidi);
1400         spin_lock_irqsave (&hmidi->lock, flags);
1401
1402         /* this does not bump hmidi->istimer, because the
1403            kernel automatically removed the timer when it
1404            expired, and we are now adding it back, thus
1405            leaving istimer wherever it was set before.
1406         */
1407
1408         if (hmidi->istimer)
1409                 mod_timer(&hmidi->timer, 1 + jiffies);
1410
1411         spin_unlock_irqrestore (&hmidi->lock, flags);
1412 }
1413
1414 static void snd_hdsp_midi_output_trigger(struct snd_rawmidi_substream *substream, int up)
1415 {
1416         struct hdsp_midi *hmidi;
1417         unsigned long flags;
1418
1419         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1420         spin_lock_irqsave (&hmidi->lock, flags);
1421         if (up) {
1422                 if (!hmidi->istimer) {
1423                         timer_setup(&hmidi->timer, snd_hdsp_midi_output_timer,
1424                                     0);
1425                         mod_timer(&hmidi->timer, 1 + jiffies);
1426                         hmidi->istimer++;
1427                 }
1428         } else {
1429                 if (hmidi->istimer && --hmidi->istimer <= 0)
1430                         del_timer (&hmidi->timer);
1431         }
1432         spin_unlock_irqrestore (&hmidi->lock, flags);
1433         if (up)
1434                 snd_hdsp_midi_output_write(hmidi);
1435 }
1436
1437 static int snd_hdsp_midi_input_open(struct snd_rawmidi_substream *substream)
1438 {
1439         struct hdsp_midi *hmidi;
1440
1441         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1442         spin_lock_irq (&hmidi->lock);
1443         snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id);
1444         hmidi->input = substream;
1445         spin_unlock_irq (&hmidi->lock);
1446
1447         return 0;
1448 }
1449
1450 static int snd_hdsp_midi_output_open(struct snd_rawmidi_substream *substream)
1451 {
1452         struct hdsp_midi *hmidi;
1453
1454         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1455         spin_lock_irq (&hmidi->lock);
1456         hmidi->output = substream;
1457         spin_unlock_irq (&hmidi->lock);
1458
1459         return 0;
1460 }
1461
1462 static int snd_hdsp_midi_input_close(struct snd_rawmidi_substream *substream)
1463 {
1464         struct hdsp_midi *hmidi;
1465
1466         snd_hdsp_midi_input_trigger (substream, 0);
1467
1468         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1469         spin_lock_irq (&hmidi->lock);
1470         hmidi->input = NULL;
1471         spin_unlock_irq (&hmidi->lock);
1472
1473         return 0;
1474 }
1475
1476 static int snd_hdsp_midi_output_close(struct snd_rawmidi_substream *substream)
1477 {
1478         struct hdsp_midi *hmidi;
1479
1480         snd_hdsp_midi_output_trigger (substream, 0);
1481
1482         hmidi = (struct hdsp_midi *) substream->rmidi->private_data;
1483         spin_lock_irq (&hmidi->lock);
1484         hmidi->output = NULL;
1485         spin_unlock_irq (&hmidi->lock);
1486
1487         return 0;
1488 }
1489
1490 static const struct snd_rawmidi_ops snd_hdsp_midi_output =
1491 {
1492         .open =         snd_hdsp_midi_output_open,
1493         .close =        snd_hdsp_midi_output_close,
1494         .trigger =      snd_hdsp_midi_output_trigger,
1495 };
1496
1497 static const struct snd_rawmidi_ops snd_hdsp_midi_input =
1498 {
1499         .open =         snd_hdsp_midi_input_open,
1500         .close =        snd_hdsp_midi_input_close,
1501         .trigger =      snd_hdsp_midi_input_trigger,
1502 };
1503
1504 static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int id)
1505 {
1506         char buf[40];
1507
1508         hdsp->midi[id].id = id;
1509         hdsp->midi[id].rmidi = NULL;
1510         hdsp->midi[id].input = NULL;
1511         hdsp->midi[id].output = NULL;
1512         hdsp->midi[id].hdsp = hdsp;
1513         hdsp->midi[id].istimer = 0;
1514         hdsp->midi[id].pending = 0;
1515         spin_lock_init (&hdsp->midi[id].lock);
1516
1517         snprintf(buf, sizeof(buf), "%s MIDI %d", card->shortname, id + 1);
1518         if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0)
1519                 return -1;
1520
1521         sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1);
1522         hdsp->midi[id].rmidi->private_data = &hdsp->midi[id];
1523
1524         snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output);
1525         snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_hdsp_midi_input);
1526
1527         hdsp->midi[id].rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT |
1528                 SNDRV_RAWMIDI_INFO_INPUT |
1529                 SNDRV_RAWMIDI_INFO_DUPLEX;
1530
1531         return 0;
1532 }
1533
1534 /*-----------------------------------------------------------------------------
1535   Control Interface
1536   ----------------------------------------------------------------------------*/
1537
1538 static u32 snd_hdsp_convert_from_aes(struct snd_aes_iec958 *aes)
1539 {
1540         u32 val = 0;
1541         val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? HDSP_SPDIFProfessional : 0;
1542         val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? HDSP_SPDIFNonAudio : 0;
1543         if (val & HDSP_SPDIFProfessional)
1544                 val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0;
1545         else
1546                 val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? HDSP_SPDIFEmphasis : 0;
1547         return val;
1548 }
1549
1550 static void snd_hdsp_convert_to_aes(struct snd_aes_iec958 *aes, u32 val)
1551 {
1552         aes->status[0] = ((val & HDSP_SPDIFProfessional) ? IEC958_AES0_PROFESSIONAL : 0) |
1553                          ((val & HDSP_SPDIFNonAudio) ? IEC958_AES0_NONAUDIO : 0);
1554         if (val & HDSP_SPDIFProfessional)
1555                 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
1556         else
1557                 aes->status[0] |= (val & HDSP_SPDIFEmphasis) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
1558 }
1559
1560 static int snd_hdsp_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1561 {
1562         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1563         uinfo->count = 1;
1564         return 0;
1565 }
1566
1567 static int snd_hdsp_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1568 {
1569         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1570
1571         snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
1572         return 0;
1573 }
1574
1575 static int snd_hdsp_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1576 {
1577         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1578         int change;
1579         u32 val;
1580
1581         val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
1582         spin_lock_irq(&hdsp->lock);
1583         change = val != hdsp->creg_spdif;
1584         hdsp->creg_spdif = val;
1585         spin_unlock_irq(&hdsp->lock);
1586         return change;
1587 }
1588
1589 static int snd_hdsp_control_spdif_stream_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1590 {
1591         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1592         uinfo->count = 1;
1593         return 0;
1594 }
1595
1596 static int snd_hdsp_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1597 {
1598         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1599
1600         snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream);
1601         return 0;
1602 }
1603
1604 static int snd_hdsp_control_spdif_stream_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1605 {
1606         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1607         int change;
1608         u32 val;
1609
1610         val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
1611         spin_lock_irq(&hdsp->lock);
1612         change = val != hdsp->creg_spdif_stream;
1613         hdsp->creg_spdif_stream = val;
1614         hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
1615         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val);
1616         spin_unlock_irq(&hdsp->lock);
1617         return change;
1618 }
1619
1620 static int snd_hdsp_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1621 {
1622         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1623         uinfo->count = 1;
1624         return 0;
1625 }
1626
1627 static int snd_hdsp_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1628 {
1629         ucontrol->value.iec958.status[0] = kcontrol->private_value;
1630         return 0;
1631 }
1632
1633 #define HDSP_SPDIF_IN(xname, xindex) \
1634 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1635   .name = xname, \
1636   .index = xindex, \
1637   .info = snd_hdsp_info_spdif_in, \
1638   .get = snd_hdsp_get_spdif_in, \
1639   .put = snd_hdsp_put_spdif_in }
1640
1641 static unsigned int hdsp_spdif_in(struct hdsp *hdsp)
1642 {
1643         return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask);
1644 }
1645
1646 static int hdsp_set_spdif_input(struct hdsp *hdsp, int in)
1647 {
1648         hdsp->control_register &= ~HDSP_SPDIFInputMask;
1649         hdsp->control_register |= hdsp_encode_spdif_in(in);
1650         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1651         return 0;
1652 }
1653
1654 static int snd_hdsp_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1655 {
1656         static const char * const texts[4] = {
1657                 "Optical", "Coaxial", "Internal", "AES"
1658         };
1659         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1660
1661         return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 4 : 3,
1662                                  texts);
1663 }
1664
1665 static int snd_hdsp_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1666 {
1667         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1668
1669         ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
1670         return 0;
1671 }
1672
1673 static int snd_hdsp_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1674 {
1675         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1676         int change;
1677         unsigned int val;
1678
1679         if (!snd_hdsp_use_is_exclusive(hdsp))
1680                 return -EBUSY;
1681         val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
1682         spin_lock_irq(&hdsp->lock);
1683         change = val != hdsp_spdif_in(hdsp);
1684         if (change)
1685                 hdsp_set_spdif_input(hdsp, val);
1686         spin_unlock_irq(&hdsp->lock);
1687         return change;
1688 }
1689
1690 #define HDSP_TOGGLE_SETTING(xname, xindex) \
1691 {   .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1692         .name = xname, \
1693         .private_value = xindex, \
1694         .info = snd_hdsp_info_toggle_setting, \
1695         .get = snd_hdsp_get_toggle_setting, \
1696         .put = snd_hdsp_put_toggle_setting \
1697 }
1698
1699 static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask)
1700 {
1701         return (hdsp->control_register & regmask) ? 1 : 0;
1702 }
1703
1704 static int hdsp_set_toggle_setting(struct hdsp *hdsp, u32 regmask, int out)
1705 {
1706         if (out)
1707                 hdsp->control_register |= regmask;
1708         else
1709                 hdsp->control_register &= ~regmask;
1710         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1711
1712         return 0;
1713 }
1714
1715 #define snd_hdsp_info_toggle_setting               snd_ctl_boolean_mono_info
1716
1717 static int snd_hdsp_get_toggle_setting(struct snd_kcontrol *kcontrol,
1718                 struct snd_ctl_elem_value *ucontrol)
1719 {
1720         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1721         u32 regmask = kcontrol->private_value;
1722
1723         spin_lock_irq(&hdsp->lock);
1724         ucontrol->value.integer.value[0] = hdsp_toggle_setting(hdsp, regmask);
1725         spin_unlock_irq(&hdsp->lock);
1726         return 0;
1727 }
1728
1729 static int snd_hdsp_put_toggle_setting(struct snd_kcontrol *kcontrol,
1730                 struct snd_ctl_elem_value *ucontrol)
1731 {
1732         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1733         u32 regmask = kcontrol->private_value;
1734         int change;
1735         unsigned int val;
1736
1737         if (!snd_hdsp_use_is_exclusive(hdsp))
1738                 return -EBUSY;
1739         val = ucontrol->value.integer.value[0] & 1;
1740         spin_lock_irq(&hdsp->lock);
1741         change = (int) val != hdsp_toggle_setting(hdsp, regmask);
1742         if (change)
1743                 hdsp_set_toggle_setting(hdsp, regmask, val);
1744         spin_unlock_irq(&hdsp->lock);
1745         return change;
1746 }
1747
1748 #define HDSP_SPDIF_SAMPLE_RATE(xname, xindex) \
1749 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1750   .name = xname, \
1751   .index = xindex, \
1752   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1753   .info = snd_hdsp_info_spdif_sample_rate, \
1754   .get = snd_hdsp_get_spdif_sample_rate \
1755 }
1756
1757 static int snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1758 {
1759         static const char * const texts[] = {
1760                 "32000", "44100", "48000", "64000", "88200", "96000",
1761                 "None", "128000", "176400", "192000"
1762         };
1763         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1764
1765         return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
1766                                  texts);
1767 }
1768
1769 static int snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1770 {
1771         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1772
1773         switch (hdsp_spdif_sample_rate(hdsp)) {
1774         case 32000:
1775                 ucontrol->value.enumerated.item[0] = 0;
1776                 break;
1777         case 44100:
1778                 ucontrol->value.enumerated.item[0] = 1;
1779                 break;
1780         case 48000:
1781                 ucontrol->value.enumerated.item[0] = 2;
1782                 break;
1783         case 64000:
1784                 ucontrol->value.enumerated.item[0] = 3;
1785                 break;
1786         case 88200:
1787                 ucontrol->value.enumerated.item[0] = 4;
1788                 break;
1789         case 96000:
1790                 ucontrol->value.enumerated.item[0] = 5;
1791                 break;
1792         case 128000:
1793                 ucontrol->value.enumerated.item[0] = 7;
1794                 break;
1795         case 176400:
1796                 ucontrol->value.enumerated.item[0] = 8;
1797                 break;
1798         case 192000:
1799                 ucontrol->value.enumerated.item[0] = 9;
1800                 break;
1801         default:
1802                 ucontrol->value.enumerated.item[0] = 6;
1803         }
1804         return 0;
1805 }
1806
1807 #define HDSP_SYSTEM_SAMPLE_RATE(xname, xindex) \
1808 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1809   .name = xname, \
1810   .index = xindex, \
1811   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1812   .info = snd_hdsp_info_system_sample_rate, \
1813   .get = snd_hdsp_get_system_sample_rate \
1814 }
1815
1816 static int snd_hdsp_info_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1817 {
1818         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1819         uinfo->count = 1;
1820         return 0;
1821 }
1822
1823 static int snd_hdsp_get_system_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1824 {
1825         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1826
1827         ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
1828         return 0;
1829 }
1830
1831 #define HDSP_AUTOSYNC_SAMPLE_RATE(xname, xindex) \
1832 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1833   .name = xname, \
1834   .index = xindex, \
1835   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1836   .info = snd_hdsp_info_autosync_sample_rate, \
1837   .get = snd_hdsp_get_autosync_sample_rate \
1838 }
1839
1840 static int snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1841 {
1842         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1843         static const char * const texts[] = {
1844                 "32000", "44100", "48000", "64000", "88200", "96000",
1845                 "None", "128000", "176400", "192000"
1846         };
1847
1848         return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
1849                                  texts);
1850 }
1851
1852 static int snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1853 {
1854         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1855
1856         switch (hdsp_external_sample_rate(hdsp)) {
1857         case 32000:
1858                 ucontrol->value.enumerated.item[0] = 0;
1859                 break;
1860         case 44100:
1861                 ucontrol->value.enumerated.item[0] = 1;
1862                 break;
1863         case 48000:
1864                 ucontrol->value.enumerated.item[0] = 2;
1865                 break;
1866         case 64000:
1867                 ucontrol->value.enumerated.item[0] = 3;
1868                 break;
1869         case 88200:
1870                 ucontrol->value.enumerated.item[0] = 4;
1871                 break;
1872         case 96000:
1873                 ucontrol->value.enumerated.item[0] = 5;
1874                 break;
1875         case 128000:
1876                 ucontrol->value.enumerated.item[0] = 7;
1877                 break;
1878         case 176400:
1879                 ucontrol->value.enumerated.item[0] = 8;
1880                 break;
1881         case 192000:
1882                 ucontrol->value.enumerated.item[0] = 9;
1883                 break;
1884         default:
1885                 ucontrol->value.enumerated.item[0] = 6;
1886         }
1887         return 0;
1888 }
1889
1890 #define HDSP_SYSTEM_CLOCK_MODE(xname, xindex) \
1891 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1892   .name = xname, \
1893   .index = xindex, \
1894   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
1895   .info = snd_hdsp_info_system_clock_mode, \
1896   .get = snd_hdsp_get_system_clock_mode \
1897 }
1898
1899 static int hdsp_system_clock_mode(struct hdsp *hdsp)
1900 {
1901         if (hdsp->control_register & HDSP_ClockModeMaster)
1902                 return 0;
1903         else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate)
1904                         return 0;
1905         return 1;
1906 }
1907
1908 static int snd_hdsp_info_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1909 {
1910         static const char * const texts[] = {"Master", "Slave" };
1911
1912         return snd_ctl_enum_info(uinfo, 1, 2, texts);
1913 }
1914
1915 static int snd_hdsp_get_system_clock_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1916 {
1917         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
1918
1919         ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
1920         return 0;
1921 }
1922
1923 #define HDSP_CLOCK_SOURCE(xname, xindex) \
1924 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
1925   .name = xname, \
1926   .index = xindex, \
1927   .info = snd_hdsp_info_clock_source, \
1928   .get = snd_hdsp_get_clock_source, \
1929   .put = snd_hdsp_put_clock_source \
1930 }
1931
1932 static int hdsp_clock_source(struct hdsp *hdsp)
1933 {
1934         if (hdsp->control_register & HDSP_ClockModeMaster) {
1935                 switch (hdsp->system_sample_rate) {
1936                 case 32000:
1937                         return 1;
1938                 case 44100:
1939                         return 2;
1940                 case 48000:
1941                         return 3;
1942                 case 64000:
1943                         return 4;
1944                 case 88200:
1945                         return 5;
1946                 case 96000:
1947                         return 6;
1948                 case 128000:
1949                         return 7;
1950                 case 176400:
1951                         return 8;
1952                 case 192000:
1953                         return 9;
1954                 default:
1955                         return 3;
1956                 }
1957         } else {
1958                 return 0;
1959         }
1960 }
1961
1962 static int hdsp_set_clock_source(struct hdsp *hdsp, int mode)
1963 {
1964         int rate;
1965         switch (mode) {
1966         case HDSP_CLOCK_SOURCE_AUTOSYNC:
1967                 if (hdsp_external_sample_rate(hdsp) != 0) {
1968                     if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) {
1969                         hdsp->control_register &= ~HDSP_ClockModeMaster;
1970                         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1971                         return 0;
1972                     }
1973                 }
1974                 return -1;
1975         case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ:
1976                 rate = 32000;
1977                 break;
1978         case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
1979                 rate = 44100;
1980                 break;
1981         case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
1982                 rate = 48000;
1983                 break;
1984         case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ:
1985                 rate = 64000;
1986                 break;
1987         case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ:
1988                 rate = 88200;
1989                 break;
1990         case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ:
1991                 rate = 96000;
1992                 break;
1993         case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ:
1994                 rate = 128000;
1995                 break;
1996         case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ:
1997                 rate = 176400;
1998                 break;
1999         case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
2000                 rate = 192000;
2001                 break;
2002         default:
2003                 rate = 48000;
2004         }
2005         hdsp->control_register |= HDSP_ClockModeMaster;
2006         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2007         hdsp_set_rate(hdsp, rate, 1);
2008         return 0;
2009 }
2010
2011 static int snd_hdsp_info_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2012 {
2013         static const char * const texts[] = {
2014                 "AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz",
2015                 "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz",
2016                 "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz",
2017                 "Internal 192.0 KHz"
2018         };
2019         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2020
2021         return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
2022                                  texts);
2023 }
2024
2025 static int snd_hdsp_get_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2026 {
2027         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2028
2029         ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
2030         return 0;
2031 }
2032
2033 static int snd_hdsp_put_clock_source(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2034 {
2035         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2036         int change;
2037         int val;
2038
2039         if (!snd_hdsp_use_is_exclusive(hdsp))
2040                 return -EBUSY;
2041         val = ucontrol->value.enumerated.item[0];
2042         if (val < 0) val = 0;
2043         if (hdsp->io_type == H9632) {
2044                 if (val > 9)
2045                         val = 9;
2046         } else {
2047                 if (val > 6)
2048                         val = 6;
2049         }
2050         spin_lock_irq(&hdsp->lock);
2051         if (val != hdsp_clock_source(hdsp))
2052                 change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0;
2053         else
2054                 change = 0;
2055         spin_unlock_irq(&hdsp->lock);
2056         return change;
2057 }
2058
2059 #define snd_hdsp_info_clock_source_lock         snd_ctl_boolean_mono_info
2060
2061 static int snd_hdsp_get_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2062 {
2063         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2064
2065         ucontrol->value.integer.value[0] = hdsp->clock_source_locked;
2066         return 0;
2067 }
2068
2069 static int snd_hdsp_put_clock_source_lock(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2070 {
2071         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2072         int change;
2073
2074         change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked;
2075         if (change)
2076                 hdsp->clock_source_locked = !!ucontrol->value.integer.value[0];
2077         return change;
2078 }
2079
2080 #define HDSP_DA_GAIN(xname, xindex) \
2081 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2082   .name = xname, \
2083   .index = xindex, \
2084   .info = snd_hdsp_info_da_gain, \
2085   .get = snd_hdsp_get_da_gain, \
2086   .put = snd_hdsp_put_da_gain \
2087 }
2088
2089 static int hdsp_da_gain(struct hdsp *hdsp)
2090 {
2091         switch (hdsp->control_register & HDSP_DAGainMask) {
2092         case HDSP_DAGainHighGain:
2093                 return 0;
2094         case HDSP_DAGainPlus4dBu:
2095                 return 1;
2096         case HDSP_DAGainMinus10dBV:
2097                 return 2;
2098         default:
2099                 return 1;
2100         }
2101 }
2102
2103 static int hdsp_set_da_gain(struct hdsp *hdsp, int mode)
2104 {
2105         hdsp->control_register &= ~HDSP_DAGainMask;
2106         switch (mode) {
2107         case 0:
2108                 hdsp->control_register |= HDSP_DAGainHighGain;
2109                 break;
2110         case 1:
2111                 hdsp->control_register |= HDSP_DAGainPlus4dBu;
2112                 break;
2113         case 2:
2114                 hdsp->control_register |= HDSP_DAGainMinus10dBV;
2115                 break;
2116         default:
2117                 return -1;
2118
2119         }
2120         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2121         return 0;
2122 }
2123
2124 static int snd_hdsp_info_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2125 {
2126         static const char * const texts[] = {"Hi Gain", "+4 dBu", "-10 dbV"};
2127
2128         return snd_ctl_enum_info(uinfo, 1, 3, texts);
2129 }
2130
2131 static int snd_hdsp_get_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2132 {
2133         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2134
2135         ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
2136         return 0;
2137 }
2138
2139 static int snd_hdsp_put_da_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2140 {
2141         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2142         int change;
2143         int val;
2144
2145         if (!snd_hdsp_use_is_exclusive(hdsp))
2146                 return -EBUSY;
2147         val = ucontrol->value.enumerated.item[0];
2148         if (val < 0) val = 0;
2149         if (val > 2) val = 2;
2150         spin_lock_irq(&hdsp->lock);
2151         if (val != hdsp_da_gain(hdsp))
2152                 change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0;
2153         else
2154                 change = 0;
2155         spin_unlock_irq(&hdsp->lock);
2156         return change;
2157 }
2158
2159 #define HDSP_AD_GAIN(xname, xindex) \
2160 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2161   .name = xname, \
2162   .index = xindex, \
2163   .info = snd_hdsp_info_ad_gain, \
2164   .get = snd_hdsp_get_ad_gain, \
2165   .put = snd_hdsp_put_ad_gain \
2166 }
2167
2168 static int hdsp_ad_gain(struct hdsp *hdsp)
2169 {
2170         switch (hdsp->control_register & HDSP_ADGainMask) {
2171         case HDSP_ADGainMinus10dBV:
2172                 return 0;
2173         case HDSP_ADGainPlus4dBu:
2174                 return 1;
2175         case HDSP_ADGainLowGain:
2176                 return 2;
2177         default:
2178                 return 1;
2179         }
2180 }
2181
2182 static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode)
2183 {
2184         hdsp->control_register &= ~HDSP_ADGainMask;
2185         switch (mode) {
2186         case 0:
2187                 hdsp->control_register |= HDSP_ADGainMinus10dBV;
2188                 break;
2189         case 1:
2190                 hdsp->control_register |= HDSP_ADGainPlus4dBu;
2191                 break;
2192         case 2:
2193                 hdsp->control_register |= HDSP_ADGainLowGain;
2194                 break;
2195         default:
2196                 return -1;
2197
2198         }
2199         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2200         return 0;
2201 }
2202
2203 static int snd_hdsp_info_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2204 {
2205         static const char * const texts[] = {"-10 dBV", "+4 dBu", "Lo Gain"};
2206
2207         return snd_ctl_enum_info(uinfo, 1, 3, texts);
2208 }
2209
2210 static int snd_hdsp_get_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2211 {
2212         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2213
2214         ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
2215         return 0;
2216 }
2217
2218 static int snd_hdsp_put_ad_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2219 {
2220         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2221         int change;
2222         int val;
2223
2224         if (!snd_hdsp_use_is_exclusive(hdsp))
2225                 return -EBUSY;
2226         val = ucontrol->value.enumerated.item[0];
2227         if (val < 0) val = 0;
2228         if (val > 2) val = 2;
2229         spin_lock_irq(&hdsp->lock);
2230         if (val != hdsp_ad_gain(hdsp))
2231                 change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0;
2232         else
2233                 change = 0;
2234         spin_unlock_irq(&hdsp->lock);
2235         return change;
2236 }
2237
2238 #define HDSP_PHONE_GAIN(xname, xindex) \
2239 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2240   .name = xname, \
2241   .index = xindex, \
2242   .info = snd_hdsp_info_phone_gain, \
2243   .get = snd_hdsp_get_phone_gain, \
2244   .put = snd_hdsp_put_phone_gain \
2245 }
2246
2247 static int hdsp_phone_gain(struct hdsp *hdsp)
2248 {
2249         switch (hdsp->control_register & HDSP_PhoneGainMask) {
2250         case HDSP_PhoneGain0dB:
2251                 return 0;
2252         case HDSP_PhoneGainMinus6dB:
2253                 return 1;
2254         case HDSP_PhoneGainMinus12dB:
2255                 return 2;
2256         default:
2257                 return 0;
2258         }
2259 }
2260
2261 static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode)
2262 {
2263         hdsp->control_register &= ~HDSP_PhoneGainMask;
2264         switch (mode) {
2265         case 0:
2266                 hdsp->control_register |= HDSP_PhoneGain0dB;
2267                 break;
2268         case 1:
2269                 hdsp->control_register |= HDSP_PhoneGainMinus6dB;
2270                 break;
2271         case 2:
2272                 hdsp->control_register |= HDSP_PhoneGainMinus12dB;
2273                 break;
2274         default:
2275                 return -1;
2276
2277         }
2278         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2279         return 0;
2280 }
2281
2282 static int snd_hdsp_info_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2283 {
2284         static const char * const texts[] = {"0 dB", "-6 dB", "-12 dB"};
2285
2286         return snd_ctl_enum_info(uinfo, 1, 3, texts);
2287 }
2288
2289 static int snd_hdsp_get_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2290 {
2291         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2292
2293         ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
2294         return 0;
2295 }
2296
2297 static int snd_hdsp_put_phone_gain(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2298 {
2299         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2300         int change;
2301         int val;
2302
2303         if (!snd_hdsp_use_is_exclusive(hdsp))
2304                 return -EBUSY;
2305         val = ucontrol->value.enumerated.item[0];
2306         if (val < 0) val = 0;
2307         if (val > 2) val = 2;
2308         spin_lock_irq(&hdsp->lock);
2309         if (val != hdsp_phone_gain(hdsp))
2310                 change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0;
2311         else
2312                 change = 0;
2313         spin_unlock_irq(&hdsp->lock);
2314         return change;
2315 }
2316
2317 #define HDSP_PREF_SYNC_REF(xname, xindex) \
2318 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2319   .name = xname, \
2320   .index = xindex, \
2321   .info = snd_hdsp_info_pref_sync_ref, \
2322   .get = snd_hdsp_get_pref_sync_ref, \
2323   .put = snd_hdsp_put_pref_sync_ref \
2324 }
2325
2326 static int hdsp_pref_sync_ref(struct hdsp *hdsp)
2327 {
2328         /* Notice that this looks at the requested sync source,
2329            not the one actually in use.
2330         */
2331
2332         switch (hdsp->control_register & HDSP_SyncRefMask) {
2333         case HDSP_SyncRef_ADAT1:
2334                 return HDSP_SYNC_FROM_ADAT1;
2335         case HDSP_SyncRef_ADAT2:
2336                 return HDSP_SYNC_FROM_ADAT2;
2337         case HDSP_SyncRef_ADAT3:
2338                 return HDSP_SYNC_FROM_ADAT3;
2339         case HDSP_SyncRef_SPDIF:
2340                 return HDSP_SYNC_FROM_SPDIF;
2341         case HDSP_SyncRef_WORD:
2342                 return HDSP_SYNC_FROM_WORD;
2343         case HDSP_SyncRef_ADAT_SYNC:
2344                 return HDSP_SYNC_FROM_ADAT_SYNC;
2345         default:
2346                 return HDSP_SYNC_FROM_WORD;
2347         }
2348         return 0;
2349 }
2350
2351 static int hdsp_set_pref_sync_ref(struct hdsp *hdsp, int pref)
2352 {
2353         hdsp->control_register &= ~HDSP_SyncRefMask;
2354         switch (pref) {
2355         case HDSP_SYNC_FROM_ADAT1:
2356                 hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */
2357                 break;
2358         case HDSP_SYNC_FROM_ADAT2:
2359                 hdsp->control_register |= HDSP_SyncRef_ADAT2;
2360                 break;
2361         case HDSP_SYNC_FROM_ADAT3:
2362                 hdsp->control_register |= HDSP_SyncRef_ADAT3;
2363                 break;
2364         case HDSP_SYNC_FROM_SPDIF:
2365                 hdsp->control_register |= HDSP_SyncRef_SPDIF;
2366                 break;
2367         case HDSP_SYNC_FROM_WORD:
2368                 hdsp->control_register |= HDSP_SyncRef_WORD;
2369                 break;
2370         case HDSP_SYNC_FROM_ADAT_SYNC:
2371                 hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC;
2372                 break;
2373         default:
2374                 return -1;
2375         }
2376         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
2377         return 0;
2378 }
2379
2380 static int snd_hdsp_info_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2381 {
2382         static const char * const texts[] = {
2383                 "Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3"
2384         };
2385         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2386         int num_items;
2387
2388         switch (hdsp->io_type) {
2389         case Digiface:
2390         case H9652:
2391                 num_items = 6;
2392                 break;
2393         case Multiface:
2394                 num_items = 4;
2395                 break;
2396         case H9632:
2397                 num_items = 3;
2398                 break;
2399         default:
2400                 return -EINVAL;
2401         }
2402
2403         return snd_ctl_enum_info(uinfo, 1, num_items, texts);
2404 }
2405
2406 static int snd_hdsp_get_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2407 {
2408         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2409
2410         ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
2411         return 0;
2412 }
2413
2414 static int snd_hdsp_put_pref_sync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2415 {
2416         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2417         int change, max;
2418         unsigned int val;
2419
2420         if (!snd_hdsp_use_is_exclusive(hdsp))
2421                 return -EBUSY;
2422
2423         switch (hdsp->io_type) {
2424         case Digiface:
2425         case H9652:
2426                 max = 6;
2427                 break;
2428         case Multiface:
2429                 max = 4;
2430                 break;
2431         case H9632:
2432                 max = 3;
2433                 break;
2434         default:
2435                 return -EIO;
2436         }
2437
2438         val = ucontrol->value.enumerated.item[0] % max;
2439         spin_lock_irq(&hdsp->lock);
2440         change = (int)val != hdsp_pref_sync_ref(hdsp);
2441         hdsp_set_pref_sync_ref(hdsp, val);
2442         spin_unlock_irq(&hdsp->lock);
2443         return change;
2444 }
2445
2446 #define HDSP_AUTOSYNC_REF(xname, xindex) \
2447 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2448   .name = xname, \
2449   .index = xindex, \
2450   .access = SNDRV_CTL_ELEM_ACCESS_READ, \
2451   .info = snd_hdsp_info_autosync_ref, \
2452   .get = snd_hdsp_get_autosync_ref, \
2453 }
2454
2455 static int hdsp_autosync_ref(struct hdsp *hdsp)
2456 {
2457         /* This looks at the autosync selected sync reference */
2458         unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
2459
2460         switch (status2 & HDSP_SelSyncRefMask) {
2461         case HDSP_SelSyncRef_WORD:
2462                 return HDSP_AUTOSYNC_FROM_WORD;
2463         case HDSP_SelSyncRef_ADAT_SYNC:
2464                 return HDSP_AUTOSYNC_FROM_ADAT_SYNC;
2465         case HDSP_SelSyncRef_SPDIF:
2466                 return HDSP_AUTOSYNC_FROM_SPDIF;
2467         case HDSP_SelSyncRefMask:
2468                 return HDSP_AUTOSYNC_FROM_NONE;
2469         case HDSP_SelSyncRef_ADAT1:
2470                 return HDSP_AUTOSYNC_FROM_ADAT1;
2471         case HDSP_SelSyncRef_ADAT2:
2472                 return HDSP_AUTOSYNC_FROM_ADAT2;
2473         case HDSP_SelSyncRef_ADAT3:
2474                 return HDSP_AUTOSYNC_FROM_ADAT3;
2475         default:
2476                 return HDSP_AUTOSYNC_FROM_WORD;
2477         }
2478         return 0;
2479 }
2480
2481 static int snd_hdsp_info_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2482 {
2483         static const char * const texts[] = {
2484                 "Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3"
2485         };
2486
2487         return snd_ctl_enum_info(uinfo, 1, 7, texts);
2488 }
2489
2490 static int snd_hdsp_get_autosync_ref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2491 {
2492         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2493
2494         ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp);
2495         return 0;
2496 }
2497
2498 #define HDSP_PRECISE_POINTER(xname, xindex) \
2499 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \
2500   .name = xname, \
2501   .index = xindex, \
2502   .info = snd_hdsp_info_precise_pointer, \
2503   .get = snd_hdsp_get_precise_pointer, \
2504   .put = snd_hdsp_put_precise_pointer \
2505 }
2506
2507 static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise)
2508 {
2509         if (precise)
2510                 hdsp->precise_ptr = 1;
2511         else
2512                 hdsp->precise_ptr = 0;
2513         return 0;
2514 }
2515
2516 #define snd_hdsp_info_precise_pointer           snd_ctl_boolean_mono_info
2517
2518 static int snd_hdsp_get_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2519 {
2520         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2521
2522         spin_lock_irq(&hdsp->lock);
2523         ucontrol->value.integer.value[0] = hdsp->precise_ptr;
2524         spin_unlock_irq(&hdsp->lock);
2525         return 0;
2526 }
2527
2528 static int snd_hdsp_put_precise_pointer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2529 {
2530         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2531         int change;
2532         unsigned int val;
2533
2534         if (!snd_hdsp_use_is_exclusive(hdsp))
2535                 return -EBUSY;
2536         val = ucontrol->value.integer.value[0] & 1;
2537         spin_lock_irq(&hdsp->lock);
2538         change = (int)val != hdsp->precise_ptr;
2539         hdsp_set_precise_pointer(hdsp, val);
2540         spin_unlock_irq(&hdsp->lock);
2541         return change;
2542 }
2543
2544 #define HDSP_USE_MIDI_WORK(xname, xindex) \
2545 { .iface = SNDRV_CTL_ELEM_IFACE_CARD, \
2546   .name = xname, \
2547   .index = xindex, \
2548   .info = snd_hdsp_info_use_midi_work, \
2549   .get = snd_hdsp_get_use_midi_work, \
2550   .put = snd_hdsp_put_use_midi_work \
2551 }
2552
2553 static int hdsp_set_use_midi_work(struct hdsp *hdsp, int use_work)
2554 {
2555         if (use_work)
2556                 hdsp->use_midi_work = 1;
2557         else
2558                 hdsp->use_midi_work = 0;
2559         return 0;
2560 }
2561
2562 #define snd_hdsp_info_use_midi_work             snd_ctl_boolean_mono_info
2563
2564 static int snd_hdsp_get_use_midi_work(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2565 {
2566         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2567
2568         spin_lock_irq(&hdsp->lock);
2569         ucontrol->value.integer.value[0] = hdsp->use_midi_work;
2570         spin_unlock_irq(&hdsp->lock);
2571         return 0;
2572 }
2573
2574 static int snd_hdsp_put_use_midi_work(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2575 {
2576         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2577         int change;
2578         unsigned int val;
2579
2580         if (!snd_hdsp_use_is_exclusive(hdsp))
2581                 return -EBUSY;
2582         val = ucontrol->value.integer.value[0] & 1;
2583         spin_lock_irq(&hdsp->lock);
2584         change = (int)val != hdsp->use_midi_work;
2585         hdsp_set_use_midi_work(hdsp, val);
2586         spin_unlock_irq(&hdsp->lock);
2587         return change;
2588 }
2589
2590 #define HDSP_MIXER(xname, xindex) \
2591 { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \
2592   .name = xname, \
2593   .index = xindex, \
2594   .device = 0, \
2595   .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
2596                  SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2597   .info = snd_hdsp_info_mixer, \
2598   .get = snd_hdsp_get_mixer, \
2599   .put = snd_hdsp_put_mixer \
2600 }
2601
2602 static int snd_hdsp_info_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2603 {
2604         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2605         uinfo->count = 3;
2606         uinfo->value.integer.min = 0;
2607         uinfo->value.integer.max = 65536;
2608         uinfo->value.integer.step = 1;
2609         return 0;
2610 }
2611
2612 static int snd_hdsp_get_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2613 {
2614         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2615         int source;
2616         int destination;
2617         int addr;
2618
2619         source = ucontrol->value.integer.value[0];
2620         destination = ucontrol->value.integer.value[1];
2621
2622         if (source >= hdsp->max_channels)
2623                 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
2624         else
2625                 addr = hdsp_input_to_output_key(hdsp,source, destination);
2626
2627         spin_lock_irq(&hdsp->lock);
2628         ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
2629         spin_unlock_irq(&hdsp->lock);
2630         return 0;
2631 }
2632
2633 static int snd_hdsp_put_mixer(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2634 {
2635         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2636         int change;
2637         int source;
2638         int destination;
2639         int gain;
2640         int addr;
2641
2642         if (!snd_hdsp_use_is_exclusive(hdsp))
2643                 return -EBUSY;
2644
2645         source = ucontrol->value.integer.value[0];
2646         destination = ucontrol->value.integer.value[1];
2647
2648         if (source >= hdsp->max_channels)
2649                 addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination);
2650         else
2651                 addr = hdsp_input_to_output_key(hdsp,source, destination);
2652
2653         gain = ucontrol->value.integer.value[2];
2654
2655         spin_lock_irq(&hdsp->lock);
2656         change = gain != hdsp_read_gain(hdsp, addr);
2657         if (change)
2658                 hdsp_write_gain(hdsp, addr, gain);
2659         spin_unlock_irq(&hdsp->lock);
2660         return change;
2661 }
2662
2663 #define HDSP_WC_SYNC_CHECK(xname, xindex) \
2664 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2665   .name = xname, \
2666   .index = xindex, \
2667   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2668   .info = snd_hdsp_info_sync_check, \
2669   .get = snd_hdsp_get_wc_sync_check \
2670 }
2671
2672 static int snd_hdsp_info_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2673 {
2674         static const char * const texts[] = {"No Lock", "Lock", "Sync" };
2675
2676         return snd_ctl_enum_info(uinfo, 1, 3, texts);
2677 }
2678
2679 static int hdsp_wc_sync_check(struct hdsp *hdsp)
2680 {
2681         int status2 = hdsp_read(hdsp, HDSP_status2Register);
2682         if (status2 & HDSP_wc_lock) {
2683                 if (status2 & HDSP_wc_sync)
2684                         return 2;
2685                 else
2686                          return 1;
2687         } else
2688                 return 0;
2689         return 0;
2690 }
2691
2692 static int snd_hdsp_get_wc_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2693 {
2694         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2695
2696         ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp);
2697         return 0;
2698 }
2699
2700 #define HDSP_SPDIF_SYNC_CHECK(xname, xindex) \
2701 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2702   .name = xname, \
2703   .index = xindex, \
2704   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2705   .info = snd_hdsp_info_sync_check, \
2706   .get = snd_hdsp_get_spdif_sync_check \
2707 }
2708
2709 static int hdsp_spdif_sync_check(struct hdsp *hdsp)
2710 {
2711         int status = hdsp_read(hdsp, HDSP_statusRegister);
2712         if (status & HDSP_SPDIFErrorFlag)
2713                 return 0;
2714         else {
2715                 if (status & HDSP_SPDIFSync)
2716                         return 2;
2717                 else
2718                         return 1;
2719         }
2720         return 0;
2721 }
2722
2723 static int snd_hdsp_get_spdif_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2724 {
2725         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2726
2727         ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp);
2728         return 0;
2729 }
2730
2731 #define HDSP_ADATSYNC_SYNC_CHECK(xname, xindex) \
2732 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2733   .name = xname, \
2734   .index = xindex, \
2735   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2736   .info = snd_hdsp_info_sync_check, \
2737   .get = snd_hdsp_get_adatsync_sync_check \
2738 }
2739
2740 static int hdsp_adatsync_sync_check(struct hdsp *hdsp)
2741 {
2742         int status = hdsp_read(hdsp, HDSP_statusRegister);
2743         if (status & HDSP_TimecodeLock) {
2744                 if (status & HDSP_TimecodeSync)
2745                         return 2;
2746                 else
2747                         return 1;
2748         } else
2749                 return 0;
2750 }
2751
2752 static int snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2753 {
2754         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2755
2756         ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp);
2757         return 0;
2758 }
2759
2760 #define HDSP_ADAT_SYNC_CHECK \
2761 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2762   .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2763   .info = snd_hdsp_info_sync_check, \
2764   .get = snd_hdsp_get_adat_sync_check \
2765 }
2766
2767 static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx)
2768 {
2769         int status = hdsp_read(hdsp, HDSP_statusRegister);
2770
2771         if (status & (HDSP_Lock0>>idx)) {
2772                 if (status & (HDSP_Sync0>>idx))
2773                         return 2;
2774                 else
2775                         return 1;
2776         } else
2777                 return 0;
2778 }
2779
2780 static int snd_hdsp_get_adat_sync_check(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2781 {
2782         int offset;
2783         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2784
2785         offset = ucontrol->id.index - 1;
2786         if (snd_BUG_ON(offset < 0))
2787                 return -EINVAL;
2788
2789         switch (hdsp->io_type) {
2790         case Digiface:
2791         case H9652:
2792                 if (offset >= 3)
2793                         return -EINVAL;
2794                 break;
2795         case Multiface:
2796         case H9632:
2797                 if (offset >= 1)
2798                         return -EINVAL;
2799                 break;
2800         default:
2801                 return -EIO;
2802         }
2803
2804         ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset);
2805         return 0;
2806 }
2807
2808 #define HDSP_DDS_OFFSET(xname, xindex) \
2809 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2810   .name = xname, \
2811   .index = xindex, \
2812   .info = snd_hdsp_info_dds_offset, \
2813   .get = snd_hdsp_get_dds_offset, \
2814   .put = snd_hdsp_put_dds_offset \
2815 }
2816
2817 static int hdsp_dds_offset(struct hdsp *hdsp)
2818 {
2819         u64 n;
2820         unsigned int dds_value = hdsp->dds_value;
2821         int system_sample_rate = hdsp->system_sample_rate;
2822
2823         if (!dds_value)
2824                 return 0;
2825
2826         n = DDS_NUMERATOR;
2827         /*
2828          * dds_value = n / rate
2829          * rate = n / dds_value
2830          */
2831         n = div_u64(n, dds_value);
2832         if (system_sample_rate >= 112000)
2833                 n *= 4;
2834         else if (system_sample_rate >= 56000)
2835                 n *= 2;
2836         return ((int)n) - system_sample_rate;
2837 }
2838
2839 static int hdsp_set_dds_offset(struct hdsp *hdsp, int offset_hz)
2840 {
2841         int rate = hdsp->system_sample_rate + offset_hz;
2842         hdsp_set_dds_value(hdsp, rate);
2843         return 0;
2844 }
2845
2846 static int snd_hdsp_info_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2847 {
2848         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2849         uinfo->count = 1;
2850         uinfo->value.integer.min = -5000;
2851         uinfo->value.integer.max = 5000;
2852         return 0;
2853 }
2854
2855 static int snd_hdsp_get_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2856 {
2857         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2858
2859         ucontrol->value.integer.value[0] = hdsp_dds_offset(hdsp);
2860         return 0;
2861 }
2862
2863 static int snd_hdsp_put_dds_offset(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2864 {
2865         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2866         int change;
2867         int val;
2868
2869         if (!snd_hdsp_use_is_exclusive(hdsp))
2870                 return -EBUSY;
2871         val = ucontrol->value.integer.value[0];
2872         spin_lock_irq(&hdsp->lock);
2873         if (val != hdsp_dds_offset(hdsp))
2874                 change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0;
2875         else
2876                 change = 0;
2877         spin_unlock_irq(&hdsp->lock);
2878         return change;
2879 }
2880
2881 static const struct snd_kcontrol_new snd_hdsp_9632_controls[] = {
2882 HDSP_DA_GAIN("DA Gain", 0),
2883 HDSP_AD_GAIN("AD Gain", 0),
2884 HDSP_PHONE_GAIN("Phones Gain", 0),
2885 HDSP_TOGGLE_SETTING("XLR Breakout Cable", HDSP_XLRBreakoutCable),
2886 HDSP_DDS_OFFSET("DDS Sample Rate Offset", 0)
2887 };
2888
2889 static const struct snd_kcontrol_new snd_hdsp_controls[] = {
2890 {
2891         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2892         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2893         .info =         snd_hdsp_control_spdif_info,
2894         .get =          snd_hdsp_control_spdif_get,
2895         .put =          snd_hdsp_control_spdif_put,
2896 },
2897 {
2898         .access =       SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
2899         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2900         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM),
2901         .info =         snd_hdsp_control_spdif_stream_info,
2902         .get =          snd_hdsp_control_spdif_stream_get,
2903         .put =          snd_hdsp_control_spdif_stream_put,
2904 },
2905 {
2906         .access =       SNDRV_CTL_ELEM_ACCESS_READ,
2907         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2908         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
2909         .info =         snd_hdsp_control_spdif_mask_info,
2910         .get =          snd_hdsp_control_spdif_mask_get,
2911         .private_value = IEC958_AES0_NONAUDIO |
2912                          IEC958_AES0_PROFESSIONAL |
2913                          IEC958_AES0_CON_EMPHASIS,
2914 },
2915 {
2916         .access =       SNDRV_CTL_ELEM_ACCESS_READ,
2917         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2918         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2919         .info =         snd_hdsp_control_spdif_mask_info,
2920         .get =          snd_hdsp_control_spdif_mask_get,
2921         .private_value = IEC958_AES0_NONAUDIO |
2922                          IEC958_AES0_PROFESSIONAL |
2923                          IEC958_AES0_PRO_EMPHASIS,
2924 },
2925 HDSP_MIXER("Mixer", 0),
2926 HDSP_SPDIF_IN("IEC958 Input Connector", 0),
2927 HDSP_TOGGLE_SETTING("IEC958 Output also on ADAT1", HDSP_SPDIFOpticalOut),
2928 HDSP_TOGGLE_SETTING("IEC958 Professional Bit", HDSP_SPDIFProfessional),
2929 HDSP_TOGGLE_SETTING("IEC958 Emphasis Bit", HDSP_SPDIFEmphasis),
2930 HDSP_TOGGLE_SETTING("IEC958 Non-audio Bit", HDSP_SPDIFNonAudio),
2931 /* 'Sample Clock Source' complies with the alsa control naming scheme */
2932 HDSP_CLOCK_SOURCE("Sample Clock Source", 0),
2933 {
2934         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
2935         .name = "Sample Clock Source Locking",
2936         .info = snd_hdsp_info_clock_source_lock,
2937         .get = snd_hdsp_get_clock_source_lock,
2938         .put = snd_hdsp_put_clock_source_lock,
2939 },
2940 HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0),
2941 HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0),
2942 HDSP_AUTOSYNC_REF("AutoSync Reference", 0),
2943 HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0),
2944 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
2945 /* 'External Rate' complies with the alsa control naming scheme */
2946 HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0),
2947 HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0),
2948 HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0),
2949 HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0),
2950 HDSP_TOGGLE_SETTING("Line Out", HDSP_LineOut),
2951 HDSP_PRECISE_POINTER("Precise Pointer", 0),
2952 HDSP_USE_MIDI_WORK("Use Midi Tasklet", 0),
2953 };
2954
2955
2956 static int hdsp_rpm_input12(struct hdsp *hdsp)
2957 {
2958         switch (hdsp->control_register & HDSP_RPM_Inp12) {
2959         case HDSP_RPM_Inp12_Phon_6dB:
2960                 return 0;
2961         case HDSP_RPM_Inp12_Phon_n6dB:
2962                 return 2;
2963         case HDSP_RPM_Inp12_Line_0dB:
2964                 return 3;
2965         case HDSP_RPM_Inp12_Line_n6dB:
2966                 return 4;
2967         }
2968         return 1;
2969 }
2970
2971
2972 static int snd_hdsp_get_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2973 {
2974         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
2975
2976         ucontrol->value.enumerated.item[0] = hdsp_rpm_input12(hdsp);
2977         return 0;
2978 }
2979
2980
2981 static int hdsp_set_rpm_input12(struct hdsp *hdsp, int mode)
2982 {
2983         hdsp->control_register &= ~HDSP_RPM_Inp12;
2984         switch (mode) {
2985         case 0:
2986                 hdsp->control_register |= HDSP_RPM_Inp12_Phon_6dB;
2987                 break;
2988         case 1:
2989                 break;
2990         case 2:
2991                 hdsp->control_register |= HDSP_RPM_Inp12_Phon_n6dB;
2992                 break;
2993         case 3:
2994                 hdsp->control_register |= HDSP_RPM_Inp12_Line_0dB;
2995                 break;
2996         case 4:
2997                 hdsp->control_register |= HDSP_RPM_Inp12_Line_n6dB;
2998                 break;
2999         default:
3000                 return -1;
3001         }
3002
3003         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3004         return 0;
3005 }
3006
3007
3008 static int snd_hdsp_put_rpm_input12(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3009 {
3010         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3011         int change;
3012         int val;
3013
3014         if (!snd_hdsp_use_is_exclusive(hdsp))
3015                 return -EBUSY;
3016         val = ucontrol->value.enumerated.item[0];
3017         if (val < 0)
3018                 val = 0;
3019         if (val > 4)
3020                 val = 4;
3021         spin_lock_irq(&hdsp->lock);
3022         if (val != hdsp_rpm_input12(hdsp))
3023                 change = (hdsp_set_rpm_input12(hdsp, val) == 0) ? 1 : 0;
3024         else
3025                 change = 0;
3026         spin_unlock_irq(&hdsp->lock);
3027         return change;
3028 }
3029
3030
3031 static int snd_hdsp_info_rpm_input(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3032 {
3033         static const char * const texts[] = {
3034                 "Phono +6dB", "Phono 0dB", "Phono -6dB", "Line 0dB", "Line -6dB"
3035         };
3036
3037         return snd_ctl_enum_info(uinfo, 1, 5, texts);
3038 }
3039
3040
3041 static int hdsp_rpm_input34(struct hdsp *hdsp)
3042 {
3043         switch (hdsp->control_register & HDSP_RPM_Inp34) {
3044         case HDSP_RPM_Inp34_Phon_6dB:
3045                 return 0;
3046         case HDSP_RPM_Inp34_Phon_n6dB:
3047                 return 2;
3048         case HDSP_RPM_Inp34_Line_0dB:
3049                 return 3;
3050         case HDSP_RPM_Inp34_Line_n6dB:
3051                 return 4;
3052         }
3053         return 1;
3054 }
3055
3056
3057 static int snd_hdsp_get_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3058 {
3059         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3060
3061         ucontrol->value.enumerated.item[0] = hdsp_rpm_input34(hdsp);
3062         return 0;
3063 }
3064
3065
3066 static int hdsp_set_rpm_input34(struct hdsp *hdsp, int mode)
3067 {
3068         hdsp->control_register &= ~HDSP_RPM_Inp34;
3069         switch (mode) {
3070         case 0:
3071                 hdsp->control_register |= HDSP_RPM_Inp34_Phon_6dB;
3072                 break;
3073         case 1:
3074                 break;
3075         case 2:
3076                 hdsp->control_register |= HDSP_RPM_Inp34_Phon_n6dB;
3077                 break;
3078         case 3:
3079                 hdsp->control_register |= HDSP_RPM_Inp34_Line_0dB;
3080                 break;
3081         case 4:
3082                 hdsp->control_register |= HDSP_RPM_Inp34_Line_n6dB;
3083                 break;
3084         default:
3085                 return -1;
3086         }
3087
3088         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3089         return 0;
3090 }
3091
3092
3093 static int snd_hdsp_put_rpm_input34(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3094 {
3095         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3096         int change;
3097         int val;
3098
3099         if (!snd_hdsp_use_is_exclusive(hdsp))
3100                 return -EBUSY;
3101         val = ucontrol->value.enumerated.item[0];
3102         if (val < 0)
3103                 val = 0;
3104         if (val > 4)
3105                 val = 4;
3106         spin_lock_irq(&hdsp->lock);
3107         if (val != hdsp_rpm_input34(hdsp))
3108                 change = (hdsp_set_rpm_input34(hdsp, val) == 0) ? 1 : 0;
3109         else
3110                 change = 0;
3111         spin_unlock_irq(&hdsp->lock);
3112         return change;
3113 }
3114
3115
3116 /* RPM Bypass switch */
3117 static int hdsp_rpm_bypass(struct hdsp *hdsp)
3118 {
3119         return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0;
3120 }
3121
3122
3123 static int snd_hdsp_get_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3124 {
3125         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3126
3127         ucontrol->value.integer.value[0] = hdsp_rpm_bypass(hdsp);
3128         return 0;
3129 }
3130
3131
3132 static int hdsp_set_rpm_bypass(struct hdsp *hdsp, int on)
3133 {
3134         if (on)
3135                 hdsp->control_register |= HDSP_RPM_Bypass;
3136         else
3137                 hdsp->control_register &= ~HDSP_RPM_Bypass;
3138         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3139         return 0;
3140 }
3141
3142
3143 static int snd_hdsp_put_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3144 {
3145         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3146         int change;
3147         unsigned int val;
3148
3149         if (!snd_hdsp_use_is_exclusive(hdsp))
3150                 return -EBUSY;
3151         val = ucontrol->value.integer.value[0] & 1;
3152         spin_lock_irq(&hdsp->lock);
3153         change = (int)val != hdsp_rpm_bypass(hdsp);
3154         hdsp_set_rpm_bypass(hdsp, val);
3155         spin_unlock_irq(&hdsp->lock);
3156         return change;
3157 }
3158
3159
3160 static int snd_hdsp_info_rpm_bypass(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3161 {
3162         static const char * const texts[] = {"On", "Off"};
3163
3164         return snd_ctl_enum_info(uinfo, 1, 2, texts);
3165 }
3166
3167
3168 /* RPM Disconnect switch */
3169 static int hdsp_rpm_disconnect(struct hdsp *hdsp)
3170 {
3171         return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0;
3172 }
3173
3174
3175 static int snd_hdsp_get_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3176 {
3177         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3178
3179         ucontrol->value.integer.value[0] = hdsp_rpm_disconnect(hdsp);
3180         return 0;
3181 }
3182
3183
3184 static int hdsp_set_rpm_disconnect(struct hdsp *hdsp, int on)
3185 {
3186         if (on)
3187                 hdsp->control_register |= HDSP_RPM_Disconnect;
3188         else
3189                 hdsp->control_register &= ~HDSP_RPM_Disconnect;
3190         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3191         return 0;
3192 }
3193
3194
3195 static int snd_hdsp_put_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
3196 {
3197         struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
3198         int change;
3199         unsigned int val;
3200
3201         if (!snd_hdsp_use_is_exclusive(hdsp))
3202                 return -EBUSY;
3203         val = ucontrol->value.integer.value[0] & 1;
3204         spin_lock_irq(&hdsp->lock);
3205         change = (int)val != hdsp_rpm_disconnect(hdsp);
3206         hdsp_set_rpm_disconnect(hdsp, val);
3207         spin_unlock_irq(&hdsp->lock);
3208         return change;
3209 }
3210
3211 static int snd_hdsp_info_rpm_disconnect(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
3212 {
3213         static const char * const texts[] = {"On", "Off"};
3214
3215         return snd_ctl_enum_info(uinfo, 1, 2, texts);
3216 }
3217
3218 static const struct snd_kcontrol_new snd_hdsp_rpm_controls[] = {
3219         {
3220                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3221                 .name = "RPM Bypass",
3222                 .get = snd_hdsp_get_rpm_bypass,
3223                 .put = snd_hdsp_put_rpm_bypass,
3224                 .info = snd_hdsp_info_rpm_bypass
3225         },
3226         {
3227                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3228                 .name = "RPM Disconnect",
3229                 .get = snd_hdsp_get_rpm_disconnect,
3230                 .put = snd_hdsp_put_rpm_disconnect,
3231                 .info = snd_hdsp_info_rpm_disconnect
3232         },
3233         {
3234                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3235                 .name = "Input 1/2",
3236                 .get = snd_hdsp_get_rpm_input12,
3237                 .put = snd_hdsp_put_rpm_input12,
3238                 .info = snd_hdsp_info_rpm_input
3239         },
3240         {
3241                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
3242                 .name = "Input 3/4",
3243                 .get = snd_hdsp_get_rpm_input34,
3244                 .put = snd_hdsp_put_rpm_input34,
3245                 .info = snd_hdsp_info_rpm_input
3246         },
3247         HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
3248         HDSP_MIXER("Mixer", 0)
3249 };
3250
3251 static const struct snd_kcontrol_new snd_hdsp_96xx_aeb =
3252         HDSP_TOGGLE_SETTING("Analog Extension Board",
3253                         HDSP_AnalogExtensionBoard);
3254 static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK;
3255
3256 static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
3257 {
3258         unsigned int idx;
3259         int err;
3260         struct snd_kcontrol *kctl;
3261
3262         if (hdsp->io_type == RPM) {
3263                 /* RPM Bypass, Disconnect and Input switches */
3264                 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_rpm_controls); idx++) {
3265                         err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_rpm_controls[idx], hdsp));
3266                         if (err < 0)
3267                                 return err;
3268                 }
3269                 return 0;
3270         }
3271
3272         for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) {
3273                 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp))) < 0)
3274                         return err;
3275                 if (idx == 1)   /* IEC958 (S/PDIF) Stream */
3276                         hdsp->spdif_ctl = kctl;
3277         }
3278
3279         /* ADAT SyncCheck status */
3280         snd_hdsp_adat_sync_check.name = "ADAT Lock Status";
3281         snd_hdsp_adat_sync_check.index = 1;
3282         if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp))))
3283                 return err;
3284         if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
3285                 for (idx = 1; idx < 3; ++idx) {
3286                         snd_hdsp_adat_sync_check.index = idx+1;
3287                         if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp))))
3288                                 return err;
3289                 }
3290         }
3291
3292         /* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
3293         if (hdsp->io_type == H9632) {
3294                 for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
3295                         if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp))) < 0)
3296                                 return err;
3297                 }
3298         }
3299
3300         /* AEB control for H96xx card */
3301         if (hdsp->io_type == H9632 || hdsp->io_type == H9652) {
3302                 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp))) < 0)
3303                                 return err;
3304         }
3305
3306         return 0;
3307 }
3308
3309 /*------------------------------------------------------------
3310    /proc interface
3311  ------------------------------------------------------------*/
3312
3313 static void
3314 snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
3315 {
3316         struct hdsp *hdsp = entry->private_data;
3317         unsigned int status;
3318         unsigned int status2;
3319         char *pref_sync_ref;
3320         char *autosync_ref;
3321         char *system_clock_mode;
3322         char *clock_source;
3323         int x;
3324
3325         status = hdsp_read(hdsp, HDSP_statusRegister);
3326         status2 = hdsp_read(hdsp, HDSP_status2Register);
3327
3328         snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name,
3329                     hdsp->card->number + 1);
3330         snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
3331                     hdsp->capture_buffer, hdsp->playback_buffer);
3332         snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
3333                     hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase);
3334         snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register);
3335         snd_iprintf(buffer, "Control2 register: 0x%x\n",
3336                     hdsp->control2_register);
3337         snd_iprintf(buffer, "Status register: 0x%x\n", status);
3338         snd_iprintf(buffer, "Status2 register: 0x%x\n", status2);
3339
3340         if (hdsp_check_for_iobox(hdsp)) {
3341                 snd_iprintf(buffer, "No I/O box connected.\n"
3342                             "Please connect one and upload firmware.\n");
3343                 return;
3344         }
3345
3346         if (hdsp_check_for_firmware(hdsp, 0)) {
3347                 if (hdsp->state & HDSP_FirmwareCached) {
3348                         if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
3349                                 snd_iprintf(buffer, "Firmware loading from "
3350                                             "cache failed, "
3351                                             "please upload manually.\n");
3352                                 return;
3353                         }
3354                 } else {
3355                         int err;
3356
3357                         err = hdsp_request_fw_loader(hdsp);
3358                         if (err < 0) {
3359                                 snd_iprintf(buffer,
3360                                             "No firmware loaded nor cached, "
3361                                             "please upload firmware.\n");
3362                                 return;
3363                         }
3364                 }
3365         }
3366
3367         snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff);
3368         snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0));
3369         snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0));
3370         snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1));
3371         snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1));
3372         snd_iprintf(buffer, "Use Midi Tasklet: %s\n", hdsp->use_midi_work ? "on" : "off");
3373
3374         snd_iprintf(buffer, "\n");
3375
3376         x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask));
3377
3378         snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes);
3379         snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp));
3380         snd_iprintf(buffer, "Precise pointer: %s\n", hdsp->precise_ptr ? "on" : "off");
3381         snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off");
3382
3383         snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2);
3384
3385         snd_iprintf(buffer, "\n");
3386
3387         switch (hdsp_clock_source(hdsp)) {
3388         case HDSP_CLOCK_SOURCE_AUTOSYNC:
3389                 clock_source = "AutoSync";
3390                 break;
3391         case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ:
3392                 clock_source = "Internal 32 kHz";
3393                 break;
3394         case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
3395                 clock_source = "Internal 44.1 kHz";
3396                 break;
3397         case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
3398                 clock_source = "Internal 48 kHz";
3399                 break;
3400         case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ:
3401                 clock_source = "Internal 64 kHz";
3402                 break;
3403         case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ:
3404                 clock_source = "Internal 88.2 kHz";
3405                 break;
3406         case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ:
3407                 clock_source = "Internal 96 kHz";
3408                 break;
3409         case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ:
3410                 clock_source = "Internal 128 kHz";
3411                 break;
3412         case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ:
3413                 clock_source = "Internal 176.4 kHz";
3414                 break;
3415                 case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
3416                 clock_source = "Internal 192 kHz";
3417                 break;
3418         default:
3419                 clock_source = "Error";
3420         }
3421         snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source);
3422
3423         if (hdsp_system_clock_mode(hdsp))
3424                 system_clock_mode = "Slave";
3425         else
3426                 system_clock_mode = "Master";
3427
3428         switch (hdsp_pref_sync_ref (hdsp)) {
3429         case HDSP_SYNC_FROM_WORD:
3430                 pref_sync_ref = "Word Clock";
3431                 break;
3432         case HDSP_SYNC_FROM_ADAT_SYNC:
3433                 pref_sync_ref = "ADAT Sync";
3434                 break;
3435         case HDSP_SYNC_FROM_SPDIF:
3436                 pref_sync_ref = "SPDIF";
3437                 break;
3438         case HDSP_SYNC_FROM_ADAT1:
3439                 pref_sync_ref = "ADAT1";
3440                 break;
3441         case HDSP_SYNC_FROM_ADAT2:
3442                 pref_sync_ref = "ADAT2";
3443                 break;
3444         case HDSP_SYNC_FROM_ADAT3:
3445                 pref_sync_ref = "ADAT3";
3446                 break;
3447         default:
3448                 pref_sync_ref = "Word Clock";
3449                 break;
3450         }
3451         snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref);
3452
3453         switch (hdsp_autosync_ref (hdsp)) {
3454         case HDSP_AUTOSYNC_FROM_WORD:
3455                 autosync_ref = "Word Clock";
3456                 break;
3457         case HDSP_AUTOSYNC_FROM_ADAT_SYNC:
3458                 autosync_ref = "ADAT Sync";
3459                 break;
3460         case HDSP_AUTOSYNC_FROM_SPDIF:
3461                 autosync_ref = "SPDIF";
3462                 break;
3463         case HDSP_AUTOSYNC_FROM_NONE:
3464                 autosync_ref = "None";
3465                 break;
3466         case HDSP_AUTOSYNC_FROM_ADAT1:
3467                 autosync_ref = "ADAT1";
3468                 break;
3469         case HDSP_AUTOSYNC_FROM_ADAT2:
3470                 autosync_ref = "ADAT2";
3471                 break;
3472         case HDSP_AUTOSYNC_FROM_ADAT3:
3473                 autosync_ref = "ADAT3";
3474                 break;
3475         default:
3476                 autosync_ref = "---";
3477                 break;
3478         }
3479         snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref);
3480
3481         snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
3482
3483         snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode);
3484
3485         snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
3486         snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
3487
3488         snd_iprintf(buffer, "\n");
3489
3490         if (hdsp->io_type != RPM) {
3491                 switch (hdsp_spdif_in(hdsp)) {
3492                 case HDSP_SPDIFIN_OPTICAL:
3493                         snd_iprintf(buffer, "IEC958 input: Optical\n");
3494                         break;
3495                 case HDSP_SPDIFIN_COAXIAL:
3496                         snd_iprintf(buffer, "IEC958 input: Coaxial\n");
3497                         break;
3498                 case HDSP_SPDIFIN_INTERNAL:
3499                         snd_iprintf(buffer, "IEC958 input: Internal\n");
3500                         break;
3501                 case HDSP_SPDIFIN_AES:
3502                         snd_iprintf(buffer, "IEC958 input: AES\n");
3503                         break;
3504                 default:
3505                         snd_iprintf(buffer, "IEC958 input: ???\n");
3506                         break;
3507                 }
3508         }
3509
3510         if (RPM == hdsp->io_type) {
3511                 if (hdsp->control_register & HDSP_RPM_Bypass)
3512                         snd_iprintf(buffer, "RPM Bypass: disabled\n");
3513                 else
3514                         snd_iprintf(buffer, "RPM Bypass: enabled\n");
3515                 if (hdsp->control_register & HDSP_RPM_Disconnect)
3516                         snd_iprintf(buffer, "RPM disconnected\n");
3517                 else
3518                         snd_iprintf(buffer, "RPM connected\n");
3519
3520                 switch (hdsp->control_register & HDSP_RPM_Inp12) {
3521                 case HDSP_RPM_Inp12_Phon_6dB:
3522                         snd_iprintf(buffer, "Input 1/2: Phono, 6dB\n");
3523                         break;
3524                 case HDSP_RPM_Inp12_Phon_0dB:
3525                         snd_iprintf(buffer, "Input 1/2: Phono, 0dB\n");
3526                         break;
3527                 case HDSP_RPM_Inp12_Phon_n6dB:
3528                         snd_iprintf(buffer, "Input 1/2: Phono, -6dB\n");
3529                         break;
3530                 case HDSP_RPM_Inp12_Line_0dB:
3531                         snd_iprintf(buffer, "Input 1/2: Line, 0dB\n");
3532                         break;
3533                 case HDSP_RPM_Inp12_Line_n6dB:
3534                         snd_iprintf(buffer, "Input 1/2: Line, -6dB\n");
3535                         break;
3536                 default:
3537                         snd_iprintf(buffer, "Input 1/2: ???\n");
3538                 }
3539
3540                 switch (hdsp->control_register & HDSP_RPM_Inp34) {
3541                 case HDSP_RPM_Inp34_Phon_6dB:
3542                         snd_iprintf(buffer, "Input 3/4: Phono, 6dB\n");
3543                         break;
3544                 case HDSP_RPM_Inp34_Phon_0dB:
3545                         snd_iprintf(buffer, "Input 3/4: Phono, 0dB\n");
3546                         break;
3547                 case HDSP_RPM_Inp34_Phon_n6dB:
3548                         snd_iprintf(buffer, "Input 3/4: Phono, -6dB\n");
3549                         break;
3550                 case HDSP_RPM_Inp34_Line_0dB:
3551                         snd_iprintf(buffer, "Input 3/4: Line, 0dB\n");
3552                         break;
3553                 case HDSP_RPM_Inp34_Line_n6dB:
3554                         snd_iprintf(buffer, "Input 3/4: Line, -6dB\n");
3555                         break;
3556                 default:
3557                         snd_iprintf(buffer, "Input 3/4: ???\n");
3558                 }
3559
3560         } else {
3561                 if (hdsp->control_register & HDSP_SPDIFOpticalOut)
3562                         snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
3563                 else
3564                         snd_iprintf(buffer, "IEC958 output: Coaxial only\n");
3565
3566                 if (hdsp->control_register & HDSP_SPDIFProfessional)
3567                         snd_iprintf(buffer, "IEC958 quality: Professional\n");
3568                 else
3569                         snd_iprintf(buffer, "IEC958 quality: Consumer\n");
3570
3571                 if (hdsp->control_register & HDSP_SPDIFEmphasis)
3572                         snd_iprintf(buffer, "IEC958 emphasis: on\n");
3573                 else
3574                         snd_iprintf(buffer, "IEC958 emphasis: off\n");
3575
3576                 if (hdsp->control_register & HDSP_SPDIFNonAudio)
3577                         snd_iprintf(buffer, "IEC958 NonAudio: on\n");
3578                 else
3579                         snd_iprintf(buffer, "IEC958 NonAudio: off\n");
3580                 x = hdsp_spdif_sample_rate(hdsp);
3581                 if (x != 0)
3582                         snd_iprintf(buffer, "IEC958 sample rate: %d\n", x);
3583                 else
3584                         snd_iprintf(buffer, "IEC958 sample rate: Error flag set\n");
3585         }
3586         snd_iprintf(buffer, "\n");
3587
3588         /* Sync Check */
3589         x = status & HDSP_Sync0;
3590         if (status & HDSP_Lock0)
3591                 snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock");
3592         else
3593                 snd_iprintf(buffer, "ADAT1: No Lock\n");
3594
3595         switch (hdsp->io_type) {
3596         case Digiface:
3597         case H9652:
3598                 x = status & HDSP_Sync1;
3599                 if (status & HDSP_Lock1)
3600                         snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock");
3601                 else
3602                         snd_iprintf(buffer, "ADAT2: No Lock\n");
3603                 x = status & HDSP_Sync2;
3604                 if (status & HDSP_Lock2)
3605                         snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock");
3606                 else
3607                         snd_iprintf(buffer, "ADAT3: No Lock\n");
3608                 break;
3609         default:
3610                 /* relax */
3611                 break;
3612         }
3613
3614         x = status & HDSP_SPDIFSync;
3615         if (status & HDSP_SPDIFErrorFlag)
3616                 snd_iprintf (buffer, "SPDIF: No Lock\n");
3617         else
3618                 snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock");
3619
3620         x = status2 & HDSP_wc_sync;
3621         if (status2 & HDSP_wc_lock)
3622                 snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock");
3623         else
3624                 snd_iprintf (buffer, "Word Clock: No Lock\n");
3625
3626         x = status & HDSP_TimecodeSync;
3627         if (status & HDSP_TimecodeLock)
3628                 snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock");
3629         else
3630                 snd_iprintf(buffer, "ADAT Sync: No Lock\n");
3631
3632         snd_iprintf(buffer, "\n");
3633
3634         /* Informations about H9632 specific controls */
3635         if (hdsp->io_type == H9632) {
3636                 char *tmp;
3637
3638                 switch (hdsp_ad_gain(hdsp)) {
3639                 case 0:
3640                         tmp = "-10 dBV";
3641                         break;
3642                 case 1:
3643                         tmp = "+4 dBu";
3644                         break;
3645                 default:
3646                         tmp = "Lo Gain";
3647                         break;
3648                 }
3649                 snd_iprintf(buffer, "AD Gain : %s\n", tmp);
3650
3651                 switch (hdsp_da_gain(hdsp)) {
3652                 case 0:
3653                         tmp = "Hi Gain";
3654                         break;
3655                 case 1:
3656                         tmp = "+4 dBu";
3657                         break;
3658                 default:
3659                         tmp = "-10 dBV";
3660                         break;
3661                 }
3662                 snd_iprintf(buffer, "DA Gain : %s\n", tmp);
3663
3664                 switch (hdsp_phone_gain(hdsp)) {
3665                 case 0:
3666                         tmp = "0 dB";
3667                         break;
3668                 case 1:
3669                         tmp = "-6 dB";
3670                         break;
3671                 default:
3672                         tmp = "-12 dB";
3673                         break;
3674                 }
3675                 snd_iprintf(buffer, "Phones Gain : %s\n", tmp);
3676
3677                 snd_iprintf(buffer, "XLR Breakout Cable : %s\n",
3678                         hdsp_toggle_setting(hdsp, HDSP_XLRBreakoutCable) ?
3679                         "yes" : "no");
3680
3681                 if (hdsp->control_register & HDSP_AnalogExtensionBoard)
3682                         snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n");
3683                 else
3684                         snd_iprintf(buffer, "AEB : off (ADAT1 external)\n");
3685                 snd_iprintf(buffer, "\n");
3686         }
3687
3688 }
3689
3690 static void snd_hdsp_proc_init(struct hdsp *hdsp)
3691 {
3692         snd_card_ro_proc_new(hdsp->card, "hdsp", hdsp, snd_hdsp_proc_read);
3693 }
3694
3695 static void snd_hdsp_free_buffers(struct hdsp *hdsp)
3696 {
3697         snd_hammerfall_free_buffer(&hdsp->capture_dma_buf, hdsp->pci);
3698         snd_hammerfall_free_buffer(&hdsp->playback_dma_buf, hdsp->pci);
3699 }
3700
3701 static int snd_hdsp_initialize_memory(struct hdsp *hdsp)
3702 {
3703         unsigned long pb_bus, cb_bus;
3704
3705         if (snd_hammerfall_get_buffer(hdsp->pci, &hdsp->capture_dma_buf, HDSP_DMA_AREA_BYTES) < 0 ||
3706             snd_hammerfall_get_buffer(hdsp->pci, &hdsp->playback_dma_buf, HDSP_DMA_AREA_BYTES) < 0) {
3707                 if (hdsp->capture_dma_buf.area)
3708                         snd_dma_free_pages(&hdsp->capture_dma_buf);
3709                 dev_err(hdsp->card->dev,
3710                         "%s: no buffers available\n", hdsp->card_name);
3711                 return -ENOMEM;
3712         }
3713
3714         /* Align to bus-space 64K boundary */
3715
3716         cb_bus = ALIGN(hdsp->capture_dma_buf.addr, 0x10000ul);
3717         pb_bus = ALIGN(hdsp->playback_dma_buf.addr, 0x10000ul);
3718
3719         /* Tell the card where it is */
3720
3721         hdsp_write(hdsp, HDSP_inputBufferAddress, cb_bus);
3722         hdsp_write(hdsp, HDSP_outputBufferAddress, pb_bus);
3723
3724         hdsp->capture_buffer = hdsp->capture_dma_buf.area + (cb_bus - hdsp->capture_dma_buf.addr);
3725         hdsp->playback_buffer = hdsp->playback_dma_buf.area + (pb_bus - hdsp->playback_dma_buf.addr);
3726
3727         return 0;
3728 }
3729
3730 static int snd_hdsp_set_defaults(struct hdsp *hdsp)
3731 {
3732         unsigned int i;
3733
3734         /* ASSUMPTION: hdsp->lock is either held, or
3735            there is no need to hold it (e.g. during module
3736            initialization).
3737          */
3738
3739         /* set defaults:
3740
3741            SPDIF Input via Coax
3742            Master clock mode
3743            maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer,
3744                             which implies 2 4096 sample, 32Kbyte periods).
3745            Enable line out.
3746          */
3747
3748         hdsp->control_register = HDSP_ClockModeMaster |
3749                                  HDSP_SPDIFInputCoaxial |
3750                                  hdsp_encode_latency(7) |
3751                                  HDSP_LineOut;
3752
3753
3754         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3755
3756 #ifdef SNDRV_BIG_ENDIAN
3757         hdsp->control2_register = HDSP_BIGENDIAN_MODE;
3758 #else
3759         hdsp->control2_register = 0;
3760 #endif
3761         if (hdsp->io_type == H9652)
3762                 snd_hdsp_9652_enable_mixer (hdsp);
3763         else
3764                 hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
3765
3766         hdsp_reset_hw_pointer(hdsp);
3767         hdsp_compute_period_size(hdsp);
3768
3769         /* silence everything */
3770
3771         for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i)
3772                 hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
3773
3774         for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) {
3775                 if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
3776                         return -EIO;
3777         }
3778
3779         /* H9632 specific defaults */
3780         if (hdsp->io_type == H9632) {
3781                 hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
3782                 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3783         }
3784
3785         /* set a default rate so that the channel map is set up.
3786          */
3787
3788         hdsp_set_rate(hdsp, 48000, 1);
3789
3790         return 0;
3791 }
3792
3793 static void hdsp_midi_work(struct work_struct *work)
3794 {
3795         struct hdsp *hdsp = container_of(work, struct hdsp, midi_work);
3796
3797         if (hdsp->midi[0].pending)
3798                 snd_hdsp_midi_input_read (&hdsp->midi[0]);
3799         if (hdsp->midi[1].pending)
3800                 snd_hdsp_midi_input_read (&hdsp->midi[1]);
3801 }
3802
3803 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
3804 {
3805         struct hdsp *hdsp = (struct hdsp *) dev_id;
3806         unsigned int status;
3807         int audio;
3808         int midi0;
3809         int midi1;
3810         unsigned int midi0status;
3811         unsigned int midi1status;
3812         int schedule = 0;
3813
3814         status = hdsp_read(hdsp, HDSP_statusRegister);
3815
3816         audio = status & HDSP_audioIRQPending;
3817         midi0 = status & HDSP_midi0IRQPending;
3818         midi1 = status & HDSP_midi1IRQPending;
3819
3820         if (!audio && !midi0 && !midi1)
3821                 return IRQ_NONE;
3822
3823         hdsp_write(hdsp, HDSP_interruptConfirmation, 0);
3824
3825         midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
3826         midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
3827
3828         if (!(hdsp->state & HDSP_InitializationComplete))
3829                 return IRQ_HANDLED;
3830
3831         if (audio) {
3832                 if (hdsp->capture_substream)
3833                         snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
3834
3835                 if (hdsp->playback_substream)
3836                         snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
3837         }
3838
3839         if (midi0 && midi0status) {
3840                 if (hdsp->use_midi_work) {
3841                         /* we disable interrupts for this input until processing is done */
3842                         hdsp->control_register &= ~HDSP_Midi0InterruptEnable;
3843                         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3844                         hdsp->midi[0].pending = 1;
3845                         schedule = 1;
3846                 } else {
3847                         snd_hdsp_midi_input_read (&hdsp->midi[0]);
3848                 }
3849         }
3850         if (hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632 && midi1 && midi1status) {
3851                 if (hdsp->use_midi_work) {
3852                         /* we disable interrupts for this input until processing is done */
3853                         hdsp->control_register &= ~HDSP_Midi1InterruptEnable;
3854                         hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3855                         hdsp->midi[1].pending = 1;
3856                         schedule = 1;
3857                 } else {
3858                         snd_hdsp_midi_input_read (&hdsp->midi[1]);
3859                 }
3860         }
3861         if (hdsp->use_midi_work && schedule)
3862                 queue_work(system_highpri_wq, &hdsp->midi_work);
3863         return IRQ_HANDLED;
3864 }
3865
3866 static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substream)
3867 {
3868         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3869         return hdsp_hw_pointer(hdsp);
3870 }
3871
3872 static char *hdsp_channel_buffer_location(struct hdsp *hdsp,
3873                                              int stream,
3874                                              int channel)
3875
3876 {
3877         int mapped_channel;
3878
3879         if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
3880                 return NULL;
3881
3882         if ((mapped_channel = hdsp->channel_map[channel]) < 0)
3883                 return NULL;
3884
3885         if (stream == SNDRV_PCM_STREAM_CAPTURE)
3886                 return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3887         else
3888                 return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3889 }
3890
3891 static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream,
3892                                   int channel, unsigned long pos,
3893                                   void __user *src, unsigned long count)
3894 {
3895         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3896         char *channel_buf;
3897
3898         if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
3899                 return -EINVAL;
3900
3901         channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3902         if (snd_BUG_ON(!channel_buf))
3903                 return -EIO;
3904         if (copy_from_user(channel_buf + pos, src, count))
3905                 return -EFAULT;
3906         return 0;
3907 }
3908
3909 static int snd_hdsp_playback_copy_kernel(struct snd_pcm_substream *substream,
3910                                          int channel, unsigned long pos,
3911                                          void *src, unsigned long count)
3912 {
3913         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3914         char *channel_buf;
3915
3916         channel_buf = hdsp_channel_buffer_location(hdsp, substream->pstr->stream, channel);
3917         if (snd_BUG_ON(!channel_buf))
3918                 return -EIO;
3919         memcpy(channel_buf + pos, src, count);
3920         return 0;
3921 }
3922
3923 static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream,
3924                                  int channel, unsigned long pos,
3925                                  void __user *dst, unsigned long count)
3926 {
3927         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3928         char *channel_buf;
3929
3930         if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
3931                 return -EINVAL;
3932
3933         channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3934         if (snd_BUG_ON(!channel_buf))
3935                 return -EIO;
3936         if (copy_to_user(dst, channel_buf + pos, count))
3937                 return -EFAULT;
3938         return 0;
3939 }
3940
3941 static int snd_hdsp_capture_copy_kernel(struct snd_pcm_substream *substream,
3942                                         int channel, unsigned long pos,
3943                                         void *dst, unsigned long count)
3944 {
3945         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3946         char *channel_buf;
3947
3948         channel_buf = hdsp_channel_buffer_location(hdsp, substream->pstr->stream, channel);
3949         if (snd_BUG_ON(!channel_buf))
3950                 return -EIO;
3951         memcpy(dst, channel_buf + pos, count);
3952         return 0;
3953 }
3954
3955 static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream,
3956                                int channel, unsigned long pos,
3957                                unsigned long count)
3958 {
3959         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3960         char *channel_buf;
3961
3962         channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3963         if (snd_BUG_ON(!channel_buf))
3964                 return -EIO;
3965         memset(channel_buf + pos, 0, count);
3966         return 0;
3967 }
3968
3969 static int snd_hdsp_reset(struct snd_pcm_substream *substream)
3970 {
3971         struct snd_pcm_runtime *runtime = substream->runtime;
3972         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3973         struct snd_pcm_substream *other;
3974         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
3975                 other = hdsp->capture_substream;
3976         else
3977                 other = hdsp->playback_substream;
3978         if (hdsp->running)
3979                 runtime->status->hw_ptr = hdsp_hw_pointer(hdsp);
3980         else
3981                 runtime->status->hw_ptr = 0;
3982         if (other) {
3983                 struct snd_pcm_substream *s;
3984                 struct snd_pcm_runtime *oruntime = other->runtime;
3985                 snd_pcm_group_for_each_entry(s, substream) {
3986                         if (s == other) {
3987                                 oruntime->status->hw_ptr = runtime->status->hw_ptr;
3988                                 break;
3989                         }
3990                 }
3991         }
3992         return 0;
3993 }
3994
3995 static int snd_hdsp_hw_params(struct snd_pcm_substream *substream,
3996                                  struct snd_pcm_hw_params *params)
3997 {
3998         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3999         int err;
4000         pid_t this_pid;
4001         pid_t other_pid;
4002
4003         if (hdsp_check_for_iobox (hdsp))
4004                 return -EIO;
4005
4006         if (hdsp_check_for_firmware(hdsp, 1))
4007                 return -EIO;
4008
4009         spin_lock_irq(&hdsp->lock);
4010
4011         if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
4012                 hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
4013                 hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream);
4014                 this_pid = hdsp->playback_pid;
4015                 other_pid = hdsp->capture_pid;
4016         } else {
4017                 this_pid = hdsp->capture_pid;
4018                 other_pid = hdsp->playback_pid;
4019         }
4020
4021         if ((other_pid > 0) && (this_pid != other_pid)) {
4022
4023                 /* The other stream is open, and not by the same
4024                    task as this one. Make sure that the parameters
4025                    that matter are the same.
4026                  */
4027
4028                 if (params_rate(params) != hdsp->system_sample_rate) {
4029                         spin_unlock_irq(&hdsp->lock);
4030                         _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4031                         return -EBUSY;
4032                 }
4033
4034                 if (params_period_size(params) != hdsp->period_bytes / 4) {
4035                         spin_unlock_irq(&hdsp->lock);
4036                         _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4037                         return -EBUSY;
4038                 }
4039
4040                 /* We're fine. */
4041
4042                 spin_unlock_irq(&hdsp->lock);
4043                 return 0;
4044
4045         } else {
4046                 spin_unlock_irq(&hdsp->lock);
4047         }
4048
4049         /* how to make sure that the rate matches an externally-set one ?
4050          */
4051
4052         spin_lock_irq(&hdsp->lock);
4053         if (! hdsp->clock_source_locked) {
4054                 if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) {
4055                         spin_unlock_irq(&hdsp->lock);
4056                         _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4057                         return err;
4058                 }
4059         }
4060         spin_unlock_irq(&hdsp->lock);
4061
4062         if ((err = hdsp_set_interrupt_interval(hdsp, params_period_size(params))) < 0) {
4063                 _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4064                 return err;
4065         }
4066
4067         return 0;
4068 }
4069
4070 static int snd_hdsp_channel_info(struct snd_pcm_substream *substream,
4071                                     struct snd_pcm_channel_info *info)
4072 {
4073         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4074         unsigned int channel = info->channel;
4075
4076         if (snd_BUG_ON(channel >= hdsp->max_channels))
4077                 return -EINVAL;
4078         channel = array_index_nospec(channel, hdsp->max_channels);
4079
4080         if (hdsp->channel_map[channel] < 0)
4081                 return -EINVAL;
4082
4083         info->offset = hdsp->channel_map[channel] * HDSP_CHANNEL_BUFFER_BYTES;
4084         info->first = 0;
4085         info->step = 32;
4086         return 0;
4087 }
4088
4089 static int snd_hdsp_ioctl(struct snd_pcm_substream *substream,
4090                              unsigned int cmd, void *arg)
4091 {
4092         switch (cmd) {
4093         case SNDRV_PCM_IOCTL1_RESET:
4094                 return snd_hdsp_reset(substream);
4095         case SNDRV_PCM_IOCTL1_CHANNEL_INFO:
4096                 return snd_hdsp_channel_info(substream, arg);
4097         default:
4098                 break;
4099         }
4100
4101         return snd_pcm_lib_ioctl(substream, cmd, arg);
4102 }
4103
4104 static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd)
4105 {
4106         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4107         struct snd_pcm_substream *other;
4108         int running;
4109
4110         if (hdsp_check_for_iobox (hdsp))
4111                 return -EIO;
4112
4113         if (hdsp_check_for_firmware(hdsp, 0)) /* no auto-loading in trigger */
4114                 return -EIO;
4115
4116         spin_lock(&hdsp->lock);
4117         running = hdsp->running;
4118         switch (cmd) {
4119         case SNDRV_PCM_TRIGGER_START:
4120                 running |= 1 << substream->stream;
4121                 break;
4122         case SNDRV_PCM_TRIGGER_STOP:
4123                 running &= ~(1 << substream->stream);
4124                 break;
4125         default:
4126                 snd_BUG();
4127                 spin_unlock(&hdsp->lock);
4128                 return -EINVAL;
4129         }
4130         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4131                 other = hdsp->capture_substream;
4132         else
4133                 other = hdsp->playback_substream;
4134
4135         if (other) {
4136                 struct snd_pcm_substream *s;
4137                 snd_pcm_group_for_each_entry(s, substream) {
4138                         if (s == other) {
4139                                 snd_pcm_trigger_done(s, substream);
4140                                 if (cmd == SNDRV_PCM_TRIGGER_START)
4141                                         running |= 1 << s->stream;
4142                                 else
4143                                         running &= ~(1 << s->stream);
4144                                 goto _ok;
4145                         }
4146                 }
4147                 if (cmd == SNDRV_PCM_TRIGGER_START) {
4148                         if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) &&
4149                             substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4150                                 hdsp_silence_playback(hdsp);
4151                 } else {
4152                         if (running &&
4153                             substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4154                                 hdsp_silence_playback(hdsp);
4155                 }
4156         } else {
4157                 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4158                                 hdsp_silence_playback(hdsp);
4159         }
4160  _ok:
4161         snd_pcm_trigger_done(substream, substream);
4162         if (!hdsp->running && running)
4163                 hdsp_start_audio(hdsp);
4164         else if (hdsp->running && !running)
4165                 hdsp_stop_audio(hdsp);
4166         hdsp->running = running;
4167         spin_unlock(&hdsp->lock);
4168
4169         return 0;
4170 }
4171
4172 static int snd_hdsp_prepare(struct snd_pcm_substream *substream)
4173 {
4174         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4175         int result = 0;
4176
4177         if (hdsp_check_for_iobox (hdsp))
4178                 return -EIO;
4179
4180         if (hdsp_check_for_firmware(hdsp, 1))
4181                 return -EIO;
4182
4183         spin_lock_irq(&hdsp->lock);
4184         if (!hdsp->running)
4185                 hdsp_reset_hw_pointer(hdsp);
4186         spin_unlock_irq(&hdsp->lock);
4187         return result;
4188 }
4189
4190 static const struct snd_pcm_hardware snd_hdsp_playback_subinfo =
4191 {
4192         .info =                 (SNDRV_PCM_INFO_MMAP |
4193                                  SNDRV_PCM_INFO_MMAP_VALID |
4194                                  SNDRV_PCM_INFO_NONINTERLEAVED |
4195                                  SNDRV_PCM_INFO_SYNC_START |
4196                                  SNDRV_PCM_INFO_DOUBLE),
4197 #ifdef SNDRV_BIG_ENDIAN
4198         .formats =              SNDRV_PCM_FMTBIT_S32_BE,
4199 #else
4200         .formats =              SNDRV_PCM_FMTBIT_S32_LE,
4201 #endif
4202         .rates =                (SNDRV_PCM_RATE_32000 |
4203                                  SNDRV_PCM_RATE_44100 |
4204                                  SNDRV_PCM_RATE_48000 |
4205                                  SNDRV_PCM_RATE_64000 |
4206                                  SNDRV_PCM_RATE_88200 |
4207                                  SNDRV_PCM_RATE_96000),
4208         .rate_min =             32000,
4209         .rate_max =             96000,
4210         .channels_min =         6,
4211         .channels_max =         HDSP_MAX_CHANNELS,
4212         .buffer_bytes_max =     HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4213         .period_bytes_min =     (64 * 4) * 10,
4214         .period_bytes_max =     (8192 * 4) * HDSP_MAX_CHANNELS,
4215         .periods_min =          2,
4216         .periods_max =          2,
4217         .fifo_size =            0
4218 };
4219
4220 static const struct snd_pcm_hardware snd_hdsp_capture_subinfo =
4221 {
4222         .info =                 (SNDRV_PCM_INFO_MMAP |
4223                                  SNDRV_PCM_INFO_MMAP_VALID |
4224                                  SNDRV_PCM_INFO_NONINTERLEAVED |
4225                                  SNDRV_PCM_INFO_SYNC_START),
4226 #ifdef SNDRV_BIG_ENDIAN
4227         .formats =              SNDRV_PCM_FMTBIT_S32_BE,
4228 #else
4229         .formats =              SNDRV_PCM_FMTBIT_S32_LE,
4230 #endif
4231         .rates =                (SNDRV_PCM_RATE_32000 |
4232                                  SNDRV_PCM_RATE_44100 |
4233                                  SNDRV_PCM_RATE_48000 |
4234                                  SNDRV_PCM_RATE_64000 |
4235                                  SNDRV_PCM_RATE_88200 |
4236                                  SNDRV_PCM_RATE_96000),
4237         .rate_min =             32000,
4238         .rate_max =             96000,
4239         .channels_min =         5,
4240         .channels_max =         HDSP_MAX_CHANNELS,
4241         .buffer_bytes_max =     HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4242         .period_bytes_min =     (64 * 4) * 10,
4243         .period_bytes_max =     (8192 * 4) * HDSP_MAX_CHANNELS,
4244         .periods_min =          2,
4245         .periods_max =          2,
4246         .fifo_size =            0
4247 };
4248
4249 static const unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
4250
4251 static const struct snd_pcm_hw_constraint_list hdsp_hw_constraints_period_sizes = {
4252         .count = ARRAY_SIZE(hdsp_period_sizes),
4253         .list = hdsp_period_sizes,
4254         .mask = 0
4255 };
4256
4257 static const unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 };
4258
4259 static const struct snd_pcm_hw_constraint_list hdsp_hw_constraints_9632_sample_rates = {
4260         .count = ARRAY_SIZE(hdsp_9632_sample_rates),
4261         .list = hdsp_9632_sample_rates,
4262         .mask = 0
4263 };
4264
4265 static int snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params *params,
4266                                         struct snd_pcm_hw_rule *rule)
4267 {
4268         struct hdsp *hdsp = rule->private;
4269         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4270         if (hdsp->io_type == H9632) {
4271                 unsigned int list[3];
4272                 list[0] = hdsp->qs_in_channels;
4273                 list[1] = hdsp->ds_in_channels;
4274                 list[2] = hdsp->ss_in_channels;
4275                 return snd_interval_list(c, 3, list, 0);
4276         } else {
4277                 unsigned int list[2];
4278                 list[0] = hdsp->ds_in_channels;
4279                 list[1] = hdsp->ss_in_channels;
4280                 return snd_interval_list(c, 2, list, 0);
4281         }
4282 }
4283
4284 static int snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params *params,
4285                                         struct snd_pcm_hw_rule *rule)
4286 {
4287         unsigned int list[3];
4288         struct hdsp *hdsp = rule->private;
4289         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4290         if (hdsp->io_type == H9632) {
4291                 list[0] = hdsp->qs_out_channels;
4292                 list[1] = hdsp->ds_out_channels;
4293                 list[2] = hdsp->ss_out_channels;
4294                 return snd_interval_list(c, 3, list, 0);
4295         } else {
4296                 list[0] = hdsp->ds_out_channels;
4297                 list[1] = hdsp->ss_out_channels;
4298         }
4299         return snd_interval_list(c, 2, list, 0);
4300 }
4301
4302 static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params,
4303                                              struct snd_pcm_hw_rule *rule)
4304 {
4305         struct hdsp *hdsp = rule->private;
4306         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4307         struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4308         if (r->min > 96000 && hdsp->io_type == H9632) {
4309                 struct snd_interval t = {
4310                         .min = hdsp->qs_in_channels,
4311                         .max = hdsp->qs_in_channels,
4312                         .integer = 1,
4313                 };
4314                 return snd_interval_refine(c, &t);
4315         } else if (r->min > 48000 && r->max <= 96000) {
4316                 struct snd_interval t = {
4317                         .min = hdsp->ds_in_channels,
4318                         .max = hdsp->ds_in_channels,
4319                         .integer = 1,
4320                 };
4321                 return snd_interval_refine(c, &t);
4322         } else if (r->max < 64000) {
4323                 struct snd_interval t = {
4324                         .min = hdsp->ss_in_channels,
4325                         .max = hdsp->ss_in_channels,
4326                         .integer = 1,
4327                 };
4328                 return snd_interval_refine(c, &t);
4329         }
4330         return 0;
4331 }
4332
4333 static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params,
4334                                              struct snd_pcm_hw_rule *rule)
4335 {
4336         struct hdsp *hdsp = rule->private;
4337         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4338         struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4339         if (r->min > 96000 && hdsp->io_type == H9632) {
4340                 struct snd_interval t = {
4341                         .min = hdsp->qs_out_channels,
4342                         .max = hdsp->qs_out_channels,
4343                         .integer = 1,
4344                 };
4345                 return snd_interval_refine(c, &t);
4346         } else if (r->min > 48000 && r->max <= 96000) {
4347                 struct snd_interval t = {
4348                         .min = hdsp->ds_out_channels,
4349                         .max = hdsp->ds_out_channels,
4350                         .integer = 1,
4351                 };
4352                 return snd_interval_refine(c, &t);
4353         } else if (r->max < 64000) {
4354                 struct snd_interval t = {
4355                         .min = hdsp->ss_out_channels,
4356                         .max = hdsp->ss_out_channels,
4357                         .integer = 1,
4358                 };
4359                 return snd_interval_refine(c, &t);
4360         }
4361         return 0;
4362 }
4363
4364 static int snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params *params,
4365                                              struct snd_pcm_hw_rule *rule)
4366 {
4367         struct hdsp *hdsp = rule->private;
4368         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4369         struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4370         if (c->min >= hdsp->ss_out_channels) {
4371                 struct snd_interval t = {
4372                         .min = 32000,
4373                         .max = 48000,
4374                         .integer = 1,
4375                 };
4376                 return snd_interval_refine(r, &t);
4377         } else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) {
4378                 struct snd_interval t = {
4379                         .min = 128000,
4380                         .max = 192000,
4381                         .integer = 1,
4382                 };
4383                 return snd_interval_refine(r, &t);
4384         } else if (c->max <= hdsp->ds_out_channels) {
4385                 struct snd_interval t = {
4386                         .min = 64000,
4387                         .max = 96000,
4388                         .integer = 1,
4389                 };
4390                 return snd_interval_refine(r, &t);
4391         }
4392         return 0;
4393 }
4394
4395 static int snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params *params,
4396                                              struct snd_pcm_hw_rule *rule)
4397 {
4398         struct hdsp *hdsp = rule->private;
4399         struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4400         struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4401         if (c->min >= hdsp->ss_in_channels) {
4402                 struct snd_interval t = {
4403                         .min = 32000,
4404                         .max = 48000,
4405                         .integer = 1,
4406                 };
4407                 return snd_interval_refine(r, &t);
4408         } else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) {
4409                 struct snd_interval t = {
4410                         .min = 128000,
4411                         .max = 192000,
4412                         .integer = 1,
4413                 };
4414                 return snd_interval_refine(r, &t);
4415         } else if (c->max <= hdsp->ds_in_channels) {
4416                 struct snd_interval t = {
4417                         .min = 64000,
4418                         .max = 96000,
4419                         .integer = 1,
4420                 };
4421                 return snd_interval_refine(r, &t);
4422         }
4423         return 0;
4424 }
4425
4426 static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
4427 {
4428         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4429         struct snd_pcm_runtime *runtime = substream->runtime;
4430
4431         if (hdsp_check_for_iobox (hdsp))
4432                 return -EIO;
4433
4434         if (hdsp_check_for_firmware(hdsp, 1))
4435                 return -EIO;
4436
4437         spin_lock_irq(&hdsp->lock);
4438
4439         snd_pcm_set_sync(substream);
4440
4441         runtime->hw = snd_hdsp_playback_subinfo;
4442         runtime->dma_area = hdsp->playback_buffer;
4443         runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
4444
4445         hdsp->playback_pid = current->pid;
4446         hdsp->playback_substream = substream;
4447
4448         spin_unlock_irq(&hdsp->lock);
4449
4450         snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4451         snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4452         if (hdsp->clock_source_locked) {
4453                 runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate;
4454         } else if (hdsp->io_type == H9632) {
4455                 runtime->hw.rate_max = 192000;
4456                 runtime->hw.rates = SNDRV_PCM_RATE_KNOT;
4457                 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates);
4458         }
4459         if (hdsp->io_type == H9632) {
4460                 runtime->hw.channels_min = hdsp->qs_out_channels;
4461                 runtime->hw.channels_max = hdsp->ss_out_channels;
4462         }
4463
4464         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4465                              snd_hdsp_hw_rule_out_channels, hdsp,
4466                              SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4467         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4468                              snd_hdsp_hw_rule_out_channels_rate, hdsp,
4469                              SNDRV_PCM_HW_PARAM_RATE, -1);
4470         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4471                              snd_hdsp_hw_rule_rate_out_channels, hdsp,
4472                              SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4473
4474         if (RPM != hdsp->io_type) {
4475                 hdsp->creg_spdif_stream = hdsp->creg_spdif;
4476                 hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4477                 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4478                         SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4479         }
4480         return 0;
4481 }
4482
4483 static int snd_hdsp_playback_release(struct snd_pcm_substream *substream)
4484 {
4485         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4486
4487         spin_lock_irq(&hdsp->lock);
4488
4489         hdsp->playback_pid = -1;
4490         hdsp->playback_substream = NULL;
4491
4492         spin_unlock_irq(&hdsp->lock);
4493
4494         if (RPM != hdsp->io_type) {
4495                 hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4496                 snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4497                         SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4498         }
4499         return 0;
4500 }
4501
4502
4503 static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
4504 {
4505         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4506         struct snd_pcm_runtime *runtime = substream->runtime;
4507
4508         if (hdsp_check_for_iobox (hdsp))
4509                 return -EIO;
4510
4511         if (hdsp_check_for_firmware(hdsp, 1))
4512                 return -EIO;
4513
4514         spin_lock_irq(&hdsp->lock);
4515
4516         snd_pcm_set_sync(substream);
4517
4518         runtime->hw = snd_hdsp_capture_subinfo;
4519         runtime->dma_area = hdsp->capture_buffer;
4520         runtime->dma_bytes = HDSP_DMA_AREA_BYTES;
4521
4522         hdsp->capture_pid = current->pid;
4523         hdsp->capture_substream = substream;
4524
4525         spin_unlock_irq(&hdsp->lock);
4526
4527         snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4528         snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4529         if (hdsp->io_type == H9632) {
4530                 runtime->hw.channels_min = hdsp->qs_in_channels;
4531                 runtime->hw.channels_max = hdsp->ss_in_channels;
4532                 runtime->hw.rate_max = 192000;
4533                 runtime->hw.rates = SNDRV_PCM_RATE_KNOT;
4534                 snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates);
4535         }
4536         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4537                              snd_hdsp_hw_rule_in_channels, hdsp,
4538                              SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4539         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4540                              snd_hdsp_hw_rule_in_channels_rate, hdsp,
4541                              SNDRV_PCM_HW_PARAM_RATE, -1);
4542         snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4543                              snd_hdsp_hw_rule_rate_in_channels, hdsp,
4544                              SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4545         return 0;
4546 }
4547
4548 static int snd_hdsp_capture_release(struct snd_pcm_substream *substream)
4549 {
4550         struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4551
4552         spin_lock_irq(&hdsp->lock);
4553
4554         hdsp->capture_pid = -1;
4555         hdsp->capture_substream = NULL;
4556
4557         spin_unlock_irq(&hdsp->lock);
4558         return 0;
4559 }
4560
4561 /* helper functions for copying meter values */
4562 static inline int copy_u32_le(void __user *dest, void __iomem *src)
4563 {
4564         u32 val = readl(src);
4565         return copy_to_user(dest, &val, 4);
4566 }
4567
4568 static inline int copy_u64_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4569 {
4570         u32 rms_low, rms_high;
4571         u64 rms;
4572         rms_low = readl(src_low);
4573         rms_high = readl(src_high);
4574         rms = ((u64)rms_high << 32) | rms_low;
4575         return copy_to_user(dest, &rms, 8);
4576 }
4577
4578 static inline int copy_u48_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4579 {
4580         u32 rms_low, rms_high;
4581         u64 rms;
4582         rms_low = readl(src_low) & 0xffffff00;
4583         rms_high = readl(src_high) & 0xffffff00;
4584         rms = ((u64)rms_high << 32) | rms_low;
4585         return copy_to_user(dest, &rms, 8);
4586 }
4587
4588 static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4589 {
4590         int doublespeed = 0;
4591         int i, j, channels, ofs;
4592
4593         if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4594                 doublespeed = 1;
4595         channels = doublespeed ? 14 : 26;
4596         for (i = 0, j = 0; i < 26; ++i) {
4597                 if (doublespeed && (i & 4))
4598                         continue;
4599                 ofs = HDSP_9652_peakBase - j * 4;
4600                 if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs))
4601                         return -EFAULT;
4602                 ofs -= channels * 4;
4603                 if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs))
4604                         return -EFAULT;
4605                 ofs -= channels * 4;
4606                 if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs))
4607                         return -EFAULT;
4608                 ofs = HDSP_9652_rmsBase + j * 8;
4609                 if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs,
4610                                 hdsp->iobase + ofs + 4))
4611                         return -EFAULT;
4612                 ofs += channels * 8;
4613                 if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs,
4614                                 hdsp->iobase + ofs + 4))
4615                         return -EFAULT;
4616                 ofs += channels * 8;
4617                 if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs,
4618                                 hdsp->iobase + ofs + 4))
4619                         return -EFAULT;
4620                 j++;
4621         }
4622         return 0;
4623 }
4624
4625 static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4626 {
4627         int i, j;
4628         struct hdsp_9632_meters __iomem *m;
4629         int doublespeed = 0;
4630
4631         if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4632                 doublespeed = 1;
4633         m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase);
4634         for (i = 0, j = 0; i < 16; ++i, ++j) {
4635                 if (copy_u32_le(&peak_rms->input_peaks[i], &m->input_peak[j]))
4636                         return -EFAULT;
4637                 if (copy_u32_le(&peak_rms->playback_peaks[i], &m->playback_peak[j]))
4638                         return -EFAULT;
4639                 if (copy_u32_le(&peak_rms->output_peaks[i], &m->output_peak[j]))
4640                         return -EFAULT;
4641                 if (copy_u64_le(&peak_rms->input_rms[i], &m->input_rms_low[j],
4642                                 &m->input_rms_high[j]))
4643                         return -EFAULT;
4644                 if (copy_u64_le(&peak_rms->playback_rms[i], &m->playback_rms_low[j],
4645                                 &m->playback_rms_high[j]))
4646                         return -EFAULT;
4647                 if (copy_u64_le(&peak_rms->output_rms[i], &m->output_rms_low[j],
4648                                 &m->output_rms_high[j]))
4649                         return -EFAULT;
4650                 if (doublespeed && i == 3) i += 4;
4651         }
4652         return 0;
4653 }
4654
4655 static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4656 {
4657         int i;
4658
4659         for (i = 0; i < 26; i++) {
4660                 if (copy_u32_le(&peak_rms->playback_peaks[i],
4661                                 hdsp->iobase + HDSP_playbackPeakLevel + i * 4))
4662                         return -EFAULT;
4663                 if (copy_u32_le(&peak_rms->input_peaks[i],
4664                                 hdsp->iobase + HDSP_inputPeakLevel + i * 4))
4665                         return -EFAULT;
4666         }
4667         for (i = 0; i < 28; i++) {
4668                 if (copy_u32_le(&peak_rms->output_peaks[i],
4669                                 hdsp->iobase + HDSP_outputPeakLevel + i * 4))
4670                         return -EFAULT;
4671         }
4672         for (i = 0; i < 26; ++i) {
4673                 if (copy_u64_le(&peak_rms->playback_rms[i],
4674                                 hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
4675                                 hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
4676                         return -EFAULT;
4677                 if (copy_u64_le(&peak_rms->input_rms[i],
4678                                 hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
4679                                 hdsp->iobase + HDSP_inputRmsLevel + i * 8))
4680                         return -EFAULT;
4681         }
4682         return 0;
4683 }
4684
4685 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg)
4686 {
4687         struct hdsp *hdsp = hw->private_data;
4688         void __user *argp = (void __user *)arg;
4689         int err;
4690
4691         switch (cmd) {
4692         case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: {
4693                 struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg;
4694
4695                 err = hdsp_check_for_iobox(hdsp);
4696                 if (err < 0)
4697                         return err;
4698
4699                 err = hdsp_check_for_firmware(hdsp, 1);
4700                 if (err < 0)
4701                         return err;
4702
4703                 if (!(hdsp->state & HDSP_FirmwareLoaded)) {
4704                         dev_err(hdsp->card->dev,
4705                                 "firmware needs to be uploaded to the card.\n");
4706                         return -EINVAL;
4707                 }
4708
4709                 switch (hdsp->io_type) {
4710                 case H9652:
4711                         return hdsp_9652_get_peak(hdsp, peak_rms);
4712                 case H9632:
4713                         return hdsp_9632_get_peak(hdsp, peak_rms);
4714                 default:
4715                         return hdsp_get_peak(hdsp, peak_rms);
4716                 }
4717         }
4718         case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: {
4719                 struct hdsp_config_info info;
4720                 unsigned long flags;
4721                 int i;
4722
4723                 err = hdsp_check_for_iobox(hdsp);
4724                 if (err < 0)
4725                         return err;
4726
4727                 err = hdsp_check_for_firmware(hdsp, 1);
4728                 if (err < 0)
4729                         return err;
4730
4731                 memset(&info, 0, sizeof(info));
4732                 spin_lock_irqsave(&hdsp->lock, flags);
4733                 info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp);
4734                 info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
4735                 if (hdsp->io_type != H9632)
4736                     info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp);
4737                 info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp);
4738                 for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632) ? 3 : 1); ++i)
4739                         info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i);
4740                 info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp);
4741                 info.spdif_out = (unsigned char)hdsp_toggle_setting(hdsp,
4742                                 HDSP_SPDIFOpticalOut);
4743                 info.spdif_professional = (unsigned char)
4744                         hdsp_toggle_setting(hdsp, HDSP_SPDIFProfessional);
4745                 info.spdif_emphasis = (unsigned char)
4746                         hdsp_toggle_setting(hdsp, HDSP_SPDIFEmphasis);
4747                 info.spdif_nonaudio = (unsigned char)
4748                         hdsp_toggle_setting(hdsp, HDSP_SPDIFNonAudio);
4749                 info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp);
4750                 info.system_sample_rate = hdsp->system_sample_rate;
4751                 info.autosync_sample_rate = hdsp_external_sample_rate(hdsp);
4752                 info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp);
4753                 info.clock_source = (unsigned char)hdsp_clock_source(hdsp);
4754                 info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp);
4755                 info.line_out = (unsigned char)
4756                         hdsp_toggle_setting(hdsp, HDSP_LineOut);
4757                 if (hdsp->io_type == H9632) {
4758                         info.da_gain = (unsigned char)hdsp_da_gain(hdsp);
4759                         info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
4760                         info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
4761                         info.xlr_breakout_cable =
4762                                 (unsigned char)hdsp_toggle_setting(hdsp,
4763                                         HDSP_XLRBreakoutCable);
4764
4765                 } else if (hdsp->io_type == RPM) {
4766                         info.da_gain = (unsigned char) hdsp_rpm_input12(hdsp);
4767                         info.ad_gain = (unsigned char) hdsp_rpm_input34(hdsp);
4768                 }
4769                 if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
4770                         info.analog_extension_board =
4771                                 (unsigned char)hdsp_toggle_setting(hdsp,
4772                                             HDSP_AnalogExtensionBoard);
4773                 spin_unlock_irqrestore(&hdsp->lock, flags);
4774                 if (copy_to_user(argp, &info, sizeof(info)))
4775                         return -EFAULT;
4776                 break;
4777         }
4778         case SNDRV_HDSP_IOCTL_GET_9632_AEB: {
4779                 struct hdsp_9632_aeb h9632_aeb;
4780
4781                 if (hdsp->io_type != H9632) return -EINVAL;
4782                 h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
4783                 h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
4784                 if (copy_to_user(argp, &h9632_aeb, sizeof(h9632_aeb)))
4785                         return -EFAULT;
4786                 break;
4787         }
4788         case SNDRV_HDSP_IOCTL_GET_VERSION: {
4789                 struct hdsp_version hdsp_version;
4790                 int err;
4791
4792                 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4793                 if (hdsp->io_type == Undefined) {
4794                         if ((err = hdsp_get_iobox_version(hdsp)) < 0)
4795                                 return err;
4796                 }
4797                 memset(&hdsp_version, 0, sizeof(hdsp_version));
4798                 hdsp_version.io_type = hdsp->io_type;
4799                 hdsp_version.firmware_rev = hdsp->firmware_rev;
4800                 if ((err = copy_to_user(argp, &hdsp_version, sizeof(hdsp_version))))
4801                         return -EFAULT;
4802                 break;
4803         }
4804         case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: {
4805                 struct hdsp_firmware firmware;
4806                 u32 __user *firmware_data;
4807                 int err;
4808
4809                 if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4810                 /* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */
4811                 if (hdsp->io_type == Undefined) return -EINVAL;
4812
4813                 if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded))
4814                         return -EBUSY;
4815
4816                 dev_info(hdsp->card->dev,
4817                          "initializing firmware upload\n");
4818                 if (copy_from_user(&firmware, argp, sizeof(firmware)))
4819                         return -EFAULT;
4820                 firmware_data = (u32 __user *)firmware.firmware_data;
4821
4822                 if (hdsp_check_for_iobox (hdsp))
4823                         return -EIO;
4824
4825                 if (!hdsp->fw_uploaded) {
4826                         hdsp->fw_uploaded = vmalloc(HDSP_FIRMWARE_SIZE);
4827                         if (!hdsp->fw_uploaded)
4828                                 return -ENOMEM;
4829                 }
4830
4831                 if (copy_from_user(hdsp->fw_uploaded, firmware_data,
4832                                    HDSP_FIRMWARE_SIZE)) {
4833                         vfree(hdsp->fw_uploaded);
4834                         hdsp->fw_uploaded = NULL;
4835                         return -EFAULT;
4836                 }
4837
4838                 hdsp->state |= HDSP_FirmwareCached;
4839
4840                 if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
4841                         return err;
4842
4843                 if (!(hdsp->state & HDSP_InitializationComplete)) {
4844                         if ((err = snd_hdsp_enable_io(hdsp)) < 0)
4845                                 return err;
4846
4847                         snd_hdsp_initialize_channels(hdsp);
4848                         snd_hdsp_initialize_midi_flush(hdsp);
4849
4850                         if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) {
4851                                 dev_err(hdsp->card->dev,
4852                                         "error creating alsa devices\n");
4853                                 return err;
4854                         }
4855                 }
4856                 break;
4857         }
4858         case SNDRV_HDSP_IOCTL_GET_MIXER: {
4859                 struct hdsp_mixer __user *mixer = (struct hdsp_mixer __user *)argp;
4860                 if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE))
4861                         return -EFAULT;
4862                 break;
4863         }
4864         default:
4865                 return -EINVAL;
4866         }
4867         return 0;
4868 }
4869
4870 static const struct snd_pcm_ops snd_hdsp_playback_ops = {
4871         .open =         snd_hdsp_playback_open,
4872         .close =        snd_hdsp_playback_release,
4873         .ioctl =        snd_hdsp_ioctl,
4874         .hw_params =    snd_hdsp_hw_params,
4875         .prepare =      snd_hdsp_prepare,
4876         .trigger =      snd_hdsp_trigger,
4877         .pointer =      snd_hdsp_hw_pointer,
4878         .copy_user =    snd_hdsp_playback_copy,
4879         .copy_kernel =  snd_hdsp_playback_copy_kernel,
4880         .fill_silence = snd_hdsp_hw_silence,
4881 };
4882
4883 static const struct snd_pcm_ops snd_hdsp_capture_ops = {
4884         .open =         snd_hdsp_capture_open,
4885         .close =        snd_hdsp_capture_release,
4886         .ioctl =        snd_hdsp_ioctl,
4887         .hw_params =    snd_hdsp_hw_params,
4888         .prepare =      snd_hdsp_prepare,
4889         .trigger =      snd_hdsp_trigger,
4890         .pointer =      snd_hdsp_hw_pointer,
4891         .copy_user =    snd_hdsp_capture_copy,
4892         .copy_kernel =  snd_hdsp_capture_copy_kernel,
4893 };
4894
4895 static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
4896 {
4897         struct snd_hwdep *hw;
4898         int err;
4899
4900         if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0)
4901                 return err;
4902
4903         hdsp->hwdep = hw;
4904         hw->private_data = hdsp;
4905         strcpy(hw->name, "HDSP hwdep interface");
4906
4907         hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
4908         hw->ops.ioctl_compat = snd_hdsp_hwdep_ioctl;
4909
4910         return 0;
4911 }
4912
4913 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp)
4914 {
4915         struct snd_pcm *pcm;
4916         int err;
4917
4918         if ((err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm)) < 0)
4919                 return err;
4920
4921         hdsp->pcm = pcm;
4922         pcm->private_data = hdsp;
4923         strcpy(pcm->name, hdsp->card_name);
4924
4925         snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_hdsp_playback_ops);
4926         snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_hdsp_capture_ops);
4927
4928         pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
4929
4930         return 0;
4931 }
4932
4933 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp)
4934 {
4935         hdsp->control2_register |= HDSP_9652_ENABLE_MIXER;
4936         hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
4937 }
4938
4939 static int snd_hdsp_enable_io (struct hdsp *hdsp)
4940 {
4941         int i;
4942
4943         if (hdsp_fifo_wait (hdsp, 0, 100)) {
4944                 dev_err(hdsp->card->dev,
4945                         "enable_io fifo_wait failed\n");
4946                 return -EIO;
4947         }
4948
4949         for (i = 0; i < hdsp->max_channels; ++i) {
4950                 hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
4951                 hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
4952         }
4953
4954         return 0;
4955 }
4956
4957 static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
4958 {
4959         int status, aebi_channels, aebo_channels;
4960
4961         switch (hdsp->io_type) {
4962         case Digiface:
4963                 hdsp->card_name = "RME Hammerfall DSP + Digiface";
4964                 hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS;
4965                 hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS;
4966                 break;
4967
4968         case H9652:
4969                 hdsp->card_name = "RME Hammerfall HDSP 9652";
4970                 hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
4971                 hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
4972                 break;
4973
4974         case H9632:
4975                 status = hdsp_read(hdsp, HDSP_statusRegister);
4976                 /* HDSP_AEBx bits are low when AEB are connected */
4977                 aebi_channels = (status & HDSP_AEBI) ? 0 : 4;
4978                 aebo_channels = (status & HDSP_AEBO) ? 0 : 4;
4979                 hdsp->card_name = "RME Hammerfall HDSP 9632";
4980                 hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels;
4981                 hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels;
4982                 hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels;
4983                 hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels;
4984                 hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels;
4985                 hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels;
4986                 break;
4987
4988         case Multiface:
4989                 hdsp->card_name = "RME Hammerfall DSP + Multiface";
4990                 hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
4991                 hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
4992                 break;
4993
4994         case RPM:
4995                 hdsp->card_name = "RME Hammerfall DSP + RPM";
4996                 hdsp->ss_in_channels = RPM_CHANNELS-1;
4997                 hdsp->ss_out_channels = RPM_CHANNELS;
4998                 hdsp->ds_in_channels = RPM_CHANNELS-1;
4999                 hdsp->ds_out_channels = RPM_CHANNELS;
5000                 break;
5001
5002         default:
5003                 /* should never get here */
5004                 break;
5005         }
5006 }
5007
5008 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp)
5009 {
5010         snd_hdsp_flush_midi_input (hdsp, 0);
5011         snd_hdsp_flush_midi_input (hdsp, 1);
5012 }
5013
5014 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
5015 {
5016         int err;
5017
5018         if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) {
5019                 dev_err(card->dev,
5020                         "Error creating pcm interface\n");
5021                 return err;
5022         }
5023
5024
5025         if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) {
5026                 dev_err(card->dev,
5027                         "Error creating first midi interface\n");
5028                 return err;
5029         }
5030
5031         if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
5032                 if ((err = snd_hdsp_create_midi(card, hdsp, 1)) < 0) {
5033                         dev_err(card->dev,
5034                                 "Error creating second midi interface\n");
5035                         return err;
5036                 }
5037         }
5038
5039         if ((err = snd_hdsp_create_controls(card, hdsp)) < 0) {
5040                 dev_err(card->dev,
5041                         "Error creating ctl interface\n");
5042                 return err;
5043         }
5044
5045         snd_hdsp_proc_init(hdsp);
5046
5047         hdsp->system_sample_rate = -1;
5048         hdsp->playback_pid = -1;
5049         hdsp->capture_pid = -1;
5050         hdsp->capture_substream = NULL;
5051         hdsp->playback_substream = NULL;
5052
5053         if ((err = snd_hdsp_set_defaults(hdsp)) < 0) {
5054                 dev_err(card->dev,
5055                         "Error setting default values\n");
5056                 return err;
5057         }
5058
5059         if (!(hdsp->state & HDSP_InitializationComplete)) {
5060                 strcpy(card->shortname, "Hammerfall DSP");
5061                 sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5062                         hdsp->port, hdsp->irq);
5063
5064                 if ((err = snd_card_register(card)) < 0) {
5065                         dev_err(card->dev,
5066                                 "error registering card\n");
5067                         return err;
5068                 }
5069                 hdsp->state |= HDSP_InitializationComplete;
5070         }
5071
5072         return 0;
5073 }
5074
5075 /* load firmware via hotplug fw loader */
5076 static int hdsp_request_fw_loader(struct hdsp *hdsp)
5077 {
5078         const char *fwfile;
5079         const struct firmware *fw;
5080         int err;
5081
5082         if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5083                 return 0;
5084         if (hdsp->io_type == Undefined) {
5085                 if ((err = hdsp_get_iobox_version(hdsp)) < 0)
5086                         return err;
5087                 if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5088                         return 0;
5089         }
5090
5091         /* caution: max length of firmware filename is 30! */
5092         switch (hdsp->io_type) {
5093         case RPM:
5094                 fwfile = "rpm_firmware.bin";
5095                 break;
5096         case Multiface:
5097                 if (hdsp->firmware_rev == 0xa)
5098                         fwfile = "multiface_firmware.bin";
5099                 else
5100                         fwfile = "multiface_firmware_rev11.bin";
5101                 break;
5102         case Digiface:
5103                 if (hdsp->firmware_rev == 0xa)
5104                         fwfile = "digiface_firmware.bin";
5105                 else
5106                         fwfile = "digiface_firmware_rev11.bin";
5107                 break;
5108         default:
5109                 dev_err(hdsp->card->dev,
5110                         "invalid io_type %d\n", hdsp->io_type);
5111                 return -EINVAL;
5112         }
5113
5114         if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) {
5115                 dev_err(hdsp->card->dev,
5116                         "cannot load firmware %s\n", fwfile);
5117                 return -ENOENT;
5118         }
5119         if (fw->size < HDSP_FIRMWARE_SIZE) {
5120                 dev_err(hdsp->card->dev,
5121                         "too short firmware size %d (expected %d)\n",
5122                            (int)fw->size, HDSP_FIRMWARE_SIZE);
5123                 release_firmware(fw);
5124                 return -EINVAL;
5125         }
5126
5127         hdsp->firmware = fw;
5128
5129         hdsp->state |= HDSP_FirmwareCached;
5130
5131         if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0)
5132                 return err;
5133
5134         if (!(hdsp->state & HDSP_InitializationComplete)) {
5135                 if ((err = snd_hdsp_enable_io(hdsp)) < 0)
5136                         return err;
5137
5138                 if ((err = snd_hdsp_create_hwdep(hdsp->card, hdsp)) < 0) {
5139                         dev_err(hdsp->card->dev,
5140                                 "error creating hwdep device\n");
5141                         return err;
5142                 }
5143                 snd_hdsp_initialize_channels(hdsp);
5144                 snd_hdsp_initialize_midi_flush(hdsp);
5145                 if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) {
5146                         dev_err(hdsp->card->dev,
5147                                 "error creating alsa devices\n");
5148                         return err;
5149                 }
5150         }
5151         return 0;
5152 }
5153
5154 static int snd_hdsp_create(struct snd_card *card,
5155                            struct hdsp *hdsp)
5156 {
5157         struct pci_dev *pci = hdsp->pci;
5158         int err;
5159         int is_9652 = 0;
5160         int is_9632 = 0;
5161
5162         hdsp->irq = -1;
5163         hdsp->state = 0;
5164         hdsp->midi[0].rmidi = NULL;
5165         hdsp->midi[1].rmidi = NULL;
5166         hdsp->midi[0].input = NULL;
5167         hdsp->midi[1].input = NULL;
5168         hdsp->midi[0].output = NULL;
5169         hdsp->midi[1].output = NULL;
5170         hdsp->midi[0].pending = 0;
5171         hdsp->midi[1].pending = 0;
5172         spin_lock_init(&hdsp->midi[0].lock);
5173         spin_lock_init(&hdsp->midi[1].lock);
5174         hdsp->iobase = NULL;
5175         hdsp->control_register = 0;
5176         hdsp->control2_register = 0;
5177         hdsp->io_type = Undefined;
5178         hdsp->max_channels = 26;
5179
5180         hdsp->card = card;
5181
5182         spin_lock_init(&hdsp->lock);
5183
5184         INIT_WORK(&hdsp->midi_work, hdsp_midi_work);
5185
5186         pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
5187         hdsp->firmware_rev &= 0xff;
5188
5189         /* From Martin Bjoernsen :
5190             "It is important that the card's latency timer register in
5191             the PCI configuration space is set to a value much larger
5192             than 0 by the computer's BIOS or the driver.
5193             The windows driver always sets this 8 bit register [...]
5194             to its maximum 255 to avoid problems with some computers."
5195         */
5196         pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
5197
5198         strcpy(card->driver, "H-DSP");
5199         strcpy(card->mixername, "Xilinx FPGA");
5200
5201         if (hdsp->firmware_rev < 0xa)
5202                 return -ENODEV;
5203         else if (hdsp->firmware_rev < 0x64)
5204                 hdsp->card_name = "RME Hammerfall DSP";
5205         else if (hdsp->firmware_rev < 0x96) {
5206                 hdsp->card_name = "RME HDSP 9652";
5207                 is_9652 = 1;
5208         } else {
5209                 hdsp->card_name = "RME HDSP 9632";
5210                 hdsp->max_channels = 16;
5211                 is_9632 = 1;
5212         }
5213
5214         if ((err = pci_enable_device(pci)) < 0)
5215                 return err;
5216
5217         pci_set_master(hdsp->pci);
5218
5219         if ((err = pci_request_regions(pci, "hdsp")) < 0)
5220                 return err;
5221         hdsp->port = pci_resource_start(pci, 0);
5222         if ((hdsp->iobase = ioremap(hdsp->port, HDSP_IO_EXTENT)) == NULL) {
5223                 dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n",
5224                         hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
5225                 return -EBUSY;
5226         }
5227
5228         if (request_irq(pci->irq, snd_hdsp_interrupt, IRQF_SHARED,
5229                         KBUILD_MODNAME, hdsp)) {
5230                 dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq);
5231                 return -EBUSY;
5232         }
5233
5234         hdsp->irq = pci->irq;
5235         card->sync_irq = hdsp->irq;
5236         hdsp->precise_ptr = 0;
5237         hdsp->use_midi_work = 1;
5238         hdsp->dds_value = 0;
5239
5240         if ((err = snd_hdsp_initialize_memory(hdsp)) < 0)
5241                 return err;
5242
5243         if (!is_9652 && !is_9632) {
5244                 /* we wait a maximum of 10 seconds to let freshly
5245                  * inserted cardbus cards do their hardware init */
5246                 err = hdsp_wait_for_iobox(hdsp, 1000, 10);
5247
5248                 if (err < 0)
5249                         return err;
5250
5251                 if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
5252                         if ((err = hdsp_request_fw_loader(hdsp)) < 0)
5253                                 /* we don't fail as this can happen
5254                                    if userspace is not ready for
5255                                    firmware upload
5256                                 */
5257                                 dev_err(hdsp->card->dev,
5258                                         "couldn't get firmware from userspace. try using hdsploader\n");
5259                         else
5260                                 /* init is complete, we return */
5261                                 return 0;
5262                         /* we defer initialization */
5263                         dev_info(hdsp->card->dev,
5264                                  "card initialization pending : waiting for firmware\n");
5265                         if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0)
5266                                 return err;
5267                         return 0;
5268                 } else {
5269                         dev_info(hdsp->card->dev,
5270                                  "Firmware already present, initializing card.\n");
5271                         if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
5272                                 hdsp->io_type = RPM;
5273                         else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
5274                                 hdsp->io_type = Multiface;
5275                         else
5276                                 hdsp->io_type = Digiface;
5277                 }
5278         }
5279
5280         if ((err = snd_hdsp_enable_io(hdsp)) != 0)
5281                 return err;
5282
5283         if (is_9652)
5284                 hdsp->io_type = H9652;
5285
5286         if (is_9632)
5287                 hdsp->io_type = H9632;
5288
5289         if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0)
5290                 return err;
5291
5292         snd_hdsp_initialize_channels(hdsp);
5293         snd_hdsp_initialize_midi_flush(hdsp);
5294
5295         hdsp->state |= HDSP_FirmwareLoaded;
5296
5297         if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0)
5298                 return err;
5299
5300         return 0;
5301 }
5302
5303 static int snd_hdsp_free(struct hdsp *hdsp)
5304 {
5305         if (hdsp->port) {
5306                 /* stop the audio, and cancel all interrupts */
5307                 cancel_work_sync(&hdsp->midi_work);
5308                 hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable);
5309                 hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register);
5310         }
5311
5312         if (hdsp->irq >= 0)
5313                 free_irq(hdsp->irq, (void *)hdsp);
5314
5315         snd_hdsp_free_buffers(hdsp);
5316
5317         release_firmware(hdsp->firmware);
5318         vfree(hdsp->fw_uploaded);
5319         iounmap(hdsp->iobase);
5320
5321         if (hdsp->port)
5322                 pci_release_regions(hdsp->pci);
5323
5324         pci_disable_device(hdsp->pci);
5325         return 0;
5326 }
5327
5328 static void snd_hdsp_card_free(struct snd_card *card)
5329 {
5330         struct hdsp *hdsp = card->private_data;
5331
5332         if (hdsp)
5333                 snd_hdsp_free(hdsp);
5334 }
5335
5336 static int snd_hdsp_probe(struct pci_dev *pci,
5337                           const struct pci_device_id *pci_id)
5338 {
5339         static int dev;
5340         struct hdsp *hdsp;
5341         struct snd_card *card;
5342         int err;
5343
5344         if (dev >= SNDRV_CARDS)
5345                 return -ENODEV;
5346         if (!enable[dev]) {
5347                 dev++;
5348                 return -ENOENT;
5349         }
5350
5351         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
5352                            sizeof(struct hdsp), &card);
5353         if (err < 0)
5354                 return err;
5355
5356         hdsp = card->private_data;
5357         card->private_free = snd_hdsp_card_free;
5358         hdsp->dev = dev;
5359         hdsp->pci = pci;
5360         err = snd_hdsp_create(card, hdsp);
5361         if (err)
5362                 goto free_card;
5363
5364         strcpy(card->shortname, "Hammerfall DSP");
5365         sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5366                 hdsp->port, hdsp->irq);
5367         err = snd_card_register(card);
5368         if (err) {
5369 free_card:
5370                 snd_card_free(card);
5371                 return err;
5372         }
5373         pci_set_drvdata(pci, card);
5374         dev++;
5375         return 0;
5376 }
5377
5378 static void snd_hdsp_remove(struct pci_dev *pci)
5379 {
5380         snd_card_free(pci_get_drvdata(pci));
5381 }
5382
5383 static struct pci_driver hdsp_driver = {
5384         .name =     KBUILD_MODNAME,
5385         .id_table = snd_hdsp_ids,
5386         .probe =    snd_hdsp_probe,
5387         .remove = snd_hdsp_remove,
5388 };
5389
5390 module_pci_driver(hdsp_driver);