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