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