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