1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *   ALSA driver for RME Hammerfall DSP audio interface(s)
4  *
5  *      Copyright (c) 2002  Paul Davis
6  *                          Marcus Andersson
7  *                          Thomas Charbonnel
8  */
9 
10 #include <linux/init.h>
11 #include <linux/delay.h>
12 #include <linux/interrupt.h>
13 #include <linux/pci.h>
14 #include <linux/firmware.h>
15 #include <linux/module.h>
16 #include <linux/math64.h>
17 #include <linux/vmalloc.h>
18 #include <linux/io.h>
19 #include <linux/nospec.h>
20 
21 #include <sound/core.h>
22 #include <sound/control.h>
23 #include <sound/pcm.h>
24 #include <sound/info.h>
25 #include <sound/asoundef.h>
26 #include <sound/rawmidi.h>
27 #include <sound/hwdep.h>
28 #include <sound/initval.h>
29 #include <sound/hdsp.h>
30 
31 #include <asm/byteorder.h>
32 #include <asm/current.h>
33 
34 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
35 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
36 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
37 
38 module_param_array(index, int, NULL, 0444);
39 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface.");
40 module_param_array(id, charp, NULL, 0444);
41 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface.");
42 module_param_array(enable, bool, NULL, 0444);
43 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards.");
44 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>");
45 MODULE_DESCRIPTION("RME Hammerfall DSP");
46 MODULE_LICENSE("GPL");
47 MODULE_FIRMWARE("rpm_firmware.bin");
48 MODULE_FIRMWARE("multiface_firmware.bin");
49 MODULE_FIRMWARE("multiface_firmware_rev11.bin");
50 MODULE_FIRMWARE("digiface_firmware.bin");
51 MODULE_FIRMWARE("digiface_firmware_rev11.bin");
52 
53 #define HDSP_MAX_CHANNELS        26
54 #define HDSP_MAX_DS_CHANNELS     14
55 #define HDSP_MAX_QS_CHANNELS     8
56 #define DIGIFACE_SS_CHANNELS     26
57 #define DIGIFACE_DS_CHANNELS     14
58 #define MULTIFACE_SS_CHANNELS    18
59 #define MULTIFACE_DS_CHANNELS    14
60 #define H9652_SS_CHANNELS        26
61 #define H9652_DS_CHANNELS        14
62 /* This does not include possible Analog Extension Boards
63    AEBs are detected at card initialization
64 */
65 #define H9632_SS_CHANNELS	 12
66 #define H9632_DS_CHANNELS	 8
67 #define H9632_QS_CHANNELS	 4
68 #define RPM_CHANNELS             6
69 
70 /* Write registers. These are defined as byte-offsets from the iobase value.
71  */
72 #define HDSP_resetPointer               0
73 #define HDSP_freqReg			0
74 #define HDSP_outputBufferAddress	32
75 #define HDSP_inputBufferAddress		36
76 #define HDSP_controlRegister		64
77 #define HDSP_interruptConfirmation	96
78 #define HDSP_outputEnable	  	128
79 #define HDSP_control2Reg		256
80 #define HDSP_midiDataOut0  		352
81 #define HDSP_midiDataOut1  		356
82 #define HDSP_fifoData  			368
83 #define HDSP_inputEnable	 	384
84 
85 /* Read registers. These are defined as byte-offsets from the iobase value
86  */
87 
88 #define HDSP_statusRegister    0
89 #define HDSP_timecode        128
90 #define HDSP_status2Register 192
91 #define HDSP_midiDataIn0     360
92 #define HDSP_midiDataIn1     364
93 #define HDSP_midiStatusOut0  384
94 #define HDSP_midiStatusOut1  388
95 #define HDSP_midiStatusIn0   392
96 #define HDSP_midiStatusIn1   396
97 #define HDSP_fifoStatus      400
98 
99 /* the meters are regular i/o-mapped registers, but offset
100    considerably from the rest. the peak registers are reset
101    when read; the least-significant 4 bits are full-scale counters;
102    the actual peak value is in the most-significant 24 bits.
103 */
104 
105 #define HDSP_playbackPeakLevel  4096  /* 26 * 32 bit values */
106 #define HDSP_inputPeakLevel     4224  /* 26 * 32 bit values */
107 #define HDSP_outputPeakLevel    4352  /* (26+2) * 32 bit values */
108 #define HDSP_playbackRmsLevel   4612  /* 26 * 64 bit values */
109 #define HDSP_inputRmsLevel      4868  /* 26 * 64 bit values */
110 
111 
112 /* This is for H9652 cards
113    Peak values are read downward from the base
114    Rms values are read upward
115    There are rms values for the outputs too
116    26*3 values are read in ss mode
117    14*3 in ds mode, with no gap between values
118 */
119 #define HDSP_9652_peakBase	7164
120 #define HDSP_9652_rmsBase	4096
121 
122 /* c.f. the hdsp_9632_meters_t struct */
123 #define HDSP_9632_metersBase	4096
124 
125 #define HDSP_IO_EXTENT     7168
126 
127 /* control2 register bits */
128 
129 #define HDSP_TMS                0x01
130 #define HDSP_TCK                0x02
131 #define HDSP_TDI                0x04
132 #define HDSP_JTAG               0x08
133 #define HDSP_PWDN               0x10
134 #define HDSP_PROGRAM	        0x020
135 #define HDSP_CONFIG_MODE_0	0x040
136 #define HDSP_CONFIG_MODE_1	0x080
137 #define HDSP_VERSION_BIT	(0x100 | HDSP_S_LOAD)
138 #define HDSP_BIGENDIAN_MODE     0x200
139 #define HDSP_RD_MULTIPLE        0x400
140 #define HDSP_9652_ENABLE_MIXER  0x800
141 #define HDSP_S200		0x800
142 #define HDSP_S300		(0x100 | HDSP_S200) /* dummy, purpose of 0x100 unknown */
143 #define HDSP_CYCLIC_MODE	0x1000
144 #define HDSP_TDO                0x10000000
145 
146 #define HDSP_S_PROGRAM	    (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_0)
147 #define HDSP_S_LOAD	    (HDSP_CYCLIC_MODE|HDSP_PROGRAM|HDSP_CONFIG_MODE_1)
148 
149 /* Control Register bits */
150 
151 #define HDSP_Start                (1<<0)  /* start engine */
152 #define HDSP_Latency0             (1<<1)  /* buffer size = 2^n where n is defined by Latency{2,1,0} */
153 #define HDSP_Latency1             (1<<2)  /* [ see above ] */
154 #define HDSP_Latency2             (1<<3)  /* [ see above ] */
155 #define HDSP_ClockModeMaster      (1<<4)  /* 1=Master, 0=Slave/Autosync */
156 #define HDSP_AudioInterruptEnable (1<<5)  /* what do you think ? */
157 #define HDSP_Frequency0           (1<<6)  /* 0=44.1kHz/88.2kHz/176.4kHz 1=48kHz/96kHz/192kHz */
158 #define HDSP_Frequency1           (1<<7)  /* 0=32kHz/64kHz/128kHz */
159 #define HDSP_DoubleSpeed          (1<<8)  /* 0=normal speed, 1=double speed */
160 #define HDSP_SPDIFProfessional    (1<<9)  /* 0=consumer, 1=professional */
161 #define HDSP_SPDIFEmphasis        (1<<10) /* 0=none, 1=on */
162 #define HDSP_SPDIFNonAudio        (1<<11) /* 0=off, 1=on */
163 #define HDSP_SPDIFOpticalOut      (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */
164 #define HDSP_SyncRef2             (1<<13)
165 #define HDSP_SPDIFInputSelect0    (1<<14)
166 #define HDSP_SPDIFInputSelect1    (1<<15)
167 #define HDSP_SyncRef0             (1<<16)
168 #define HDSP_SyncRef1             (1<<17)
169 #define HDSP_AnalogExtensionBoard (1<<18) /* For H9632 cards */
170 #define HDSP_XLRBreakoutCable     (1<<20) /* For H9632 cards */
171 #define HDSP_Midi0InterruptEnable (1<<22)
172 #define HDSP_Midi1InterruptEnable (1<<23)
173 #define HDSP_LineOut              (1<<24)
174 #define HDSP_ADGain0		  (1<<25) /* From here : H9632 specific */
175 #define HDSP_ADGain1		  (1<<26)
176 #define HDSP_DAGain0		  (1<<27)
177 #define HDSP_DAGain1		  (1<<28)
178 #define HDSP_PhoneGain0		  (1<<29)
179 #define HDSP_PhoneGain1		  (1<<30)
180 #define HDSP_QuadSpeed	  	  (1<<31)
181 
182 /* RPM uses some of the registers for special purposes */
183 #define HDSP_RPM_Inp12            0x04A00
184 #define HDSP_RPM_Inp12_Phon_6dB   0x00800  /* Dolby */
185 #define HDSP_RPM_Inp12_Phon_0dB   0x00000  /* .. */
186 #define HDSP_RPM_Inp12_Phon_n6dB  0x04000  /* inp_0 */
187 #define HDSP_RPM_Inp12_Line_0dB   0x04200  /* Dolby+PRO */
188 #define HDSP_RPM_Inp12_Line_n6dB  0x00200  /* PRO */
189 
190 #define HDSP_RPM_Inp34            0x32000
191 #define HDSP_RPM_Inp34_Phon_6dB   0x20000  /* SyncRef1 */
192 #define HDSP_RPM_Inp34_Phon_0dB   0x00000  /* .. */
193 #define HDSP_RPM_Inp34_Phon_n6dB  0x02000  /* SyncRef2 */
194 #define HDSP_RPM_Inp34_Line_0dB   0x30000  /* SyncRef1+SyncRef0 */
195 #define HDSP_RPM_Inp34_Line_n6dB  0x10000  /* SyncRef0 */
196 
197 #define HDSP_RPM_Bypass           0x01000
198 
199 #define HDSP_RPM_Disconnect       0x00001
200 
201 #define HDSP_ADGainMask       (HDSP_ADGain0|HDSP_ADGain1)
202 #define HDSP_ADGainMinus10dBV  HDSP_ADGainMask
203 #define HDSP_ADGainPlus4dBu   (HDSP_ADGain0)
204 #define HDSP_ADGainLowGain     0
205 
206 #define HDSP_DAGainMask         (HDSP_DAGain0|HDSP_DAGain1)
207 #define HDSP_DAGainHighGain      HDSP_DAGainMask
208 #define HDSP_DAGainPlus4dBu     (HDSP_DAGain0)
209 #define HDSP_DAGainMinus10dBV    0
210 
211 #define HDSP_PhoneGainMask      (HDSP_PhoneGain0|HDSP_PhoneGain1)
212 #define HDSP_PhoneGain0dB        HDSP_PhoneGainMask
213 #define HDSP_PhoneGainMinus6dB  (HDSP_PhoneGain0)
214 #define HDSP_PhoneGainMinus12dB  0
215 
216 #define HDSP_LatencyMask    (HDSP_Latency0|HDSP_Latency1|HDSP_Latency2)
217 #define HDSP_FrequencyMask  (HDSP_Frequency0|HDSP_Frequency1|HDSP_DoubleSpeed|HDSP_QuadSpeed)
218 
219 #define HDSP_SPDIFInputMask    (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
220 #define HDSP_SPDIFInputADAT1    0
221 #define HDSP_SPDIFInputCoaxial (HDSP_SPDIFInputSelect0)
222 #define HDSP_SPDIFInputCdrom   (HDSP_SPDIFInputSelect1)
223 #define HDSP_SPDIFInputAES     (HDSP_SPDIFInputSelect0|HDSP_SPDIFInputSelect1)
224 
225 #define HDSP_SyncRefMask        (HDSP_SyncRef0|HDSP_SyncRef1|HDSP_SyncRef2)
226 #define HDSP_SyncRef_ADAT1       0
227 #define HDSP_SyncRef_ADAT2      (HDSP_SyncRef0)
228 #define HDSP_SyncRef_ADAT3      (HDSP_SyncRef1)
229 #define HDSP_SyncRef_SPDIF      (HDSP_SyncRef0|HDSP_SyncRef1)
230 #define HDSP_SyncRef_WORD       (HDSP_SyncRef2)
231 #define HDSP_SyncRef_ADAT_SYNC  (HDSP_SyncRef0|HDSP_SyncRef2)
232 
233 /* Sample Clock Sources */
234 
235 #define HDSP_CLOCK_SOURCE_AUTOSYNC           0
236 #define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ     1
237 #define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ   2
238 #define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ     3
239 #define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ     4
240 #define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ   5
241 #define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ     6
242 #define HDSP_CLOCK_SOURCE_INTERNAL_128KHZ    7
243 #define HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ  8
244 #define HDSP_CLOCK_SOURCE_INTERNAL_192KHZ    9
245 
246 /* Preferred sync reference choices - used by "pref_sync_ref" control switch */
247 
248 #define HDSP_SYNC_FROM_WORD      0
249 #define HDSP_SYNC_FROM_SPDIF     1
250 #define HDSP_SYNC_FROM_ADAT1     2
251 #define HDSP_SYNC_FROM_ADAT_SYNC 3
252 #define HDSP_SYNC_FROM_ADAT2     4
253 #define HDSP_SYNC_FROM_ADAT3     5
254 
255 /* SyncCheck status */
256 
257 #define HDSP_SYNC_CHECK_NO_LOCK 0
258 #define HDSP_SYNC_CHECK_LOCK    1
259 #define HDSP_SYNC_CHECK_SYNC	2
260 
261 /* AutoSync references - used by "autosync_ref" control switch */
262 
263 #define HDSP_AUTOSYNC_FROM_WORD      0
264 #define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1
265 #define HDSP_AUTOSYNC_FROM_SPDIF     2
266 #define HDSP_AUTOSYNC_FROM_NONE	     3
267 #define HDSP_AUTOSYNC_FROM_ADAT1     4
268 #define HDSP_AUTOSYNC_FROM_ADAT2     5
269 #define HDSP_AUTOSYNC_FROM_ADAT3     6
270 
271 /* Possible sources of S/PDIF input */
272 
273 #define HDSP_SPDIFIN_OPTICAL  0	/* optical  (ADAT1) */
274 #define HDSP_SPDIFIN_COAXIAL  1	/* coaxial (RCA) */
275 #define HDSP_SPDIFIN_INTERNAL 2	/* internal (CDROM) */
276 #define HDSP_SPDIFIN_AES      3 /* xlr for H9632 (AES)*/
277 
278 #define HDSP_Frequency32KHz    HDSP_Frequency0
279 #define HDSP_Frequency44_1KHz  HDSP_Frequency1
280 #define HDSP_Frequency48KHz    (HDSP_Frequency1|HDSP_Frequency0)
281 #define HDSP_Frequency64KHz    (HDSP_DoubleSpeed|HDSP_Frequency0)
282 #define HDSP_Frequency88_2KHz  (HDSP_DoubleSpeed|HDSP_Frequency1)
283 #define HDSP_Frequency96KHz    (HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
284 /* For H9632 cards */
285 #define HDSP_Frequency128KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency0)
286 #define HDSP_Frequency176_4KHz (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1)
287 #define HDSP_Frequency192KHz   (HDSP_QuadSpeed|HDSP_DoubleSpeed|HDSP_Frequency1|HDSP_Frequency0)
288 /* RME says n = 104857600000000, but in the windows MADI driver, I see:
289 	return 104857600000000 / rate; // 100 MHz
290 	return 110100480000000 / rate; // 105 MHz
291 */
292 #define DDS_NUMERATOR 104857600000000ULL  /*  =  2^20 * 10^8 */
293 
294 #define hdsp_encode_latency(x)       (((x)<<1) & HDSP_LatencyMask)
295 #define hdsp_decode_latency(x)       (((x) & HDSP_LatencyMask)>>1)
296 
297 #define hdsp_encode_spdif_in(x) (((x)&0x3)<<14)
298 #define hdsp_decode_spdif_in(x) (((x)>>14)&0x3)
299 
300 /* Status Register bits */
301 
302 #define HDSP_audioIRQPending    (1<<0)
303 #define HDSP_Lock2              (1<<1)     /* this is for Digiface and H9652 */
304 #define HDSP_spdifFrequency3	HDSP_Lock2 /* this is for H9632 only */
305 #define HDSP_Lock1              (1<<2)
306 #define HDSP_Lock0              (1<<3)
307 #define HDSP_SPDIFSync          (1<<4)
308 #define HDSP_TimecodeLock       (1<<5)
309 #define HDSP_BufferPositionMask 0x000FFC0 /* Bit 6..15 : h/w buffer pointer */
310 #define HDSP_Sync2              (1<<16)
311 #define HDSP_Sync1              (1<<17)
312 #define HDSP_Sync0              (1<<18)
313 #define HDSP_DoubleSpeedStatus  (1<<19)
314 #define HDSP_ConfigError        (1<<20)
315 #define HDSP_DllError           (1<<21)
316 #define HDSP_spdifFrequency0    (1<<22)
317 #define HDSP_spdifFrequency1    (1<<23)
318 #define HDSP_spdifFrequency2    (1<<24)
319 #define HDSP_SPDIFErrorFlag     (1<<25)
320 #define HDSP_BufferID           (1<<26)
321 #define HDSP_TimecodeSync       (1<<27)
322 #define HDSP_AEBO          	(1<<28) /* H9632 specific Analog Extension Boards */
323 #define HDSP_AEBI		(1<<29) /* 0 = present, 1 = absent */
324 #define HDSP_midi0IRQPending    (1<<30)
325 #define HDSP_midi1IRQPending    (1<<31)
326 
327 #define HDSP_spdifFrequencyMask    (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2)
328 #define HDSP_spdifFrequencyMask_9632 (HDSP_spdifFrequency0|\
329 				      HDSP_spdifFrequency1|\
330 				      HDSP_spdifFrequency2|\
331 				      HDSP_spdifFrequency3)
332 
333 #define HDSP_spdifFrequency32KHz   (HDSP_spdifFrequency0)
334 #define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1)
335 #define HDSP_spdifFrequency48KHz   (HDSP_spdifFrequency0|HDSP_spdifFrequency1)
336 
337 #define HDSP_spdifFrequency64KHz   (HDSP_spdifFrequency2)
338 #define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2)
339 #define HDSP_spdifFrequency96KHz   (HDSP_spdifFrequency2|HDSP_spdifFrequency1)
340 
341 /* This is for H9632 cards */
342 #define HDSP_spdifFrequency128KHz   (HDSP_spdifFrequency0|\
343 				     HDSP_spdifFrequency1|\
344 				     HDSP_spdifFrequency2)
345 #define HDSP_spdifFrequency176_4KHz HDSP_spdifFrequency3
346 #define HDSP_spdifFrequency192KHz   (HDSP_spdifFrequency3|HDSP_spdifFrequency0)
347 
348 /* Status2 Register bits */
349 
350 #define HDSP_version0     (1<<0)
351 #define HDSP_version1     (1<<1)
352 #define HDSP_version2     (1<<2)
353 #define HDSP_wc_lock      (1<<3)
354 #define HDSP_wc_sync      (1<<4)
355 #define HDSP_inp_freq0    (1<<5)
356 #define HDSP_inp_freq1    (1<<6)
357 #define HDSP_inp_freq2    (1<<7)
358 #define HDSP_SelSyncRef0  (1<<8)
359 #define HDSP_SelSyncRef1  (1<<9)
360 #define HDSP_SelSyncRef2  (1<<10)
361 
362 #define HDSP_wc_valid (HDSP_wc_lock|HDSP_wc_sync)
363 
364 #define HDSP_systemFrequencyMask (HDSP_inp_freq0|HDSP_inp_freq1|HDSP_inp_freq2)
365 #define HDSP_systemFrequency32   (HDSP_inp_freq0)
366 #define HDSP_systemFrequency44_1 (HDSP_inp_freq1)
367 #define HDSP_systemFrequency48   (HDSP_inp_freq0|HDSP_inp_freq1)
368 #define HDSP_systemFrequency64   (HDSP_inp_freq2)
369 #define HDSP_systemFrequency88_2 (HDSP_inp_freq0|HDSP_inp_freq2)
370 #define HDSP_systemFrequency96   (HDSP_inp_freq1|HDSP_inp_freq2)
371 /* FIXME : more values for 9632 cards ? */
372 
373 #define HDSP_SelSyncRefMask        (HDSP_SelSyncRef0|HDSP_SelSyncRef1|HDSP_SelSyncRef2)
374 #define HDSP_SelSyncRef_ADAT1      0
375 #define HDSP_SelSyncRef_ADAT2      (HDSP_SelSyncRef0)
376 #define HDSP_SelSyncRef_ADAT3      (HDSP_SelSyncRef1)
377 #define HDSP_SelSyncRef_SPDIF      (HDSP_SelSyncRef0|HDSP_SelSyncRef1)
378 #define HDSP_SelSyncRef_WORD       (HDSP_SelSyncRef2)
379 #define HDSP_SelSyncRef_ADAT_SYNC  (HDSP_SelSyncRef0|HDSP_SelSyncRef2)
380 
381 /* Card state flags */
382 
383 #define HDSP_InitializationComplete  (1<<0)
384 #define HDSP_FirmwareLoaded	     (1<<1)
385 #define HDSP_FirmwareCached	     (1<<2)
386 
387 /* FIFO wait times, defined in terms of 1/10ths of msecs */
388 
389 #define HDSP_LONG_WAIT	 5000
390 #define HDSP_SHORT_WAIT  30
391 
392 #define UNITY_GAIN                       32768
393 #define MINUS_INFINITY_GAIN              0
394 
395 /* the size of a substream (1 mono data stream) */
396 
397 #define HDSP_CHANNEL_BUFFER_SAMPLES  (16*1024)
398 #define HDSP_CHANNEL_BUFFER_BYTES    (4*HDSP_CHANNEL_BUFFER_SAMPLES)
399 
400 /* the size of the area we need to allocate for DMA transfers. the
401    size is the same regardless of the number of channels - the
402    Multiface still uses the same memory area.
403 
404    Note that we allocate 1 more channel than is apparently needed
405    because the h/w seems to write 1 byte beyond the end of the last
406    page. Sigh.
407 */
408 
409 #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES)
410 #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024)
411 
412 #define HDSP_FIRMWARE_SIZE	(24413 * 4)
413 
414 struct hdsp_9632_meters {
415     u32 input_peak[16];
416     u32 playback_peak[16];
417     u32 output_peak[16];
418     u32 xxx_peak[16];
419     u32 padding[64];
420     u32 input_rms_low[16];
421     u32 playback_rms_low[16];
422     u32 output_rms_low[16];
423     u32 xxx_rms_low[16];
424     u32 input_rms_high[16];
425     u32 playback_rms_high[16];
426     u32 output_rms_high[16];
427     u32 xxx_rms_high[16];
428 };
429 
430 struct hdsp_midi {
431     struct hdsp             *hdsp;
432     int                      id;
433     struct snd_rawmidi           *rmidi;
434     struct snd_rawmidi_substream *input;
435     struct snd_rawmidi_substream *output;
436     signed char		     istimer; /* timer in use */
437     struct timer_list	     timer;
438     spinlock_t               lock;
439     int			     pending;
440 };
441 
442 struct hdsp {
443 	spinlock_t            lock;
444 	struct snd_pcm_substream *capture_substream;
445 	struct snd_pcm_substream *playback_substream;
446         struct hdsp_midi      midi[2];
447 	struct work_struct    midi_work;
448 	int		      use_midi_work;
449 	int                   precise_ptr;
450 	u32                   control_register;	     /* cached value */
451 	u32                   control2_register;     /* cached value */
452 	u32                   creg_spdif;
453 	u32                   creg_spdif_stream;
454 	int                   clock_source_locked;
455 	char                 *card_name;	 /* digiface/multiface/rpm */
456 	enum HDSP_IO_Type     io_type;               /* ditto, but for code use */
457         unsigned short        firmware_rev;
458 	unsigned short	      state;		     /* stores state bits */
459 	const struct firmware *firmware;
460 	u32                  *fw_uploaded;
461 	size_t                period_bytes; 	     /* guess what this is */
462 	unsigned char	      max_channels;
463 	unsigned char	      qs_in_channels;	     /* quad speed mode for H9632 */
464 	unsigned char         ds_in_channels;
465 	unsigned char         ss_in_channels;	    /* different for multiface/digiface */
466 	unsigned char	      qs_out_channels;
467 	unsigned char         ds_out_channels;
468 	unsigned char         ss_out_channels;
469 	u32                   io_loopback;          /* output loopback channel states*/
470 
471 	/* DMA buffers; those are copied instances from the original snd_dma_buf
472 	 * objects (which are managed via devres) for the address alignments
473 	 */
474 	struct snd_dma_buffer capture_dma_buf;
475 	struct snd_dma_buffer playback_dma_buf;
476 	unsigned char        *capture_buffer;	    /* suitably aligned address */
477 	unsigned char        *playback_buffer;	    /* suitably aligned address */
478 
479 	pid_t                 capture_pid;
480 	pid_t                 playback_pid;
481 	int                   running;
482 	int                   system_sample_rate;
483 	const signed char    *channel_map;
484 	int                   dev;
485 	int                   irq;
486 	unsigned long         port;
487         void __iomem         *iobase;
488 	struct snd_card *card;
489 	struct snd_pcm *pcm;
490 	struct snd_hwdep          *hwdep;
491 	struct pci_dev       *pci;
492 	struct snd_kcontrol *spdif_ctl;
493         unsigned short        mixer_matrix[HDSP_MATRIX_MIXER_SIZE];
494 	unsigned int          dds_value; /* last value written to freq register */
495 };
496 
497 /* These tables map the ALSA channels 1..N to the channels that we
498    need to use in order to find the relevant channel buffer. RME
499    refer to this kind of mapping as between "the ADAT channel and
500    the DMA channel." We index it using the logical audio channel,
501    and the value is the DMA channel (i.e. channel buffer number)
502    where the data for that channel can be read/written from/to.
503 */
504 
505 static const signed char channel_map_df_ss[HDSP_MAX_CHANNELS] = {
506 	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
507 	18, 19, 20, 21, 22, 23, 24, 25
508 };
509 
510 static const char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */
511 	/* Analog */
512 	0, 1, 2, 3, 4, 5, 6, 7,
513 	/* ADAT 2 */
514 	16, 17, 18, 19, 20, 21, 22, 23,
515 	/* SPDIF */
516 	24, 25,
517 	-1, -1, -1, -1, -1, -1, -1, -1
518 };
519 
520 static const signed char channel_map_ds[HDSP_MAX_CHANNELS] = {
521 	/* ADAT channels are remapped */
522 	1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
523 	/* channels 12 and 13 are S/PDIF */
524 	24, 25,
525 	/* others don't exist */
526 	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
527 };
528 
529 static const signed char channel_map_H9632_ss[HDSP_MAX_CHANNELS] = {
530 	/* ADAT channels */
531 	0, 1, 2, 3, 4, 5, 6, 7,
532 	/* SPDIF */
533 	8, 9,
534 	/* Analog */
535 	10, 11,
536 	/* AO4S-192 and AI4S-192 extension boards */
537 	12, 13, 14, 15,
538 	/* others don't exist */
539 	-1, -1, -1, -1, -1, -1, -1, -1,
540 	-1, -1
541 };
542 
543 static const signed char channel_map_H9632_ds[HDSP_MAX_CHANNELS] = {
544 	/* ADAT */
545 	1, 3, 5, 7,
546 	/* SPDIF */
547 	8, 9,
548 	/* Analog */
549 	10, 11,
550 	/* AO4S-192 and AI4S-192 extension boards */
551 	12, 13, 14, 15,
552 	/* others don't exist */
553 	-1, -1, -1, -1, -1, -1, -1, -1,
554 	-1, -1, -1, -1, -1, -1
555 };
556 
557 static const signed char channel_map_H9632_qs[HDSP_MAX_CHANNELS] = {
558 	/* ADAT is disabled in this mode */
559 	/* SPDIF */
560 	8, 9,
561 	/* Analog */
562 	10, 11,
563 	/* AO4S-192 and AI4S-192 extension boards */
564 	12, 13, 14, 15,
565 	/* others don't exist */
566 	-1, -1, -1, -1, -1, -1, -1, -1,
567 	-1, -1, -1, -1, -1, -1, -1, -1,
568 	-1, -1
569 };
570 
571 static struct snd_dma_buffer *
snd_hammerfall_get_buffer(struct pci_dev * pci,size_t size)572 snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size)
573 {
574 	return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size);
575 }
576 
577 static const struct pci_device_id snd_hdsp_ids[] = {
578 	{
579 		.vendor = PCI_VENDOR_ID_XILINX,
580 		.device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP,
581 		.subvendor = PCI_ANY_ID,
582 		.subdevice = PCI_ANY_ID,
583 	}, /* RME Hammerfall-DSP */
584 	{ 0, },
585 };
586 
587 MODULE_DEVICE_TABLE(pci, snd_hdsp_ids);
588 
589 /* prototypes */
590 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp);
591 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp);
592 static int snd_hdsp_enable_io (struct hdsp *hdsp);
593 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp);
594 static void snd_hdsp_initialize_channels (struct hdsp *hdsp);
595 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout);
596 static int hdsp_autosync_ref(struct hdsp *hdsp);
597 static int snd_hdsp_set_defaults(struct hdsp *hdsp);
598 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp);
599 
hdsp_playback_to_output_key(struct hdsp * hdsp,int in,int out)600 static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out)
601 {
602 	switch (hdsp->io_type) {
603 	case Multiface:
604 	case Digiface:
605 	case RPM:
606 	default:
607 		if (hdsp->firmware_rev == 0xa)
608 			return (64 * out) + (32 + (in));
609 		else
610 			return (52 * out) + (26 + (in));
611 	case H9632:
612 		return (32 * out) + (16 + (in));
613 	case H9652:
614 		return (52 * out) + (26 + (in));
615 	}
616 }
617 
hdsp_input_to_output_key(struct hdsp * hdsp,int in,int out)618 static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out)
619 {
620 	switch (hdsp->io_type) {
621 	case Multiface:
622 	case Digiface:
623 	case RPM:
624 	default:
625 		if (hdsp->firmware_rev == 0xa)
626 			return (64 * out) + in;
627 		else
628 			return (52 * out) + in;
629 	case H9632:
630 		return (32 * out) + in;
631 	case H9652:
632 		return (52 * out) + in;
633 	}
634 }
635 
hdsp_write(struct hdsp * hdsp,int reg,int val)636 static void hdsp_write(struct hdsp *hdsp, int reg, int val)
637 {
638 	writel(val, hdsp->iobase + reg);
639 }
640 
hdsp_read(struct hdsp * hdsp,int reg)641 static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
642 {
643 	return readl (hdsp->iobase + reg);
644 }
645 
hdsp_check_for_iobox(struct hdsp * hdsp)646 static int hdsp_check_for_iobox (struct hdsp *hdsp)
647 {
648 	int i;
649 
650 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
651 	for (i = 0; i < 500; i++) {
652 		if (0 == (hdsp_read(hdsp, HDSP_statusRegister) &
653 					HDSP_ConfigError)) {
654 			if (i) {
655 				dev_dbg(hdsp->card->dev,
656 					"IO box found after %d ms\n",
657 						(20 * i));
658 			}
659 			return 0;
660 		}
661 		msleep(20);
662 	}
663 	dev_err(hdsp->card->dev, "no IO box connected!\n");
664 	hdsp->state &= ~HDSP_FirmwareLoaded;
665 	return -EIO;
666 }
667 
hdsp_wait_for_iobox(struct hdsp * hdsp,unsigned int loops,unsigned int delay)668 static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
669 			       unsigned int delay)
670 {
671 	unsigned int i;
672 
673 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
674 		return 0;
675 
676 	for (i = 0; i != loops; ++i) {
677 		if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
678 			msleep(delay);
679 		else {
680 			dev_dbg(hdsp->card->dev, "iobox found after %ums!\n",
681 				   i * delay);
682 			return 0;
683 		}
684 	}
685 
686 	dev_info(hdsp->card->dev, "no IO box connected!\n");
687 	hdsp->state &= ~HDSP_FirmwareLoaded;
688 	return -EIO;
689 }
690 
snd_hdsp_load_firmware_from_cache(struct hdsp * hdsp)691 static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
692 
693 	int i;
694 	unsigned long flags;
695 	const u32 *cache;
696 
697 	if (hdsp->fw_uploaded)
698 		cache = hdsp->fw_uploaded;
699 	else {
700 		if (!hdsp->firmware)
701 			return -ENODEV;
702 		cache = (u32 *)hdsp->firmware->data;
703 		if (!cache)
704 			return -ENODEV;
705 	}
706 
707 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
708 
709 		dev_info(hdsp->card->dev, "loading firmware\n");
710 
711 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
712 		hdsp_write (hdsp, HDSP_fifoData, 0);
713 
714 		if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
715 			dev_info(hdsp->card->dev,
716 				 "timeout waiting for download preparation\n");
717 			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
718 			return -EIO;
719 		}
720 
721 		hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
722 
723 		for (i = 0; i < HDSP_FIRMWARE_SIZE / 4; ++i) {
724 			hdsp_write(hdsp, HDSP_fifoData, cache[i]);
725 			if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
726 				dev_info(hdsp->card->dev,
727 					 "timeout during firmware loading\n");
728 				hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
729 				return -EIO;
730 			}
731 		}
732 
733 		hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT);
734 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
735 
736 		ssleep(3);
737 #ifdef SNDRV_BIG_ENDIAN
738 		hdsp->control2_register = HDSP_BIGENDIAN_MODE;
739 #else
740 		hdsp->control2_register = 0;
741 #endif
742 		hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
743 		dev_info(hdsp->card->dev, "finished firmware loading\n");
744 
745 	}
746 	if (hdsp->state & HDSP_InitializationComplete) {
747 		dev_info(hdsp->card->dev,
748 			 "firmware loaded from cache, restoring defaults\n");
749 		spin_lock_irqsave(&hdsp->lock, flags);
750 		snd_hdsp_set_defaults(hdsp);
751 		spin_unlock_irqrestore(&hdsp->lock, flags);
752 	}
753 
754 	hdsp->state |= HDSP_FirmwareLoaded;
755 
756 	return 0;
757 }
758 
hdsp_get_iobox_version(struct hdsp * hdsp)759 static int hdsp_get_iobox_version (struct hdsp *hdsp)
760 {
761 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
762 
763 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
764 		hdsp_write(hdsp, HDSP_fifoData, 0);
765 
766 		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
767 			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
768 			hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
769 		}
770 
771 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
772 		hdsp_write (hdsp, HDSP_fifoData, 0);
773 		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
774 			goto set_multi;
775 
776 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
777 		hdsp_write(hdsp, HDSP_fifoData, 0);
778 		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
779 			hdsp->io_type = Digiface;
780 			dev_info(hdsp->card->dev, "Digiface found\n");
781 			return 0;
782 		}
783 
784 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
785 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
786 		hdsp_write(hdsp, HDSP_fifoData, 0);
787 		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
788 			goto set_multi;
789 
790 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
791 		hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
792 		hdsp_write(hdsp, HDSP_fifoData, 0);
793 		if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
794 			goto set_multi;
795 
796 		hdsp->io_type = RPM;
797 		dev_info(hdsp->card->dev, "RPM found\n");
798 		return 0;
799 	} else {
800 		/* firmware was already loaded, get iobox type */
801 		if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
802 			hdsp->io_type = RPM;
803 		else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
804 			hdsp->io_type = Multiface;
805 		else
806 			hdsp->io_type = Digiface;
807 	}
808 	return 0;
809 
810 set_multi:
811 	hdsp->io_type = Multiface;
812 	dev_info(hdsp->card->dev, "Multiface found\n");
813 	return 0;
814 }
815 
816 
817 static int hdsp_request_fw_loader(struct hdsp *hdsp);
818 
hdsp_check_for_firmware(struct hdsp * hdsp,int load_on_demand)819 static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
820 {
821 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
822 		return 0;
823 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
824 		hdsp->state &= ~HDSP_FirmwareLoaded;
825 		if (! load_on_demand)
826 			return -EIO;
827 		dev_err(hdsp->card->dev, "firmware not present.\n");
828 		/* try to load firmware */
829 		if (! (hdsp->state & HDSP_FirmwareCached)) {
830 			if (! hdsp_request_fw_loader(hdsp))
831 				return 0;
832 			dev_err(hdsp->card->dev,
833 				   "No firmware loaded nor cached, please upload firmware.\n");
834 			return -EIO;
835 		}
836 		if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
837 			dev_err(hdsp->card->dev,
838 				   "Firmware loading from cache failed, please upload manually.\n");
839 			return -EIO;
840 		}
841 	}
842 	return 0;
843 }
844 
845 
hdsp_fifo_wait(struct hdsp * hdsp,int count,int timeout)846 static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
847 {
848 	int i;
849 
850 	/* the fifoStatus registers reports on how many words
851 	   are available in the command FIFO.
852 	*/
853 
854 	for (i = 0; i < timeout; i++) {
855 
856 		if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
857 			return 0;
858 
859 		/* not very friendly, but we only do this during a firmware
860 		   load and changing the mixer, so we just put up with it.
861 		*/
862 
863 		udelay (100);
864 	}
865 
866 	dev_warn(hdsp->card->dev,
867 		 "wait for FIFO status <= %d failed after %d iterations\n",
868 		    count, timeout);
869 	return -1;
870 }
871 
hdsp_read_gain(struct hdsp * hdsp,unsigned int addr)872 static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr)
873 {
874 	if (addr >= HDSP_MATRIX_MIXER_SIZE)
875 		return 0;
876 
877 	return hdsp->mixer_matrix[addr];
878 }
879 
hdsp_write_gain(struct hdsp * hdsp,unsigned int addr,unsigned short data)880 static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data)
881 {
882 	unsigned int ad;
883 
884 	if (addr >= HDSP_MATRIX_MIXER_SIZE)
885 		return -1;
886 
887 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
888 
889 		/* from martin bjornsen:
890 
891 		   "You can only write dwords to the
892 		   mixer memory which contain two
893 		   mixer values in the low and high
894 		   word. So if you want to change
895 		   value 0 you have to read value 1
896 		   from the cache and write both to
897 		   the first dword in the mixer
898 		   memory."
899 		*/
900 
901 		if (hdsp->io_type == H9632 && addr >= 512)
902 			return 0;
903 
904 		if (hdsp->io_type == H9652 && addr >= 1352)
905 			return 0;
906 
907 		hdsp->mixer_matrix[addr] = data;
908 
909 
910 		/* `addr' addresses a 16-bit wide address, but
911 		   the address space accessed via hdsp_write
912 		   uses byte offsets. put another way, addr
913 		   varies from 0 to 1351, but to access the
914 		   corresponding memory location, we need
915 		   to access 0 to 2703 ...
916 		*/
917 		ad = addr/2;
918 
919 		hdsp_write (hdsp, 4096 + (ad*4),
920 			    (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
921 			    hdsp->mixer_matrix[addr&0x7fe]);
922 
923 		return 0;
924 
925 	} else {
926 
927 		ad = (addr << 16) + data;
928 
929 		if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
930 			return -1;
931 
932 		hdsp_write (hdsp, HDSP_fifoData, ad);
933 		hdsp->mixer_matrix[addr] = data;
934 
935 	}
936 
937 	return 0;
938 }
939 
snd_hdsp_use_is_exclusive(struct hdsp * hdsp)940 static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp)
941 {
942 	unsigned long flags;
943 	int ret = 1;
944 
945 	spin_lock_irqsave(&hdsp->lock, flags);
946 	if ((hdsp->playback_pid != hdsp->capture_pid) &&
947 	    (hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0))
948 		ret = 0;
949 	spin_unlock_irqrestore(&hdsp->lock, flags);
950 	return ret;
951 }
952 
hdsp_spdif_sample_rate(struct hdsp * hdsp)953 static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
954 {
955 	unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
956 	unsigned int rate_bits = (status & HDSP_spdifFrequencyMask);
957 
958 	/* For the 9632, the mask is different */
959 	if (hdsp->io_type == H9632)
960 		 rate_bits = (status & HDSP_spdifFrequencyMask_9632);
961 
962 	if (status & HDSP_SPDIFErrorFlag)
963 		return 0;
964 
965 	switch (rate_bits) {
966 	case HDSP_spdifFrequency32KHz: return 32000;
967 	case HDSP_spdifFrequency44_1KHz: return 44100;
968 	case HDSP_spdifFrequency48KHz: return 48000;
969 	case HDSP_spdifFrequency64KHz: return 64000;
970 	case HDSP_spdifFrequency88_2KHz: return 88200;
971 	case HDSP_spdifFrequency96KHz: return 96000;
972 	case HDSP_spdifFrequency128KHz:
973 		if (hdsp->io_type == H9632) return 128000;
974 		break;
975 	case HDSP_spdifFrequency176_4KHz:
976 		if (hdsp->io_type == H9632) return 176400;
977 		break;
978 	case HDSP_spdifFrequency192KHz:
979 		if (hdsp->io_type == H9632) return 192000;
980 		break;
981 	default:
982 		break;
983 	}
984 	dev_warn(hdsp->card->dev,
985 		 "unknown spdif frequency status; bits = 0x%x, status = 0x%x\n",
986 		 rate_bits, status);
987 	return 0;
988 }
989 
hdsp_external_sample_rate(struct hdsp * hdsp)990 static int hdsp_external_sample_rate(struct hdsp *hdsp)
991 {
992 	unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
993 	unsigned int rate_bits = status2 & HDSP_systemFrequencyMask;
994 
995 	/* For the 9632 card, there seems to be no bit for indicating external
996 	 * sample rate greater than 96kHz. The card reports the corresponding
997 	 * single speed. So the best means seems to get spdif rate when
998 	 * autosync reference is spdif */
999 	if (hdsp->io_type == H9632 &&
1000 	    hdsp_autosync_ref(hdsp) == HDSP_AUTOSYNC_FROM_SPDIF)
1001 		 return hdsp_spdif_sample_rate(hdsp);
1002 
1003 	switch (rate_bits) {
1004 	case HDSP_systemFrequency32:   return 32000;
1005 	case HDSP_systemFrequency44_1: return 44100;
1006 	case HDSP_systemFrequency48:   return 48000;
1007 	case HDSP_systemFrequency64:   return 64000;
1008 	case HDSP_systemFrequency88_2: return 88200;
1009 	case HDSP_systemFrequency96:   return 96000;
1010 	default:
1011 		return 0;
1012 	}
1013 }
1014 
hdsp_compute_period_size(struct hdsp * hdsp)1015 static void hdsp_compute_period_size(struct hdsp *hdsp)
1016 {
1017 	hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
1018 }
1019 
hdsp_hw_pointer(struct hdsp * hdsp)1020 static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
1021 {
1022 	int position;
1023 
1024 	position = hdsp_read(hdsp, HDSP_statusRegister);
1025 
1026 	if (!hdsp->precise_ptr)
1027 		return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0;
1028 
1029 	position &= HDSP_BufferPositionMask;
1030 	position /= 4;
1031 	position &= (hdsp->period_bytes/2) - 1;
1032 	return position;
1033 }
1034 
hdsp_reset_hw_pointer(struct hdsp * hdsp)1035 static void hdsp_reset_hw_pointer(struct hdsp *hdsp)
1036 {
1037 	hdsp_write (hdsp, HDSP_resetPointer, 0);
1038 	if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1039 		/* HDSP_resetPointer = HDSP_freqReg, which is strange and
1040 		 * requires (?) to write again DDS value after a reset pointer
1041 		 * (at least, it works like this) */
1042 		hdsp_write (hdsp, HDSP_freqReg, hdsp->dds_value);
1043 }
1044 
hdsp_start_audio(struct hdsp * s)1045 static void hdsp_start_audio(struct hdsp *s)
1046 {
1047 	s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start);
1048 	hdsp_write(s, HDSP_controlRegister, s->control_register);
1049 }
1050 
hdsp_stop_audio(struct hdsp * s)1051 static void hdsp_stop_audio(struct hdsp *s)
1052 {
1053 	s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable);
1054 	hdsp_write(s, HDSP_controlRegister, s->control_register);
1055 }
1056 
hdsp_silence_playback(struct hdsp * hdsp)1057 static void hdsp_silence_playback(struct hdsp *hdsp)
1058 {
1059 	memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
1060 }
1061 
hdsp_set_interrupt_interval(struct hdsp * s,unsigned int frames)1062 static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames)
1063 {
1064 	int n;
1065 
1066 	spin_lock_irq(&s->lock);
1067 
1068 	frames >>= 7;
1069 	n = 0;
1070 	while (frames) {
1071 		n++;
1072 		frames >>= 1;
1073 	}
1074 
1075 	s->control_register &= ~HDSP_LatencyMask;
1076 	s->control_register |= hdsp_encode_latency(n);
1077 
1078 	hdsp_write(s, HDSP_controlRegister, s->control_register);
1079 
1080 	hdsp_compute_period_size(s);
1081 
1082 	spin_unlock_irq(&s->lock);
1083 
1084 	return 0;
1085 }
1086 
hdsp_set_dds_value(struct hdsp * hdsp,int rate)1087 static void hdsp_set_dds_value(struct hdsp *hdsp, int rate)
1088 {
1089 	u64 n;
1090 
1091 	if (rate >= 112000)
1092 		rate /= 4;
1093 	else if (rate >= 56000)
1094 		rate /= 2;
1095 
1096 	n = DDS_NUMERATOR;
1097 	n = div_u64(n, rate);
1098 	/* n should be less than 2^32 for being written to FREQ register */
1099 	snd_BUG_ON(n >> 32);
1100 	/* HDSP_freqReg and HDSP_resetPointer are the same, so keep the DDS
1101 	   value to write it after a reset */
1102 	hdsp->dds_value = n;
1103 	hdsp_write(hdsp, HDSP_freqReg, hdsp->dds_value);
1104 }
1105 
hdsp_set_rate(struct hdsp * hdsp,int rate,int called_internally)1106 static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
1107 {
1108 	int reject_if_open = 0;
1109 	int current_rate;
1110 	int rate_bits;
1111 
1112 	/* ASSUMPTION: hdsp->lock is either held, or
1113 	   there is no need for it (e.g. during module
1114 	   initialization).
1115 	*/
1116 
1117 	if (!(hdsp->control_register & HDSP_ClockModeMaster)) {
1118 		if (called_internally) {
1119 			/* request from ctl or card initialization */
1120 			dev_err(hdsp->card->dev,
1121 				"device is not running as a clock master: cannot set sample rate.\n");
1122 			return -1;
1123 		} else {
1124 			/* hw_param request while in AutoSync mode */
1125 			int external_freq = hdsp_external_sample_rate(hdsp);
1126 			int spdif_freq = hdsp_spdif_sample_rate(hdsp);
1127 
1128 			if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1129 				dev_info(hdsp->card->dev,
1130 					 "Detected ADAT in double speed mode\n");
1131 			else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
1132 				dev_info(hdsp->card->dev,
1133 					 "Detected ADAT in quad speed mode\n");
1134 			else if (rate != external_freq) {
1135 				dev_info(hdsp->card->dev,
1136 					 "No AutoSync source for requested rate\n");
1137 				return -1;
1138 			}
1139 		}
1140 	}
1141 
1142 	current_rate = hdsp->system_sample_rate;
1143 
1144 	/* Changing from a "single speed" to a "double speed" rate is
1145 	   not allowed if any substreams are open. This is because
1146 	   such a change causes a shift in the location of
1147 	   the DMA buffers and a reduction in the number of available
1148 	   buffers.
1149 
1150 	   Note that a similar but essentially insoluble problem
1151 	   exists for externally-driven rate changes. All we can do
1152 	   is to flag rate changes in the read/write routines.  */
1153 
1154 	if (rate > 96000 && hdsp->io_type != H9632)
1155 		return -EINVAL;
1156 
1157 	switch (rate) {
1158 	case 32000:
1159 		if (current_rate > 48000)
1160 			reject_if_open = 1;
1161 		rate_bits = HDSP_Frequency32KHz;
1162 		break;
1163 	case 44100:
1164 		if (current_rate > 48000)
1165 			reject_if_open = 1;
1166 		rate_bits = HDSP_Frequency44_1KHz;
1167 		break;
1168 	case 48000:
1169 		if (current_rate > 48000)
1170 			reject_if_open = 1;
1171 		rate_bits = HDSP_Frequency48KHz;
1172 		break;
1173 	case 64000:
1174 		if (current_rate <= 48000 || current_rate > 96000)
1175 			reject_if_open = 1;
1176 		rate_bits = HDSP_Frequency64KHz;
1177 		break;
1178 	case 88200:
1179 		if (current_rate <= 48000 || current_rate > 96000)
1180 			reject_if_open = 1;
1181 		rate_bits = HDSP_Frequency88_2KHz;
1182 		break;
1183 	case 96000:
1184 		if (current_rate <= 48000 || current_rate > 96000)
1185 			reject_if_open = 1;
1186 		rate_bits = HDSP_Frequency96KHz;
1187 		break;
1188 	case 128000:
1189 		if (current_rate < 128000)
1190 			reject_if_open = 1;
1191 		rate_bits = HDSP_Frequency128KHz;
1192 		break;
1193 	case 176400:
1194 		if (current_rate < 128000)
1195 			reject_if_open = 1;
1196 		rate_bits = HDSP_Frequency176_4KHz;
1197 		break;
1198 	case 192000:
1199 		if (current_rate < 128000)
1200 			reject_if_open = 1;
1201 		rate_bits = HDSP_Frequency192KHz;
1202 		break;
1203 	default:
1204 		return -EINVAL;
1205 	}
1206 
1207 	if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) {
1208 		dev_warn(hdsp->card->dev,
1209 			 "cannot change speed mode (capture PID = %d, playback PID = %d)\n",
1210 			    hdsp->capture_pid,
1211 			    hdsp->playback_pid);
1212 		return -EBUSY;
1213 	}
1214 
1215 	hdsp->control_register &= ~HDSP_FrequencyMask;
1216 	hdsp->control_register |= rate_bits;
1217 	hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
1218 
1219 	/* For HDSP9632 rev 152, need to set DDS value in FREQ register */
1220 	if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
1221 		hdsp_set_dds_value(hdsp, rate);
1222 
1223 	if (rate >= 128000) {
1224 		hdsp->channel_map = channel_map_H9632_qs;
1225 	} else if (rate > 48000) {
1226 		if (hdsp->io_type == H9632)
1227 			hdsp->channel_map = channel_map_H9632_ds;
1228 		else
1229 			hdsp->channel_map = channel_map_ds;
1230 	} else {
1231 		switch (hdsp->io_type) {
1232 		case RPM:
1233 		case Multiface:
1234 			hdsp->channel_map = channel_map_mf_ss;
1235 			break;
1236 		case Digiface:
1237 		case H9652:
1238 			hdsp->channel_map = channel_map_df_ss;
1239 			break;
1240 		case H9632:
1241 			hdsp->channel_map = channel_map_H9632_ss;
1242 			break;
1243 		default:
1244 			/* should never happen */
1245 			break;
1246 		}
1247 	}
1248 
1249 	hdsp->system_sample_rate = rate;
1250 
1251 	return 0;
1252 }
1253 
1254 /*----------------------------------------------------------------------------
1255    MIDI
1256   ----------------------------------------------------------------------------*/
1257 
snd_hdsp_midi_read_byte(struct hdsp * hdsp,int id)1258 static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id)
1259 {
1260 	/* the hardware already does the relevant bit-mask with 0xff */
1261 	if (id)
1262 		return hdsp_read(hdsp, HDSP_midiDataIn1);
1263 	else
1264 		return hdsp_read(hdsp, HDSP_midiDataIn0);
1265 }
1266 
snd_hdsp_midi_write_byte(struct hdsp * hdsp,int id,int val)1267 static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val)
1268 {
1269 	/* the hardware already does the relevant bit-mask with 0xff */
1270 	if (id)
1271 		hdsp_write(hdsp, HDSP_midiDataOut1, val);
1272 	else
1273 		hdsp_write(hdsp, HDSP_midiDataOut0, val);
1274 }
1275 
snd_hdsp_midi_input_available(struct hdsp * hdsp,int id)1276 static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id)
1277 {
1278 	if (id)
1279 		return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff);
1280 	else
1281 		return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff);
1282 }
1283 
snd_hdsp_midi_output_possible(struct hdsp * hdsp,int id)1284 static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id)
1285 {
1286 	int fifo_bytes_used;
1287 
1288 	if (id)
1289 		fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff;
1290 	else
1291 		fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff;
1292 
1293 	if (fifo_bytes_used < 128)
1294 		return  128 - fifo_bytes_used;
1295 	else
1296 		return 0;
1297 }
1298 
snd_hdsp_flush_midi_input(struct hdsp * hdsp,int id)1299 static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
1300 {
1301 	int count = 256;
1302 
1303 	while (snd_hdsp_midi_input_available(hdsp, id) && --count)
1304 		snd_hdsp_midi_read_byte(hdsp, id);
1305 }
1306 
snd_hdsp_midi_output_write(struct hdsp_midi * hmidi)1307 static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
1308 {
1309 	unsigned long flags;
1310 	int n_pending;
1311 	int to_write;
1312 	int i;
1313 	unsigned char buf[128];
1314 
1315 	/* Output is not interrupt driven */
1316 
1317 	spin_lock_irqsave (&hmidi->lock, flags);
1318 	if (hmidi->output) {
1319 		if (!snd_rawmidi_transmit_empty (hmidi->output)) {
1320 			n_pending = snd_hdsp_midi_output_possible(hmidi->hdsp, hmidi->id);
1321 			if (n_pending > 0) {
1322 				if (n_pending > (int)sizeof (buf))
1323 					n_pending = sizeof (buf);
1324 
1325 				to_write = snd_rawmidi_transmit(hmidi->output, buf, n_pending);
1326 				if (to_write > 0) {
1327 					for (i = 0; i < to_write; ++i)
1328 						snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
1329 				}
1330 			}
1331 		}
1332 	}
1333 	spin_unlock_irqrestore (&hmidi->lock, flags);
1334 	return 0;
1335 }
1336 
snd_hdsp_midi_input_read(struct hdsp_midi * hmidi)1337 static int snd_hdsp_midi_input_read (struct hdsp_midi *hmidi)
1338 {
1339 	unsigned char buf[128]; /* this buffer is designed to match the MIDI input FIFO size */
1340 	unsigned long flags;
1341 	int n_pending;
1342 	int i;
1343 
1344 	spin_lock_irqsave (&hmidi->lock, flags);
1345 	n_pending = snd_hdsp_midi_input_available(hmidi->hdsp, hmidi->id);
1346 	if (n_pending > 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 
snd_hdsp_midi_input_trigger(struct snd_rawmidi_substream * substream,int up)1370 static 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 
snd_hdsp_midi_output_timer(struct timer_list * t)1394 static 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 
snd_hdsp_midi_output_trigger(struct snd_rawmidi_substream * substream,int up)1414 static 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 
snd_hdsp_midi_input_open(struct snd_rawmidi_substream * substream)1437 static 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 
snd_hdsp_midi_output_open(struct snd_rawmidi_substream * substream)1450 static 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 
snd_hdsp_midi_input_close(struct snd_rawmidi_substream * substream)1462 static 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 
snd_hdsp_midi_output_close(struct snd_rawmidi_substream * substream)1476 static 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 
1490 static 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 
1497 static 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 
snd_hdsp_create_midi(struct snd_card * card,struct hdsp * hdsp,int id)1504 static 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 
snd_hdsp_convert_from_aes(struct snd_aes_iec958 * aes)1538 static 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 
snd_hdsp_convert_to_aes(struct snd_aes_iec958 * aes,u32 val)1550 static 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 
snd_hdsp_control_spdif_info(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1560 static 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 
snd_hdsp_control_spdif_get(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1567 static 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 
snd_hdsp_control_spdif_put(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1575 static 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 
snd_hdsp_control_spdif_stream_info(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1589 static 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 
snd_hdsp_control_spdif_stream_get(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1596 static 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 
snd_hdsp_control_spdif_stream_put(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1604 static 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 
snd_hdsp_control_spdif_mask_info(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1620 static 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 
snd_hdsp_control_spdif_mask_get(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1627 static 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 
hdsp_spdif_in(struct hdsp * hdsp)1641 static unsigned int hdsp_spdif_in(struct hdsp *hdsp)
1642 {
1643 	return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask);
1644 }
1645 
hdsp_set_spdif_input(struct hdsp * hdsp,int in)1646 static 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 
snd_hdsp_info_spdif_in(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1654 static 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 
snd_hdsp_get_spdif_in(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1665 static 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 
snd_hdsp_put_spdif_in(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1673 static 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 
hdsp_toggle_setting(struct hdsp * hdsp,u32 regmask)1699 static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask)
1700 {
1701 	return (hdsp->control_register & regmask) ? 1 : 0;
1702 }
1703 
hdsp_set_toggle_setting(struct hdsp * hdsp,u32 regmask,int out)1704 static 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 
snd_hdsp_get_toggle_setting(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1717 static 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 
snd_hdsp_put_toggle_setting(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1729 static 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 
snd_hdsp_info_spdif_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1757 static 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 
snd_hdsp_get_spdif_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1769 static 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 
snd_hdsp_info_system_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1816 static 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 
snd_hdsp_get_system_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1823 static 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 
snd_hdsp_info_autosync_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1840 static 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 
snd_hdsp_get_autosync_sample_rate(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1852 static 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 
hdsp_system_clock_mode(struct hdsp * hdsp)1899 static 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 
snd_hdsp_info_system_clock_mode(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)1908 static 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 
snd_hdsp_get_system_clock_mode(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)1915 static 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 
hdsp_clock_source(struct hdsp * hdsp)1932 static 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 
hdsp_set_clock_source(struct hdsp * hdsp,int mode)1962 static 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 
snd_hdsp_info_clock_source(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2011 static 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 
snd_hdsp_get_clock_source(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2025 static 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 
snd_hdsp_put_clock_source(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2033 static 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 
snd_hdsp_get_clock_source_lock(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2061 static 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 
snd_hdsp_put_clock_source_lock(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2069 static 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 
hdsp_da_gain(struct hdsp * hdsp)2089 static 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 
hdsp_set_da_gain(struct hdsp * hdsp,int mode)2103 static 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 
snd_hdsp_info_da_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2124 static 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 
snd_hdsp_get_da_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2131 static 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 
snd_hdsp_put_da_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2139 static 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 
hdsp_ad_gain(struct hdsp * hdsp)2168 static 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 
hdsp_set_ad_gain(struct hdsp * hdsp,int mode)2182 static 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 
snd_hdsp_info_ad_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2203 static 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 
snd_hdsp_get_ad_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2210 static 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 
snd_hdsp_put_ad_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2218 static 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 
hdsp_phone_gain(struct hdsp * hdsp)2247 static 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 
hdsp_set_phone_gain(struct hdsp * hdsp,int mode)2261 static 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 
snd_hdsp_info_phone_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2282 static 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 
snd_hdsp_get_phone_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2289 static 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 
snd_hdsp_put_phone_gain(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2297 static 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 
hdsp_pref_sync_ref(struct hdsp * hdsp)2326 static 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 
hdsp_set_pref_sync_ref(struct hdsp * hdsp,int pref)2351 static 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 
snd_hdsp_info_pref_sync_ref(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2380 static 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 
snd_hdsp_get_pref_sync_ref(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2406 static 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 
snd_hdsp_put_pref_sync_ref(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2414 static 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 
hdsp_autosync_ref(struct hdsp * hdsp)2455 static 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 
snd_hdsp_info_autosync_ref(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2481 static 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 
snd_hdsp_get_autosync_ref(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2490 static 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 
hdsp_set_precise_pointer(struct hdsp * hdsp,int precise)2507 static 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 
snd_hdsp_get_precise_pointer(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2518 static 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 
snd_hdsp_put_precise_pointer(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2528 static 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 
hdsp_set_use_midi_work(struct hdsp * hdsp,int use_work)2553 static 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 
snd_hdsp_get_use_midi_work(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2564 static 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 
snd_hdsp_put_use_midi_work(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2574 static 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 
snd_hdsp_info_mixer(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2602 static 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 
snd_hdsp_get_mixer(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2612 static 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 
snd_hdsp_put_mixer(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2633 static 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 
snd_hdsp_info_sync_check(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2672 static 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 
hdsp_wc_sync_check(struct hdsp * hdsp)2679 static 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 
snd_hdsp_get_wc_sync_check(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2692 static 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 
hdsp_spdif_sync_check(struct hdsp * hdsp)2709 static 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 
snd_hdsp_get_spdif_sync_check(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2723 static 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 
hdsp_adatsync_sync_check(struct hdsp * hdsp)2740 static 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 
snd_hdsp_get_adatsync_sync_check(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2752 static 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 
hdsp_adat_sync_check(struct hdsp * hdsp,int idx)2767 static 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 
snd_hdsp_get_adat_sync_check(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2780 static 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 
hdsp_dds_offset(struct hdsp * hdsp)2817 static 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 
hdsp_set_dds_offset(struct hdsp * hdsp,int offset_hz)2839 static 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 
snd_hdsp_info_dds_offset(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)2846 static 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 
snd_hdsp_get_dds_offset(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2855 static 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 
snd_hdsp_put_dds_offset(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2863 static 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 
2881 static const struct snd_kcontrol_new snd_hdsp_9632_controls[] = {
2882 HDSP_DA_GAIN("DA Gain", 0),
2883 HDSP_AD_GAIN("AD Gain", 0),
2884 HDSP_PHONE_GAIN("Phones Gain", 0),
2885 HDSP_TOGGLE_SETTING("XLR Breakout Cable", HDSP_XLRBreakoutCable),
2886 HDSP_DDS_OFFSET("DDS Sample Rate Offset", 0)
2887 };
2888 
2889 static 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 },
2925 HDSP_MIXER("Mixer", 0),
2926 HDSP_SPDIF_IN("IEC958 Input Connector", 0),
2927 HDSP_TOGGLE_SETTING("IEC958 Output also on ADAT1", HDSP_SPDIFOpticalOut),
2928 HDSP_TOGGLE_SETTING("IEC958 Professional Bit", HDSP_SPDIFProfessional),
2929 HDSP_TOGGLE_SETTING("IEC958 Emphasis Bit", HDSP_SPDIFEmphasis),
2930 HDSP_TOGGLE_SETTING("IEC958 Non-audio Bit", HDSP_SPDIFNonAudio),
2931 /* 'Sample Clock Source' complies with the alsa control naming scheme */
2932 HDSP_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 },
2940 HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0),
2941 HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0),
2942 HDSP_AUTOSYNC_REF("AutoSync Reference", 0),
2943 HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0),
2944 HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0),
2945 /* 'External Rate' complies with the alsa control naming scheme */
2946 HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0),
2947 HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0),
2948 HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0),
2949 HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0),
2950 HDSP_TOGGLE_SETTING("Line Out", HDSP_LineOut),
2951 HDSP_PRECISE_POINTER("Precise Pointer", 0),
2952 HDSP_USE_MIDI_WORK("Use Midi Tasklet", 0),
2953 };
2954 
2955 
hdsp_rpm_input12(struct hdsp * hdsp)2956 static 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 
snd_hdsp_get_rpm_input12(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)2972 static 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 
hdsp_set_rpm_input12(struct hdsp * hdsp,int mode)2981 static 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 
snd_hdsp_put_rpm_input12(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3008 static 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 
snd_hdsp_info_rpm_input(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)3031 static 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 
hdsp_rpm_input34(struct hdsp * hdsp)3041 static 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 
snd_hdsp_get_rpm_input34(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3057 static 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 
hdsp_set_rpm_input34(struct hdsp * hdsp,int mode)3066 static 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 
snd_hdsp_put_rpm_input34(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3093 static 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 */
hdsp_rpm_bypass(struct hdsp * hdsp)3117 static int hdsp_rpm_bypass(struct hdsp *hdsp)
3118 {
3119 	return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0;
3120 }
3121 
3122 
snd_hdsp_get_rpm_bypass(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3123 static 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 
hdsp_set_rpm_bypass(struct hdsp * hdsp,int on)3132 static 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 
snd_hdsp_put_rpm_bypass(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3143 static 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 
snd_hdsp_info_rpm_bypass(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)3160 static 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 */
hdsp_rpm_disconnect(struct hdsp * hdsp)3169 static int hdsp_rpm_disconnect(struct hdsp *hdsp)
3170 {
3171 	return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0;
3172 }
3173 
3174 
snd_hdsp_get_rpm_disconnect(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3175 static 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 
hdsp_set_rpm_disconnect(struct hdsp * hdsp,int on)3184 static 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 
snd_hdsp_put_rpm_disconnect(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)3195 static 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 
snd_hdsp_info_rpm_disconnect(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_info * uinfo)3211 static 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 
3218 static 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 
3251 static const struct snd_kcontrol_new snd_hdsp_96xx_aeb =
3252 	HDSP_TOGGLE_SETTING("Analog Extension Board",
3253 			HDSP_AnalogExtensionBoard);
3254 static struct snd_kcontrol_new snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK;
3255 
3256 
hdsp_loopback_get(struct hdsp * const hdsp,const u8 channel)3257 static bool hdsp_loopback_get(struct hdsp *const hdsp, const u8 channel)
3258 {
3259 	return hdsp->io_loopback & (1 << channel);
3260 }
3261 
hdsp_loopback_set(struct hdsp * const hdsp,const u8 channel,const bool enable)3262 static int hdsp_loopback_set(struct hdsp *const hdsp, const u8 channel, const bool enable)
3263 {
3264 	if (hdsp_loopback_get(hdsp, channel) == enable)
3265 		return 0;
3266 
3267 	hdsp->io_loopback ^= (1 << channel);
3268 
3269 	hdsp_write(hdsp, HDSP_inputEnable + (4 * (hdsp->max_channels + channel)), enable);
3270 
3271 	return 1;
3272 }
3273 
snd_hdsp_loopback_get(struct snd_kcontrol * const kcontrol,struct snd_ctl_elem_value * const ucontrol)3274 static int snd_hdsp_loopback_get(struct snd_kcontrol *const kcontrol,
3275 				 struct snd_ctl_elem_value *const ucontrol)
3276 {
3277 	struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
3278 	const u8 channel = snd_ctl_get_ioff(kcontrol, &ucontrol->id);
3279 
3280 	if (channel >= hdsp->max_channels)
3281 		return -ENOENT;
3282 
3283 	ucontrol->value.integer.value[0] = hdsp_loopback_get(hdsp, channel);
3284 
3285 	return 0;
3286 }
3287 
snd_hdsp_loopback_put(struct snd_kcontrol * const kcontrol,struct snd_ctl_elem_value * const ucontrol)3288 static int snd_hdsp_loopback_put(struct snd_kcontrol *const kcontrol,
3289 				 struct snd_ctl_elem_value *const ucontrol)
3290 {
3291 	struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
3292 	const u8 channel = snd_ctl_get_ioff(kcontrol, &ucontrol->id);
3293 	const bool enable = ucontrol->value.integer.value[0] & 1;
3294 
3295 	if (channel >= hdsp->max_channels)
3296 		return -ENOENT;
3297 
3298 	return hdsp_loopback_set(hdsp, channel, enable);
3299 }
3300 
3301 static struct snd_kcontrol_new snd_hdsp_loopback_control = {
3302 	.iface = SNDRV_CTL_ELEM_IFACE_HWDEP,
3303 	.name = "Output Loopback",
3304 	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
3305 	.info = snd_ctl_boolean_mono_info,
3306 	.get = snd_hdsp_loopback_get,
3307 	.put = snd_hdsp_loopback_put
3308 };
3309 
snd_hdsp_create_controls(struct snd_card * card,struct hdsp * hdsp)3310 static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
3311 {
3312 	unsigned int idx;
3313 	int err;
3314 	struct snd_kcontrol *kctl;
3315 
3316 	if (hdsp->io_type == RPM) {
3317 		/* RPM Bypass, Disconnect and Input switches */
3318 		for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_rpm_controls); idx++) {
3319 			err = snd_ctl_add(card, snd_ctl_new1(&snd_hdsp_rpm_controls[idx], hdsp));
3320 			if (err < 0)
3321 				return err;
3322 		}
3323 		return 0;
3324 	}
3325 
3326 	for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) {
3327 		kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp);
3328 		err = snd_ctl_add(card, kctl);
3329 		if (err < 0)
3330 			return err;
3331 		if (idx == 1)	/* IEC958 (S/PDIF) Stream */
3332 			hdsp->spdif_ctl = kctl;
3333 	}
3334 
3335 	/* ADAT SyncCheck status */
3336 	snd_hdsp_adat_sync_check.name = "ADAT Lock Status";
3337 	snd_hdsp_adat_sync_check.index = 1;
3338 	kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
3339 	err = snd_ctl_add(card, kctl);
3340 	if (err < 0)
3341 		return err;
3342 	if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
3343 		for (idx = 1; idx < 3; ++idx) {
3344 			snd_hdsp_adat_sync_check.index = idx+1;
3345 			kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
3346 			err = snd_ctl_add(card, kctl);
3347 			if (err < 0)
3348 				return err;
3349 		}
3350 	}
3351 
3352 	/* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
3353 	if (hdsp->io_type == H9632) {
3354 		for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
3355 			kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp);
3356 			err = snd_ctl_add(card, kctl);
3357 			if (err < 0)
3358 				return err;
3359 		}
3360 	}
3361 
3362 	/* Output loopback controls for H9632 cards */
3363 	if (hdsp->io_type == H9632) {
3364 		snd_hdsp_loopback_control.count = hdsp->max_channels;
3365 		kctl = snd_ctl_new1(&snd_hdsp_loopback_control, hdsp);
3366 		if (kctl == NULL)
3367 			return -ENOMEM;
3368 		err = snd_ctl_add(card, kctl);
3369 		if (err < 0)
3370 			return err;
3371 	}
3372 
3373 	/* AEB control for H96xx card */
3374 	if (hdsp->io_type == H9632 || hdsp->io_type == H9652) {
3375 		kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp);
3376 		err = snd_ctl_add(card, kctl);
3377 		if (err < 0)
3378 			return err;
3379 	}
3380 
3381 	return 0;
3382 }
3383 
3384 /*------------------------------------------------------------
3385    /proc interface
3386  ------------------------------------------------------------*/
3387 
3388 static void
snd_hdsp_proc_read(struct snd_info_entry * entry,struct snd_info_buffer * buffer)3389 snd_hdsp_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
3390 {
3391 	struct hdsp *hdsp = entry->private_data;
3392 	unsigned int status;
3393 	unsigned int status2;
3394 	char *pref_sync_ref;
3395 	char *autosync_ref;
3396 	char *system_clock_mode;
3397 	char *clock_source;
3398 	int x;
3399 
3400 	status = hdsp_read(hdsp, HDSP_statusRegister);
3401 	status2 = hdsp_read(hdsp, HDSP_status2Register);
3402 
3403 	snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name,
3404 		    hdsp->card->number + 1);
3405 	snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
3406 		    hdsp->capture_buffer, hdsp->playback_buffer);
3407 	snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
3408 		    hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase);
3409 	snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register);
3410 	snd_iprintf(buffer, "Control2 register: 0x%x\n",
3411 		    hdsp->control2_register);
3412 	snd_iprintf(buffer, "Status register: 0x%x\n", status);
3413 	snd_iprintf(buffer, "Status2 register: 0x%x\n", status2);
3414 
3415 	if (hdsp_check_for_iobox(hdsp)) {
3416 		snd_iprintf(buffer, "No I/O box connected.\n"
3417 			    "Please connect one and upload firmware.\n");
3418 		return;
3419 	}
3420 
3421 	if (hdsp_check_for_firmware(hdsp, 0)) {
3422 		if (hdsp->state & HDSP_FirmwareCached) {
3423 			if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
3424 				snd_iprintf(buffer, "Firmware loading from "
3425 					    "cache failed, "
3426 					    "please upload manually.\n");
3427 				return;
3428 			}
3429 		} else {
3430 			int err;
3431 
3432 			err = hdsp_request_fw_loader(hdsp);
3433 			if (err < 0) {
3434 				snd_iprintf(buffer,
3435 					    "No firmware loaded nor cached, "
3436 					    "please upload firmware.\n");
3437 				return;
3438 			}
3439 		}
3440 	}
3441 
3442 	snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff);
3443 	snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0));
3444 	snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0));
3445 	snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1));
3446 	snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1));
3447 	snd_iprintf(buffer, "Use Midi Tasklet: %s\n", hdsp->use_midi_work ? "on" : "off");
3448 
3449 	snd_iprintf(buffer, "\n");
3450 
3451 	x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask));
3452 
3453 	snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes);
3454 	snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp));
3455 	snd_iprintf(buffer, "Precise pointer: %s\n", hdsp->precise_ptr ? "on" : "off");
3456 	snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off");
3457 
3458 	snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2);
3459 
3460 	snd_iprintf(buffer, "\n");
3461 
3462 	switch (hdsp_clock_source(hdsp)) {
3463 	case HDSP_CLOCK_SOURCE_AUTOSYNC:
3464 		clock_source = "AutoSync";
3465 		break;
3466 	case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ:
3467 		clock_source = "Internal 32 kHz";
3468 		break;
3469 	case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ:
3470 		clock_source = "Internal 44.1 kHz";
3471 		break;
3472 	case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ:
3473 		clock_source = "Internal 48 kHz";
3474 		break;
3475 	case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ:
3476 		clock_source = "Internal 64 kHz";
3477 		break;
3478 	case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ:
3479 		clock_source = "Internal 88.2 kHz";
3480 		break;
3481 	case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ:
3482 		clock_source = "Internal 96 kHz";
3483 		break;
3484 	case HDSP_CLOCK_SOURCE_INTERNAL_128KHZ:
3485 		clock_source = "Internal 128 kHz";
3486 		break;
3487 	case HDSP_CLOCK_SOURCE_INTERNAL_176_4KHZ:
3488 		clock_source = "Internal 176.4 kHz";
3489 		break;
3490 		case HDSP_CLOCK_SOURCE_INTERNAL_192KHZ:
3491 		clock_source = "Internal 192 kHz";
3492 		break;
3493 	default:
3494 		clock_source = "Error";
3495 	}
3496 	snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source);
3497 
3498 	if (hdsp_system_clock_mode(hdsp))
3499 		system_clock_mode = "Slave";
3500 	else
3501 		system_clock_mode = "Master";
3502 
3503 	switch (hdsp_pref_sync_ref (hdsp)) {
3504 	case HDSP_SYNC_FROM_WORD:
3505 		pref_sync_ref = "Word Clock";
3506 		break;
3507 	case HDSP_SYNC_FROM_ADAT_SYNC:
3508 		pref_sync_ref = "ADAT Sync";
3509 		break;
3510 	case HDSP_SYNC_FROM_SPDIF:
3511 		pref_sync_ref = "SPDIF";
3512 		break;
3513 	case HDSP_SYNC_FROM_ADAT1:
3514 		pref_sync_ref = "ADAT1";
3515 		break;
3516 	case HDSP_SYNC_FROM_ADAT2:
3517 		pref_sync_ref = "ADAT2";
3518 		break;
3519 	case HDSP_SYNC_FROM_ADAT3:
3520 		pref_sync_ref = "ADAT3";
3521 		break;
3522 	default:
3523 		pref_sync_ref = "Word Clock";
3524 		break;
3525 	}
3526 	snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref);
3527 
3528 	switch (hdsp_autosync_ref (hdsp)) {
3529 	case HDSP_AUTOSYNC_FROM_WORD:
3530 		autosync_ref = "Word Clock";
3531 		break;
3532 	case HDSP_AUTOSYNC_FROM_ADAT_SYNC:
3533 		autosync_ref = "ADAT Sync";
3534 		break;
3535 	case HDSP_AUTOSYNC_FROM_SPDIF:
3536 		autosync_ref = "SPDIF";
3537 		break;
3538 	case HDSP_AUTOSYNC_FROM_NONE:
3539 		autosync_ref = "None";
3540 		break;
3541 	case HDSP_AUTOSYNC_FROM_ADAT1:
3542 		autosync_ref = "ADAT1";
3543 		break;
3544 	case HDSP_AUTOSYNC_FROM_ADAT2:
3545 		autosync_ref = "ADAT2";
3546 		break;
3547 	case HDSP_AUTOSYNC_FROM_ADAT3:
3548 		autosync_ref = "ADAT3";
3549 		break;
3550 	default:
3551 		autosync_ref = "---";
3552 		break;
3553 	}
3554 	snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref);
3555 
3556 	snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
3557 
3558 	snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode);
3559 
3560 	snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
3561 	snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
3562 
3563 	snd_iprintf(buffer, "\n");
3564 
3565 	if (hdsp->io_type != RPM) {
3566 		switch (hdsp_spdif_in(hdsp)) {
3567 		case HDSP_SPDIFIN_OPTICAL:
3568 			snd_iprintf(buffer, "IEC958 input: Optical\n");
3569 			break;
3570 		case HDSP_SPDIFIN_COAXIAL:
3571 			snd_iprintf(buffer, "IEC958 input: Coaxial\n");
3572 			break;
3573 		case HDSP_SPDIFIN_INTERNAL:
3574 			snd_iprintf(buffer, "IEC958 input: Internal\n");
3575 			break;
3576 		case HDSP_SPDIFIN_AES:
3577 			snd_iprintf(buffer, "IEC958 input: AES\n");
3578 			break;
3579 		default:
3580 			snd_iprintf(buffer, "IEC958 input: ???\n");
3581 			break;
3582 		}
3583 	}
3584 
3585 	if (RPM == hdsp->io_type) {
3586 		if (hdsp->control_register & HDSP_RPM_Bypass)
3587 			snd_iprintf(buffer, "RPM Bypass: disabled\n");
3588 		else
3589 			snd_iprintf(buffer, "RPM Bypass: enabled\n");
3590 		if (hdsp->control_register & HDSP_RPM_Disconnect)
3591 			snd_iprintf(buffer, "RPM disconnected\n");
3592 		else
3593 			snd_iprintf(buffer, "RPM connected\n");
3594 
3595 		switch (hdsp->control_register & HDSP_RPM_Inp12) {
3596 		case HDSP_RPM_Inp12_Phon_6dB:
3597 			snd_iprintf(buffer, "Input 1/2: Phono, 6dB\n");
3598 			break;
3599 		case HDSP_RPM_Inp12_Phon_0dB:
3600 			snd_iprintf(buffer, "Input 1/2: Phono, 0dB\n");
3601 			break;
3602 		case HDSP_RPM_Inp12_Phon_n6dB:
3603 			snd_iprintf(buffer, "Input 1/2: Phono, -6dB\n");
3604 			break;
3605 		case HDSP_RPM_Inp12_Line_0dB:
3606 			snd_iprintf(buffer, "Input 1/2: Line, 0dB\n");
3607 			break;
3608 		case HDSP_RPM_Inp12_Line_n6dB:
3609 			snd_iprintf(buffer, "Input 1/2: Line, -6dB\n");
3610 			break;
3611 		default:
3612 			snd_iprintf(buffer, "Input 1/2: ???\n");
3613 		}
3614 
3615 		switch (hdsp->control_register & HDSP_RPM_Inp34) {
3616 		case HDSP_RPM_Inp34_Phon_6dB:
3617 			snd_iprintf(buffer, "Input 3/4: Phono, 6dB\n");
3618 			break;
3619 		case HDSP_RPM_Inp34_Phon_0dB:
3620 			snd_iprintf(buffer, "Input 3/4: Phono, 0dB\n");
3621 			break;
3622 		case HDSP_RPM_Inp34_Phon_n6dB:
3623 			snd_iprintf(buffer, "Input 3/4: Phono, -6dB\n");
3624 			break;
3625 		case HDSP_RPM_Inp34_Line_0dB:
3626 			snd_iprintf(buffer, "Input 3/4: Line, 0dB\n");
3627 			break;
3628 		case HDSP_RPM_Inp34_Line_n6dB:
3629 			snd_iprintf(buffer, "Input 3/4: Line, -6dB\n");
3630 			break;
3631 		default:
3632 			snd_iprintf(buffer, "Input 3/4: ???\n");
3633 		}
3634 
3635 	} else {
3636 		if (hdsp->control_register & HDSP_SPDIFOpticalOut)
3637 			snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
3638 		else
3639 			snd_iprintf(buffer, "IEC958 output: Coaxial only\n");
3640 
3641 		if (hdsp->control_register & HDSP_SPDIFProfessional)
3642 			snd_iprintf(buffer, "IEC958 quality: Professional\n");
3643 		else
3644 			snd_iprintf(buffer, "IEC958 quality: Consumer\n");
3645 
3646 		if (hdsp->control_register & HDSP_SPDIFEmphasis)
3647 			snd_iprintf(buffer, "IEC958 emphasis: on\n");
3648 		else
3649 			snd_iprintf(buffer, "IEC958 emphasis: off\n");
3650 
3651 		if (hdsp->control_register & HDSP_SPDIFNonAudio)
3652 			snd_iprintf(buffer, "IEC958 NonAudio: on\n");
3653 		else
3654 			snd_iprintf(buffer, "IEC958 NonAudio: off\n");
3655 		x = hdsp_spdif_sample_rate(hdsp);
3656 		if (x != 0)
3657 			snd_iprintf(buffer, "IEC958 sample rate: %d\n", x);
3658 		else
3659 			snd_iprintf(buffer, "IEC958 sample rate: Error flag set\n");
3660 	}
3661 	snd_iprintf(buffer, "\n");
3662 
3663 	/* Sync Check */
3664 	x = status & HDSP_Sync0;
3665 	if (status & HDSP_Lock0)
3666 		snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock");
3667 	else
3668 		snd_iprintf(buffer, "ADAT1: No Lock\n");
3669 
3670 	switch (hdsp->io_type) {
3671 	case Digiface:
3672 	case H9652:
3673 		x = status & HDSP_Sync1;
3674 		if (status & HDSP_Lock1)
3675 			snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock");
3676 		else
3677 			snd_iprintf(buffer, "ADAT2: No Lock\n");
3678 		x = status & HDSP_Sync2;
3679 		if (status & HDSP_Lock2)
3680 			snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock");
3681 		else
3682 			snd_iprintf(buffer, "ADAT3: No Lock\n");
3683 		break;
3684 	default:
3685 		/* relax */
3686 		break;
3687 	}
3688 
3689 	x = status & HDSP_SPDIFSync;
3690 	if (status & HDSP_SPDIFErrorFlag)
3691 		snd_iprintf (buffer, "SPDIF: No Lock\n");
3692 	else
3693 		snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock");
3694 
3695 	x = status2 & HDSP_wc_sync;
3696 	if (status2 & HDSP_wc_lock)
3697 		snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock");
3698 	else
3699 		snd_iprintf (buffer, "Word Clock: No Lock\n");
3700 
3701 	x = status & HDSP_TimecodeSync;
3702 	if (status & HDSP_TimecodeLock)
3703 		snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock");
3704 	else
3705 		snd_iprintf(buffer, "ADAT Sync: No Lock\n");
3706 
3707 	snd_iprintf(buffer, "\n");
3708 
3709 	/* Informations about H9632 specific controls */
3710 	if (hdsp->io_type == H9632) {
3711 		char *tmp;
3712 
3713 		switch (hdsp_ad_gain(hdsp)) {
3714 		case 0:
3715 			tmp = "-10 dBV";
3716 			break;
3717 		case 1:
3718 			tmp = "+4 dBu";
3719 			break;
3720 		default:
3721 			tmp = "Lo Gain";
3722 			break;
3723 		}
3724 		snd_iprintf(buffer, "AD Gain : %s\n", tmp);
3725 
3726 		switch (hdsp_da_gain(hdsp)) {
3727 		case 0:
3728 			tmp = "Hi Gain";
3729 			break;
3730 		case 1:
3731 			tmp = "+4 dBu";
3732 			break;
3733 		default:
3734 			tmp = "-10 dBV";
3735 			break;
3736 		}
3737 		snd_iprintf(buffer, "DA Gain : %s\n", tmp);
3738 
3739 		switch (hdsp_phone_gain(hdsp)) {
3740 		case 0:
3741 			tmp = "0 dB";
3742 			break;
3743 		case 1:
3744 			tmp = "-6 dB";
3745 			break;
3746 		default:
3747 			tmp = "-12 dB";
3748 			break;
3749 		}
3750 		snd_iprintf(buffer, "Phones Gain : %s\n", tmp);
3751 
3752 		snd_iprintf(buffer, "XLR Breakout Cable : %s\n",
3753 			hdsp_toggle_setting(hdsp, HDSP_XLRBreakoutCable) ?
3754 			"yes" : "no");
3755 
3756 		if (hdsp->control_register & HDSP_AnalogExtensionBoard)
3757 			snd_iprintf(buffer, "AEB : on (ADAT1 internal)\n");
3758 		else
3759 			snd_iprintf(buffer, "AEB : off (ADAT1 external)\n");
3760 		snd_iprintf(buffer, "\n");
3761 	}
3762 
3763 }
3764 
snd_hdsp_proc_init(struct hdsp * hdsp)3765 static void snd_hdsp_proc_init(struct hdsp *hdsp)
3766 {
3767 	snd_card_ro_proc_new(hdsp->card, "hdsp", hdsp, snd_hdsp_proc_read);
3768 }
3769 
snd_hdsp_initialize_memory(struct hdsp * hdsp)3770 static int snd_hdsp_initialize_memory(struct hdsp *hdsp)
3771 {
3772 	struct snd_dma_buffer *capture_dma, *playback_dma;
3773 
3774 	capture_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
3775 	playback_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
3776 	if (!capture_dma || !playback_dma) {
3777 		dev_err(hdsp->card->dev,
3778 			"%s: no buffers available\n", hdsp->card_name);
3779 		return -ENOMEM;
3780 	}
3781 
3782 	/* copy to the own data for alignment */
3783 	hdsp->capture_dma_buf = *capture_dma;
3784 	hdsp->playback_dma_buf = *playback_dma;
3785 
3786 	/* Align to bus-space 64K boundary */
3787 	hdsp->capture_dma_buf.addr = ALIGN(capture_dma->addr, 0x10000ul);
3788 	hdsp->playback_dma_buf.addr = ALIGN(playback_dma->addr, 0x10000ul);
3789 
3790 	/* Tell the card where it is */
3791 	hdsp_write(hdsp, HDSP_inputBufferAddress, hdsp->capture_dma_buf.addr);
3792 	hdsp_write(hdsp, HDSP_outputBufferAddress, hdsp->playback_dma_buf.addr);
3793 
3794 	hdsp->capture_dma_buf.area += hdsp->capture_dma_buf.addr - capture_dma->addr;
3795 	hdsp->playback_dma_buf.area += hdsp->playback_dma_buf.addr - playback_dma->addr;
3796 	hdsp->capture_buffer = hdsp->capture_dma_buf.area;
3797 	hdsp->playback_buffer = hdsp->playback_dma_buf.area;
3798 
3799 	return 0;
3800 }
3801 
snd_hdsp_set_defaults(struct hdsp * hdsp)3802 static int snd_hdsp_set_defaults(struct hdsp *hdsp)
3803 {
3804 	unsigned int i;
3805 
3806 	/* ASSUMPTION: hdsp->lock is either held, or
3807 	   there is no need to hold it (e.g. during module
3808 	   initialization).
3809 	 */
3810 
3811 	/* set defaults:
3812 
3813 	   SPDIF Input via Coax
3814 	   Master clock mode
3815 	   maximum latency (7 => 2^7 = 8192 samples, 64Kbyte buffer,
3816 	                    which implies 2 4096 sample, 32Kbyte periods).
3817            Enable line out.
3818 	 */
3819 
3820 	hdsp->control_register = HDSP_ClockModeMaster |
3821 		                 HDSP_SPDIFInputCoaxial |
3822 		                 hdsp_encode_latency(7) |
3823 		                 HDSP_LineOut;
3824 
3825 
3826 	hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3827 
3828 #ifdef SNDRV_BIG_ENDIAN
3829 	hdsp->control2_register = HDSP_BIGENDIAN_MODE;
3830 #else
3831 	hdsp->control2_register = 0;
3832 #endif
3833 	if (hdsp->io_type == H9652)
3834 	        snd_hdsp_9652_enable_mixer (hdsp);
3835 	else
3836 		hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
3837 
3838 	hdsp_reset_hw_pointer(hdsp);
3839 	hdsp_compute_period_size(hdsp);
3840 
3841 	/* silence everything */
3842 
3843 	for (i = 0; i < HDSP_MATRIX_MIXER_SIZE; ++i)
3844 		hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
3845 
3846 	for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) {
3847 		if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
3848 			return -EIO;
3849 	}
3850 
3851 	/* H9632 specific defaults */
3852 	if (hdsp->io_type == H9632) {
3853 		hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
3854 		hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3855 	}
3856 
3857 	/* set a default rate so that the channel map is set up.
3858 	 */
3859 
3860 	hdsp_set_rate(hdsp, 48000, 1);
3861 
3862 	return 0;
3863 }
3864 
hdsp_midi_work(struct work_struct * work)3865 static void hdsp_midi_work(struct work_struct *work)
3866 {
3867 	struct hdsp *hdsp = container_of(work, struct hdsp, midi_work);
3868 
3869 	if (hdsp->midi[0].pending)
3870 		snd_hdsp_midi_input_read (&hdsp->midi[0]);
3871 	if (hdsp->midi[1].pending)
3872 		snd_hdsp_midi_input_read (&hdsp->midi[1]);
3873 }
3874 
snd_hdsp_interrupt(int irq,void * dev_id)3875 static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id)
3876 {
3877 	struct hdsp *hdsp = (struct hdsp *) dev_id;
3878 	unsigned int status;
3879 	int audio;
3880 	int midi0;
3881 	int midi1;
3882 	unsigned int midi0status;
3883 	unsigned int midi1status;
3884 	int schedule = 0;
3885 
3886 	status = hdsp_read(hdsp, HDSP_statusRegister);
3887 
3888 	audio = status & HDSP_audioIRQPending;
3889 	midi0 = status & HDSP_midi0IRQPending;
3890 	midi1 = status & HDSP_midi1IRQPending;
3891 
3892 	if (!audio && !midi0 && !midi1)
3893 		return IRQ_NONE;
3894 
3895 	hdsp_write(hdsp, HDSP_interruptConfirmation, 0);
3896 
3897 	midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
3898 	midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
3899 
3900 	if (!(hdsp->state & HDSP_InitializationComplete))
3901 		return IRQ_HANDLED;
3902 
3903 	if (audio) {
3904 		if (hdsp->capture_substream)
3905 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
3906 
3907 		if (hdsp->playback_substream)
3908 			snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
3909 	}
3910 
3911 	if (midi0 && midi0status) {
3912 		if (hdsp->use_midi_work) {
3913 			/* we disable interrupts for this input until processing is done */
3914 			hdsp->control_register &= ~HDSP_Midi0InterruptEnable;
3915 			hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3916 			hdsp->midi[0].pending = 1;
3917 			schedule = 1;
3918 		} else {
3919 			snd_hdsp_midi_input_read (&hdsp->midi[0]);
3920 		}
3921 	}
3922 	if (hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632 && midi1 && midi1status) {
3923 		if (hdsp->use_midi_work) {
3924 			/* we disable interrupts for this input until processing is done */
3925 			hdsp->control_register &= ~HDSP_Midi1InterruptEnable;
3926 			hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
3927 			hdsp->midi[1].pending = 1;
3928 			schedule = 1;
3929 		} else {
3930 			snd_hdsp_midi_input_read (&hdsp->midi[1]);
3931 		}
3932 	}
3933 	if (hdsp->use_midi_work && schedule)
3934 		queue_work(system_highpri_wq, &hdsp->midi_work);
3935 	return IRQ_HANDLED;
3936 }
3937 
snd_hdsp_hw_pointer(struct snd_pcm_substream * substream)3938 static snd_pcm_uframes_t snd_hdsp_hw_pointer(struct snd_pcm_substream *substream)
3939 {
3940 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3941 	return hdsp_hw_pointer(hdsp);
3942 }
3943 
hdsp_channel_buffer_location(struct hdsp * hdsp,int stream,int channel)3944 static signed char *hdsp_channel_buffer_location(struct hdsp *hdsp,
3945 					     int stream,
3946 					     int channel)
3947 
3948 {
3949 	int mapped_channel;
3950 
3951         if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
3952 		return NULL;
3953 
3954 	mapped_channel = hdsp->channel_map[channel];
3955 	if (mapped_channel < 0)
3956 		return NULL;
3957 
3958 	if (stream == SNDRV_PCM_STREAM_CAPTURE)
3959 		return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3960 	else
3961 		return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
3962 }
3963 
snd_hdsp_playback_copy(struct snd_pcm_substream * substream,int channel,unsigned long pos,struct iov_iter * src,unsigned long count)3964 static int snd_hdsp_playback_copy(struct snd_pcm_substream *substream,
3965 				  int channel, unsigned long pos,
3966 				  struct iov_iter *src, unsigned long count)
3967 {
3968 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3969 	signed char *channel_buf;
3970 
3971 	if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
3972 		return -EINVAL;
3973 
3974 	channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3975 	if (snd_BUG_ON(!channel_buf))
3976 		return -EIO;
3977 	if (copy_from_iter(channel_buf + pos, count, src) != count)
3978 		return -EFAULT;
3979 	return 0;
3980 }
3981 
snd_hdsp_capture_copy(struct snd_pcm_substream * substream,int channel,unsigned long pos,struct iov_iter * dst,unsigned long count)3982 static int snd_hdsp_capture_copy(struct snd_pcm_substream *substream,
3983 				 int channel, unsigned long pos,
3984 				 struct iov_iter *dst, unsigned long count)
3985 {
3986 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
3987 	signed char *channel_buf;
3988 
3989 	if (snd_BUG_ON(pos + count > HDSP_CHANNEL_BUFFER_BYTES))
3990 		return -EINVAL;
3991 
3992 	channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
3993 	if (snd_BUG_ON(!channel_buf))
3994 		return -EIO;
3995 	if (copy_to_iter(channel_buf + pos, count, dst) != count)
3996 		return -EFAULT;
3997 	return 0;
3998 }
3999 
snd_hdsp_hw_silence(struct snd_pcm_substream * substream,int channel,unsigned long pos,unsigned long count)4000 static int snd_hdsp_hw_silence(struct snd_pcm_substream *substream,
4001 			       int channel, unsigned long pos,
4002 			       unsigned long count)
4003 {
4004 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4005 	signed char *channel_buf;
4006 
4007 	channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
4008 	if (snd_BUG_ON(!channel_buf))
4009 		return -EIO;
4010 	memset(channel_buf + pos, 0, count);
4011 	return 0;
4012 }
4013 
snd_hdsp_reset(struct snd_pcm_substream * substream)4014 static int snd_hdsp_reset(struct snd_pcm_substream *substream)
4015 {
4016 	struct snd_pcm_runtime *runtime = substream->runtime;
4017 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4018 	struct snd_pcm_substream *other;
4019 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4020 		other = hdsp->capture_substream;
4021 	else
4022 		other = hdsp->playback_substream;
4023 	if (hdsp->running)
4024 		runtime->status->hw_ptr = hdsp_hw_pointer(hdsp);
4025 	else
4026 		runtime->status->hw_ptr = 0;
4027 	if (other) {
4028 		struct snd_pcm_substream *s;
4029 		struct snd_pcm_runtime *oruntime = other->runtime;
4030 		snd_pcm_group_for_each_entry(s, substream) {
4031 			if (s == other) {
4032 				oruntime->status->hw_ptr = runtime->status->hw_ptr;
4033 				break;
4034 			}
4035 		}
4036 	}
4037 	return 0;
4038 }
4039 
snd_hdsp_hw_params(struct snd_pcm_substream * substream,struct snd_pcm_hw_params * params)4040 static int snd_hdsp_hw_params(struct snd_pcm_substream *substream,
4041 				 struct snd_pcm_hw_params *params)
4042 {
4043 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4044 	int err;
4045 	pid_t this_pid;
4046 	pid_t other_pid;
4047 
4048 	if (hdsp_check_for_iobox (hdsp))
4049 		return -EIO;
4050 
4051 	if (hdsp_check_for_firmware(hdsp, 1))
4052 		return -EIO;
4053 
4054 	spin_lock_irq(&hdsp->lock);
4055 
4056 	if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
4057 		hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
4058 		hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream);
4059 		this_pid = hdsp->playback_pid;
4060 		other_pid = hdsp->capture_pid;
4061 	} else {
4062 		this_pid = hdsp->capture_pid;
4063 		other_pid = hdsp->playback_pid;
4064 	}
4065 
4066 	if ((other_pid > 0) && (this_pid != other_pid)) {
4067 
4068 		/* The other stream is open, and not by the same
4069 		   task as this one. Make sure that the parameters
4070 		   that matter are the same.
4071 		 */
4072 
4073 		if (params_rate(params) != hdsp->system_sample_rate) {
4074 			spin_unlock_irq(&hdsp->lock);
4075 			_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4076 			return -EBUSY;
4077 		}
4078 
4079 		if (params_period_size(params) != hdsp->period_bytes / 4) {
4080 			spin_unlock_irq(&hdsp->lock);
4081 			_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4082 			return -EBUSY;
4083 		}
4084 
4085 		/* We're fine. */
4086 
4087 		spin_unlock_irq(&hdsp->lock);
4088  		return 0;
4089 
4090 	} else {
4091 		spin_unlock_irq(&hdsp->lock);
4092 	}
4093 
4094 	/* how to make sure that the rate matches an externally-set one ?
4095 	 */
4096 
4097 	spin_lock_irq(&hdsp->lock);
4098 	if (! hdsp->clock_source_locked) {
4099 		err = hdsp_set_rate(hdsp, params_rate(params), 0);
4100 		if (err < 0) {
4101 			spin_unlock_irq(&hdsp->lock);
4102 			_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
4103 			return err;
4104 		}
4105 	}
4106 	spin_unlock_irq(&hdsp->lock);
4107 
4108 	err = hdsp_set_interrupt_interval(hdsp, params_period_size(params));
4109 	if (err < 0) {
4110 		_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
4111 		return err;
4112 	}
4113 
4114 	return 0;
4115 }
4116 
snd_hdsp_channel_info(struct snd_pcm_substream * substream,struct snd_pcm_channel_info * info)4117 static int snd_hdsp_channel_info(struct snd_pcm_substream *substream,
4118 				    struct snd_pcm_channel_info *info)
4119 {
4120 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4121 	unsigned int channel = info->channel;
4122 
4123 	if (snd_BUG_ON(channel >= hdsp->max_channels))
4124 		return -EINVAL;
4125 	channel = array_index_nospec(channel, hdsp->max_channels);
4126 
4127 	if (hdsp->channel_map[channel] < 0)
4128 		return -EINVAL;
4129 
4130 	info->offset = hdsp->channel_map[channel] * HDSP_CHANNEL_BUFFER_BYTES;
4131 	info->first = 0;
4132 	info->step = 32;
4133 	return 0;
4134 }
4135 
snd_hdsp_ioctl(struct snd_pcm_substream * substream,unsigned int cmd,void * arg)4136 static int snd_hdsp_ioctl(struct snd_pcm_substream *substream,
4137 			     unsigned int cmd, void *arg)
4138 {
4139 	switch (cmd) {
4140 	case SNDRV_PCM_IOCTL1_RESET:
4141 		return snd_hdsp_reset(substream);
4142 	case SNDRV_PCM_IOCTL1_CHANNEL_INFO:
4143 		return snd_hdsp_channel_info(substream, arg);
4144 	default:
4145 		break;
4146 	}
4147 
4148 	return snd_pcm_lib_ioctl(substream, cmd, arg);
4149 }
4150 
snd_hdsp_trigger(struct snd_pcm_substream * substream,int cmd)4151 static int snd_hdsp_trigger(struct snd_pcm_substream *substream, int cmd)
4152 {
4153 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4154 	struct snd_pcm_substream *other;
4155 	int running;
4156 
4157 	if (hdsp_check_for_iobox (hdsp))
4158 		return -EIO;
4159 
4160 	if (hdsp_check_for_firmware(hdsp, 0)) /* no auto-loading in trigger */
4161 		return -EIO;
4162 
4163 	spin_lock(&hdsp->lock);
4164 	running = hdsp->running;
4165 	switch (cmd) {
4166 	case SNDRV_PCM_TRIGGER_START:
4167 		running |= 1 << substream->stream;
4168 		break;
4169 	case SNDRV_PCM_TRIGGER_STOP:
4170 		running &= ~(1 << substream->stream);
4171 		break;
4172 	default:
4173 		snd_BUG();
4174 		spin_unlock(&hdsp->lock);
4175 		return -EINVAL;
4176 	}
4177 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4178 		other = hdsp->capture_substream;
4179 	else
4180 		other = hdsp->playback_substream;
4181 
4182 	if (other) {
4183 		struct snd_pcm_substream *s;
4184 		snd_pcm_group_for_each_entry(s, substream) {
4185 			if (s == other) {
4186 				snd_pcm_trigger_done(s, substream);
4187 				if (cmd == SNDRV_PCM_TRIGGER_START)
4188 					running |= 1 << s->stream;
4189 				else
4190 					running &= ~(1 << s->stream);
4191 				goto _ok;
4192 			}
4193 		}
4194 		if (cmd == SNDRV_PCM_TRIGGER_START) {
4195 			if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) &&
4196 			    substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4197 				hdsp_silence_playback(hdsp);
4198 		} else {
4199 			if (running &&
4200 			    substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
4201 				hdsp_silence_playback(hdsp);
4202 		}
4203 	} else {
4204 		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
4205 				hdsp_silence_playback(hdsp);
4206 	}
4207  _ok:
4208 	snd_pcm_trigger_done(substream, substream);
4209 	if (!hdsp->running && running)
4210 		hdsp_start_audio(hdsp);
4211 	else if (hdsp->running && !running)
4212 		hdsp_stop_audio(hdsp);
4213 	hdsp->running = running;
4214 	spin_unlock(&hdsp->lock);
4215 
4216 	return 0;
4217 }
4218 
snd_hdsp_prepare(struct snd_pcm_substream * substream)4219 static int snd_hdsp_prepare(struct snd_pcm_substream *substream)
4220 {
4221 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4222 	int result = 0;
4223 
4224 	if (hdsp_check_for_iobox (hdsp))
4225 		return -EIO;
4226 
4227 	if (hdsp_check_for_firmware(hdsp, 1))
4228 		return -EIO;
4229 
4230 	spin_lock_irq(&hdsp->lock);
4231 	if (!hdsp->running)
4232 		hdsp_reset_hw_pointer(hdsp);
4233 	spin_unlock_irq(&hdsp->lock);
4234 	return result;
4235 }
4236 
4237 static const struct snd_pcm_hardware snd_hdsp_playback_subinfo =
4238 {
4239 	.info =			(SNDRV_PCM_INFO_MMAP |
4240 				 SNDRV_PCM_INFO_MMAP_VALID |
4241 				 SNDRV_PCM_INFO_NONINTERLEAVED |
4242 				 SNDRV_PCM_INFO_SYNC_START |
4243 				 SNDRV_PCM_INFO_DOUBLE),
4244 #ifdef SNDRV_BIG_ENDIAN
4245 	.formats =		SNDRV_PCM_FMTBIT_S32_BE,
4246 #else
4247 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
4248 #endif
4249 	.rates =		(SNDRV_PCM_RATE_32000 |
4250 				 SNDRV_PCM_RATE_44100 |
4251 				 SNDRV_PCM_RATE_48000 |
4252 				 SNDRV_PCM_RATE_64000 |
4253 				 SNDRV_PCM_RATE_88200 |
4254 				 SNDRV_PCM_RATE_96000),
4255 	.rate_min =		32000,
4256 	.rate_max =		96000,
4257 	.channels_min =		6,
4258 	.channels_max =		HDSP_MAX_CHANNELS,
4259 	.buffer_bytes_max =	HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4260 	.period_bytes_min =	(64 * 4) * 10,
4261 	.period_bytes_max =	(8192 * 4) * HDSP_MAX_CHANNELS,
4262 	.periods_min =		2,
4263 	.periods_max =		2,
4264 	.fifo_size =		0
4265 };
4266 
4267 static const struct snd_pcm_hardware snd_hdsp_capture_subinfo =
4268 {
4269 	.info =			(SNDRV_PCM_INFO_MMAP |
4270 				 SNDRV_PCM_INFO_MMAP_VALID |
4271 				 SNDRV_PCM_INFO_NONINTERLEAVED |
4272 				 SNDRV_PCM_INFO_SYNC_START),
4273 #ifdef SNDRV_BIG_ENDIAN
4274 	.formats =		SNDRV_PCM_FMTBIT_S32_BE,
4275 #else
4276 	.formats =		SNDRV_PCM_FMTBIT_S32_LE,
4277 #endif
4278 	.rates =		(SNDRV_PCM_RATE_32000 |
4279 				 SNDRV_PCM_RATE_44100 |
4280 				 SNDRV_PCM_RATE_48000 |
4281 				 SNDRV_PCM_RATE_64000 |
4282 				 SNDRV_PCM_RATE_88200 |
4283 				 SNDRV_PCM_RATE_96000),
4284 	.rate_min =		32000,
4285 	.rate_max =		96000,
4286 	.channels_min =		5,
4287 	.channels_max =		HDSP_MAX_CHANNELS,
4288 	.buffer_bytes_max =	HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS,
4289 	.period_bytes_min =	(64 * 4) * 10,
4290 	.period_bytes_max =	(8192 * 4) * HDSP_MAX_CHANNELS,
4291 	.periods_min =		2,
4292 	.periods_max =		2,
4293 	.fifo_size =		0
4294 };
4295 
4296 static const unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
4297 
4298 static const struct snd_pcm_hw_constraint_list hdsp_hw_constraints_period_sizes = {
4299 	.count = ARRAY_SIZE(hdsp_period_sizes),
4300 	.list = hdsp_period_sizes,
4301 	.mask = 0
4302 };
4303 
snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4304 static int snd_hdsp_hw_rule_in_channels(struct snd_pcm_hw_params *params,
4305 					struct snd_pcm_hw_rule *rule)
4306 {
4307 	struct hdsp *hdsp = rule->private;
4308 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4309 	if (hdsp->io_type == H9632) {
4310 		unsigned int list[3];
4311 		list[0] = hdsp->qs_in_channels;
4312 		list[1] = hdsp->ds_in_channels;
4313 		list[2] = hdsp->ss_in_channels;
4314 		return snd_interval_list(c, 3, list, 0);
4315 	} else {
4316 		unsigned int list[2];
4317 		list[0] = hdsp->ds_in_channels;
4318 		list[1] = hdsp->ss_in_channels;
4319 		return snd_interval_list(c, 2, list, 0);
4320 	}
4321 }
4322 
snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4323 static int snd_hdsp_hw_rule_out_channels(struct snd_pcm_hw_params *params,
4324 					struct snd_pcm_hw_rule *rule)
4325 {
4326 	unsigned int list[3];
4327 	struct hdsp *hdsp = rule->private;
4328 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4329 	if (hdsp->io_type == H9632) {
4330 		list[0] = hdsp->qs_out_channels;
4331 		list[1] = hdsp->ds_out_channels;
4332 		list[2] = hdsp->ss_out_channels;
4333 		return snd_interval_list(c, 3, list, 0);
4334 	} else {
4335 		list[0] = hdsp->ds_out_channels;
4336 		list[1] = hdsp->ss_out_channels;
4337 	}
4338 	return snd_interval_list(c, 2, list, 0);
4339 }
4340 
snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4341 static int snd_hdsp_hw_rule_in_channels_rate(struct snd_pcm_hw_params *params,
4342 					     struct snd_pcm_hw_rule *rule)
4343 {
4344 	struct hdsp *hdsp = rule->private;
4345 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4346 	struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4347 	if (r->min > 96000 && hdsp->io_type == H9632) {
4348 		struct snd_interval t = {
4349 			.min = hdsp->qs_in_channels,
4350 			.max = hdsp->qs_in_channels,
4351 			.integer = 1,
4352 		};
4353 		return snd_interval_refine(c, &t);
4354 	} else if (r->min > 48000 && r->max <= 96000) {
4355 		struct snd_interval t = {
4356 			.min = hdsp->ds_in_channels,
4357 			.max = hdsp->ds_in_channels,
4358 			.integer = 1,
4359 		};
4360 		return snd_interval_refine(c, &t);
4361 	} else if (r->max < 64000) {
4362 		struct snd_interval t = {
4363 			.min = hdsp->ss_in_channels,
4364 			.max = hdsp->ss_in_channels,
4365 			.integer = 1,
4366 		};
4367 		return snd_interval_refine(c, &t);
4368 	}
4369 	return 0;
4370 }
4371 
snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4372 static int snd_hdsp_hw_rule_out_channels_rate(struct snd_pcm_hw_params *params,
4373 					     struct snd_pcm_hw_rule *rule)
4374 {
4375 	struct hdsp *hdsp = rule->private;
4376 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4377 	struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4378 	if (r->min > 96000 && hdsp->io_type == H9632) {
4379 		struct snd_interval t = {
4380 			.min = hdsp->qs_out_channels,
4381 			.max = hdsp->qs_out_channels,
4382 			.integer = 1,
4383 		};
4384 		return snd_interval_refine(c, &t);
4385 	} else if (r->min > 48000 && r->max <= 96000) {
4386 		struct snd_interval t = {
4387 			.min = hdsp->ds_out_channels,
4388 			.max = hdsp->ds_out_channels,
4389 			.integer = 1,
4390 		};
4391 		return snd_interval_refine(c, &t);
4392 	} else if (r->max < 64000) {
4393 		struct snd_interval t = {
4394 			.min = hdsp->ss_out_channels,
4395 			.max = hdsp->ss_out_channels,
4396 			.integer = 1,
4397 		};
4398 		return snd_interval_refine(c, &t);
4399 	}
4400 	return 0;
4401 }
4402 
snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4403 static int snd_hdsp_hw_rule_rate_out_channels(struct snd_pcm_hw_params *params,
4404 					     struct snd_pcm_hw_rule *rule)
4405 {
4406 	struct hdsp *hdsp = rule->private;
4407 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4408 	struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4409 	if (c->min >= hdsp->ss_out_channels) {
4410 		struct snd_interval t = {
4411 			.min = 32000,
4412 			.max = 48000,
4413 			.integer = 1,
4414 		};
4415 		return snd_interval_refine(r, &t);
4416 	} else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) {
4417 		struct snd_interval t = {
4418 			.min = 128000,
4419 			.max = 192000,
4420 			.integer = 1,
4421 		};
4422 		return snd_interval_refine(r, &t);
4423 	} else if (c->max <= hdsp->ds_out_channels) {
4424 		struct snd_interval t = {
4425 			.min = 64000,
4426 			.max = 96000,
4427 			.integer = 1,
4428 		};
4429 		return snd_interval_refine(r, &t);
4430 	}
4431 	return 0;
4432 }
4433 
snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params * params,struct snd_pcm_hw_rule * rule)4434 static int snd_hdsp_hw_rule_rate_in_channels(struct snd_pcm_hw_params *params,
4435 					     struct snd_pcm_hw_rule *rule)
4436 {
4437 	struct hdsp *hdsp = rule->private;
4438 	struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
4439 	struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
4440 	if (c->min >= hdsp->ss_in_channels) {
4441 		struct snd_interval t = {
4442 			.min = 32000,
4443 			.max = 48000,
4444 			.integer = 1,
4445 		};
4446 		return snd_interval_refine(r, &t);
4447 	} else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) {
4448 		struct snd_interval t = {
4449 			.min = 128000,
4450 			.max = 192000,
4451 			.integer = 1,
4452 		};
4453 		return snd_interval_refine(r, &t);
4454 	} else if (c->max <= hdsp->ds_in_channels) {
4455 		struct snd_interval t = {
4456 			.min = 64000,
4457 			.max = 96000,
4458 			.integer = 1,
4459 		};
4460 		return snd_interval_refine(r, &t);
4461 	}
4462 	return 0;
4463 }
4464 
snd_hdsp_playback_open(struct snd_pcm_substream * substream)4465 static int snd_hdsp_playback_open(struct snd_pcm_substream *substream)
4466 {
4467 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4468 	struct snd_pcm_runtime *runtime = substream->runtime;
4469 
4470 	if (hdsp_check_for_iobox (hdsp))
4471 		return -EIO;
4472 
4473 	if (hdsp_check_for_firmware(hdsp, 1))
4474 		return -EIO;
4475 
4476 	spin_lock_irq(&hdsp->lock);
4477 
4478 	snd_pcm_set_sync(substream);
4479 
4480         runtime->hw = snd_hdsp_playback_subinfo;
4481 	snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf);
4482 
4483 	hdsp->playback_pid = current->pid;
4484 	hdsp->playback_substream = substream;
4485 
4486 	spin_unlock_irq(&hdsp->lock);
4487 
4488 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4489 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4490 	if (hdsp->clock_source_locked) {
4491 		runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate;
4492 	} else if (hdsp->io_type == H9632) {
4493 		runtime->hw.rate_max = 192000;
4494 		runtime->hw.rates |= (SNDRV_PCM_RATE_128000 |
4495 				      SNDRV_PCM_RATE_176400 |
4496 				      SNDRV_PCM_RATE_192000);
4497 	}
4498 	if (hdsp->io_type == H9632) {
4499 		runtime->hw.channels_min = hdsp->qs_out_channels;
4500 		runtime->hw.channels_max = hdsp->ss_out_channels;
4501 	}
4502 
4503 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4504 			     snd_hdsp_hw_rule_out_channels, hdsp,
4505 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4506 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4507 			     snd_hdsp_hw_rule_out_channels_rate, hdsp,
4508 			     SNDRV_PCM_HW_PARAM_RATE, -1);
4509 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4510 			     snd_hdsp_hw_rule_rate_out_channels, hdsp,
4511 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4512 
4513 	if (RPM != hdsp->io_type) {
4514 		hdsp->creg_spdif_stream = hdsp->creg_spdif;
4515 		hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4516 		snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4517 			SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4518 	}
4519 	return 0;
4520 }
4521 
snd_hdsp_playback_release(struct snd_pcm_substream * substream)4522 static int snd_hdsp_playback_release(struct snd_pcm_substream *substream)
4523 {
4524 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4525 
4526 	spin_lock_irq(&hdsp->lock);
4527 
4528 	hdsp->playback_pid = -1;
4529 	hdsp->playback_substream = NULL;
4530 
4531 	spin_unlock_irq(&hdsp->lock);
4532 
4533 	if (RPM != hdsp->io_type) {
4534 		hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
4535 		snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
4536 			SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
4537 	}
4538 	return 0;
4539 }
4540 
4541 
snd_hdsp_capture_open(struct snd_pcm_substream * substream)4542 static int snd_hdsp_capture_open(struct snd_pcm_substream *substream)
4543 {
4544 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4545 	struct snd_pcm_runtime *runtime = substream->runtime;
4546 
4547 	if (hdsp_check_for_iobox (hdsp))
4548 		return -EIO;
4549 
4550 	if (hdsp_check_for_firmware(hdsp, 1))
4551 		return -EIO;
4552 
4553 	spin_lock_irq(&hdsp->lock);
4554 
4555 	snd_pcm_set_sync(substream);
4556 
4557 	runtime->hw = snd_hdsp_capture_subinfo;
4558 	snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf);
4559 
4560 	hdsp->capture_pid = current->pid;
4561 	hdsp->capture_substream = substream;
4562 
4563 	spin_unlock_irq(&hdsp->lock);
4564 
4565 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
4566 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
4567 	if (hdsp->io_type == H9632) {
4568 		runtime->hw.channels_min = hdsp->qs_in_channels;
4569 		runtime->hw.channels_max = hdsp->ss_in_channels;
4570 		runtime->hw.rate_max = 192000;
4571 		runtime->hw.rates |= (SNDRV_PCM_RATE_128000 |
4572 				      SNDRV_PCM_RATE_176400 |
4573 				      SNDRV_PCM_RATE_192000);
4574 	}
4575 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4576 			     snd_hdsp_hw_rule_in_channels, hdsp,
4577 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4578 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
4579 			     snd_hdsp_hw_rule_in_channels_rate, hdsp,
4580 			     SNDRV_PCM_HW_PARAM_RATE, -1);
4581 	snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
4582 			     snd_hdsp_hw_rule_rate_in_channels, hdsp,
4583 			     SNDRV_PCM_HW_PARAM_CHANNELS, -1);
4584 	return 0;
4585 }
4586 
snd_hdsp_capture_release(struct snd_pcm_substream * substream)4587 static int snd_hdsp_capture_release(struct snd_pcm_substream *substream)
4588 {
4589 	struct hdsp *hdsp = snd_pcm_substream_chip(substream);
4590 
4591 	spin_lock_irq(&hdsp->lock);
4592 
4593 	hdsp->capture_pid = -1;
4594 	hdsp->capture_substream = NULL;
4595 
4596 	spin_unlock_irq(&hdsp->lock);
4597 	return 0;
4598 }
4599 
4600 /* helper functions for copying meter values */
copy_u32_le(void __user * dest,void __iomem * src)4601 static inline int copy_u32_le(void __user *dest, void __iomem *src)
4602 {
4603 	u32 val = readl(src);
4604 	return copy_to_user(dest, &val, 4);
4605 }
4606 
copy_u64_le(void __user * dest,void __iomem * src_low,void __iomem * src_high)4607 static inline int copy_u64_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4608 {
4609 	u32 rms_low, rms_high;
4610 	u64 rms;
4611 	rms_low = readl(src_low);
4612 	rms_high = readl(src_high);
4613 	rms = ((u64)rms_high << 32) | rms_low;
4614 	return copy_to_user(dest, &rms, 8);
4615 }
4616 
copy_u48_le(void __user * dest,void __iomem * src_low,void __iomem * src_high)4617 static inline int copy_u48_le(void __user *dest, void __iomem *src_low, void __iomem *src_high)
4618 {
4619 	u32 rms_low, rms_high;
4620 	u64 rms;
4621 	rms_low = readl(src_low) & 0xffffff00;
4622 	rms_high = readl(src_high) & 0xffffff00;
4623 	rms = ((u64)rms_high << 32) | rms_low;
4624 	return copy_to_user(dest, &rms, 8);
4625 }
4626 
hdsp_9652_get_peak(struct hdsp * hdsp,struct hdsp_peak_rms __user * peak_rms)4627 static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4628 {
4629 	int doublespeed = 0;
4630 	int i, j, channels, ofs;
4631 
4632 	if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4633 		doublespeed = 1;
4634 	channels = doublespeed ? 14 : 26;
4635 	for (i = 0, j = 0; i < 26; ++i) {
4636 		if (doublespeed && (i & 4))
4637 			continue;
4638 		ofs = HDSP_9652_peakBase - j * 4;
4639 		if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs))
4640 			return -EFAULT;
4641 		ofs -= channels * 4;
4642 		if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs))
4643 			return -EFAULT;
4644 		ofs -= channels * 4;
4645 		if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs))
4646 			return -EFAULT;
4647 		ofs = HDSP_9652_rmsBase + j * 8;
4648 		if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs,
4649 				hdsp->iobase + ofs + 4))
4650 			return -EFAULT;
4651 		ofs += channels * 8;
4652 		if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs,
4653 				hdsp->iobase + ofs + 4))
4654 			return -EFAULT;
4655 		ofs += channels * 8;
4656 		if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs,
4657 				hdsp->iobase + ofs + 4))
4658 			return -EFAULT;
4659 		j++;
4660 	}
4661 	return 0;
4662 }
4663 
hdsp_9632_get_peak(struct hdsp * hdsp,struct hdsp_peak_rms __user * peak_rms)4664 static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4665 {
4666 	int i, j;
4667 	struct hdsp_9632_meters __iomem *m;
4668 	int doublespeed = 0;
4669 
4670 	if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
4671 		doublespeed = 1;
4672 	m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase);
4673 	for (i = 0, j = 0; i < 16; ++i, ++j) {
4674 		if (copy_u32_le(&peak_rms->input_peaks[i], &m->input_peak[j]))
4675 			return -EFAULT;
4676 		if (copy_u32_le(&peak_rms->playback_peaks[i], &m->playback_peak[j]))
4677 			return -EFAULT;
4678 		if (copy_u32_le(&peak_rms->output_peaks[i], &m->output_peak[j]))
4679 			return -EFAULT;
4680 		if (copy_u64_le(&peak_rms->input_rms[i], &m->input_rms_low[j],
4681 				&m->input_rms_high[j]))
4682 			return -EFAULT;
4683 		if (copy_u64_le(&peak_rms->playback_rms[i], &m->playback_rms_low[j],
4684 				&m->playback_rms_high[j]))
4685 			return -EFAULT;
4686 		if (copy_u64_le(&peak_rms->output_rms[i], &m->output_rms_low[j],
4687 				&m->output_rms_high[j]))
4688 			return -EFAULT;
4689 		if (doublespeed && i == 3) i += 4;
4690 	}
4691 	return 0;
4692 }
4693 
hdsp_get_peak(struct hdsp * hdsp,struct hdsp_peak_rms __user * peak_rms)4694 static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
4695 {
4696 	int i;
4697 
4698 	for (i = 0; i < 26; i++) {
4699 		if (copy_u32_le(&peak_rms->playback_peaks[i],
4700 				hdsp->iobase + HDSP_playbackPeakLevel + i * 4))
4701 			return -EFAULT;
4702 		if (copy_u32_le(&peak_rms->input_peaks[i],
4703 				hdsp->iobase + HDSP_inputPeakLevel + i * 4))
4704 			return -EFAULT;
4705 	}
4706 	for (i = 0; i < 28; i++) {
4707 		if (copy_u32_le(&peak_rms->output_peaks[i],
4708 				hdsp->iobase + HDSP_outputPeakLevel + i * 4))
4709 			return -EFAULT;
4710 	}
4711 	for (i = 0; i < 26; ++i) {
4712 		if (copy_u64_le(&peak_rms->playback_rms[i],
4713 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
4714 				hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
4715 			return -EFAULT;
4716 		if (copy_u64_le(&peak_rms->input_rms[i],
4717 				hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
4718 				hdsp->iobase + HDSP_inputRmsLevel + i * 8))
4719 			return -EFAULT;
4720 	}
4721 	return 0;
4722 }
4723 
snd_hdsp_hwdep_ioctl(struct snd_hwdep * hw,struct file * file,unsigned int cmd,unsigned long arg)4724 static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigned int cmd, unsigned long arg)
4725 {
4726 	struct hdsp *hdsp = hw->private_data;
4727 	void __user *argp = (void __user *)arg;
4728 	int err;
4729 
4730 	switch (cmd) {
4731 	case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: {
4732 		struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg;
4733 
4734 		err = hdsp_check_for_iobox(hdsp);
4735 		if (err < 0)
4736 			return err;
4737 
4738 		err = hdsp_check_for_firmware(hdsp, 1);
4739 		if (err < 0)
4740 			return err;
4741 
4742 		if (!(hdsp->state & HDSP_FirmwareLoaded)) {
4743 			dev_err(hdsp->card->dev,
4744 				"firmware needs to be uploaded to the card.\n");
4745 			return -EINVAL;
4746 		}
4747 
4748 		switch (hdsp->io_type) {
4749 		case H9652:
4750 			return hdsp_9652_get_peak(hdsp, peak_rms);
4751 		case H9632:
4752 			return hdsp_9632_get_peak(hdsp, peak_rms);
4753 		default:
4754 			return hdsp_get_peak(hdsp, peak_rms);
4755 		}
4756 	}
4757 	case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: {
4758 		struct hdsp_config_info info;
4759 		unsigned long flags;
4760 		int i;
4761 
4762 		err = hdsp_check_for_iobox(hdsp);
4763 		if (err < 0)
4764 			return err;
4765 
4766 		err = hdsp_check_for_firmware(hdsp, 1);
4767 		if (err < 0)
4768 			return err;
4769 
4770 		memset(&info, 0, sizeof(info));
4771 		spin_lock_irqsave(&hdsp->lock, flags);
4772 		info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp);
4773 		info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
4774 		if (hdsp->io_type != H9632)
4775 		    info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp);
4776 		info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp);
4777 		for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632) ? 3 : 1); ++i)
4778 			info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i);
4779 		info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp);
4780 		info.spdif_out = (unsigned char)hdsp_toggle_setting(hdsp,
4781 				HDSP_SPDIFOpticalOut);
4782 		info.spdif_professional = (unsigned char)
4783 			hdsp_toggle_setting(hdsp, HDSP_SPDIFProfessional);
4784 		info.spdif_emphasis = (unsigned char)
4785 			hdsp_toggle_setting(hdsp, HDSP_SPDIFEmphasis);
4786 		info.spdif_nonaudio = (unsigned char)
4787 			hdsp_toggle_setting(hdsp, HDSP_SPDIFNonAudio);
4788 		info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp);
4789 		info.system_sample_rate = hdsp->system_sample_rate;
4790 		info.autosync_sample_rate = hdsp_external_sample_rate(hdsp);
4791 		info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp);
4792 		info.clock_source = (unsigned char)hdsp_clock_source(hdsp);
4793 		info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp);
4794 		info.line_out = (unsigned char)
4795 			hdsp_toggle_setting(hdsp, HDSP_LineOut);
4796 		if (hdsp->io_type == H9632) {
4797 			info.da_gain = (unsigned char)hdsp_da_gain(hdsp);
4798 			info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
4799 			info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
4800 			info.xlr_breakout_cable =
4801 				(unsigned char)hdsp_toggle_setting(hdsp,
4802 					HDSP_XLRBreakoutCable);
4803 
4804 		} else if (hdsp->io_type == RPM) {
4805 			info.da_gain = (unsigned char) hdsp_rpm_input12(hdsp);
4806 			info.ad_gain = (unsigned char) hdsp_rpm_input34(hdsp);
4807 		}
4808 		if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
4809 			info.analog_extension_board =
4810 				(unsigned char)hdsp_toggle_setting(hdsp,
4811 					    HDSP_AnalogExtensionBoard);
4812 		spin_unlock_irqrestore(&hdsp->lock, flags);
4813 		if (copy_to_user(argp, &info, sizeof(info)))
4814 			return -EFAULT;
4815 		break;
4816 	}
4817 	case SNDRV_HDSP_IOCTL_GET_9632_AEB: {
4818 		struct hdsp_9632_aeb h9632_aeb;
4819 
4820 		if (hdsp->io_type != H9632) return -EINVAL;
4821 		h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
4822 		h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
4823 		if (copy_to_user(argp, &h9632_aeb, sizeof(h9632_aeb)))
4824 			return -EFAULT;
4825 		break;
4826 	}
4827 	case SNDRV_HDSP_IOCTL_GET_VERSION: {
4828 		struct hdsp_version hdsp_version;
4829 		int err;
4830 
4831 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4832 		if (hdsp->io_type == Undefined) {
4833 			err = hdsp_get_iobox_version(hdsp);
4834 			if (err < 0)
4835 				return err;
4836 		}
4837 		memset(&hdsp_version, 0, sizeof(hdsp_version));
4838 		hdsp_version.io_type = hdsp->io_type;
4839 		hdsp_version.firmware_rev = hdsp->firmware_rev;
4840 		if (copy_to_user(argp, &hdsp_version, sizeof(hdsp_version)))
4841 			return -EFAULT;
4842 		break;
4843 	}
4844 	case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: {
4845 		struct hdsp_firmware firmware;
4846 		u32 __user *firmware_data;
4847 		int err;
4848 
4849 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
4850 		/* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */
4851 		if (hdsp->io_type == Undefined) return -EINVAL;
4852 
4853 		if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded))
4854 			return -EBUSY;
4855 
4856 		dev_info(hdsp->card->dev,
4857 			 "initializing firmware upload\n");
4858 		if (copy_from_user(&firmware, argp, sizeof(firmware)))
4859 			return -EFAULT;
4860 		firmware_data = (u32 __user *)firmware.firmware_data;
4861 
4862 		if (hdsp_check_for_iobox (hdsp))
4863 			return -EIO;
4864 
4865 		if (!hdsp->fw_uploaded) {
4866 			hdsp->fw_uploaded = vmalloc(HDSP_FIRMWARE_SIZE);
4867 			if (!hdsp->fw_uploaded)
4868 				return -ENOMEM;
4869 		}
4870 
4871 		if (copy_from_user(hdsp->fw_uploaded, firmware_data,
4872 				   HDSP_FIRMWARE_SIZE)) {
4873 			vfree(hdsp->fw_uploaded);
4874 			hdsp->fw_uploaded = NULL;
4875 			return -EFAULT;
4876 		}
4877 
4878 		hdsp->state |= HDSP_FirmwareCached;
4879 
4880 		err = snd_hdsp_load_firmware_from_cache(hdsp);
4881 		if (err < 0)
4882 			return err;
4883 
4884 		if (!(hdsp->state & HDSP_InitializationComplete)) {
4885 			err = snd_hdsp_enable_io(hdsp);
4886 			if (err < 0)
4887 				return err;
4888 
4889 			snd_hdsp_initialize_channels(hdsp);
4890 			snd_hdsp_initialize_midi_flush(hdsp);
4891 
4892 			err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
4893 			if (err < 0) {
4894 				dev_err(hdsp->card->dev,
4895 					"error creating alsa devices\n");
4896 				return err;
4897 			}
4898 		}
4899 		break;
4900 	}
4901 	case SNDRV_HDSP_IOCTL_GET_MIXER: {
4902 		struct hdsp_mixer __user *mixer = (struct hdsp_mixer __user *)argp;
4903 		if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE))
4904 			return -EFAULT;
4905 		break;
4906 	}
4907 	default:
4908 		return -EINVAL;
4909 	}
4910 	return 0;
4911 }
4912 
4913 static const struct snd_pcm_ops snd_hdsp_playback_ops = {
4914 	.open =		snd_hdsp_playback_open,
4915 	.close =	snd_hdsp_playback_release,
4916 	.ioctl =	snd_hdsp_ioctl,
4917 	.hw_params =	snd_hdsp_hw_params,
4918 	.prepare =	snd_hdsp_prepare,
4919 	.trigger =	snd_hdsp_trigger,
4920 	.pointer =	snd_hdsp_hw_pointer,
4921 	.copy =		snd_hdsp_playback_copy,
4922 	.fill_silence =	snd_hdsp_hw_silence,
4923 };
4924 
4925 static const struct snd_pcm_ops snd_hdsp_capture_ops = {
4926 	.open =		snd_hdsp_capture_open,
4927 	.close =	snd_hdsp_capture_release,
4928 	.ioctl =	snd_hdsp_ioctl,
4929 	.hw_params =	snd_hdsp_hw_params,
4930 	.prepare =	snd_hdsp_prepare,
4931 	.trigger =	snd_hdsp_trigger,
4932 	.pointer =	snd_hdsp_hw_pointer,
4933 	.copy =		snd_hdsp_capture_copy,
4934 };
4935 
snd_hdsp_create_hwdep(struct snd_card * card,struct hdsp * hdsp)4936 static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
4937 {
4938 	struct snd_hwdep *hw;
4939 	int err;
4940 
4941 	err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw);
4942 	if (err < 0)
4943 		return err;
4944 
4945 	hdsp->hwdep = hw;
4946 	hw->private_data = hdsp;
4947 	strcpy(hw->name, "HDSP hwdep interface");
4948 
4949 	hw->ops.ioctl = snd_hdsp_hwdep_ioctl;
4950 	hw->ops.ioctl_compat = snd_hdsp_hwdep_ioctl;
4951 
4952 	return 0;
4953 }
4954 
snd_hdsp_create_pcm(struct snd_card * card,struct hdsp * hdsp)4955 static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp)
4956 {
4957 	struct snd_pcm *pcm;
4958 	int err;
4959 
4960 	err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm);
4961 	if (err < 0)
4962 		return err;
4963 
4964 	hdsp->pcm = pcm;
4965 	pcm->private_data = hdsp;
4966 	strcpy(pcm->name, hdsp->card_name);
4967 
4968 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_hdsp_playback_ops);
4969 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_hdsp_capture_ops);
4970 
4971 	pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
4972 
4973 	return 0;
4974 }
4975 
snd_hdsp_9652_enable_mixer(struct hdsp * hdsp)4976 static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp)
4977 {
4978         hdsp->control2_register |= HDSP_9652_ENABLE_MIXER;
4979 	hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
4980 }
4981 
snd_hdsp_enable_io(struct hdsp * hdsp)4982 static int snd_hdsp_enable_io (struct hdsp *hdsp)
4983 {
4984 	int i;
4985 
4986 	if (hdsp_fifo_wait (hdsp, 0, 100)) {
4987 		dev_err(hdsp->card->dev,
4988 			"enable_io fifo_wait failed\n");
4989 		return -EIO;
4990 	}
4991 
4992 	for (i = 0; i < hdsp->max_channels; ++i) {
4993 		hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
4994 		hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
4995 	}
4996 
4997 	return 0;
4998 }
4999 
snd_hdsp_initialize_channels(struct hdsp * hdsp)5000 static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
5001 {
5002 	int status, aebi_channels, aebo_channels, i;
5003 
5004 	switch (hdsp->io_type) {
5005 	case Digiface:
5006 		hdsp->card_name = "RME Hammerfall DSP + Digiface";
5007 		hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS;
5008 		hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS;
5009 		break;
5010 
5011 	case H9652:
5012 		hdsp->card_name = "RME Hammerfall HDSP 9652";
5013 		hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
5014 		hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
5015 		break;
5016 
5017 	case H9632:
5018 		status = hdsp_read(hdsp, HDSP_statusRegister);
5019 		/* HDSP_AEBx bits are low when AEB are connected */
5020 		aebi_channels = (status & HDSP_AEBI) ? 0 : 4;
5021 		aebo_channels = (status & HDSP_AEBO) ? 0 : 4;
5022 		hdsp->card_name = "RME Hammerfall HDSP 9632";
5023 		hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels;
5024 		hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels;
5025 		hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels;
5026 		hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels;
5027 		hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels;
5028 		hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels;
5029 		/* Disable loopback of output channels, as the set function
5030 		 * only sets on a change we fake all bits (channels) as enabled.
5031 		 */
5032 		hdsp->io_loopback = 0xffffffff;
5033 		for (i = 0; i < hdsp->max_channels; ++i)
5034 			hdsp_loopback_set(hdsp, i, false);
5035 		break;
5036 
5037 	case Multiface:
5038 		hdsp->card_name = "RME Hammerfall DSP + Multiface";
5039 		hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
5040 		hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
5041 		break;
5042 
5043 	case RPM:
5044 		hdsp->card_name = "RME Hammerfall DSP + RPM";
5045 		hdsp->ss_in_channels = RPM_CHANNELS-1;
5046 		hdsp->ss_out_channels = RPM_CHANNELS;
5047 		hdsp->ds_in_channels = RPM_CHANNELS-1;
5048 		hdsp->ds_out_channels = RPM_CHANNELS;
5049 		break;
5050 
5051 	default:
5052  		/* should never get here */
5053 		break;
5054 	}
5055 }
5056 
snd_hdsp_initialize_midi_flush(struct hdsp * hdsp)5057 static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp)
5058 {
5059 	snd_hdsp_flush_midi_input (hdsp, 0);
5060 	snd_hdsp_flush_midi_input (hdsp, 1);
5061 }
5062 
snd_hdsp_create_alsa_devices(struct snd_card * card,struct hdsp * hdsp)5063 static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
5064 {
5065 	int err;
5066 
5067 	err = snd_hdsp_create_pcm(card, hdsp);
5068 	if (err < 0) {
5069 		dev_err(card->dev,
5070 			"Error creating pcm interface\n");
5071 		return err;
5072 	}
5073 
5074 
5075 	err = snd_hdsp_create_midi(card, hdsp, 0);
5076 	if (err < 0) {
5077 		dev_err(card->dev,
5078 			"Error creating first midi interface\n");
5079 		return err;
5080 	}
5081 
5082 	if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
5083 		err = snd_hdsp_create_midi(card, hdsp, 1);
5084 		if (err < 0) {
5085 			dev_err(card->dev,
5086 				"Error creating second midi interface\n");
5087 			return err;
5088 		}
5089 	}
5090 
5091 	err = snd_hdsp_create_controls(card, hdsp);
5092 	if (err < 0) {
5093 		dev_err(card->dev,
5094 			"Error creating ctl interface\n");
5095 		return err;
5096 	}
5097 
5098 	snd_hdsp_proc_init(hdsp);
5099 
5100 	hdsp->system_sample_rate = -1;
5101 	hdsp->playback_pid = -1;
5102 	hdsp->capture_pid = -1;
5103 	hdsp->capture_substream = NULL;
5104 	hdsp->playback_substream = NULL;
5105 
5106 	err = snd_hdsp_set_defaults(hdsp);
5107 	if (err < 0) {
5108 		dev_err(card->dev,
5109 			"Error setting default values\n");
5110 		return err;
5111 	}
5112 
5113 	if (!(hdsp->state & HDSP_InitializationComplete)) {
5114 		strcpy(card->shortname, "Hammerfall DSP");
5115 		sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5116 			hdsp->port, hdsp->irq);
5117 
5118 		err = snd_card_register(card);
5119 		if (err < 0) {
5120 			dev_err(card->dev,
5121 				"error registering card\n");
5122 			return err;
5123 		}
5124 		hdsp->state |= HDSP_InitializationComplete;
5125 	}
5126 
5127 	return 0;
5128 }
5129 
5130 /* load firmware via hotplug fw loader */
hdsp_request_fw_loader(struct hdsp * hdsp)5131 static int hdsp_request_fw_loader(struct hdsp *hdsp)
5132 {
5133 	const char *fwfile;
5134 	const struct firmware *fw;
5135 	int err;
5136 
5137 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5138 		return 0;
5139 	if (hdsp->io_type == Undefined) {
5140 		err = hdsp_get_iobox_version(hdsp);
5141 		if (err < 0)
5142 			return err;
5143 		if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
5144 			return 0;
5145 	}
5146 
5147 	/* caution: max length of firmware filename is 30! */
5148 	switch (hdsp->io_type) {
5149 	case RPM:
5150 		fwfile = "rpm_firmware.bin";
5151 		break;
5152 	case Multiface:
5153 		if (hdsp->firmware_rev == 0xa)
5154 			fwfile = "multiface_firmware.bin";
5155 		else
5156 			fwfile = "multiface_firmware_rev11.bin";
5157 		break;
5158 	case Digiface:
5159 		if (hdsp->firmware_rev == 0xa)
5160 			fwfile = "digiface_firmware.bin";
5161 		else
5162 			fwfile = "digiface_firmware_rev11.bin";
5163 		break;
5164 	default:
5165 		dev_err(hdsp->card->dev,
5166 			"invalid io_type %d\n", hdsp->io_type);
5167 		return -EINVAL;
5168 	}
5169 
5170 	if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) {
5171 		dev_err(hdsp->card->dev,
5172 			"cannot load firmware %s\n", fwfile);
5173 		return -ENOENT;
5174 	}
5175 	if (fw->size < HDSP_FIRMWARE_SIZE) {
5176 		dev_err(hdsp->card->dev,
5177 			"too short firmware size %d (expected %d)\n",
5178 			   (int)fw->size, HDSP_FIRMWARE_SIZE);
5179 		release_firmware(fw);
5180 		return -EINVAL;
5181 	}
5182 
5183 	hdsp->firmware = fw;
5184 
5185 	hdsp->state |= HDSP_FirmwareCached;
5186 
5187 	err = snd_hdsp_load_firmware_from_cache(hdsp);
5188 	if (err < 0)
5189 		return err;
5190 
5191 	if (!(hdsp->state & HDSP_InitializationComplete)) {
5192 		err = snd_hdsp_enable_io(hdsp);
5193 		if (err < 0)
5194 			return err;
5195 
5196 		err = snd_hdsp_create_hwdep(hdsp->card, hdsp);
5197 		if (err < 0) {
5198 			dev_err(hdsp->card->dev,
5199 				"error creating hwdep device\n");
5200 			return err;
5201 		}
5202 		snd_hdsp_initialize_channels(hdsp);
5203 		snd_hdsp_initialize_midi_flush(hdsp);
5204 		err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
5205 		if (err < 0) {
5206 			dev_err(hdsp->card->dev,
5207 				"error creating alsa devices\n");
5208 			return err;
5209 		}
5210 	}
5211 	return 0;
5212 }
5213 
snd_hdsp_create(struct snd_card * card,struct hdsp * hdsp)5214 static int snd_hdsp_create(struct snd_card *card,
5215 			   struct hdsp *hdsp)
5216 {
5217 	struct pci_dev *pci = hdsp->pci;
5218 	int err;
5219 	int is_9652 = 0;
5220 	int is_9632 = 0;
5221 
5222 	hdsp->irq = -1;
5223 	hdsp->state = 0;
5224 	hdsp->midi[0].rmidi = NULL;
5225 	hdsp->midi[1].rmidi = NULL;
5226 	hdsp->midi[0].input = NULL;
5227 	hdsp->midi[1].input = NULL;
5228 	hdsp->midi[0].output = NULL;
5229 	hdsp->midi[1].output = NULL;
5230 	hdsp->midi[0].pending = 0;
5231 	hdsp->midi[1].pending = 0;
5232 	spin_lock_init(&hdsp->midi[0].lock);
5233 	spin_lock_init(&hdsp->midi[1].lock);
5234 	hdsp->iobase = NULL;
5235 	hdsp->control_register = 0;
5236 	hdsp->control2_register = 0;
5237 	hdsp->io_type = Undefined;
5238 	hdsp->max_channels = 26;
5239 
5240 	hdsp->card = card;
5241 
5242 	spin_lock_init(&hdsp->lock);
5243 
5244 	INIT_WORK(&hdsp->midi_work, hdsp_midi_work);
5245 
5246 	pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
5247 	hdsp->firmware_rev &= 0xff;
5248 
5249 	/* From Martin Bjoernsen :
5250 	    "It is important that the card's latency timer register in
5251 	    the PCI configuration space is set to a value much larger
5252 	    than 0 by the computer's BIOS or the driver.
5253 	    The windows driver always sets this 8 bit register [...]
5254 	    to its maximum 255 to avoid problems with some computers."
5255 	*/
5256 	pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
5257 
5258 	strcpy(card->driver, "H-DSP");
5259 	strcpy(card->mixername, "Xilinx FPGA");
5260 
5261 	if (hdsp->firmware_rev < 0xa)
5262 		return -ENODEV;
5263 	else if (hdsp->firmware_rev < 0x64)
5264 		hdsp->card_name = "RME Hammerfall DSP";
5265 	else if (hdsp->firmware_rev < 0x96) {
5266 		hdsp->card_name = "RME HDSP 9652";
5267 		is_9652 = 1;
5268 	} else {
5269 		hdsp->card_name = "RME HDSP 9632";
5270 		hdsp->max_channels = 16;
5271 		is_9632 = 1;
5272 	}
5273 
5274 	err = pcim_enable_device(pci);
5275 	if (err < 0)
5276 		return err;
5277 
5278 	pci_set_master(hdsp->pci);
5279 
5280 	err = pci_request_regions(pci, "hdsp");
5281 	if (err < 0)
5282 		return err;
5283 	hdsp->port = pci_resource_start(pci, 0);
5284 	hdsp->iobase = devm_ioremap(&pci->dev, hdsp->port, HDSP_IO_EXTENT);
5285 	if (!hdsp->iobase) {
5286 		dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n",
5287 			hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
5288 		return -EBUSY;
5289 	}
5290 
5291 	if (devm_request_irq(&pci->dev, pci->irq, snd_hdsp_interrupt,
5292 			     IRQF_SHARED, KBUILD_MODNAME, hdsp)) {
5293 		dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq);
5294 		return -EBUSY;
5295 	}
5296 
5297 	hdsp->irq = pci->irq;
5298 	card->sync_irq = hdsp->irq;
5299 	hdsp->precise_ptr = 0;
5300 	hdsp->use_midi_work = 1;
5301 	hdsp->dds_value = 0;
5302 
5303 	err = snd_hdsp_initialize_memory(hdsp);
5304 	if (err < 0)
5305 		return err;
5306 
5307 	if (!is_9652 && !is_9632) {
5308 		/* we wait a maximum of 10 seconds to let freshly
5309 		 * inserted cardbus cards do their hardware init */
5310 		err = hdsp_wait_for_iobox(hdsp, 1000, 10);
5311 
5312 		if (err < 0)
5313 			return err;
5314 
5315 		if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
5316 			err = hdsp_request_fw_loader(hdsp);
5317 			if (err < 0)
5318 				/* we don't fail as this can happen
5319 				   if userspace is not ready for
5320 				   firmware upload
5321 				*/
5322 				dev_err(hdsp->card->dev,
5323 					"couldn't get firmware from userspace. try using hdsploader\n");
5324 			else
5325 				/* init is complete, we return */
5326 				return 0;
5327 			/* we defer initialization */
5328 			dev_info(hdsp->card->dev,
5329 				 "card initialization pending : waiting for firmware\n");
5330 			err = snd_hdsp_create_hwdep(card, hdsp);
5331 			if (err < 0)
5332 				return err;
5333 			return 0;
5334 		} else {
5335 			dev_info(hdsp->card->dev,
5336 				 "Firmware already present, initializing card.\n");
5337 			if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
5338 				hdsp->io_type = RPM;
5339 			else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
5340 				hdsp->io_type = Multiface;
5341 			else
5342 				hdsp->io_type = Digiface;
5343 		}
5344 	}
5345 
5346 	err = snd_hdsp_enable_io(hdsp);
5347 	if (err)
5348 		return err;
5349 
5350 	if (is_9652)
5351 	        hdsp->io_type = H9652;
5352 
5353 	if (is_9632)
5354 		hdsp->io_type = H9632;
5355 
5356 	err = snd_hdsp_create_hwdep(card, hdsp);
5357 	if (err < 0)
5358 		return err;
5359 
5360 	snd_hdsp_initialize_channels(hdsp);
5361 	snd_hdsp_initialize_midi_flush(hdsp);
5362 
5363 	hdsp->state |= HDSP_FirmwareLoaded;
5364 
5365 	err = snd_hdsp_create_alsa_devices(card, hdsp);
5366 	if (err < 0)
5367 		return err;
5368 
5369 	return 0;
5370 }
5371 
snd_hdsp_card_free(struct snd_card * card)5372 static void snd_hdsp_card_free(struct snd_card *card)
5373 {
5374 	struct hdsp *hdsp = card->private_data;
5375 
5376 	if (hdsp->port) {
5377 		/* stop the audio, and cancel all interrupts */
5378 		cancel_work_sync(&hdsp->midi_work);
5379 		hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable);
5380 		hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register);
5381 	}
5382 
5383 	release_firmware(hdsp->firmware);
5384 	vfree(hdsp->fw_uploaded);
5385 }
5386 
snd_hdsp_probe(struct pci_dev * pci,const struct pci_device_id * pci_id)5387 static int snd_hdsp_probe(struct pci_dev *pci,
5388 			  const struct pci_device_id *pci_id)
5389 {
5390 	static int dev;
5391 	struct hdsp *hdsp;
5392 	struct snd_card *card;
5393 	int err;
5394 
5395 	if (dev >= SNDRV_CARDS)
5396 		return -ENODEV;
5397 	if (!enable[dev]) {
5398 		dev++;
5399 		return -ENOENT;
5400 	}
5401 
5402 	err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
5403 				sizeof(struct hdsp), &card);
5404 	if (err < 0)
5405 		return err;
5406 
5407 	hdsp = card->private_data;
5408 	card->private_free = snd_hdsp_card_free;
5409 	hdsp->dev = dev;
5410 	hdsp->pci = pci;
5411 	err = snd_hdsp_create(card, hdsp);
5412 	if (err)
5413 		goto error;
5414 
5415 	strcpy(card->shortname, "Hammerfall DSP");
5416 	sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
5417 		hdsp->port, hdsp->irq);
5418 	err = snd_card_register(card);
5419 	if (err)
5420 		goto error;
5421 	pci_set_drvdata(pci, card);
5422 	dev++;
5423 	return 0;
5424 
5425  error:
5426 	snd_card_free(card);
5427 	return err;
5428 }
5429 
5430 static struct pci_driver hdsp_driver = {
5431 	.name =     KBUILD_MODNAME,
5432 	.id_table = snd_hdsp_ids,
5433 	.probe =    snd_hdsp_probe,
5434 };
5435 
5436 module_pci_driver(hdsp_driver);
5437