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