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