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