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