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