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