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