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