Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/pci/rme9652/rme9652.c
29266 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* ALSA driver for RME Digi9652 audio interfaces
4
*
5
* Copyright (c) 1999 IEM - Winfried Ritsch
6
* Copyright (c) 1999-2001 Paul Davis
7
*/
8
9
#include <linux/delay.h>
10
#include <linux/init.h>
11
#include <linux/interrupt.h>
12
#include <linux/pci.h>
13
#include <linux/module.h>
14
#include <linux/io.h>
15
#include <linux/nospec.h>
16
17
#include <sound/core.h>
18
#include <sound/control.h>
19
#include <sound/pcm.h>
20
#include <sound/info.h>
21
#include <sound/asoundef.h>
22
#include <sound/initval.h>
23
24
#include <asm/current.h>
25
26
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
27
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
28
static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
29
static bool precise_ptr[SNDRV_CARDS]; /* Enable precise pointer */
30
31
module_param_array(index, int, NULL, 0444);
32
MODULE_PARM_DESC(index, "Index value for RME Digi9652 (Hammerfall) soundcard.");
33
module_param_array(id, charp, NULL, 0444);
34
MODULE_PARM_DESC(id, "ID string for RME Digi9652 (Hammerfall) soundcard.");
35
module_param_array(enable, bool, NULL, 0444);
36
MODULE_PARM_DESC(enable, "Enable/disable specific RME96{52,36} soundcards.");
37
module_param_array(precise_ptr, bool, NULL, 0444);
38
MODULE_PARM_DESC(precise_ptr, "Enable precise pointer (doesn't work reliably).");
39
MODULE_AUTHOR("Paul Davis <[email protected]>, Winfried Ritsch");
40
MODULE_DESCRIPTION("RME Digi9652/Digi9636");
41
MODULE_LICENSE("GPL");
42
43
/* The Hammerfall has two sets of 24 ADAT + 2 S/PDIF channels, one for
44
capture, one for playback. Both the ADAT and S/PDIF channels appear
45
to the host CPU in the same block of memory. There is no functional
46
difference between them in terms of access.
47
48
The Hammerfall Light is identical to the Hammerfall, except that it
49
has 2 sets 18 channels (16 ADAT + 2 S/PDIF) for capture and playback.
50
*/
51
52
#define RME9652_NCHANNELS 26
53
#define RME9636_NCHANNELS 18
54
55
/* Preferred sync source choices - used by "sync_pref" control switch */
56
57
#define RME9652_SYNC_FROM_SPDIF 0
58
#define RME9652_SYNC_FROM_ADAT1 1
59
#define RME9652_SYNC_FROM_ADAT2 2
60
#define RME9652_SYNC_FROM_ADAT3 3
61
62
/* Possible sources of S/PDIF input */
63
64
#define RME9652_SPDIFIN_OPTICAL 0 /* optical (ADAT1) */
65
#define RME9652_SPDIFIN_COAXIAL 1 /* coaxial (RCA) */
66
#define RME9652_SPDIFIN_INTERN 2 /* internal (CDROM) */
67
68
/* ------------- Status-Register bits --------------------- */
69
70
#define RME9652_IRQ (1<<0) /* IRQ is High if not reset by irq_clear */
71
#define RME9652_lock_2 (1<<1) /* ADAT 3-PLL: 1=locked, 0=unlocked */
72
#define RME9652_lock_1 (1<<2) /* ADAT 2-PLL: 1=locked, 0=unlocked */
73
#define RME9652_lock_0 (1<<3) /* ADAT 1-PLL: 1=locked, 0=unlocked */
74
#define RME9652_fs48 (1<<4) /* sample rate is 0=44.1/88.2,1=48/96 Khz */
75
#define RME9652_wsel_rd (1<<5) /* if Word-Clock is used and valid then 1 */
76
/* bits 6-15 encode h/w buffer pointer position */
77
#define RME9652_sync_2 (1<<16) /* if ADAT-IN 3 in sync to system clock */
78
#define RME9652_sync_1 (1<<17) /* if ADAT-IN 2 in sync to system clock */
79
#define RME9652_sync_0 (1<<18) /* if ADAT-IN 1 in sync to system clock */
80
#define RME9652_DS_rd (1<<19) /* 1=Double Speed Mode, 0=Normal Speed */
81
#define RME9652_tc_busy (1<<20) /* 1=time-code copy in progress (960ms) */
82
#define RME9652_tc_out (1<<21) /* time-code out bit */
83
#define RME9652_F_0 (1<<22) /* 000=64kHz, 100=88.2kHz, 011=96kHz */
84
#define RME9652_F_1 (1<<23) /* 111=32kHz, 110=44.1kHz, 101=48kHz, */
85
#define RME9652_F_2 (1<<24) /* external Crystal Chip if ERF=1 */
86
#define RME9652_ERF (1<<25) /* Error-Flag of SDPIF Receiver (1=No Lock) */
87
#define RME9652_buffer_id (1<<26) /* toggles by each interrupt on rec/play */
88
#define RME9652_tc_valid (1<<27) /* 1 = a signal is detected on time-code input */
89
#define RME9652_SPDIF_READ (1<<28) /* byte available from Rev 1.5+ S/PDIF interface */
90
91
#define RME9652_sync (RME9652_sync_0|RME9652_sync_1|RME9652_sync_2)
92
#define RME9652_lock (RME9652_lock_0|RME9652_lock_1|RME9652_lock_2)
93
#define RME9652_F (RME9652_F_0|RME9652_F_1|RME9652_F_2)
94
#define rme9652_decode_spdif_rate(x) ((x)>>22)
95
96
/* Bit 6..15 : h/w buffer pointer */
97
98
#define RME9652_buf_pos 0x000FFC0
99
100
/* Bits 31,30,29 are bits 5,4,3 of h/w pointer position on later
101
Rev G EEPROMS and Rev 1.5 cards or later.
102
*/
103
104
#define RME9652_REV15_buf_pos(x) ((((x)&0xE0000000)>>26)|((x)&RME9652_buf_pos))
105
106
/* amount of io space we remap for register access. i'm not sure we
107
even need this much, but 1K is nice round number :)
108
*/
109
110
#define RME9652_IO_EXTENT 1024
111
112
#define RME9652_init_buffer 0
113
#define RME9652_play_buffer 32 /* holds ptr to 26x64kBit host RAM */
114
#define RME9652_rec_buffer 36 /* holds ptr to 26x64kBit host RAM */
115
#define RME9652_control_register 64
116
#define RME9652_irq_clear 96
117
#define RME9652_time_code 100 /* useful if used with alesis adat */
118
#define RME9652_thru_base 128 /* 132...228 Thru for 26 channels */
119
120
/* Read-only registers */
121
122
/* Writing to any of the register locations writes to the status
123
register. We'll use the first location as our point of access.
124
*/
125
126
#define RME9652_status_register 0
127
128
/* --------- Control-Register Bits ---------------- */
129
130
131
#define RME9652_start_bit (1<<0) /* start record/play */
132
/* bits 1-3 encode buffersize/latency */
133
#define RME9652_Master (1<<4) /* Clock Mode Master=1,Slave/Auto=0 */
134
#define RME9652_IE (1<<5) /* Interrupt Enable */
135
#define RME9652_freq (1<<6) /* samplerate 0=44.1/88.2, 1=48/96 kHz */
136
#define RME9652_freq1 (1<<7) /* if 0, 32kHz, else always 1 */
137
#define RME9652_DS (1<<8) /* Doule Speed 0=44.1/48, 1=88.2/96 Khz */
138
#define RME9652_PRO (1<<9) /* S/PDIF out: 0=consumer, 1=professional */
139
#define RME9652_EMP (1<<10) /* Emphasis 0=None, 1=ON */
140
#define RME9652_Dolby (1<<11) /* Non-audio bit 1=set, 0=unset */
141
#define RME9652_opt_out (1<<12) /* Use 1st optical OUT as SPDIF: 1=yes,0=no */
142
#define RME9652_wsel (1<<13) /* use Wordclock as sync (overwrites master) */
143
#define RME9652_inp_0 (1<<14) /* SPDIF-IN: 00=optical (ADAT1), */
144
#define RME9652_inp_1 (1<<15) /* 01=koaxial (Cinch), 10=Internal CDROM */
145
#define RME9652_SyncPref_ADAT2 (1<<16)
146
#define RME9652_SyncPref_ADAT3 (1<<17)
147
#define RME9652_SPDIF_RESET (1<<18) /* Rev 1.5+: h/w S/PDIF receiver */
148
#define RME9652_SPDIF_SELECT (1<<19)
149
#define RME9652_SPDIF_CLOCK (1<<20)
150
#define RME9652_SPDIF_WRITE (1<<21)
151
#define RME9652_ADAT1_INTERNAL (1<<22) /* Rev 1.5+: if set, internal CD connector carries ADAT */
152
153
/* buffersize = 512Bytes * 2^n, where n is made from Bit2 ... Bit0 */
154
155
#define RME9652_latency 0x0e
156
#define rme9652_encode_latency(x) (((x)&0x7)<<1)
157
#define rme9652_decode_latency(x) (((x)>>1)&0x7)
158
#define rme9652_running_double_speed(s) ((s)->control_register & RME9652_DS)
159
#define RME9652_inp (RME9652_inp_0|RME9652_inp_1)
160
#define rme9652_encode_spdif_in(x) (((x)&0x3)<<14)
161
#define rme9652_decode_spdif_in(x) (((x)>>14)&0x3)
162
163
#define RME9652_SyncPref_Mask (RME9652_SyncPref_ADAT2|RME9652_SyncPref_ADAT3)
164
#define RME9652_SyncPref_ADAT1 0
165
#define RME9652_SyncPref_SPDIF (RME9652_SyncPref_ADAT2|RME9652_SyncPref_ADAT3)
166
167
/* the size of a substream (1 mono data stream) */
168
169
#define RME9652_CHANNEL_BUFFER_SAMPLES (16*1024)
170
#define RME9652_CHANNEL_BUFFER_BYTES (4*RME9652_CHANNEL_BUFFER_SAMPLES)
171
172
/* the size of the area we need to allocate for DMA transfers. the
173
size is the same regardless of the number of channels - the
174
9636 still uses the same memory area.
175
176
Note that we allocate 1 more channel than is apparently needed
177
because the h/w seems to write 1 byte beyond the end of the last
178
page. Sigh.
179
*/
180
181
#define RME9652_DMA_AREA_BYTES ((RME9652_NCHANNELS+1) * RME9652_CHANNEL_BUFFER_BYTES)
182
#define RME9652_DMA_AREA_KILOBYTES (RME9652_DMA_AREA_BYTES/1024)
183
184
struct snd_rme9652 {
185
int dev;
186
187
spinlock_t lock;
188
int irq;
189
unsigned long port;
190
void __iomem *iobase;
191
192
int precise_ptr;
193
194
u32 control_register; /* cached value */
195
u32 thru_bits; /* thru 1=on, 0=off channel 1=Bit1... channel 26= Bit26 */
196
197
u32 creg_spdif;
198
u32 creg_spdif_stream;
199
200
char *card_name; /* hammerfall or hammerfall light names */
201
202
size_t hw_offsetmask; /* &-with status register to get real hw_offset */
203
size_t prev_hw_offset; /* previous hw offset */
204
size_t max_jitter; /* maximum jitter in frames for
205
hw pointer */
206
size_t period_bytes; /* guess what this is */
207
208
unsigned char ds_channels;
209
unsigned char ss_channels; /* different for hammerfall/hammerfall-light */
210
211
/* DMA buffers; those are copied instances from the original snd_dma_buf
212
* objects (which are managed via devres) for the address alignments
213
*/
214
struct snd_dma_buffer playback_dma_buf;
215
struct snd_dma_buffer capture_dma_buf;
216
217
unsigned char *capture_buffer; /* suitably aligned address */
218
unsigned char *playback_buffer; /* suitably aligned address */
219
220
pid_t capture_pid;
221
pid_t playback_pid;
222
223
struct snd_pcm_substream *capture_substream;
224
struct snd_pcm_substream *playback_substream;
225
int running;
226
227
int passthru; /* non-zero if doing pass-thru */
228
int hw_rev; /* h/w rev * 10 (i.e. 1.5 has hw_rev = 15) */
229
230
int last_spdif_sample_rate; /* so that we can catch externally ... */
231
int last_adat_sample_rate; /* ... induced rate changes */
232
233
const signed char *channel_map;
234
235
struct snd_card *card;
236
struct snd_pcm *pcm;
237
struct pci_dev *pci;
238
struct snd_kcontrol *spdif_ctl;
239
240
};
241
242
/* These tables map the ALSA channels 1..N to the channels that we
243
need to use in order to find the relevant channel buffer. RME
244
refer to this kind of mapping as between "the ADAT channel and
245
the DMA channel." We index it using the logical audio channel,
246
and the value is the DMA channel (i.e. channel buffer number)
247
where the data for that channel can be read/written from/to.
248
*/
249
250
static const signed char channel_map_9652_ss[26] = {
251
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
252
18, 19, 20, 21, 22, 23, 24, 25
253
};
254
255
static const signed char channel_map_9636_ss[26] = {
256
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
257
/* channels 16 and 17 are S/PDIF */
258
24, 25,
259
/* channels 18-25 don't exist */
260
-1, -1, -1, -1, -1, -1, -1, -1
261
};
262
263
static const signed char channel_map_9652_ds[26] = {
264
/* ADAT channels are remapped */
265
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23,
266
/* channels 12 and 13 are S/PDIF */
267
24, 25,
268
/* others don't exist */
269
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
270
};
271
272
static const signed char channel_map_9636_ds[26] = {
273
/* ADAT channels are remapped */
274
1, 3, 5, 7, 9, 11, 13, 15,
275
/* channels 8 and 9 are S/PDIF */
276
24, 25,
277
/* others don't exist */
278
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
279
};
280
281
static struct snd_dma_buffer *
282
snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size)
283
{
284
return snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, size);
285
}
286
287
static const struct pci_device_id snd_rme9652_ids[] = {
288
{
289
.vendor = 0x10ee,
290
.device = 0x3fc4,
291
.subvendor = PCI_ANY_ID,
292
.subdevice = PCI_ANY_ID,
293
}, /* RME Digi9652 */
294
{ 0, },
295
};
296
297
MODULE_DEVICE_TABLE(pci, snd_rme9652_ids);
298
299
static inline void rme9652_write(struct snd_rme9652 *rme9652, int reg, int val)
300
{
301
writel(val, rme9652->iobase + reg);
302
}
303
304
static inline unsigned int rme9652_read(struct snd_rme9652 *rme9652, int reg)
305
{
306
return readl(rme9652->iobase + reg);
307
}
308
309
static inline int snd_rme9652_use_is_exclusive(struct snd_rme9652 *rme9652)
310
{
311
guard(spinlock_irqsave)(&rme9652->lock);
312
if ((rme9652->playback_pid != rme9652->capture_pid) &&
313
(rme9652->playback_pid >= 0) && (rme9652->capture_pid >= 0))
314
return 0;
315
return 1;
316
}
317
318
static inline int rme9652_adat_sample_rate(struct snd_rme9652 *rme9652)
319
{
320
if (rme9652_running_double_speed(rme9652)) {
321
return (rme9652_read(rme9652, RME9652_status_register) &
322
RME9652_fs48) ? 96000 : 88200;
323
} else {
324
return (rme9652_read(rme9652, RME9652_status_register) &
325
RME9652_fs48) ? 48000 : 44100;
326
}
327
}
328
329
static inline void rme9652_compute_period_size(struct snd_rme9652 *rme9652)
330
{
331
unsigned int i;
332
333
i = rme9652->control_register & RME9652_latency;
334
rme9652->period_bytes = 1 << ((rme9652_decode_latency(i) + 8));
335
rme9652->hw_offsetmask =
336
(rme9652->period_bytes * 2 - 1) & RME9652_buf_pos;
337
rme9652->max_jitter = 80;
338
}
339
340
static snd_pcm_uframes_t rme9652_hw_pointer(struct snd_rme9652 *rme9652)
341
{
342
int status;
343
unsigned int offset, frag;
344
snd_pcm_uframes_t period_size = rme9652->period_bytes / 4;
345
snd_pcm_sframes_t delta;
346
347
status = rme9652_read(rme9652, RME9652_status_register);
348
if (!rme9652->precise_ptr)
349
return (status & RME9652_buffer_id) ? period_size : 0;
350
offset = status & RME9652_buf_pos;
351
352
/* The hardware may give a backward movement for up to 80 frames
353
Martin Kirst <[email protected]> knows the details.
354
*/
355
356
delta = rme9652->prev_hw_offset - offset;
357
delta &= 0xffff;
358
if (delta <= (snd_pcm_sframes_t)rme9652->max_jitter * 4)
359
offset = rme9652->prev_hw_offset;
360
else
361
rme9652->prev_hw_offset = offset;
362
offset &= rme9652->hw_offsetmask;
363
offset /= 4;
364
frag = status & RME9652_buffer_id;
365
366
if (offset < period_size) {
367
if (offset > rme9652->max_jitter) {
368
if (frag)
369
dev_err(rme9652->card->dev,
370
"Unexpected hw_pointer position (bufid == 0): status: %x offset: %d\n",
371
status, offset);
372
} else if (!frag)
373
return 0;
374
offset -= rme9652->max_jitter;
375
if ((int)offset < 0)
376
offset += period_size * 2;
377
} else {
378
if (offset > period_size + rme9652->max_jitter) {
379
if (!frag)
380
dev_err(rme9652->card->dev,
381
"Unexpected hw_pointer position (bufid == 1): status: %x offset: %d\n",
382
status, offset);
383
} else if (frag)
384
return period_size;
385
offset -= rme9652->max_jitter;
386
}
387
388
return offset;
389
}
390
391
static inline void rme9652_reset_hw_pointer(struct snd_rme9652 *rme9652)
392
{
393
int i;
394
395
/* reset the FIFO pointer to zero. We do this by writing to 8
396
registers, each of which is a 32bit wide register, and set
397
them all to zero. Note that s->iobase is a pointer to
398
int32, not pointer to char.
399
*/
400
401
for (i = 0; i < 8; i++) {
402
rme9652_write(rme9652, i * 4, 0);
403
udelay(10);
404
}
405
rme9652->prev_hw_offset = 0;
406
}
407
408
static inline void rme9652_start(struct snd_rme9652 *s)
409
{
410
s->control_register |= (RME9652_IE | RME9652_start_bit);
411
rme9652_write(s, RME9652_control_register, s->control_register);
412
}
413
414
static inline void rme9652_stop(struct snd_rme9652 *s)
415
{
416
s->control_register &= ~(RME9652_start_bit | RME9652_IE);
417
rme9652_write(s, RME9652_control_register, s->control_register);
418
}
419
420
static int rme9652_set_interrupt_interval(struct snd_rme9652 *s,
421
unsigned int frames)
422
{
423
int restart = 0;
424
int n;
425
426
guard(spinlock_irq)(&s->lock);
427
428
restart = s->running;
429
if (restart)
430
rme9652_stop(s);
431
432
frames >>= 7;
433
n = 0;
434
while (frames) {
435
n++;
436
frames >>= 1;
437
}
438
439
s->control_register &= ~RME9652_latency;
440
s->control_register |= rme9652_encode_latency(n);
441
442
rme9652_write(s, RME9652_control_register, s->control_register);
443
444
rme9652_compute_period_size(s);
445
446
if (restart)
447
rme9652_start(s);
448
449
return 0;
450
}
451
452
static int rme9652_set_rate(struct snd_rme9652 *rme9652, int rate)
453
{
454
int restart;
455
int reject_if_open = 0;
456
int xrate;
457
458
if (!snd_rme9652_use_is_exclusive (rme9652)) {
459
return -EBUSY;
460
}
461
462
/* Changing from a "single speed" to a "double speed" rate is
463
not allowed if any substreams are open. This is because
464
such a change causes a shift in the location of
465
the DMA buffers and a reduction in the number of available
466
buffers.
467
468
Note that a similar but essentially insoluble problem
469
exists for externally-driven rate changes. All we can do
470
is to flag rate changes in the read/write routines.
471
*/
472
473
guard(spinlock_irq)(&rme9652->lock);
474
xrate = rme9652_adat_sample_rate(rme9652);
475
476
switch (rate) {
477
case 44100:
478
if (xrate > 48000) {
479
reject_if_open = 1;
480
}
481
rate = 0;
482
break;
483
case 48000:
484
if (xrate > 48000) {
485
reject_if_open = 1;
486
}
487
rate = RME9652_freq;
488
break;
489
case 88200:
490
if (xrate < 48000) {
491
reject_if_open = 1;
492
}
493
rate = RME9652_DS;
494
break;
495
case 96000:
496
if (xrate < 48000) {
497
reject_if_open = 1;
498
}
499
rate = RME9652_DS | RME9652_freq;
500
break;
501
default:
502
return -EINVAL;
503
}
504
505
if (reject_if_open && (rme9652->capture_pid >= 0 || rme9652->playback_pid >= 0))
506
return -EBUSY;
507
508
restart = rme9652->running;
509
if (restart)
510
rme9652_stop(rme9652);
511
rme9652->control_register &= ~(RME9652_freq | RME9652_DS);
512
rme9652->control_register |= rate;
513
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
514
515
if (restart)
516
rme9652_start(rme9652);
517
518
if (rate & RME9652_DS) {
519
if (rme9652->ss_channels == RME9652_NCHANNELS) {
520
rme9652->channel_map = channel_map_9652_ds;
521
} else {
522
rme9652->channel_map = channel_map_9636_ds;
523
}
524
} else {
525
if (rme9652->ss_channels == RME9652_NCHANNELS) {
526
rme9652->channel_map = channel_map_9652_ss;
527
} else {
528
rme9652->channel_map = channel_map_9636_ss;
529
}
530
}
531
532
return 0;
533
}
534
535
static void rme9652_set_thru(struct snd_rme9652 *rme9652, int channel, int enable)
536
{
537
int i;
538
539
rme9652->passthru = 0;
540
541
if (channel < 0) {
542
543
/* set thru for all channels */
544
545
if (enable) {
546
for (i = 0; i < RME9652_NCHANNELS; i++) {
547
rme9652->thru_bits |= (1 << i);
548
rme9652_write(rme9652, RME9652_thru_base + i * 4, 1);
549
}
550
} else {
551
for (i = 0; i < RME9652_NCHANNELS; i++) {
552
rme9652->thru_bits &= ~(1 << i);
553
rme9652_write(rme9652, RME9652_thru_base + i * 4, 0);
554
}
555
}
556
557
} else {
558
int mapped_channel;
559
560
mapped_channel = rme9652->channel_map[channel];
561
562
if (enable) {
563
rme9652->thru_bits |= (1 << mapped_channel);
564
} else {
565
rme9652->thru_bits &= ~(1 << mapped_channel);
566
}
567
568
rme9652_write(rme9652,
569
RME9652_thru_base + mapped_channel * 4,
570
enable ? 1 : 0);
571
}
572
}
573
574
static int rme9652_set_passthru(struct snd_rme9652 *rme9652, int onoff)
575
{
576
if (onoff) {
577
rme9652_set_thru(rme9652, -1, 1);
578
579
/* we don't want interrupts, so do a
580
custom version of rme9652_start().
581
*/
582
583
rme9652->control_register =
584
RME9652_inp_0 |
585
rme9652_encode_latency(7) |
586
RME9652_start_bit;
587
588
rme9652_reset_hw_pointer(rme9652);
589
590
rme9652_write(rme9652, RME9652_control_register,
591
rme9652->control_register);
592
rme9652->passthru = 1;
593
} else {
594
rme9652_set_thru(rme9652, -1, 0);
595
rme9652_stop(rme9652);
596
rme9652->passthru = 0;
597
}
598
599
return 0;
600
}
601
602
static void rme9652_spdif_set_bit (struct snd_rme9652 *rme9652, int mask, int onoff)
603
{
604
if (onoff)
605
rme9652->control_register |= mask;
606
else
607
rme9652->control_register &= ~mask;
608
609
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
610
}
611
612
static void rme9652_spdif_write_byte (struct snd_rme9652 *rme9652, const int val)
613
{
614
long mask;
615
long i;
616
617
for (i = 0, mask = 0x80; i < 8; i++, mask >>= 1) {
618
if (val & mask)
619
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_WRITE, 1);
620
else
621
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_WRITE, 0);
622
623
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_CLOCK, 1);
624
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_CLOCK, 0);
625
}
626
}
627
628
static int rme9652_spdif_read_byte (struct snd_rme9652 *rme9652)
629
{
630
long mask;
631
long val;
632
long i;
633
634
val = 0;
635
636
for (i = 0, mask = 0x80; i < 8; i++, mask >>= 1) {
637
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_CLOCK, 1);
638
if (rme9652_read (rme9652, RME9652_status_register) & RME9652_SPDIF_READ)
639
val |= mask;
640
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_CLOCK, 0);
641
}
642
643
return val;
644
}
645
646
static void rme9652_write_spdif_codec (struct snd_rme9652 *rme9652, const int address, const int data)
647
{
648
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 1);
649
rme9652_spdif_write_byte (rme9652, 0x20);
650
rme9652_spdif_write_byte (rme9652, address);
651
rme9652_spdif_write_byte (rme9652, data);
652
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 0);
653
}
654
655
656
static int rme9652_spdif_read_codec (struct snd_rme9652 *rme9652, const int address)
657
{
658
int ret;
659
660
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 1);
661
rme9652_spdif_write_byte (rme9652, 0x20);
662
rme9652_spdif_write_byte (rme9652, address);
663
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 0);
664
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 1);
665
666
rme9652_spdif_write_byte (rme9652, 0x21);
667
ret = rme9652_spdif_read_byte (rme9652);
668
rme9652_spdif_set_bit (rme9652, RME9652_SPDIF_SELECT, 0);
669
670
return ret;
671
}
672
673
static void rme9652_initialize_spdif_receiver (struct snd_rme9652 *rme9652)
674
{
675
/* XXX what unsets this ? */
676
677
rme9652->control_register |= RME9652_SPDIF_RESET;
678
679
rme9652_write_spdif_codec (rme9652, 4, 0x40);
680
rme9652_write_spdif_codec (rme9652, 17, 0x13);
681
rme9652_write_spdif_codec (rme9652, 6, 0x02);
682
}
683
684
static inline int rme9652_spdif_sample_rate(struct snd_rme9652 *s)
685
{
686
unsigned int rate_bits;
687
688
if (rme9652_read(s, RME9652_status_register) & RME9652_ERF) {
689
return -1; /* error condition */
690
}
691
692
if (s->hw_rev == 15) {
693
694
int x, y, ret;
695
696
x = rme9652_spdif_read_codec (s, 30);
697
698
if (x != 0)
699
y = 48000 * 64 / x;
700
else
701
y = 0;
702
703
if (y > 30400 && y < 33600) ret = 32000;
704
else if (y > 41900 && y < 46000) ret = 44100;
705
else if (y > 46000 && y < 50400) ret = 48000;
706
else if (y > 60800 && y < 67200) ret = 64000;
707
else if (y > 83700 && y < 92000) ret = 88200;
708
else if (y > 92000 && y < 100000) ret = 96000;
709
else ret = 0;
710
return ret;
711
}
712
713
rate_bits = rme9652_read(s, RME9652_status_register) & RME9652_F;
714
715
switch (rme9652_decode_spdif_rate(rate_bits)) {
716
case 0x7:
717
return 32000;
718
719
case 0x6:
720
return 44100;
721
722
case 0x5:
723
return 48000;
724
725
case 0x4:
726
return 88200;
727
728
case 0x3:
729
return 96000;
730
731
case 0x0:
732
return 64000;
733
734
default:
735
dev_err(s->card->dev,
736
"%s: unknown S/PDIF input rate (bits = 0x%x)\n",
737
s->card_name, rate_bits);
738
return 0;
739
}
740
}
741
742
/*-----------------------------------------------------------------------------
743
Control Interface
744
----------------------------------------------------------------------------*/
745
746
static u32 snd_rme9652_convert_from_aes(struct snd_aes_iec958 *aes)
747
{
748
u32 val = 0;
749
val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? RME9652_PRO : 0;
750
val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? RME9652_Dolby : 0;
751
if (val & RME9652_PRO)
752
val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? RME9652_EMP : 0;
753
else
754
val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? RME9652_EMP : 0;
755
return val;
756
}
757
758
static void snd_rme9652_convert_to_aes(struct snd_aes_iec958 *aes, u32 val)
759
{
760
aes->status[0] = ((val & RME9652_PRO) ? IEC958_AES0_PROFESSIONAL : 0) |
761
((val & RME9652_Dolby) ? IEC958_AES0_NONAUDIO : 0);
762
if (val & RME9652_PRO)
763
aes->status[0] |= (val & RME9652_EMP) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
764
else
765
aes->status[0] |= (val & RME9652_EMP) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
766
}
767
768
static int snd_rme9652_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
769
{
770
uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
771
uinfo->count = 1;
772
return 0;
773
}
774
775
static int snd_rme9652_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
776
{
777
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
778
779
snd_rme9652_convert_to_aes(&ucontrol->value.iec958, rme9652->creg_spdif);
780
return 0;
781
}
782
783
static int snd_rme9652_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
784
{
785
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
786
int change;
787
u32 val;
788
789
val = snd_rme9652_convert_from_aes(&ucontrol->value.iec958);
790
guard(spinlock_irq)(&rme9652->lock);
791
change = val != rme9652->creg_spdif;
792
rme9652->creg_spdif = val;
793
return change;
794
}
795
796
static int snd_rme9652_control_spdif_stream_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
797
{
798
uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
799
uinfo->count = 1;
800
return 0;
801
}
802
803
static int snd_rme9652_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
804
{
805
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
806
807
snd_rme9652_convert_to_aes(&ucontrol->value.iec958, rme9652->creg_spdif_stream);
808
return 0;
809
}
810
811
static int snd_rme9652_control_spdif_stream_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
812
{
813
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
814
int change;
815
u32 val;
816
817
val = snd_rme9652_convert_from_aes(&ucontrol->value.iec958);
818
guard(spinlock_irq)(&rme9652->lock);
819
change = val != rme9652->creg_spdif_stream;
820
rme9652->creg_spdif_stream = val;
821
rme9652->control_register &= ~(RME9652_PRO | RME9652_Dolby | RME9652_EMP);
822
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register |= val);
823
return change;
824
}
825
826
static int snd_rme9652_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
827
{
828
uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
829
uinfo->count = 1;
830
return 0;
831
}
832
833
static int snd_rme9652_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
834
{
835
ucontrol->value.iec958.status[0] = kcontrol->private_value;
836
return 0;
837
}
838
839
#define RME9652_ADAT1_IN(xname, xindex) \
840
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
841
.info = snd_rme9652_info_adat1_in, \
842
.get = snd_rme9652_get_adat1_in, \
843
.put = snd_rme9652_put_adat1_in }
844
845
static unsigned int rme9652_adat1_in(struct snd_rme9652 *rme9652)
846
{
847
if (rme9652->control_register & RME9652_ADAT1_INTERNAL)
848
return 1;
849
return 0;
850
}
851
852
static int rme9652_set_adat1_input(struct snd_rme9652 *rme9652, int internal)
853
{
854
int restart = 0;
855
856
if (internal) {
857
rme9652->control_register |= RME9652_ADAT1_INTERNAL;
858
} else {
859
rme9652->control_register &= ~RME9652_ADAT1_INTERNAL;
860
}
861
862
/* XXX do we actually need to stop the card when we do this ? */
863
864
restart = rme9652->running;
865
if (restart)
866
rme9652_stop(rme9652);
867
868
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
869
870
if (restart)
871
rme9652_start(rme9652);
872
873
return 0;
874
}
875
876
static int snd_rme9652_info_adat1_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
877
{
878
static const char * const texts[2] = {"ADAT1", "Internal"};
879
880
return snd_ctl_enum_info(uinfo, 1, 2, texts);
881
}
882
883
static int snd_rme9652_get_adat1_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
884
{
885
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
886
887
guard(spinlock_irq)(&rme9652->lock);
888
ucontrol->value.enumerated.item[0] = rme9652_adat1_in(rme9652);
889
return 0;
890
}
891
892
static int snd_rme9652_put_adat1_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
893
{
894
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
895
int change;
896
unsigned int val;
897
898
if (!snd_rme9652_use_is_exclusive(rme9652))
899
return -EBUSY;
900
val = ucontrol->value.enumerated.item[0] % 2;
901
guard(spinlock_irq)(&rme9652->lock);
902
change = val != rme9652_adat1_in(rme9652);
903
if (change)
904
rme9652_set_adat1_input(rme9652, val);
905
return change;
906
}
907
908
#define RME9652_SPDIF_IN(xname, xindex) \
909
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
910
.info = snd_rme9652_info_spdif_in, \
911
.get = snd_rme9652_get_spdif_in, .put = snd_rme9652_put_spdif_in }
912
913
static unsigned int rme9652_spdif_in(struct snd_rme9652 *rme9652)
914
{
915
return rme9652_decode_spdif_in(rme9652->control_register &
916
RME9652_inp);
917
}
918
919
static int rme9652_set_spdif_input(struct snd_rme9652 *rme9652, int in)
920
{
921
int restart = 0;
922
923
rme9652->control_register &= ~RME9652_inp;
924
rme9652->control_register |= rme9652_encode_spdif_in(in);
925
926
restart = rme9652->running;
927
if (restart)
928
rme9652_stop(rme9652);
929
930
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
931
932
if (restart)
933
rme9652_start(rme9652);
934
935
return 0;
936
}
937
938
static int snd_rme9652_info_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
939
{
940
static const char * const texts[3] = {"ADAT1", "Coaxial", "Internal"};
941
942
return snd_ctl_enum_info(uinfo, 1, 3, texts);
943
}
944
945
static int snd_rme9652_get_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
946
{
947
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
948
949
guard(spinlock_irq)(&rme9652->lock);
950
ucontrol->value.enumerated.item[0] = rme9652_spdif_in(rme9652);
951
return 0;
952
}
953
954
static int snd_rme9652_put_spdif_in(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
955
{
956
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
957
int change;
958
unsigned int val;
959
960
if (!snd_rme9652_use_is_exclusive(rme9652))
961
return -EBUSY;
962
val = ucontrol->value.enumerated.item[0] % 3;
963
guard(spinlock_irq)(&rme9652->lock);
964
change = val != rme9652_spdif_in(rme9652);
965
if (change)
966
rme9652_set_spdif_input(rme9652, val);
967
return change;
968
}
969
970
#define RME9652_SPDIF_OUT(xname, xindex) \
971
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
972
.info = snd_rme9652_info_spdif_out, \
973
.get = snd_rme9652_get_spdif_out, .put = snd_rme9652_put_spdif_out }
974
975
static int rme9652_spdif_out(struct snd_rme9652 *rme9652)
976
{
977
return (rme9652->control_register & RME9652_opt_out) ? 1 : 0;
978
}
979
980
static int rme9652_set_spdif_output(struct snd_rme9652 *rme9652, int out)
981
{
982
int restart = 0;
983
984
if (out) {
985
rme9652->control_register |= RME9652_opt_out;
986
} else {
987
rme9652->control_register &= ~RME9652_opt_out;
988
}
989
990
restart = rme9652->running;
991
if (restart)
992
rme9652_stop(rme9652);
993
994
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
995
996
if (restart)
997
rme9652_start(rme9652);
998
999
return 0;
1000
}
1001
1002
#define snd_rme9652_info_spdif_out snd_ctl_boolean_mono_info
1003
1004
static int snd_rme9652_get_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1005
{
1006
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1007
1008
guard(spinlock_irq)(&rme9652->lock);
1009
ucontrol->value.integer.value[0] = rme9652_spdif_out(rme9652);
1010
return 0;
1011
}
1012
1013
static int snd_rme9652_put_spdif_out(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1014
{
1015
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1016
int change;
1017
unsigned int val;
1018
1019
if (!snd_rme9652_use_is_exclusive(rme9652))
1020
return -EBUSY;
1021
val = ucontrol->value.integer.value[0] & 1;
1022
guard(spinlock_irq)(&rme9652->lock);
1023
change = (int)val != rme9652_spdif_out(rme9652);
1024
rme9652_set_spdif_output(rme9652, val);
1025
return change;
1026
}
1027
1028
#define RME9652_SYNC_MODE(xname, xindex) \
1029
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1030
.info = snd_rme9652_info_sync_mode, \
1031
.get = snd_rme9652_get_sync_mode, .put = snd_rme9652_put_sync_mode }
1032
1033
static int rme9652_sync_mode(struct snd_rme9652 *rme9652)
1034
{
1035
if (rme9652->control_register & RME9652_wsel) {
1036
return 2;
1037
} else if (rme9652->control_register & RME9652_Master) {
1038
return 1;
1039
} else {
1040
return 0;
1041
}
1042
}
1043
1044
static int rme9652_set_sync_mode(struct snd_rme9652 *rme9652, int mode)
1045
{
1046
int restart = 0;
1047
1048
switch (mode) {
1049
case 0:
1050
rme9652->control_register &=
1051
~(RME9652_Master | RME9652_wsel);
1052
break;
1053
case 1:
1054
rme9652->control_register =
1055
(rme9652->control_register & ~RME9652_wsel) | RME9652_Master;
1056
break;
1057
case 2:
1058
rme9652->control_register |=
1059
(RME9652_Master | RME9652_wsel);
1060
break;
1061
}
1062
1063
restart = rme9652->running;
1064
if (restart)
1065
rme9652_stop(rme9652);
1066
1067
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
1068
1069
if (restart)
1070
rme9652_start(rme9652);
1071
1072
return 0;
1073
}
1074
1075
static int snd_rme9652_info_sync_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1076
{
1077
static const char * const texts[3] = {
1078
"AutoSync", "Master", "Word Clock"
1079
};
1080
1081
return snd_ctl_enum_info(uinfo, 1, 3, texts);
1082
}
1083
1084
static int snd_rme9652_get_sync_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1085
{
1086
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1087
1088
guard(spinlock_irq)(&rme9652->lock);
1089
ucontrol->value.enumerated.item[0] = rme9652_sync_mode(rme9652);
1090
return 0;
1091
}
1092
1093
static int snd_rme9652_put_sync_mode(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1094
{
1095
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1096
int change;
1097
unsigned int val;
1098
1099
val = ucontrol->value.enumerated.item[0] % 3;
1100
guard(spinlock_irq)(&rme9652->lock);
1101
change = (int)val != rme9652_sync_mode(rme9652);
1102
rme9652_set_sync_mode(rme9652, val);
1103
return change;
1104
}
1105
1106
#define RME9652_SYNC_PREF(xname, xindex) \
1107
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1108
.info = snd_rme9652_info_sync_pref, \
1109
.get = snd_rme9652_get_sync_pref, .put = snd_rme9652_put_sync_pref }
1110
1111
static int rme9652_sync_pref(struct snd_rme9652 *rme9652)
1112
{
1113
switch (rme9652->control_register & RME9652_SyncPref_Mask) {
1114
case RME9652_SyncPref_ADAT1:
1115
return RME9652_SYNC_FROM_ADAT1;
1116
case RME9652_SyncPref_ADAT2:
1117
return RME9652_SYNC_FROM_ADAT2;
1118
case RME9652_SyncPref_ADAT3:
1119
return RME9652_SYNC_FROM_ADAT3;
1120
case RME9652_SyncPref_SPDIF:
1121
return RME9652_SYNC_FROM_SPDIF;
1122
}
1123
/* Not reachable */
1124
return 0;
1125
}
1126
1127
static int rme9652_set_sync_pref(struct snd_rme9652 *rme9652, int pref)
1128
{
1129
int restart;
1130
1131
rme9652->control_register &= ~RME9652_SyncPref_Mask;
1132
switch (pref) {
1133
case RME9652_SYNC_FROM_ADAT1:
1134
rme9652->control_register |= RME9652_SyncPref_ADAT1;
1135
break;
1136
case RME9652_SYNC_FROM_ADAT2:
1137
rme9652->control_register |= RME9652_SyncPref_ADAT2;
1138
break;
1139
case RME9652_SYNC_FROM_ADAT3:
1140
rme9652->control_register |= RME9652_SyncPref_ADAT3;
1141
break;
1142
case RME9652_SYNC_FROM_SPDIF:
1143
rme9652->control_register |= RME9652_SyncPref_SPDIF;
1144
break;
1145
}
1146
1147
restart = rme9652->running;
1148
if (restart)
1149
rme9652_stop(rme9652);
1150
1151
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
1152
1153
if (restart)
1154
rme9652_start(rme9652);
1155
1156
return 0;
1157
}
1158
1159
static int snd_rme9652_info_sync_pref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1160
{
1161
static const char * const texts[4] = {
1162
"IEC958 In", "ADAT1 In", "ADAT2 In", "ADAT3 In"
1163
};
1164
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1165
1166
return snd_ctl_enum_info(uinfo, 1,
1167
rme9652->ss_channels == RME9652_NCHANNELS ? 4 : 3,
1168
texts);
1169
}
1170
1171
static int snd_rme9652_get_sync_pref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1172
{
1173
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1174
1175
guard(spinlock_irq)(&rme9652->lock);
1176
ucontrol->value.enumerated.item[0] = rme9652_sync_pref(rme9652);
1177
return 0;
1178
}
1179
1180
static int snd_rme9652_put_sync_pref(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1181
{
1182
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1183
int change, max;
1184
unsigned int val;
1185
1186
if (!snd_rme9652_use_is_exclusive(rme9652))
1187
return -EBUSY;
1188
max = rme9652->ss_channels == RME9652_NCHANNELS ? 4 : 3;
1189
val = ucontrol->value.enumerated.item[0] % max;
1190
guard(spinlock_irq)(&rme9652->lock);
1191
change = (int)val != rme9652_sync_pref(rme9652);
1192
rme9652_set_sync_pref(rme9652, val);
1193
return change;
1194
}
1195
1196
static int snd_rme9652_info_thru(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1197
{
1198
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1199
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1200
uinfo->count = rme9652->ss_channels;
1201
uinfo->value.integer.min = 0;
1202
uinfo->value.integer.max = 1;
1203
return 0;
1204
}
1205
1206
static int snd_rme9652_get_thru(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1207
{
1208
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1209
unsigned int k;
1210
u32 thru_bits = rme9652->thru_bits;
1211
1212
for (k = 0; k < rme9652->ss_channels; ++k) {
1213
ucontrol->value.integer.value[k] = !!(thru_bits & (1 << k));
1214
}
1215
return 0;
1216
}
1217
1218
static int snd_rme9652_put_thru(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1219
{
1220
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1221
int change;
1222
unsigned int chn;
1223
u32 thru_bits = 0;
1224
1225
if (!snd_rme9652_use_is_exclusive(rme9652))
1226
return -EBUSY;
1227
1228
for (chn = 0; chn < rme9652->ss_channels; ++chn) {
1229
if (ucontrol->value.integer.value[chn])
1230
thru_bits |= 1 << chn;
1231
}
1232
1233
guard(spinlock_irq)(&rme9652->lock);
1234
change = thru_bits ^ rme9652->thru_bits;
1235
if (change) {
1236
for (chn = 0; chn < rme9652->ss_channels; ++chn) {
1237
if (!(change & (1 << chn)))
1238
continue;
1239
rme9652_set_thru(rme9652,chn,thru_bits&(1<<chn));
1240
}
1241
}
1242
return !!change;
1243
}
1244
1245
#define RME9652_PASSTHRU(xname, xindex) \
1246
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1247
.info = snd_rme9652_info_passthru, \
1248
.put = snd_rme9652_put_passthru, \
1249
.get = snd_rme9652_get_passthru }
1250
1251
#define snd_rme9652_info_passthru snd_ctl_boolean_mono_info
1252
1253
static int snd_rme9652_get_passthru(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1254
{
1255
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1256
1257
guard(spinlock_irq)(&rme9652->lock);
1258
ucontrol->value.integer.value[0] = rme9652->passthru;
1259
return 0;
1260
}
1261
1262
static int snd_rme9652_put_passthru(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1263
{
1264
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1265
int change;
1266
unsigned int val;
1267
int err = 0;
1268
1269
if (!snd_rme9652_use_is_exclusive(rme9652))
1270
return -EBUSY;
1271
1272
val = ucontrol->value.integer.value[0] & 1;
1273
guard(spinlock_irq)(&rme9652->lock);
1274
change = (ucontrol->value.integer.value[0] != rme9652->passthru);
1275
if (change)
1276
err = rme9652_set_passthru(rme9652, val);
1277
return err ? err : change;
1278
}
1279
1280
/* Read-only switches */
1281
1282
#define RME9652_SPDIF_RATE(xname, xindex) \
1283
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1284
.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
1285
.info = snd_rme9652_info_spdif_rate, \
1286
.get = snd_rme9652_get_spdif_rate }
1287
1288
static int snd_rme9652_info_spdif_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1289
{
1290
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1291
uinfo->count = 1;
1292
uinfo->value.integer.min = 0;
1293
uinfo->value.integer.max = 96000;
1294
return 0;
1295
}
1296
1297
static int snd_rme9652_get_spdif_rate(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1298
{
1299
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1300
1301
guard(spinlock_irq)(&rme9652->lock);
1302
ucontrol->value.integer.value[0] = rme9652_spdif_sample_rate(rme9652);
1303
return 0;
1304
}
1305
1306
#define RME9652_ADAT_SYNC(xname, xindex, xidx) \
1307
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1308
.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
1309
.info = snd_rme9652_info_adat_sync, \
1310
.get = snd_rme9652_get_adat_sync, .private_value = xidx }
1311
1312
static int snd_rme9652_info_adat_sync(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1313
{
1314
static const char * const texts[4] = {
1315
"No Lock", "Lock", "No Lock Sync", "Lock Sync"
1316
};
1317
1318
return snd_ctl_enum_info(uinfo, 1, 4, texts);
1319
}
1320
1321
static int snd_rme9652_get_adat_sync(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1322
{
1323
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1324
unsigned int mask1, mask2, val;
1325
1326
switch (kcontrol->private_value) {
1327
case 0: mask1 = RME9652_lock_0; mask2 = RME9652_sync_0; break;
1328
case 1: mask1 = RME9652_lock_1; mask2 = RME9652_sync_1; break;
1329
case 2: mask1 = RME9652_lock_2; mask2 = RME9652_sync_2; break;
1330
default: return -EINVAL;
1331
}
1332
val = rme9652_read(rme9652, RME9652_status_register);
1333
ucontrol->value.enumerated.item[0] = (val & mask1) ? 1 : 0;
1334
ucontrol->value.enumerated.item[0] |= (val & mask2) ? 2 : 0;
1335
return 0;
1336
}
1337
1338
#define RME9652_TC_VALID(xname, xindex) \
1339
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
1340
.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
1341
.info = snd_rme9652_info_tc_valid, \
1342
.get = snd_rme9652_get_tc_valid }
1343
1344
#define snd_rme9652_info_tc_valid snd_ctl_boolean_mono_info
1345
1346
static int snd_rme9652_get_tc_valid(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1347
{
1348
struct snd_rme9652 *rme9652 = snd_kcontrol_chip(kcontrol);
1349
1350
ucontrol->value.integer.value[0] =
1351
(rme9652_read(rme9652, RME9652_status_register) & RME9652_tc_valid) ? 1 : 0;
1352
return 0;
1353
}
1354
1355
#ifdef ALSA_HAS_STANDARD_WAY_OF_RETURNING_TIMECODE
1356
1357
/* FIXME: this routine needs a port to the new control API --jk */
1358
1359
static int snd_rme9652_get_tc_value(void *private_data,
1360
snd_kswitch_t *kswitch,
1361
snd_switch_t *uswitch)
1362
{
1363
struct snd_rme9652 *s = (struct snd_rme9652 *) private_data;
1364
u32 value;
1365
int i;
1366
1367
uswitch->type = SNDRV_SW_TYPE_DWORD;
1368
1369
if ((rme9652_read(s, RME9652_status_register) &
1370
RME9652_tc_valid) == 0) {
1371
uswitch->value.data32[0] = 0;
1372
return 0;
1373
}
1374
1375
/* timecode request */
1376
1377
rme9652_write(s, RME9652_time_code, 0);
1378
1379
/* XXX bug alert: loop-based timing !!!! */
1380
1381
for (i = 0; i < 50; i++) {
1382
if (!(rme9652_read(s, i * 4) & RME9652_tc_busy))
1383
break;
1384
}
1385
1386
if (!(rme9652_read(s, i * 4) & RME9652_tc_busy)) {
1387
return -EIO;
1388
}
1389
1390
value = 0;
1391
1392
for (i = 0; i < 32; i++) {
1393
value >>= 1;
1394
1395
if (rme9652_read(s, i * 4) & RME9652_tc_out)
1396
value |= 0x80000000;
1397
}
1398
1399
if (value > 2 * 60 * 48000) {
1400
value -= 2 * 60 * 48000;
1401
} else {
1402
value = 0;
1403
}
1404
1405
uswitch->value.data32[0] = value;
1406
1407
return 0;
1408
}
1409
1410
#endif /* ALSA_HAS_STANDARD_WAY_OF_RETURNING_TIMECODE */
1411
1412
static const struct snd_kcontrol_new snd_rme9652_controls[] = {
1413
{
1414
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1415
.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
1416
.info = snd_rme9652_control_spdif_info,
1417
.get = snd_rme9652_control_spdif_get,
1418
.put = snd_rme9652_control_spdif_put,
1419
},
1420
{
1421
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1422
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1423
.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM),
1424
.info = snd_rme9652_control_spdif_stream_info,
1425
.get = snd_rme9652_control_spdif_stream_get,
1426
.put = snd_rme9652_control_spdif_stream_put,
1427
},
1428
{
1429
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1430
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1431
.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
1432
.info = snd_rme9652_control_spdif_mask_info,
1433
.get = snd_rme9652_control_spdif_mask_get,
1434
.private_value = IEC958_AES0_NONAUDIO |
1435
IEC958_AES0_PROFESSIONAL |
1436
IEC958_AES0_CON_EMPHASIS,
1437
},
1438
{
1439
.access = SNDRV_CTL_ELEM_ACCESS_READ,
1440
.iface = SNDRV_CTL_ELEM_IFACE_PCM,
1441
.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
1442
.info = snd_rme9652_control_spdif_mask_info,
1443
.get = snd_rme9652_control_spdif_mask_get,
1444
.private_value = IEC958_AES0_NONAUDIO |
1445
IEC958_AES0_PROFESSIONAL |
1446
IEC958_AES0_PRO_EMPHASIS,
1447
},
1448
RME9652_SPDIF_IN("IEC958 Input Connector", 0),
1449
RME9652_SPDIF_OUT("IEC958 Output also on ADAT1", 0),
1450
RME9652_SYNC_MODE("Sync Mode", 0),
1451
RME9652_SYNC_PREF("Preferred Sync Source", 0),
1452
{
1453
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1454
.name = "Channels Thru",
1455
.index = 0,
1456
.info = snd_rme9652_info_thru,
1457
.get = snd_rme9652_get_thru,
1458
.put = snd_rme9652_put_thru,
1459
},
1460
RME9652_SPDIF_RATE("IEC958 Sample Rate", 0),
1461
RME9652_ADAT_SYNC("ADAT1 Sync Check", 0, 0),
1462
RME9652_ADAT_SYNC("ADAT2 Sync Check", 0, 1),
1463
RME9652_TC_VALID("Timecode Valid", 0),
1464
RME9652_PASSTHRU("Passthru", 0)
1465
};
1466
1467
static const struct snd_kcontrol_new snd_rme9652_adat3_check =
1468
RME9652_ADAT_SYNC("ADAT3 Sync Check", 0, 2);
1469
1470
static const struct snd_kcontrol_new snd_rme9652_adat1_input =
1471
RME9652_ADAT1_IN("ADAT1 Input Source", 0);
1472
1473
static int snd_rme9652_create_controls(struct snd_card *card, struct snd_rme9652 *rme9652)
1474
{
1475
unsigned int idx;
1476
int err;
1477
struct snd_kcontrol *kctl;
1478
1479
for (idx = 0; idx < ARRAY_SIZE(snd_rme9652_controls); idx++) {
1480
kctl = snd_ctl_new1(&snd_rme9652_controls[idx], rme9652);
1481
err = snd_ctl_add(card, kctl);
1482
if (err < 0)
1483
return err;
1484
if (idx == 1) /* IEC958 (S/PDIF) Stream */
1485
rme9652->spdif_ctl = kctl;
1486
}
1487
1488
if (rme9652->ss_channels == RME9652_NCHANNELS) {
1489
kctl = snd_ctl_new1(&snd_rme9652_adat3_check, rme9652);
1490
err = snd_ctl_add(card, kctl);
1491
if (err < 0)
1492
return err;
1493
}
1494
1495
if (rme9652->hw_rev >= 15) {
1496
kctl = snd_ctl_new1(&snd_rme9652_adat1_input, rme9652);
1497
err = snd_ctl_add(card, kctl);
1498
if (err < 0)
1499
return err;
1500
}
1501
1502
return 0;
1503
}
1504
1505
/*------------------------------------------------------------
1506
/proc interface
1507
------------------------------------------------------------*/
1508
1509
static void
1510
snd_rme9652_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
1511
{
1512
struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) entry->private_data;
1513
u32 thru_bits = rme9652->thru_bits;
1514
int show_auto_sync_source = 0;
1515
int i;
1516
unsigned int status;
1517
int x;
1518
1519
status = rme9652_read(rme9652, RME9652_status_register);
1520
1521
snd_iprintf(buffer, "%s (Card #%d)\n", rme9652->card_name, rme9652->card->number + 1);
1522
snd_iprintf(buffer, "Buffers: capture %p playback %p\n",
1523
rme9652->capture_buffer, rme9652->playback_buffer);
1524
snd_iprintf(buffer, "IRQ: %d Registers bus: 0x%lx VM: 0x%lx\n",
1525
rme9652->irq, rme9652->port, (unsigned long)rme9652->iobase);
1526
snd_iprintf(buffer, "Control register: %x\n", rme9652->control_register);
1527
1528
snd_iprintf(buffer, "\n");
1529
1530
x = 1 << (6 + rme9652_decode_latency(rme9652->control_register &
1531
RME9652_latency));
1532
1533
snd_iprintf(buffer, "Latency: %d samples (2 periods of %lu bytes)\n",
1534
x, (unsigned long) rme9652->period_bytes);
1535
snd_iprintf(buffer, "Hardware pointer (frames): %ld\n",
1536
rme9652_hw_pointer(rme9652));
1537
snd_iprintf(buffer, "Passthru: %s\n", str_yes_no(rme9652->passthru));
1538
1539
if ((rme9652->control_register & (RME9652_Master | RME9652_wsel)) == 0) {
1540
snd_iprintf(buffer, "Clock mode: autosync\n");
1541
show_auto_sync_source = 1;
1542
} else if (rme9652->control_register & RME9652_wsel) {
1543
if (status & RME9652_wsel_rd) {
1544
snd_iprintf(buffer, "Clock mode: word clock\n");
1545
} else {
1546
snd_iprintf(buffer, "Clock mode: word clock (no signal)\n");
1547
}
1548
} else {
1549
snd_iprintf(buffer, "Clock mode: master\n");
1550
}
1551
1552
if (show_auto_sync_source) {
1553
switch (rme9652->control_register & RME9652_SyncPref_Mask) {
1554
case RME9652_SyncPref_ADAT1:
1555
snd_iprintf(buffer, "Pref. sync source: ADAT1\n");
1556
break;
1557
case RME9652_SyncPref_ADAT2:
1558
snd_iprintf(buffer, "Pref. sync source: ADAT2\n");
1559
break;
1560
case RME9652_SyncPref_ADAT3:
1561
snd_iprintf(buffer, "Pref. sync source: ADAT3\n");
1562
break;
1563
case RME9652_SyncPref_SPDIF:
1564
snd_iprintf(buffer, "Pref. sync source: IEC958\n");
1565
break;
1566
default:
1567
snd_iprintf(buffer, "Pref. sync source: ???\n");
1568
}
1569
}
1570
1571
if (rme9652->hw_rev >= 15)
1572
snd_iprintf(buffer, "\nADAT1 Input source: %s\n",
1573
(rme9652->control_register & RME9652_ADAT1_INTERNAL) ?
1574
"Internal" : "ADAT1 optical");
1575
1576
snd_iprintf(buffer, "\n");
1577
1578
switch (rme9652_decode_spdif_in(rme9652->control_register &
1579
RME9652_inp)) {
1580
case RME9652_SPDIFIN_OPTICAL:
1581
snd_iprintf(buffer, "IEC958 input: ADAT1\n");
1582
break;
1583
case RME9652_SPDIFIN_COAXIAL:
1584
snd_iprintf(buffer, "IEC958 input: Coaxial\n");
1585
break;
1586
case RME9652_SPDIFIN_INTERN:
1587
snd_iprintf(buffer, "IEC958 input: Internal\n");
1588
break;
1589
default:
1590
snd_iprintf(buffer, "IEC958 input: ???\n");
1591
break;
1592
}
1593
1594
if (rme9652->control_register & RME9652_opt_out) {
1595
snd_iprintf(buffer, "IEC958 output: Coaxial & ADAT1\n");
1596
} else {
1597
snd_iprintf(buffer, "IEC958 output: Coaxial only\n");
1598
}
1599
1600
if (rme9652->control_register & RME9652_PRO) {
1601
snd_iprintf(buffer, "IEC958 quality: Professional\n");
1602
} else {
1603
snd_iprintf(buffer, "IEC958 quality: Consumer\n");
1604
}
1605
1606
if (rme9652->control_register & RME9652_EMP) {
1607
snd_iprintf(buffer, "IEC958 emphasis: on\n");
1608
} else {
1609
snd_iprintf(buffer, "IEC958 emphasis: off\n");
1610
}
1611
1612
if (rme9652->control_register & RME9652_Dolby) {
1613
snd_iprintf(buffer, "IEC958 Dolby: on\n");
1614
} else {
1615
snd_iprintf(buffer, "IEC958 Dolby: off\n");
1616
}
1617
1618
i = rme9652_spdif_sample_rate(rme9652);
1619
1620
if (i < 0) {
1621
snd_iprintf(buffer,
1622
"IEC958 sample rate: error flag set\n");
1623
} else if (i == 0) {
1624
snd_iprintf(buffer, "IEC958 sample rate: undetermined\n");
1625
} else {
1626
snd_iprintf(buffer, "IEC958 sample rate: %d\n", i);
1627
}
1628
1629
snd_iprintf(buffer, "\n");
1630
1631
snd_iprintf(buffer, "ADAT Sample rate: %dHz\n",
1632
rme9652_adat_sample_rate(rme9652));
1633
1634
/* Sync Check */
1635
1636
x = status & RME9652_sync_0;
1637
if (status & RME9652_lock_0) {
1638
snd_iprintf(buffer, "ADAT1: %s\n", x ? "Sync" : "Lock");
1639
} else {
1640
snd_iprintf(buffer, "ADAT1: No Lock\n");
1641
}
1642
1643
x = status & RME9652_sync_1;
1644
if (status & RME9652_lock_1) {
1645
snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock");
1646
} else {
1647
snd_iprintf(buffer, "ADAT2: No Lock\n");
1648
}
1649
1650
x = status & RME9652_sync_2;
1651
if (status & RME9652_lock_2) {
1652
snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock");
1653
} else {
1654
snd_iprintf(buffer, "ADAT3: No Lock\n");
1655
}
1656
1657
snd_iprintf(buffer, "\n");
1658
1659
snd_iprintf(buffer, "Timecode signal: %s\n",
1660
str_yes_no(status & RME9652_tc_valid));
1661
1662
/* thru modes */
1663
1664
snd_iprintf(buffer, "Punch Status:\n\n");
1665
1666
for (i = 0; i < rme9652->ss_channels; i++) {
1667
if (thru_bits & (1 << i)) {
1668
snd_iprintf(buffer, "%2d: on ", i + 1);
1669
} else {
1670
snd_iprintf(buffer, "%2d: off ", i + 1);
1671
}
1672
1673
if (((i + 1) % 8) == 0) {
1674
snd_iprintf(buffer, "\n");
1675
}
1676
}
1677
1678
snd_iprintf(buffer, "\n");
1679
}
1680
1681
static void snd_rme9652_proc_init(struct snd_rme9652 *rme9652)
1682
{
1683
snd_card_ro_proc_new(rme9652->card, "rme9652", rme9652,
1684
snd_rme9652_proc_read);
1685
}
1686
1687
static void snd_rme9652_card_free(struct snd_card *card)
1688
{
1689
struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) card->private_data;
1690
1691
if (rme9652->irq >= 0)
1692
rme9652_stop(rme9652);
1693
}
1694
1695
static int snd_rme9652_initialize_memory(struct snd_rme9652 *rme9652)
1696
{
1697
struct snd_dma_buffer *capture_dma, *playback_dma;
1698
1699
capture_dma = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES);
1700
playback_dma = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES);
1701
if (!capture_dma || !playback_dma) {
1702
dev_err(rme9652->card->dev,
1703
"%s: no buffers available\n", rme9652->card_name);
1704
return -ENOMEM;
1705
}
1706
1707
/* copy to the own data for alignment */
1708
rme9652->capture_dma_buf = *capture_dma;
1709
rme9652->playback_dma_buf = *playback_dma;
1710
1711
/* Align to bus-space 64K boundary */
1712
rme9652->capture_dma_buf.addr = ALIGN(capture_dma->addr, 0x10000ul);
1713
rme9652->playback_dma_buf.addr = ALIGN(playback_dma->addr, 0x10000ul);
1714
1715
/* Tell the card where it is */
1716
rme9652_write(rme9652, RME9652_rec_buffer, rme9652->capture_dma_buf.addr);
1717
rme9652_write(rme9652, RME9652_play_buffer, rme9652->playback_dma_buf.addr);
1718
1719
rme9652->capture_dma_buf.area += rme9652->capture_dma_buf.addr - capture_dma->addr;
1720
rme9652->playback_dma_buf.area += rme9652->playback_dma_buf.addr - playback_dma->addr;
1721
rme9652->capture_buffer = rme9652->capture_dma_buf.area;
1722
rme9652->playback_buffer = rme9652->playback_dma_buf.area;
1723
1724
return 0;
1725
}
1726
1727
static void snd_rme9652_set_defaults(struct snd_rme9652 *rme9652)
1728
{
1729
unsigned int k;
1730
1731
/* ASSUMPTION: rme9652->lock is either held, or
1732
there is no need to hold it (e.g. during module
1733
initialization).
1734
*/
1735
1736
/* set defaults:
1737
1738
SPDIF Input via Coax
1739
autosync clock mode
1740
maximum latency (7 = 8192 samples, 64Kbyte buffer,
1741
which implies 2 4096 sample, 32Kbyte periods).
1742
1743
if rev 1.5, initialize the S/PDIF receiver.
1744
1745
*/
1746
1747
rme9652->control_register =
1748
RME9652_inp_0 | rme9652_encode_latency(7);
1749
1750
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register);
1751
1752
rme9652_reset_hw_pointer(rme9652);
1753
rme9652_compute_period_size(rme9652);
1754
1755
/* default: thru off for all channels */
1756
1757
for (k = 0; k < RME9652_NCHANNELS; ++k)
1758
rme9652_write(rme9652, RME9652_thru_base + k * 4, 0);
1759
1760
rme9652->thru_bits = 0;
1761
rme9652->passthru = 0;
1762
1763
/* set a default rate so that the channel map is set up */
1764
1765
rme9652_set_rate(rme9652, 48000);
1766
}
1767
1768
static irqreturn_t snd_rme9652_interrupt(int irq, void *dev_id)
1769
{
1770
struct snd_rme9652 *rme9652 = (struct snd_rme9652 *) dev_id;
1771
1772
if (!(rme9652_read(rme9652, RME9652_status_register) & RME9652_IRQ)) {
1773
return IRQ_NONE;
1774
}
1775
1776
rme9652_write(rme9652, RME9652_irq_clear, 0);
1777
1778
if (rme9652->capture_substream) {
1779
snd_pcm_period_elapsed(rme9652->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
1780
}
1781
1782
if (rme9652->playback_substream) {
1783
snd_pcm_period_elapsed(rme9652->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
1784
}
1785
return IRQ_HANDLED;
1786
}
1787
1788
static snd_pcm_uframes_t snd_rme9652_hw_pointer(struct snd_pcm_substream *substream)
1789
{
1790
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1791
return rme9652_hw_pointer(rme9652);
1792
}
1793
1794
static signed char *rme9652_channel_buffer_location(struct snd_rme9652 *rme9652,
1795
int stream,
1796
int channel)
1797
1798
{
1799
int mapped_channel;
1800
1801
if (snd_BUG_ON(channel < 0 || channel >= RME9652_NCHANNELS))
1802
return NULL;
1803
1804
mapped_channel = rme9652->channel_map[channel];
1805
if (mapped_channel < 0)
1806
return NULL;
1807
1808
if (stream == SNDRV_PCM_STREAM_CAPTURE) {
1809
return rme9652->capture_buffer +
1810
(mapped_channel * RME9652_CHANNEL_BUFFER_BYTES);
1811
} else {
1812
return rme9652->playback_buffer +
1813
(mapped_channel * RME9652_CHANNEL_BUFFER_BYTES);
1814
}
1815
}
1816
1817
static int snd_rme9652_playback_copy(struct snd_pcm_substream *substream,
1818
int channel, unsigned long pos,
1819
struct iov_iter *src, unsigned long count)
1820
{
1821
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1822
signed char *channel_buf;
1823
1824
if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES))
1825
return -EINVAL;
1826
1827
channel_buf = rme9652_channel_buffer_location (rme9652,
1828
substream->pstr->stream,
1829
channel);
1830
if (snd_BUG_ON(!channel_buf))
1831
return -EIO;
1832
if (copy_from_iter(channel_buf + pos, count, src) != count)
1833
return -EFAULT;
1834
return 0;
1835
}
1836
1837
static int snd_rme9652_capture_copy(struct snd_pcm_substream *substream,
1838
int channel, unsigned long pos,
1839
struct iov_iter *dst, unsigned long count)
1840
{
1841
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1842
signed char *channel_buf;
1843
1844
if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES))
1845
return -EINVAL;
1846
1847
channel_buf = rme9652_channel_buffer_location (rme9652,
1848
substream->pstr->stream,
1849
channel);
1850
if (snd_BUG_ON(!channel_buf))
1851
return -EIO;
1852
if (copy_to_iter(channel_buf + pos, count, dst) != count)
1853
return -EFAULT;
1854
return 0;
1855
}
1856
1857
static int snd_rme9652_hw_silence(struct snd_pcm_substream *substream,
1858
int channel, unsigned long pos,
1859
unsigned long count)
1860
{
1861
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1862
signed char *channel_buf;
1863
1864
channel_buf = rme9652_channel_buffer_location (rme9652,
1865
substream->pstr->stream,
1866
channel);
1867
if (snd_BUG_ON(!channel_buf))
1868
return -EIO;
1869
memset(channel_buf + pos, 0, count);
1870
return 0;
1871
}
1872
1873
static int snd_rme9652_reset(struct snd_pcm_substream *substream)
1874
{
1875
struct snd_pcm_runtime *runtime = substream->runtime;
1876
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1877
struct snd_pcm_substream *other;
1878
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1879
other = rme9652->capture_substream;
1880
else
1881
other = rme9652->playback_substream;
1882
if (rme9652->running)
1883
runtime->status->hw_ptr = rme9652_hw_pointer(rme9652);
1884
else
1885
runtime->status->hw_ptr = 0;
1886
if (other) {
1887
struct snd_pcm_substream *s;
1888
struct snd_pcm_runtime *oruntime = other->runtime;
1889
snd_pcm_group_for_each_entry(s, substream) {
1890
if (s == other) {
1891
oruntime->status->hw_ptr = runtime->status->hw_ptr;
1892
break;
1893
}
1894
}
1895
}
1896
return 0;
1897
}
1898
1899
static int snd_rme9652_hw_params(struct snd_pcm_substream *substream,
1900
struct snd_pcm_hw_params *params)
1901
{
1902
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1903
int err;
1904
pid_t this_pid;
1905
pid_t other_pid;
1906
1907
scoped_guard(spinlock_irq, &rme9652->lock) {
1908
1909
if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1910
rme9652->control_register &= ~(RME9652_PRO | RME9652_Dolby | RME9652_EMP);
1911
rme9652_write(rme9652, RME9652_control_register, rme9652->control_register |= rme9652->creg_spdif_stream);
1912
this_pid = rme9652->playback_pid;
1913
other_pid = rme9652->capture_pid;
1914
} else {
1915
this_pid = rme9652->capture_pid;
1916
other_pid = rme9652->playback_pid;
1917
}
1918
1919
if ((other_pid > 0) && (this_pid != other_pid)) {
1920
1921
/* The other stream is open, and not by the same
1922
task as this one. Make sure that the parameters
1923
that matter are the same.
1924
*/
1925
1926
if ((int)params_rate(params) !=
1927
rme9652_adat_sample_rate(rme9652)) {
1928
_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
1929
return -EBUSY;
1930
}
1931
1932
if (params_period_size(params) != rme9652->period_bytes / 4) {
1933
_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
1934
return -EBUSY;
1935
}
1936
1937
/* We're fine. */
1938
return 0;
1939
}
1940
}
1941
1942
/* how to make sure that the rate matches an externally-set one ?
1943
*/
1944
1945
err = rme9652_set_rate(rme9652, params_rate(params));
1946
if (err < 0) {
1947
_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE);
1948
return err;
1949
}
1950
1951
err = rme9652_set_interrupt_interval(rme9652, params_period_size(params));
1952
if (err < 0) {
1953
_snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
1954
return err;
1955
}
1956
1957
return 0;
1958
}
1959
1960
static int snd_rme9652_channel_info(struct snd_pcm_substream *substream,
1961
struct snd_pcm_channel_info *info)
1962
{
1963
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
1964
int chn;
1965
1966
if (snd_BUG_ON(info->channel >= RME9652_NCHANNELS))
1967
return -EINVAL;
1968
1969
chn = rme9652->channel_map[array_index_nospec(info->channel,
1970
RME9652_NCHANNELS)];
1971
if (chn < 0)
1972
return -EINVAL;
1973
1974
info->offset = chn * RME9652_CHANNEL_BUFFER_BYTES;
1975
info->first = 0;
1976
info->step = 32;
1977
return 0;
1978
}
1979
1980
static int snd_rme9652_ioctl(struct snd_pcm_substream *substream,
1981
unsigned int cmd, void *arg)
1982
{
1983
switch (cmd) {
1984
case SNDRV_PCM_IOCTL1_RESET:
1985
{
1986
return snd_rme9652_reset(substream);
1987
}
1988
case SNDRV_PCM_IOCTL1_CHANNEL_INFO:
1989
{
1990
struct snd_pcm_channel_info *info = arg;
1991
return snd_rme9652_channel_info(substream, info);
1992
}
1993
default:
1994
break;
1995
}
1996
1997
return snd_pcm_lib_ioctl(substream, cmd, arg);
1998
}
1999
2000
static void rme9652_silence_playback(struct snd_rme9652 *rme9652)
2001
{
2002
memset(rme9652->playback_buffer, 0, RME9652_DMA_AREA_BYTES);
2003
}
2004
2005
static int snd_rme9652_trigger(struct snd_pcm_substream *substream,
2006
int cmd)
2007
{
2008
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2009
struct snd_pcm_substream *other;
2010
int running;
2011
2012
guard(spinlock)(&rme9652->lock);
2013
running = rme9652->running;
2014
switch (cmd) {
2015
case SNDRV_PCM_TRIGGER_START:
2016
running |= 1 << substream->stream;
2017
break;
2018
case SNDRV_PCM_TRIGGER_STOP:
2019
running &= ~(1 << substream->stream);
2020
break;
2021
default:
2022
snd_BUG();
2023
return -EINVAL;
2024
}
2025
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2026
other = rme9652->capture_substream;
2027
else
2028
other = rme9652->playback_substream;
2029
2030
if (other) {
2031
struct snd_pcm_substream *s;
2032
snd_pcm_group_for_each_entry(s, substream) {
2033
if (s == other) {
2034
snd_pcm_trigger_done(s, substream);
2035
if (cmd == SNDRV_PCM_TRIGGER_START)
2036
running |= 1 << s->stream;
2037
else
2038
running &= ~(1 << s->stream);
2039
goto _ok;
2040
}
2041
}
2042
if (cmd == SNDRV_PCM_TRIGGER_START) {
2043
if (!(running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) &&
2044
substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2045
rme9652_silence_playback(rme9652);
2046
} else {
2047
if (running &&
2048
substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2049
rme9652_silence_playback(rme9652);
2050
}
2051
} else {
2052
if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2053
rme9652_silence_playback(rme9652);
2054
}
2055
_ok:
2056
snd_pcm_trigger_done(substream, substream);
2057
if (!rme9652->running && running)
2058
rme9652_start(rme9652);
2059
else if (rme9652->running && !running)
2060
rme9652_stop(rme9652);
2061
rme9652->running = running;
2062
2063
return 0;
2064
}
2065
2066
static int snd_rme9652_prepare(struct snd_pcm_substream *substream)
2067
{
2068
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2069
2070
guard(spinlock_irqsave)(&rme9652->lock);
2071
if (!rme9652->running)
2072
rme9652_reset_hw_pointer(rme9652);
2073
return 0;
2074
}
2075
2076
static const struct snd_pcm_hardware snd_rme9652_playback_subinfo =
2077
{
2078
.info = (SNDRV_PCM_INFO_MMAP |
2079
SNDRV_PCM_INFO_MMAP_VALID |
2080
SNDRV_PCM_INFO_NONINTERLEAVED |
2081
SNDRV_PCM_INFO_SYNC_START |
2082
SNDRV_PCM_INFO_DOUBLE),
2083
.formats = SNDRV_PCM_FMTBIT_S32_LE,
2084
.rates = (SNDRV_PCM_RATE_44100 |
2085
SNDRV_PCM_RATE_48000 |
2086
SNDRV_PCM_RATE_88200 |
2087
SNDRV_PCM_RATE_96000),
2088
.rate_min = 44100,
2089
.rate_max = 96000,
2090
.channels_min = 10,
2091
.channels_max = 26,
2092
.buffer_bytes_max = RME9652_CHANNEL_BUFFER_BYTES * 26,
2093
.period_bytes_min = (64 * 4) * 10,
2094
.period_bytes_max = (8192 * 4) * 26,
2095
.periods_min = 2,
2096
.periods_max = 2,
2097
.fifo_size = 0,
2098
};
2099
2100
static const struct snd_pcm_hardware snd_rme9652_capture_subinfo =
2101
{
2102
.info = (SNDRV_PCM_INFO_MMAP |
2103
SNDRV_PCM_INFO_MMAP_VALID |
2104
SNDRV_PCM_INFO_NONINTERLEAVED |
2105
SNDRV_PCM_INFO_SYNC_START),
2106
.formats = SNDRV_PCM_FMTBIT_S32_LE,
2107
.rates = (SNDRV_PCM_RATE_44100 |
2108
SNDRV_PCM_RATE_48000 |
2109
SNDRV_PCM_RATE_88200 |
2110
SNDRV_PCM_RATE_96000),
2111
.rate_min = 44100,
2112
.rate_max = 96000,
2113
.channels_min = 10,
2114
.channels_max = 26,
2115
.buffer_bytes_max = RME9652_CHANNEL_BUFFER_BYTES *26,
2116
.period_bytes_min = (64 * 4) * 10,
2117
.period_bytes_max = (8192 * 4) * 26,
2118
.periods_min = 2,
2119
.periods_max = 2,
2120
.fifo_size = 0,
2121
};
2122
2123
static const unsigned int period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
2124
2125
static const struct snd_pcm_hw_constraint_list hw_constraints_period_sizes = {
2126
.count = ARRAY_SIZE(period_sizes),
2127
.list = period_sizes,
2128
.mask = 0
2129
};
2130
2131
static int snd_rme9652_hw_rule_channels(struct snd_pcm_hw_params *params,
2132
struct snd_pcm_hw_rule *rule)
2133
{
2134
struct snd_rme9652 *rme9652 = rule->private;
2135
struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
2136
unsigned int list[2] = { rme9652->ds_channels, rme9652->ss_channels };
2137
return snd_interval_list(c, 2, list, 0);
2138
}
2139
2140
static int snd_rme9652_hw_rule_channels_rate(struct snd_pcm_hw_params *params,
2141
struct snd_pcm_hw_rule *rule)
2142
{
2143
struct snd_rme9652 *rme9652 = rule->private;
2144
struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
2145
struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
2146
if (r->min > 48000) {
2147
struct snd_interval t = {
2148
.min = rme9652->ds_channels,
2149
.max = rme9652->ds_channels,
2150
.integer = 1,
2151
};
2152
return snd_interval_refine(c, &t);
2153
} else if (r->max < 88200) {
2154
struct snd_interval t = {
2155
.min = rme9652->ss_channels,
2156
.max = rme9652->ss_channels,
2157
.integer = 1,
2158
};
2159
return snd_interval_refine(c, &t);
2160
}
2161
return 0;
2162
}
2163
2164
static int snd_rme9652_hw_rule_rate_channels(struct snd_pcm_hw_params *params,
2165
struct snd_pcm_hw_rule *rule)
2166
{
2167
struct snd_rme9652 *rme9652 = rule->private;
2168
struct snd_interval *c = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
2169
struct snd_interval *r = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
2170
if (c->min >= rme9652->ss_channels) {
2171
struct snd_interval t = {
2172
.min = 44100,
2173
.max = 48000,
2174
.integer = 1,
2175
};
2176
return snd_interval_refine(r, &t);
2177
} else if (c->max <= rme9652->ds_channels) {
2178
struct snd_interval t = {
2179
.min = 88200,
2180
.max = 96000,
2181
.integer = 1,
2182
};
2183
return snd_interval_refine(r, &t);
2184
}
2185
return 0;
2186
}
2187
2188
static int snd_rme9652_playback_open(struct snd_pcm_substream *substream)
2189
{
2190
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2191
struct snd_pcm_runtime *runtime = substream->runtime;
2192
2193
scoped_guard(spinlock_irq, &rme9652->lock) {
2194
snd_pcm_set_sync(substream);
2195
2196
runtime->hw = snd_rme9652_playback_subinfo;
2197
snd_pcm_set_runtime_buffer(substream, &rme9652->playback_dma_buf);
2198
2199
if (rme9652->capture_substream == NULL) {
2200
rme9652_stop(rme9652);
2201
rme9652_set_thru(rme9652, -1, 0);
2202
}
2203
2204
rme9652->playback_pid = current->pid;
2205
rme9652->playback_substream = substream;
2206
}
2207
2208
snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
2209
snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_period_sizes);
2210
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
2211
snd_rme9652_hw_rule_channels, rme9652,
2212
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
2213
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
2214
snd_rme9652_hw_rule_channels_rate, rme9652,
2215
SNDRV_PCM_HW_PARAM_RATE, -1);
2216
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
2217
snd_rme9652_hw_rule_rate_channels, rme9652,
2218
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
2219
2220
rme9652->creg_spdif_stream = rme9652->creg_spdif;
2221
rme9652->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
2222
snd_ctl_notify(rme9652->card, SNDRV_CTL_EVENT_MASK_VALUE |
2223
SNDRV_CTL_EVENT_MASK_INFO, &rme9652->spdif_ctl->id);
2224
return 0;
2225
}
2226
2227
static int snd_rme9652_playback_release(struct snd_pcm_substream *substream)
2228
{
2229
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2230
2231
scoped_guard(spinlock_irq, &rme9652->lock) {
2232
rme9652->playback_pid = -1;
2233
rme9652->playback_substream = NULL;
2234
}
2235
2236
rme9652->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
2237
snd_ctl_notify(rme9652->card, SNDRV_CTL_EVENT_MASK_VALUE |
2238
SNDRV_CTL_EVENT_MASK_INFO, &rme9652->spdif_ctl->id);
2239
return 0;
2240
}
2241
2242
2243
static int snd_rme9652_capture_open(struct snd_pcm_substream *substream)
2244
{
2245
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2246
struct snd_pcm_runtime *runtime = substream->runtime;
2247
2248
scoped_guard(spinlock_irq, &rme9652->lock) {
2249
snd_pcm_set_sync(substream);
2250
2251
runtime->hw = snd_rme9652_capture_subinfo;
2252
snd_pcm_set_runtime_buffer(substream, &rme9652->capture_dma_buf);
2253
2254
if (rme9652->playback_substream == NULL) {
2255
rme9652_stop(rme9652);
2256
rme9652_set_thru(rme9652, -1, 0);
2257
}
2258
2259
rme9652->capture_pid = current->pid;
2260
rme9652->capture_substream = substream;
2261
}
2262
2263
snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
2264
snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_period_sizes);
2265
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
2266
snd_rme9652_hw_rule_channels, rme9652,
2267
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
2268
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
2269
snd_rme9652_hw_rule_channels_rate, rme9652,
2270
SNDRV_PCM_HW_PARAM_RATE, -1);
2271
snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
2272
snd_rme9652_hw_rule_rate_channels, rme9652,
2273
SNDRV_PCM_HW_PARAM_CHANNELS, -1);
2274
return 0;
2275
}
2276
2277
static int snd_rme9652_capture_release(struct snd_pcm_substream *substream)
2278
{
2279
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
2280
2281
guard(spinlock_irq)(&rme9652->lock);
2282
2283
rme9652->capture_pid = -1;
2284
rme9652->capture_substream = NULL;
2285
2286
return 0;
2287
}
2288
2289
static const struct snd_pcm_ops snd_rme9652_playback_ops = {
2290
.open = snd_rme9652_playback_open,
2291
.close = snd_rme9652_playback_release,
2292
.ioctl = snd_rme9652_ioctl,
2293
.hw_params = snd_rme9652_hw_params,
2294
.prepare = snd_rme9652_prepare,
2295
.trigger = snd_rme9652_trigger,
2296
.pointer = snd_rme9652_hw_pointer,
2297
.copy = snd_rme9652_playback_copy,
2298
.fill_silence = snd_rme9652_hw_silence,
2299
};
2300
2301
static const struct snd_pcm_ops snd_rme9652_capture_ops = {
2302
.open = snd_rme9652_capture_open,
2303
.close = snd_rme9652_capture_release,
2304
.ioctl = snd_rme9652_ioctl,
2305
.hw_params = snd_rme9652_hw_params,
2306
.prepare = snd_rme9652_prepare,
2307
.trigger = snd_rme9652_trigger,
2308
.pointer = snd_rme9652_hw_pointer,
2309
.copy = snd_rme9652_capture_copy,
2310
};
2311
2312
static int snd_rme9652_create_pcm(struct snd_card *card,
2313
struct snd_rme9652 *rme9652)
2314
{
2315
struct snd_pcm *pcm;
2316
int err;
2317
2318
err = snd_pcm_new(card, rme9652->card_name, 0, 1, 1, &pcm);
2319
if (err < 0)
2320
return err;
2321
2322
rme9652->pcm = pcm;
2323
pcm->private_data = rme9652;
2324
strscpy(pcm->name, rme9652->card_name);
2325
2326
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme9652_playback_ops);
2327
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme9652_capture_ops);
2328
2329
pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
2330
2331
return 0;
2332
}
2333
2334
static int snd_rme9652_create(struct snd_card *card,
2335
struct snd_rme9652 *rme9652,
2336
int precise_ptr)
2337
{
2338
struct pci_dev *pci = rme9652->pci;
2339
int err;
2340
int status;
2341
unsigned short rev;
2342
2343
rme9652->irq = -1;
2344
rme9652->card = card;
2345
2346
pci_read_config_word(rme9652->pci, PCI_CLASS_REVISION, &rev);
2347
2348
switch (rev & 0xff) {
2349
case 3:
2350
case 4:
2351
case 8:
2352
case 9:
2353
break;
2354
2355
default:
2356
/* who knows? */
2357
return -ENODEV;
2358
}
2359
2360
err = pcim_enable_device(pci);
2361
if (err < 0)
2362
return err;
2363
2364
spin_lock_init(&rme9652->lock);
2365
2366
err = pcim_request_all_regions(pci, "rme9652");
2367
if (err < 0)
2368
return err;
2369
rme9652->port = pci_resource_start(pci, 0);
2370
rme9652->iobase = devm_ioremap(&pci->dev, rme9652->port, RME9652_IO_EXTENT);
2371
if (rme9652->iobase == NULL) {
2372
dev_err(card->dev, "unable to remap region 0x%lx-0x%lx\n",
2373
rme9652->port, rme9652->port + RME9652_IO_EXTENT - 1);
2374
return -EBUSY;
2375
}
2376
2377
if (devm_request_irq(&pci->dev, pci->irq, snd_rme9652_interrupt,
2378
IRQF_SHARED, KBUILD_MODNAME, rme9652)) {
2379
dev_err(card->dev, "unable to request IRQ %d\n", pci->irq);
2380
return -EBUSY;
2381
}
2382
rme9652->irq = pci->irq;
2383
card->sync_irq = rme9652->irq;
2384
rme9652->precise_ptr = precise_ptr;
2385
2386
/* Determine the h/w rev level of the card. This seems like
2387
a particularly kludgy way to encode it, but its what RME
2388
chose to do, so we follow them ...
2389
*/
2390
2391
status = rme9652_read(rme9652, RME9652_status_register);
2392
if (rme9652_decode_spdif_rate(status&RME9652_F) == 1) {
2393
rme9652->hw_rev = 15;
2394
} else {
2395
rme9652->hw_rev = 11;
2396
}
2397
2398
/* Differentiate between the standard Hammerfall, and the
2399
"Light", which does not have the expansion board. This
2400
method comes from information received from Mathhias
2401
Clausen at RME. Display the EEPROM and h/w revID where
2402
relevant.
2403
*/
2404
2405
switch (rev) {
2406
case 8: /* original eprom */
2407
strscpy(card->driver, "RME9636");
2408
if (rme9652->hw_rev == 15) {
2409
rme9652->card_name = "RME Digi9636 (Rev 1.5)";
2410
} else {
2411
rme9652->card_name = "RME Digi9636";
2412
}
2413
rme9652->ss_channels = RME9636_NCHANNELS;
2414
break;
2415
case 9: /* W36_G EPROM */
2416
strscpy(card->driver, "RME9636");
2417
rme9652->card_name = "RME Digi9636 (Rev G)";
2418
rme9652->ss_channels = RME9636_NCHANNELS;
2419
break;
2420
case 4: /* W52_G EPROM */
2421
strscpy(card->driver, "RME9652");
2422
rme9652->card_name = "RME Digi9652 (Rev G)";
2423
rme9652->ss_channels = RME9652_NCHANNELS;
2424
break;
2425
case 3: /* original eprom */
2426
strscpy(card->driver, "RME9652");
2427
if (rme9652->hw_rev == 15) {
2428
rme9652->card_name = "RME Digi9652 (Rev 1.5)";
2429
} else {
2430
rme9652->card_name = "RME Digi9652";
2431
}
2432
rme9652->ss_channels = RME9652_NCHANNELS;
2433
break;
2434
}
2435
2436
rme9652->ds_channels = (rme9652->ss_channels - 2) / 2 + 2;
2437
2438
pci_set_master(rme9652->pci);
2439
2440
err = snd_rme9652_initialize_memory(rme9652);
2441
if (err < 0)
2442
return err;
2443
2444
err = snd_rme9652_create_pcm(card, rme9652);
2445
if (err < 0)
2446
return err;
2447
2448
err = snd_rme9652_create_controls(card, rme9652);
2449
if (err < 0)
2450
return err;
2451
2452
snd_rme9652_proc_init(rme9652);
2453
2454
rme9652->last_spdif_sample_rate = -1;
2455
rme9652->last_adat_sample_rate = -1;
2456
rme9652->playback_pid = -1;
2457
rme9652->capture_pid = -1;
2458
rme9652->capture_substream = NULL;
2459
rme9652->playback_substream = NULL;
2460
2461
snd_rme9652_set_defaults(rme9652);
2462
2463
if (rme9652->hw_rev == 15) {
2464
rme9652_initialize_spdif_receiver (rme9652);
2465
}
2466
2467
return 0;
2468
}
2469
2470
static int snd_rme9652_probe(struct pci_dev *pci,
2471
const struct pci_device_id *pci_id)
2472
{
2473
static int dev;
2474
struct snd_rme9652 *rme9652;
2475
struct snd_card *card;
2476
int err;
2477
2478
if (dev >= SNDRV_CARDS)
2479
return -ENODEV;
2480
if (!enable[dev]) {
2481
dev++;
2482
return -ENOENT;
2483
}
2484
2485
err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2486
sizeof(struct snd_rme9652), &card);
2487
2488
if (err < 0)
2489
return err;
2490
2491
rme9652 = (struct snd_rme9652 *) card->private_data;
2492
card->private_free = snd_rme9652_card_free;
2493
rme9652->dev = dev;
2494
rme9652->pci = pci;
2495
err = snd_rme9652_create(card, rme9652, precise_ptr[dev]);
2496
if (err)
2497
goto error;
2498
2499
strscpy(card->shortname, rme9652->card_name);
2500
2501
sprintf(card->longname, "%s at 0x%lx, irq %d",
2502
card->shortname, rme9652->port, rme9652->irq);
2503
err = snd_card_register(card);
2504
if (err)
2505
goto error;
2506
pci_set_drvdata(pci, card);
2507
dev++;
2508
return 0;
2509
2510
error:
2511
snd_card_free(card);
2512
return err;
2513
}
2514
2515
static struct pci_driver rme9652_driver = {
2516
.name = KBUILD_MODNAME,
2517
.id_table = snd_rme9652_ids,
2518
.probe = snd_rme9652_probe,
2519
};
2520
2521
module_pci_driver(rme9652_driver);
2522
2523