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