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