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