ASoC: soc-compress: Fix and add DPCM locking
[sfrench/cifs-2.6.git] / sound / pci / rme96.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *   ALSA driver for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST audio
4  *   interfaces 
5  *
6  *      Copyright (c) 2000, 2001 Anders Torger <torger@ludd.luth.se>
7  *    
8  *      Thanks to Henk Hesselink <henk@anda.nl> for the analog volume control
9  *      code.
10  */      
11
12 #include <linux/delay.h>
13 #include <linux/init.h>
14 #include <linux/interrupt.h>
15 #include <linux/pci.h>
16 #include <linux/module.h>
17 #include <linux/vmalloc.h>
18 #include <linux/io.h>
19
20 #include <sound/core.h>
21 #include <sound/info.h>
22 #include <sound/control.h>
23 #include <sound/pcm.h>
24 #include <sound/pcm_params.h>
25 #include <sound/asoundef.h>
26 #include <sound/initval.h>
27
28 /* note, two last pcis should be equal, it is not a bug */
29
30 MODULE_AUTHOR("Anders Torger <torger@ludd.luth.se>");
31 MODULE_DESCRIPTION("RME Digi96, Digi96/8, Digi96/8 PRO, Digi96/8 PST, "
32                    "Digi96/8 PAD");
33 MODULE_LICENSE("GPL");
34
35 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 0-MAX */
36 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
37 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;     /* Enable this card */
38
39 module_param_array(index, int, NULL, 0444);
40 MODULE_PARM_DESC(index, "Index value for RME Digi96 soundcard.");
41 module_param_array(id, charp, NULL, 0444);
42 MODULE_PARM_DESC(id, "ID string for RME Digi96 soundcard.");
43 module_param_array(enable, bool, NULL, 0444);
44 MODULE_PARM_DESC(enable, "Enable RME Digi96 soundcard.");
45
46 /*
47  * Defines for RME Digi96 series, from internal RME reference documents
48  * dated 12.01.00
49  */
50
51 #define RME96_SPDIF_NCHANNELS 2
52
53 /* Playback and capture buffer size */
54 #define RME96_BUFFER_SIZE 0x10000
55
56 /* IO area size */
57 #define RME96_IO_SIZE 0x60000
58
59 /* IO area offsets */
60 #define RME96_IO_PLAY_BUFFER      0x0
61 #define RME96_IO_REC_BUFFER       0x10000
62 #define RME96_IO_CONTROL_REGISTER 0x20000
63 #define RME96_IO_ADDITIONAL_REG   0x20004
64 #define RME96_IO_CONFIRM_PLAY_IRQ 0x20008
65 #define RME96_IO_CONFIRM_REC_IRQ  0x2000C
66 #define RME96_IO_SET_PLAY_POS     0x40000
67 #define RME96_IO_RESET_PLAY_POS   0x4FFFC
68 #define RME96_IO_SET_REC_POS      0x50000
69 #define RME96_IO_RESET_REC_POS    0x5FFFC
70 #define RME96_IO_GET_PLAY_POS     0x20000
71 #define RME96_IO_GET_REC_POS      0x30000
72
73 /* Write control register bits */
74 #define RME96_WCR_START     (1 << 0)
75 #define RME96_WCR_START_2   (1 << 1)
76 #define RME96_WCR_GAIN_0    (1 << 2)
77 #define RME96_WCR_GAIN_1    (1 << 3)
78 #define RME96_WCR_MODE24    (1 << 4)
79 #define RME96_WCR_MODE24_2  (1 << 5)
80 #define RME96_WCR_BM        (1 << 6)
81 #define RME96_WCR_BM_2      (1 << 7)
82 #define RME96_WCR_ADAT      (1 << 8)
83 #define RME96_WCR_FREQ_0    (1 << 9)
84 #define RME96_WCR_FREQ_1    (1 << 10)
85 #define RME96_WCR_DS        (1 << 11)
86 #define RME96_WCR_PRO       (1 << 12)
87 #define RME96_WCR_EMP       (1 << 13)
88 #define RME96_WCR_SEL       (1 << 14)
89 #define RME96_WCR_MASTER    (1 << 15)
90 #define RME96_WCR_PD        (1 << 16)
91 #define RME96_WCR_INP_0     (1 << 17)
92 #define RME96_WCR_INP_1     (1 << 18)
93 #define RME96_WCR_THRU_0    (1 << 19)
94 #define RME96_WCR_THRU_1    (1 << 20)
95 #define RME96_WCR_THRU_2    (1 << 21)
96 #define RME96_WCR_THRU_3    (1 << 22)
97 #define RME96_WCR_THRU_4    (1 << 23)
98 #define RME96_WCR_THRU_5    (1 << 24)
99 #define RME96_WCR_THRU_6    (1 << 25)
100 #define RME96_WCR_THRU_7    (1 << 26)
101 #define RME96_WCR_DOLBY     (1 << 27)
102 #define RME96_WCR_MONITOR_0 (1 << 28)
103 #define RME96_WCR_MONITOR_1 (1 << 29)
104 #define RME96_WCR_ISEL      (1 << 30)
105 #define RME96_WCR_IDIS      (1 << 31)
106
107 #define RME96_WCR_BITPOS_GAIN_0 2
108 #define RME96_WCR_BITPOS_GAIN_1 3
109 #define RME96_WCR_BITPOS_FREQ_0 9
110 #define RME96_WCR_BITPOS_FREQ_1 10
111 #define RME96_WCR_BITPOS_INP_0 17
112 #define RME96_WCR_BITPOS_INP_1 18
113 #define RME96_WCR_BITPOS_MONITOR_0 28
114 #define RME96_WCR_BITPOS_MONITOR_1 29
115
116 /* Read control register bits */
117 #define RME96_RCR_AUDIO_ADDR_MASK 0xFFFF
118 #define RME96_RCR_IRQ_2     (1 << 16)
119 #define RME96_RCR_T_OUT     (1 << 17)
120 #define RME96_RCR_DEV_ID_0  (1 << 21)
121 #define RME96_RCR_DEV_ID_1  (1 << 22)
122 #define RME96_RCR_LOCK      (1 << 23)
123 #define RME96_RCR_VERF      (1 << 26)
124 #define RME96_RCR_F0        (1 << 27)
125 #define RME96_RCR_F1        (1 << 28)
126 #define RME96_RCR_F2        (1 << 29)
127 #define RME96_RCR_AUTOSYNC  (1 << 30)
128 #define RME96_RCR_IRQ       (1 << 31)
129
130 #define RME96_RCR_BITPOS_F0 27
131 #define RME96_RCR_BITPOS_F1 28
132 #define RME96_RCR_BITPOS_F2 29
133
134 /* Additional register bits */
135 #define RME96_AR_WSEL       (1 << 0)
136 #define RME96_AR_ANALOG     (1 << 1)
137 #define RME96_AR_FREQPAD_0  (1 << 2)
138 #define RME96_AR_FREQPAD_1  (1 << 3)
139 #define RME96_AR_FREQPAD_2  (1 << 4)
140 #define RME96_AR_PD2        (1 << 5)
141 #define RME96_AR_DAC_EN     (1 << 6)
142 #define RME96_AR_CLATCH     (1 << 7)
143 #define RME96_AR_CCLK       (1 << 8)
144 #define RME96_AR_CDATA      (1 << 9)
145
146 #define RME96_AR_BITPOS_F0 2
147 #define RME96_AR_BITPOS_F1 3
148 #define RME96_AR_BITPOS_F2 4
149
150 /* Monitor tracks */
151 #define RME96_MONITOR_TRACKS_1_2 0
152 #define RME96_MONITOR_TRACKS_3_4 1
153 #define RME96_MONITOR_TRACKS_5_6 2
154 #define RME96_MONITOR_TRACKS_7_8 3
155
156 /* Attenuation */
157 #define RME96_ATTENUATION_0 0
158 #define RME96_ATTENUATION_6 1
159 #define RME96_ATTENUATION_12 2
160 #define RME96_ATTENUATION_18 3
161
162 /* Input types */
163 #define RME96_INPUT_OPTICAL 0
164 #define RME96_INPUT_COAXIAL 1
165 #define RME96_INPUT_INTERNAL 2
166 #define RME96_INPUT_XLR 3
167 #define RME96_INPUT_ANALOG 4
168
169 /* Clock modes */
170 #define RME96_CLOCKMODE_SLAVE 0
171 #define RME96_CLOCKMODE_MASTER 1
172 #define RME96_CLOCKMODE_WORDCLOCK 2
173
174 /* Block sizes in bytes */
175 #define RME96_SMALL_BLOCK_SIZE 2048
176 #define RME96_LARGE_BLOCK_SIZE 8192
177
178 /* Volume control */
179 #define RME96_AD1852_VOL_BITS 14
180 #define RME96_AD1855_VOL_BITS 10
181
182 /* Defines for snd_rme96_trigger */
183 #define RME96_TB_START_PLAYBACK 1
184 #define RME96_TB_START_CAPTURE 2
185 #define RME96_TB_STOP_PLAYBACK 4
186 #define RME96_TB_STOP_CAPTURE 8
187 #define RME96_TB_RESET_PLAYPOS 16
188 #define RME96_TB_RESET_CAPTUREPOS 32
189 #define RME96_TB_CLEAR_PLAYBACK_IRQ 64
190 #define RME96_TB_CLEAR_CAPTURE_IRQ 128
191 #define RME96_RESUME_PLAYBACK   (RME96_TB_START_PLAYBACK)
192 #define RME96_RESUME_CAPTURE    (RME96_TB_START_CAPTURE)
193 #define RME96_RESUME_BOTH       (RME96_RESUME_PLAYBACK \
194                                 | RME96_RESUME_CAPTURE)
195 #define RME96_START_PLAYBACK    (RME96_TB_START_PLAYBACK \
196                                 | RME96_TB_RESET_PLAYPOS)
197 #define RME96_START_CAPTURE     (RME96_TB_START_CAPTURE \
198                                 | RME96_TB_RESET_CAPTUREPOS)
199 #define RME96_START_BOTH        (RME96_START_PLAYBACK \
200                                 | RME96_START_CAPTURE)
201 #define RME96_STOP_PLAYBACK     (RME96_TB_STOP_PLAYBACK \
202                                 | RME96_TB_CLEAR_PLAYBACK_IRQ)
203 #define RME96_STOP_CAPTURE      (RME96_TB_STOP_CAPTURE \
204                                 | RME96_TB_CLEAR_CAPTURE_IRQ)
205 #define RME96_STOP_BOTH         (RME96_STOP_PLAYBACK \
206                                 | RME96_STOP_CAPTURE)
207
208 struct rme96 {
209         spinlock_t    lock;
210         int irq;
211         unsigned long port;
212         void __iomem *iobase;
213         
214         u32 wcreg;    /* cached write control register value */
215         u32 wcreg_spdif;                /* S/PDIF setup */
216         u32 wcreg_spdif_stream;         /* S/PDIF setup (temporary) */
217         u32 rcreg;    /* cached read control register value */
218         u32 areg;     /* cached additional register value */
219         u16 vol[2]; /* cached volume of analog output */
220
221         u8 rev; /* card revision number */
222
223 #ifdef CONFIG_PM_SLEEP
224         u32 playback_pointer;
225         u32 capture_pointer;
226         void *playback_suspend_buffer;
227         void *capture_suspend_buffer;
228 #endif
229
230         struct snd_pcm_substream *playback_substream;
231         struct snd_pcm_substream *capture_substream;
232
233         int playback_frlog; /* log2 of framesize */
234         int capture_frlog;
235         
236         size_t playback_periodsize; /* in bytes, zero if not used */
237         size_t capture_periodsize; /* in bytes, zero if not used */
238
239         struct snd_card *card;
240         struct snd_pcm *spdif_pcm;
241         struct snd_pcm *adat_pcm; 
242         struct pci_dev     *pci;
243         struct snd_kcontrol   *spdif_ctl;
244 };
245
246 static const struct pci_device_id snd_rme96_ids[] = {
247         { PCI_VDEVICE(XILINX, PCI_DEVICE_ID_RME_DIGI96), 0, },
248         { PCI_VDEVICE(XILINX, PCI_DEVICE_ID_RME_DIGI96_8), 0, },
249         { PCI_VDEVICE(XILINX, PCI_DEVICE_ID_RME_DIGI96_8_PRO), 0, },
250         { PCI_VDEVICE(XILINX, PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST), 0, },
251         { 0, }
252 };
253
254 MODULE_DEVICE_TABLE(pci, snd_rme96_ids);
255
256 #define RME96_ISPLAYING(rme96) ((rme96)->wcreg & RME96_WCR_START)
257 #define RME96_ISRECORDING(rme96) ((rme96)->wcreg & RME96_WCR_START_2)
258 #define RME96_HAS_ANALOG_IN(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST)
259 #define RME96_HAS_ANALOG_OUT(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO || \
260                                      (rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST)
261 #define RME96_DAC_IS_1852(rme96) (RME96_HAS_ANALOG_OUT(rme96) && (rme96)->rev >= 4)
262 #define RME96_DAC_IS_1855(rme96) (((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && (rme96)->rev < 4) || \
263                                   ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO && (rme96)->rev == 2))
264 #define RME96_185X_MAX_OUT(rme96) ((1 << (RME96_DAC_IS_1852(rme96) ? RME96_AD1852_VOL_BITS : RME96_AD1855_VOL_BITS)) - 1)
265
266 static int
267 snd_rme96_playback_prepare(struct snd_pcm_substream *substream);
268
269 static int
270 snd_rme96_capture_prepare(struct snd_pcm_substream *substream);
271
272 static int
273 snd_rme96_playback_trigger(struct snd_pcm_substream *substream, 
274                            int cmd);
275
276 static int
277 snd_rme96_capture_trigger(struct snd_pcm_substream *substream, 
278                           int cmd);
279
280 static snd_pcm_uframes_t
281 snd_rme96_playback_pointer(struct snd_pcm_substream *substream);
282
283 static snd_pcm_uframes_t
284 snd_rme96_capture_pointer(struct snd_pcm_substream *substream);
285
286 static void snd_rme96_proc_init(struct rme96 *rme96);
287
288 static int
289 snd_rme96_create_switches(struct snd_card *card,
290                           struct rme96 *rme96);
291
292 static int
293 snd_rme96_getinputtype(struct rme96 *rme96);
294
295 static inline unsigned int
296 snd_rme96_playback_ptr(struct rme96 *rme96)
297 {
298         return (readl(rme96->iobase + RME96_IO_GET_PLAY_POS)
299                 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->playback_frlog;
300 }
301
302 static inline unsigned int
303 snd_rme96_capture_ptr(struct rme96 *rme96)
304 {
305         return (readl(rme96->iobase + RME96_IO_GET_REC_POS)
306                 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->capture_frlog;
307 }
308
309 static int
310 snd_rme96_playback_silence(struct snd_pcm_substream *substream,
311                            int channel, unsigned long pos, unsigned long count)
312 {
313         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
314
315         memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
316                   0, count);
317         return 0;
318 }
319
320 static int
321 snd_rme96_playback_copy(struct snd_pcm_substream *substream,
322                         int channel, unsigned long pos,
323                         struct iov_iter *src, unsigned long count)
324 {
325         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
326
327         return copy_from_iter_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
328                                    src, count);
329 }
330
331 static int
332 snd_rme96_capture_copy(struct snd_pcm_substream *substream,
333                        int channel, unsigned long pos,
334                        struct iov_iter *dst, unsigned long count)
335 {
336         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
337
338         return copy_to_iter_fromio(dst,
339                                    rme96->iobase + RME96_IO_REC_BUFFER + pos,
340                                    count);
341 }
342
343 /*
344  * Digital output capabilities (S/PDIF)
345  */
346 static const struct snd_pcm_hardware snd_rme96_playback_spdif_info =
347 {
348         .info =              (SNDRV_PCM_INFO_MMAP_IOMEM |
349                               SNDRV_PCM_INFO_MMAP_VALID |
350                               SNDRV_PCM_INFO_SYNC_START |
351                               SNDRV_PCM_INFO_RESUME |
352                               SNDRV_PCM_INFO_INTERLEAVED |
353                               SNDRV_PCM_INFO_PAUSE),
354         .formats =           (SNDRV_PCM_FMTBIT_S16_LE |
355                               SNDRV_PCM_FMTBIT_S32_LE),
356         .rates =             (SNDRV_PCM_RATE_32000 |
357                               SNDRV_PCM_RATE_44100 | 
358                               SNDRV_PCM_RATE_48000 | 
359                               SNDRV_PCM_RATE_64000 |
360                               SNDRV_PCM_RATE_88200 | 
361                               SNDRV_PCM_RATE_96000),
362         .rate_min =          32000,
363         .rate_max =          96000,
364         .channels_min =      2,
365         .channels_max =      2,
366         .buffer_bytes_max =  RME96_BUFFER_SIZE,
367         .period_bytes_min =  RME96_SMALL_BLOCK_SIZE,
368         .period_bytes_max =  RME96_LARGE_BLOCK_SIZE,
369         .periods_min =       RME96_BUFFER_SIZE / RME96_LARGE_BLOCK_SIZE,
370         .periods_max =       RME96_BUFFER_SIZE / RME96_SMALL_BLOCK_SIZE,
371         .fifo_size =         0,
372 };
373
374 /*
375  * Digital input capabilities (S/PDIF)
376  */
377 static const struct snd_pcm_hardware snd_rme96_capture_spdif_info =
378 {
379         .info =              (SNDRV_PCM_INFO_MMAP_IOMEM |
380                               SNDRV_PCM_INFO_MMAP_VALID |
381                               SNDRV_PCM_INFO_SYNC_START |
382                               SNDRV_PCM_INFO_RESUME |
383                               SNDRV_PCM_INFO_INTERLEAVED |
384                               SNDRV_PCM_INFO_PAUSE),
385         .formats =           (SNDRV_PCM_FMTBIT_S16_LE |
386                               SNDRV_PCM_FMTBIT_S32_LE),
387         .rates =             (SNDRV_PCM_RATE_32000 |
388                               SNDRV_PCM_RATE_44100 | 
389                               SNDRV_PCM_RATE_48000 | 
390                               SNDRV_PCM_RATE_64000 |
391                               SNDRV_PCM_RATE_88200 | 
392                               SNDRV_PCM_RATE_96000),
393         .rate_min =          32000,
394         .rate_max =          96000,
395         .channels_min =      2,
396         .channels_max =      2,
397         .buffer_bytes_max =  RME96_BUFFER_SIZE,
398         .period_bytes_min =  RME96_SMALL_BLOCK_SIZE,
399         .period_bytes_max =  RME96_LARGE_BLOCK_SIZE,
400         .periods_min =       RME96_BUFFER_SIZE / RME96_LARGE_BLOCK_SIZE,
401         .periods_max =       RME96_BUFFER_SIZE / RME96_SMALL_BLOCK_SIZE,
402         .fifo_size =         0,
403 };
404
405 /*
406  * Digital output capabilities (ADAT)
407  */
408 static const struct snd_pcm_hardware snd_rme96_playback_adat_info =
409 {
410         .info =              (SNDRV_PCM_INFO_MMAP_IOMEM |
411                               SNDRV_PCM_INFO_MMAP_VALID |
412                               SNDRV_PCM_INFO_SYNC_START |
413                               SNDRV_PCM_INFO_RESUME |
414                               SNDRV_PCM_INFO_INTERLEAVED |
415                               SNDRV_PCM_INFO_PAUSE),
416         .formats =           (SNDRV_PCM_FMTBIT_S16_LE |
417                               SNDRV_PCM_FMTBIT_S32_LE),
418         .rates =             (SNDRV_PCM_RATE_44100 | 
419                               SNDRV_PCM_RATE_48000),
420         .rate_min =          44100,
421         .rate_max =          48000,
422         .channels_min =      8,
423         .channels_max =      8,
424         .buffer_bytes_max =  RME96_BUFFER_SIZE,
425         .period_bytes_min =  RME96_SMALL_BLOCK_SIZE,
426         .period_bytes_max =  RME96_LARGE_BLOCK_SIZE,
427         .periods_min =       RME96_BUFFER_SIZE / RME96_LARGE_BLOCK_SIZE,
428         .periods_max =       RME96_BUFFER_SIZE / RME96_SMALL_BLOCK_SIZE,
429         .fifo_size =         0,
430 };
431
432 /*
433  * Digital input capabilities (ADAT)
434  */
435 static const struct snd_pcm_hardware snd_rme96_capture_adat_info =
436 {
437         .info =              (SNDRV_PCM_INFO_MMAP_IOMEM |
438                               SNDRV_PCM_INFO_MMAP_VALID |
439                               SNDRV_PCM_INFO_SYNC_START |
440                               SNDRV_PCM_INFO_RESUME |
441                               SNDRV_PCM_INFO_INTERLEAVED |
442                               SNDRV_PCM_INFO_PAUSE),
443         .formats =           (SNDRV_PCM_FMTBIT_S16_LE |
444                               SNDRV_PCM_FMTBIT_S32_LE),
445         .rates =             (SNDRV_PCM_RATE_44100 | 
446                               SNDRV_PCM_RATE_48000),
447         .rate_min =          44100,
448         .rate_max =          48000,
449         .channels_min =      8,
450         .channels_max =      8,
451         .buffer_bytes_max =  RME96_BUFFER_SIZE,
452         .period_bytes_min =  RME96_SMALL_BLOCK_SIZE,
453         .period_bytes_max =  RME96_LARGE_BLOCK_SIZE,
454         .periods_min =       RME96_BUFFER_SIZE / RME96_LARGE_BLOCK_SIZE,
455         .periods_max =       RME96_BUFFER_SIZE / RME96_SMALL_BLOCK_SIZE,
456         .fifo_size =         0,
457 };
458
459 /*
460  * The CDATA, CCLK and CLATCH bits can be used to write to the SPI interface
461  * of the AD1852 or AD1852 D/A converter on the board.  CDATA must be set up
462  * on the falling edge of CCLK and be stable on the rising edge.  The rising
463  * edge of CLATCH after the last data bit clocks in the whole data word.
464  * A fast processor could probably drive the SPI interface faster than the
465  * DAC can handle (3MHz for the 1855, unknown for the 1852).  The udelay(1)
466  * limits the data rate to 500KHz and only causes a delay of 33 microsecs.
467  *
468  * NOTE: increased delay from 1 to 10, since there where problems setting
469  * the volume.
470  */
471 static void
472 snd_rme96_write_SPI(struct rme96 *rme96, u16 val)
473 {
474         int i;
475
476         for (i = 0; i < 16; i++) {
477                 if (val & 0x8000) {
478                         rme96->areg |= RME96_AR_CDATA;
479                 } else {
480                         rme96->areg &= ~RME96_AR_CDATA;
481                 }
482                 rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CLATCH);
483                 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
484                 udelay(10);
485                 rme96->areg |= RME96_AR_CCLK;
486                 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
487                 udelay(10);
488                 val <<= 1;
489         }
490         rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CDATA);
491         rme96->areg |= RME96_AR_CLATCH;
492         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
493         udelay(10);
494         rme96->areg &= ~RME96_AR_CLATCH;
495         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
496 }
497
498 static void
499 snd_rme96_apply_dac_volume(struct rme96 *rme96)
500 {
501         if (RME96_DAC_IS_1852(rme96)) {
502                 snd_rme96_write_SPI(rme96, (rme96->vol[0] << 2) | 0x0);
503                 snd_rme96_write_SPI(rme96, (rme96->vol[1] << 2) | 0x2);
504         } else if (RME96_DAC_IS_1855(rme96)) {
505                 snd_rme96_write_SPI(rme96, (rme96->vol[0] & 0x3FF) | 0x000);
506                 snd_rme96_write_SPI(rme96, (rme96->vol[1] & 0x3FF) | 0x400);
507         }
508 }
509
510 static void
511 snd_rme96_reset_dac(struct rme96 *rme96)
512 {
513         writel(rme96->wcreg | RME96_WCR_PD,
514                rme96->iobase + RME96_IO_CONTROL_REGISTER);
515         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
516 }
517
518 static int
519 snd_rme96_getmontracks(struct rme96 *rme96)
520 {
521         return ((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_0) & 1) +
522                 (((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_1) & 1) << 1);
523 }
524
525 static int
526 snd_rme96_setmontracks(struct rme96 *rme96,
527                        int montracks)
528 {
529         if (montracks & 1) {
530                 rme96->wcreg |= RME96_WCR_MONITOR_0;
531         } else {
532                 rme96->wcreg &= ~RME96_WCR_MONITOR_0;
533         }
534         if (montracks & 2) {
535                 rme96->wcreg |= RME96_WCR_MONITOR_1;
536         } else {
537                 rme96->wcreg &= ~RME96_WCR_MONITOR_1;
538         }
539         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
540         return 0;
541 }
542
543 static int
544 snd_rme96_getattenuation(struct rme96 *rme96)
545 {
546         return ((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_0) & 1) +
547                 (((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_1) & 1) << 1);
548 }
549
550 static int
551 snd_rme96_setattenuation(struct rme96 *rme96,
552                          int attenuation)
553 {
554         switch (attenuation) {
555         case 0:
556                 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) &
557                         ~RME96_WCR_GAIN_1;
558                 break;
559         case 1:
560                 rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) &
561                         ~RME96_WCR_GAIN_1;
562                 break;
563         case 2:
564                 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) |
565                         RME96_WCR_GAIN_1;
566                 break;
567         case 3:
568                 rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) |
569                         RME96_WCR_GAIN_1;
570                 break;
571         default:
572                 return -EINVAL;
573         }
574         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
575         return 0;
576 }
577
578 static int
579 snd_rme96_capture_getrate(struct rme96 *rme96,
580                           int *is_adat)
581 {       
582         int n, rate;
583
584         *is_adat = 0;
585         if (rme96->areg & RME96_AR_ANALOG) {
586                 /* Analog input, overrides S/PDIF setting */
587                 n = ((rme96->areg >> RME96_AR_BITPOS_F0) & 1) +
588                         (((rme96->areg >> RME96_AR_BITPOS_F1) & 1) << 1);
589                 switch (n) {
590                 case 1:
591                         rate = 32000;
592                         break;
593                 case 2:
594                         rate = 44100;
595                         break;
596                 case 3:
597                         rate = 48000;
598                         break;
599                 default:
600                         return -1;
601                 }
602                 return (rme96->areg & RME96_AR_BITPOS_F2) ? rate << 1 : rate;
603         }
604
605         rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
606         if (rme96->rcreg & RME96_RCR_LOCK) {
607                 /* ADAT rate */
608                 *is_adat = 1;
609                 if (rme96->rcreg & RME96_RCR_T_OUT) {
610                         return 48000;
611                 }
612                 return 44100;
613         }
614
615         if (rme96->rcreg & RME96_RCR_VERF) {
616                 return -1;
617         }
618         
619         /* S/PDIF rate */
620         n = ((rme96->rcreg >> RME96_RCR_BITPOS_F0) & 1) +
621                 (((rme96->rcreg >> RME96_RCR_BITPOS_F1) & 1) << 1) +
622                 (((rme96->rcreg >> RME96_RCR_BITPOS_F2) & 1) << 2);
623         
624         switch (n) {
625         case 0:         
626                 if (rme96->rcreg & RME96_RCR_T_OUT) {
627                         return 64000;
628                 }
629                 return -1;
630         case 3: return 96000;
631         case 4: return 88200;
632         case 5: return 48000;
633         case 6: return 44100;
634         case 7: return 32000;
635         default:
636                 break;
637         }
638         return -1;
639 }
640
641 static int
642 snd_rme96_playback_getrate(struct rme96 *rme96)
643 {
644         int rate, dummy;
645
646         if (!(rme96->wcreg & RME96_WCR_MASTER) &&
647             snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
648                 rate = snd_rme96_capture_getrate(rme96, &dummy);
649                 if (rate > 0) {
650                         /* slave clock */
651                         return rate;
652                 }
653         }
654
655         rate = ((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_0) & 1) +
656                 (((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_1) & 1) << 1);
657         switch (rate) {
658         case 1:
659                 rate = 32000;
660                 break;
661         case 2:
662                 rate = 44100;
663                 break;
664         case 3:
665                 rate = 48000;
666                 break;
667         default:
668                 return -1;
669         }
670         return (rme96->wcreg & RME96_WCR_DS) ? rate << 1 : rate;
671 }
672
673 static int
674 snd_rme96_playback_setrate(struct rme96 *rme96,
675                            int rate)
676 {
677         int ds;
678
679         ds = rme96->wcreg & RME96_WCR_DS;
680         switch (rate) {
681         case 32000:
682                 rme96->wcreg &= ~RME96_WCR_DS;
683                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) &
684                         ~RME96_WCR_FREQ_1;
685                 break;
686         case 44100:
687                 rme96->wcreg &= ~RME96_WCR_DS;
688                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) &
689                         ~RME96_WCR_FREQ_0;
690                 break;
691         case 48000:
692                 rme96->wcreg &= ~RME96_WCR_DS;
693                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) |
694                         RME96_WCR_FREQ_1;
695                 break;
696         case 64000:
697                 rme96->wcreg |= RME96_WCR_DS;
698                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) &
699                         ~RME96_WCR_FREQ_1;
700                 break;
701         case 88200:
702                 rme96->wcreg |= RME96_WCR_DS;
703                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) &
704                         ~RME96_WCR_FREQ_0;
705                 break;
706         case 96000:
707                 rme96->wcreg |= RME96_WCR_DS;
708                 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) |
709                         RME96_WCR_FREQ_1;
710                 break;
711         default:
712                 return -EINVAL;
713         }
714         if ((!ds && rme96->wcreg & RME96_WCR_DS) ||
715             (ds && !(rme96->wcreg & RME96_WCR_DS)))
716         {
717                 /* change to/from double-speed: reset the DAC (if available) */
718                 snd_rme96_reset_dac(rme96);
719                 return 1; /* need to restore volume */
720         } else {
721                 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
722                 return 0;
723         }
724 }
725
726 static int
727 snd_rme96_capture_analog_setrate(struct rme96 *rme96,
728                                  int rate)
729 {
730         switch (rate) {
731         case 32000:
732                 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) &
733                                ~RME96_AR_FREQPAD_1) & ~RME96_AR_FREQPAD_2;
734                 break;
735         case 44100:
736                 rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) |
737                                RME96_AR_FREQPAD_1) & ~RME96_AR_FREQPAD_2;
738                 break;
739         case 48000:
740                 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) |
741                                RME96_AR_FREQPAD_1) & ~RME96_AR_FREQPAD_2;
742                 break;
743         case 64000:
744                 if (rme96->rev < 4) {
745                         return -EINVAL;
746                 }
747                 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) &
748                                ~RME96_AR_FREQPAD_1) | RME96_AR_FREQPAD_2;
749                 break;
750         case 88200:
751                 if (rme96->rev < 4) {
752                         return -EINVAL;
753                 }
754                 rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) |
755                                RME96_AR_FREQPAD_1) | RME96_AR_FREQPAD_2;
756                 break;
757         case 96000:
758                 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) |
759                                RME96_AR_FREQPAD_1) | RME96_AR_FREQPAD_2;
760                 break;
761         default:
762                 return -EINVAL;
763         }
764         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
765         return 0;
766 }
767
768 static int
769 snd_rme96_setclockmode(struct rme96 *rme96,
770                        int mode)
771 {
772         switch (mode) {
773         case RME96_CLOCKMODE_SLAVE:
774                 /* AutoSync */ 
775                 rme96->wcreg &= ~RME96_WCR_MASTER;
776                 rme96->areg &= ~RME96_AR_WSEL;
777                 break;
778         case RME96_CLOCKMODE_MASTER:
779                 /* Internal */
780                 rme96->wcreg |= RME96_WCR_MASTER;
781                 rme96->areg &= ~RME96_AR_WSEL;
782                 break;
783         case RME96_CLOCKMODE_WORDCLOCK:
784                 /* Word clock is a master mode */
785                 rme96->wcreg |= RME96_WCR_MASTER; 
786                 rme96->areg |= RME96_AR_WSEL;
787                 break;
788         default:
789                 return -EINVAL;
790         }
791         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
792         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
793         return 0;
794 }
795
796 static int
797 snd_rme96_getclockmode(struct rme96 *rme96)
798 {
799         if (rme96->areg & RME96_AR_WSEL) {
800                 return RME96_CLOCKMODE_WORDCLOCK;
801         }
802         return (rme96->wcreg & RME96_WCR_MASTER) ? RME96_CLOCKMODE_MASTER :
803                 RME96_CLOCKMODE_SLAVE;
804 }
805
806 static int
807 snd_rme96_setinputtype(struct rme96 *rme96,
808                        int type)
809 {
810         int n;
811
812         switch (type) {
813         case RME96_INPUT_OPTICAL:
814                 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) &
815                         ~RME96_WCR_INP_1;
816                 break;
817         case RME96_INPUT_COAXIAL:
818                 rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) &
819                         ~RME96_WCR_INP_1;
820                 break;
821         case RME96_INPUT_INTERNAL:
822                 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) |
823                         RME96_WCR_INP_1;
824                 break;
825         case RME96_INPUT_XLR:
826                 if ((rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST &&
827                      rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PRO) ||
828                     (rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST &&
829                      rme96->rev > 4))
830                 {
831                         /* Only Digi96/8 PRO and Digi96/8 PAD supports XLR */
832                         return -EINVAL;
833                 }
834                 rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) |
835                         RME96_WCR_INP_1;
836                 break;
837         case RME96_INPUT_ANALOG:
838                 if (!RME96_HAS_ANALOG_IN(rme96)) {
839                         return -EINVAL;
840                 }
841                 rme96->areg |= RME96_AR_ANALOG;
842                 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
843                 if (rme96->rev < 4) {
844                         /*
845                          * Revision less than 004 does not support 64 and
846                          * 88.2 kHz
847                          */
848                         if (snd_rme96_capture_getrate(rme96, &n) == 88200) {
849                                 snd_rme96_capture_analog_setrate(rme96, 44100);
850                         }
851                         if (snd_rme96_capture_getrate(rme96, &n) == 64000) {
852                                 snd_rme96_capture_analog_setrate(rme96, 32000);
853                         }
854                 }
855                 return 0;
856         default:
857                 return -EINVAL;
858         }
859         if (type != RME96_INPUT_ANALOG && RME96_HAS_ANALOG_IN(rme96)) {
860                 rme96->areg &= ~RME96_AR_ANALOG;
861                 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
862         }
863         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
864         return 0;
865 }
866
867 static int
868 snd_rme96_getinputtype(struct rme96 *rme96)
869 {
870         if (rme96->areg & RME96_AR_ANALOG) {
871                 return RME96_INPUT_ANALOG;
872         }
873         return ((rme96->wcreg >> RME96_WCR_BITPOS_INP_0) & 1) +
874                 (((rme96->wcreg >> RME96_WCR_BITPOS_INP_1) & 1) << 1);
875 }
876
877 static void
878 snd_rme96_setframelog(struct rme96 *rme96,
879                       int n_channels,
880                       int is_playback)
881 {
882         int frlog;
883         
884         if (n_channels == 2) {
885                 frlog = 1;
886         } else {
887                 /* assume 8 channels */
888                 frlog = 3;
889         }
890         if (is_playback) {
891                 frlog += (rme96->wcreg & RME96_WCR_MODE24) ? 2 : 1;
892                 rme96->playback_frlog = frlog;
893         } else {
894                 frlog += (rme96->wcreg & RME96_WCR_MODE24_2) ? 2 : 1;
895                 rme96->capture_frlog = frlog;
896         }
897 }
898
899 static int
900 snd_rme96_playback_setformat(struct rme96 *rme96, snd_pcm_format_t format)
901 {
902         switch (format) {
903         case SNDRV_PCM_FORMAT_S16_LE:
904                 rme96->wcreg &= ~RME96_WCR_MODE24;
905                 break;
906         case SNDRV_PCM_FORMAT_S32_LE:
907                 rme96->wcreg |= RME96_WCR_MODE24;
908                 break;
909         default:
910                 return -EINVAL;
911         }
912         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
913         return 0;
914 }
915
916 static int
917 snd_rme96_capture_setformat(struct rme96 *rme96, snd_pcm_format_t format)
918 {
919         switch (format) {
920         case SNDRV_PCM_FORMAT_S16_LE:
921                 rme96->wcreg &= ~RME96_WCR_MODE24_2;
922                 break;
923         case SNDRV_PCM_FORMAT_S32_LE:
924                 rme96->wcreg |= RME96_WCR_MODE24_2;
925                 break;
926         default:
927                 return -EINVAL;
928         }
929         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
930         return 0;
931 }
932
933 static void
934 snd_rme96_set_period_properties(struct rme96 *rme96,
935                                 size_t period_bytes)
936 {
937         switch (period_bytes) {
938         case RME96_LARGE_BLOCK_SIZE:
939                 rme96->wcreg &= ~RME96_WCR_ISEL;
940                 break;
941         case RME96_SMALL_BLOCK_SIZE:
942                 rme96->wcreg |= RME96_WCR_ISEL;
943                 break;
944         default:
945                 snd_BUG();
946                 break;
947         }
948         rme96->wcreg &= ~RME96_WCR_IDIS;
949         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
950 }
951
952 static int
953 snd_rme96_playback_hw_params(struct snd_pcm_substream *substream,
954                              struct snd_pcm_hw_params *params)
955 {
956         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
957         struct snd_pcm_runtime *runtime = substream->runtime;
958         int err, rate, dummy;
959         bool apply_dac_volume = false;
960
961         runtime->dma_area = (void __force *)(rme96->iobase +
962                                              RME96_IO_PLAY_BUFFER);
963         runtime->dma_addr = rme96->port + RME96_IO_PLAY_BUFFER;
964         runtime->dma_bytes = RME96_BUFFER_SIZE;
965
966         spin_lock_irq(&rme96->lock);
967         rate = 0;
968         if (!(rme96->wcreg & RME96_WCR_MASTER) &&
969             snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG)
970                 rate = snd_rme96_capture_getrate(rme96, &dummy);
971         if (rate > 0) {
972                 /* slave clock */
973                 if ((int)params_rate(params) != rate) {
974                         err = -EIO;
975                         goto error;
976                 }
977         } else {
978                 err = snd_rme96_playback_setrate(rme96, params_rate(params));
979                 if (err < 0)
980                         goto error;
981                 apply_dac_volume = err > 0; /* need to restore volume later? */
982         }
983
984         err = snd_rme96_playback_setformat(rme96, params_format(params));
985         if (err < 0)
986                 goto error;
987         snd_rme96_setframelog(rme96, params_channels(params), 1);
988         if (rme96->capture_periodsize != 0) {
989                 if (params_period_size(params) << rme96->playback_frlog !=
990                     rme96->capture_periodsize)
991                 {
992                         err = -EBUSY;
993                         goto error;
994                 }
995         }
996         rme96->playback_periodsize =
997                 params_period_size(params) << rme96->playback_frlog;
998         snd_rme96_set_period_properties(rme96, rme96->playback_periodsize);
999         /* S/PDIF setup */
1000         if ((rme96->wcreg & RME96_WCR_ADAT) == 0) {
1001                 rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
1002                 writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1003         }
1004
1005         err = 0;
1006  error:
1007         spin_unlock_irq(&rme96->lock);
1008         if (apply_dac_volume) {
1009                 usleep_range(3000, 10000);
1010                 snd_rme96_apply_dac_volume(rme96);
1011         }
1012
1013         return err;
1014 }
1015
1016 static int
1017 snd_rme96_capture_hw_params(struct snd_pcm_substream *substream,
1018                             struct snd_pcm_hw_params *params)
1019 {
1020         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1021         struct snd_pcm_runtime *runtime = substream->runtime;
1022         int err, isadat, rate;
1023         
1024         runtime->dma_area = (void __force *)(rme96->iobase +
1025                                              RME96_IO_REC_BUFFER);
1026         runtime->dma_addr = rme96->port + RME96_IO_REC_BUFFER;
1027         runtime->dma_bytes = RME96_BUFFER_SIZE;
1028
1029         spin_lock_irq(&rme96->lock);
1030         err = snd_rme96_capture_setformat(rme96, params_format(params));
1031         if (err < 0) {
1032                 spin_unlock_irq(&rme96->lock);
1033                 return err;
1034         }
1035         if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
1036                 err = snd_rme96_capture_analog_setrate(rme96, params_rate(params));
1037                 if (err < 0) {
1038                         spin_unlock_irq(&rme96->lock);
1039                         return err;
1040                 }
1041         } else {
1042                 rate = snd_rme96_capture_getrate(rme96, &isadat);
1043                 if (rate > 0) {
1044                         if ((int)params_rate(params) != rate) {
1045                                 spin_unlock_irq(&rme96->lock);
1046                                 return -EIO;
1047                         }
1048                         if ((isadat && runtime->hw.channels_min == 2) ||
1049                             (!isadat && runtime->hw.channels_min == 8)) {
1050                                 spin_unlock_irq(&rme96->lock);
1051                                 return -EIO;
1052                         }
1053                 }
1054         }
1055         snd_rme96_setframelog(rme96, params_channels(params), 0);
1056         if (rme96->playback_periodsize != 0) {
1057                 if (params_period_size(params) << rme96->capture_frlog !=
1058                     rme96->playback_periodsize)
1059                 {
1060                         spin_unlock_irq(&rme96->lock);
1061                         return -EBUSY;
1062                 }
1063         }
1064         rme96->capture_periodsize =
1065                 params_period_size(params) << rme96->capture_frlog;
1066         snd_rme96_set_period_properties(rme96, rme96->capture_periodsize);
1067         spin_unlock_irq(&rme96->lock);
1068
1069         return 0;
1070 }
1071
1072 static void
1073 snd_rme96_trigger(struct rme96 *rme96,
1074                   int op)
1075 {
1076         if (op & RME96_TB_RESET_PLAYPOS)
1077                 writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
1078         if (op & RME96_TB_RESET_CAPTUREPOS)
1079                 writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
1080         if (op & RME96_TB_CLEAR_PLAYBACK_IRQ) {
1081                 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
1082                 if (rme96->rcreg & RME96_RCR_IRQ)
1083                         writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ);
1084         }
1085         if (op & RME96_TB_CLEAR_CAPTURE_IRQ) {
1086                 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
1087                 if (rme96->rcreg & RME96_RCR_IRQ_2)
1088                         writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ);
1089         }
1090         if (op & RME96_TB_START_PLAYBACK)
1091                 rme96->wcreg |= RME96_WCR_START;
1092         if (op & RME96_TB_STOP_PLAYBACK)
1093                 rme96->wcreg &= ~RME96_WCR_START;
1094         if (op & RME96_TB_START_CAPTURE)
1095                 rme96->wcreg |= RME96_WCR_START_2;
1096         if (op & RME96_TB_STOP_CAPTURE)
1097                 rme96->wcreg &= ~RME96_WCR_START_2;
1098         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1099 }
1100
1101
1102
1103 static irqreturn_t
1104 snd_rme96_interrupt(int irq,
1105                     void *dev_id)
1106 {
1107         struct rme96 *rme96 = (struct rme96 *)dev_id;
1108
1109         rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
1110         /* fastpath out, to ease interrupt sharing */
1111         if (!((rme96->rcreg & RME96_RCR_IRQ) ||
1112               (rme96->rcreg & RME96_RCR_IRQ_2)))
1113         {
1114                 return IRQ_NONE;
1115         }
1116         
1117         if (rme96->rcreg & RME96_RCR_IRQ) {
1118                 /* playback */
1119                 snd_pcm_period_elapsed(rme96->playback_substream);
1120                 writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ);
1121         }
1122         if (rme96->rcreg & RME96_RCR_IRQ_2) {
1123                 /* capture */
1124                 snd_pcm_period_elapsed(rme96->capture_substream);               
1125                 writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ);
1126         }
1127         return IRQ_HANDLED;
1128 }
1129
1130 static const unsigned int period_bytes[] = { RME96_SMALL_BLOCK_SIZE, RME96_LARGE_BLOCK_SIZE };
1131
1132 static const struct snd_pcm_hw_constraint_list hw_constraints_period_bytes = {
1133         .count = ARRAY_SIZE(period_bytes),
1134         .list = period_bytes,
1135         .mask = 0
1136 };
1137
1138 static void
1139 rme96_set_buffer_size_constraint(struct rme96 *rme96,
1140                                  struct snd_pcm_runtime *runtime)
1141 {
1142         unsigned int size;
1143
1144         snd_pcm_hw_constraint_single(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
1145                                      RME96_BUFFER_SIZE);
1146         size = rme96->playback_periodsize;
1147         if (!size)
1148                 size = rme96->capture_periodsize;
1149         if (size)
1150                 snd_pcm_hw_constraint_single(runtime,
1151                                              SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
1152                                              size);
1153         else
1154                 snd_pcm_hw_constraint_list(runtime, 0,
1155                                            SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
1156                                            &hw_constraints_period_bytes);
1157 }
1158
1159 static int
1160 snd_rme96_playback_spdif_open(struct snd_pcm_substream *substream)
1161 {
1162         int rate, dummy;
1163         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1164         struct snd_pcm_runtime *runtime = substream->runtime;
1165
1166         snd_pcm_set_sync(substream);
1167         spin_lock_irq(&rme96->lock);    
1168         if (rme96->playback_substream) {
1169                 spin_unlock_irq(&rme96->lock);
1170                 return -EBUSY;
1171         }
1172         rme96->wcreg &= ~RME96_WCR_ADAT;
1173         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1174         rme96->playback_substream = substream;
1175         spin_unlock_irq(&rme96->lock);
1176
1177         runtime->hw = snd_rme96_playback_spdif_info;
1178         if (!(rme96->wcreg & RME96_WCR_MASTER) &&
1179             snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
1180                 rate = snd_rme96_capture_getrate(rme96, &dummy);
1181                 if (rate > 0) {
1182                         /* slave clock */
1183                         runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
1184                         runtime->hw.rate_min = rate;
1185                         runtime->hw.rate_max = rate;
1186                 }
1187         }        
1188         rme96_set_buffer_size_constraint(rme96, runtime);
1189
1190         rme96->wcreg_spdif_stream = rme96->wcreg_spdif;
1191         rme96->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1192         snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE |
1193                        SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id);
1194         return 0;
1195 }
1196
1197 static int
1198 snd_rme96_capture_spdif_open(struct snd_pcm_substream *substream)
1199 {
1200         int isadat, rate;
1201         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1202         struct snd_pcm_runtime *runtime = substream->runtime;
1203
1204         snd_pcm_set_sync(substream);
1205         runtime->hw = snd_rme96_capture_spdif_info;
1206         if (snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
1207                 rate = snd_rme96_capture_getrate(rme96, &isadat);
1208                 if (rate > 0) {
1209                         if (isadat)
1210                                 return -EIO;
1211                         runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
1212                         runtime->hw.rate_min = rate;
1213                         runtime->hw.rate_max = rate;
1214                 }
1215         }
1216         
1217         spin_lock_irq(&rme96->lock);
1218         if (rme96->capture_substream) {
1219                 spin_unlock_irq(&rme96->lock);
1220                 return -EBUSY;
1221         }
1222         rme96->capture_substream = substream;
1223         spin_unlock_irq(&rme96->lock);
1224         
1225         rme96_set_buffer_size_constraint(rme96, runtime);
1226         return 0;
1227 }
1228
1229 static int
1230 snd_rme96_playback_adat_open(struct snd_pcm_substream *substream)
1231 {
1232         int rate, dummy;
1233         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1234         struct snd_pcm_runtime *runtime = substream->runtime;        
1235         
1236         snd_pcm_set_sync(substream);
1237         spin_lock_irq(&rme96->lock);    
1238         if (rme96->playback_substream) {
1239                 spin_unlock_irq(&rme96->lock);
1240                 return -EBUSY;
1241         }
1242         rme96->wcreg |= RME96_WCR_ADAT;
1243         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1244         rme96->playback_substream = substream;
1245         spin_unlock_irq(&rme96->lock);
1246         
1247         runtime->hw = snd_rme96_playback_adat_info;
1248         if (!(rme96->wcreg & RME96_WCR_MASTER) &&
1249             snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
1250                 rate = snd_rme96_capture_getrate(rme96, &dummy);
1251                 if (rate > 0) {
1252                         /* slave clock */
1253                         runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
1254                         runtime->hw.rate_min = rate;
1255                         runtime->hw.rate_max = rate;
1256                 }
1257         }
1258
1259         rme96_set_buffer_size_constraint(rme96, runtime);
1260         return 0;
1261 }
1262
1263 static int
1264 snd_rme96_capture_adat_open(struct snd_pcm_substream *substream)
1265 {
1266         int isadat, rate;
1267         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1268         struct snd_pcm_runtime *runtime = substream->runtime;
1269
1270         snd_pcm_set_sync(substream);
1271         runtime->hw = snd_rme96_capture_adat_info;
1272         if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
1273                 /* makes no sense to use analog input. Note that analog
1274                    expension cards AEB4/8-I are RME96_INPUT_INTERNAL */
1275                 return -EIO;
1276         }
1277         rate = snd_rme96_capture_getrate(rme96, &isadat);
1278         if (rate > 0) {
1279                 if (!isadat) {
1280                         return -EIO;
1281                 }
1282                 runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
1283                 runtime->hw.rate_min = rate;
1284                 runtime->hw.rate_max = rate;
1285         }
1286         
1287         spin_lock_irq(&rme96->lock);    
1288         if (rme96->capture_substream) {
1289                 spin_unlock_irq(&rme96->lock);
1290                 return -EBUSY;
1291         }
1292         rme96->capture_substream = substream;
1293         spin_unlock_irq(&rme96->lock);
1294
1295         rme96_set_buffer_size_constraint(rme96, runtime);
1296         return 0;
1297 }
1298
1299 static int
1300 snd_rme96_playback_close(struct snd_pcm_substream *substream)
1301 {
1302         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1303         int spdif = 0;
1304
1305         spin_lock_irq(&rme96->lock);    
1306         if (RME96_ISPLAYING(rme96)) {
1307                 snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK);
1308         }
1309         rme96->playback_substream = NULL;
1310         rme96->playback_periodsize = 0;
1311         spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0;
1312         spin_unlock_irq(&rme96->lock);
1313         if (spdif) {
1314                 rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1315                 snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE |
1316                                SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id);
1317         }
1318         return 0;
1319 }
1320
1321 static int
1322 snd_rme96_capture_close(struct snd_pcm_substream *substream)
1323 {
1324         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1325         
1326         spin_lock_irq(&rme96->lock);    
1327         if (RME96_ISRECORDING(rme96)) {
1328                 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE);
1329         }
1330         rme96->capture_substream = NULL;
1331         rme96->capture_periodsize = 0;
1332         spin_unlock_irq(&rme96->lock);
1333         return 0;
1334 }
1335
1336 static int
1337 snd_rme96_playback_prepare(struct snd_pcm_substream *substream)
1338 {
1339         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1340         
1341         spin_lock_irq(&rme96->lock);    
1342         if (RME96_ISPLAYING(rme96)) {
1343                 snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK);
1344         }
1345         writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
1346         spin_unlock_irq(&rme96->lock);
1347         return 0;
1348 }
1349
1350 static int
1351 snd_rme96_capture_prepare(struct snd_pcm_substream *substream)
1352 {
1353         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1354         
1355         spin_lock_irq(&rme96->lock);    
1356         if (RME96_ISRECORDING(rme96)) {
1357                 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE);
1358         }
1359         writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
1360         spin_unlock_irq(&rme96->lock);
1361         return 0;
1362 }
1363
1364 static int
1365 snd_rme96_playback_trigger(struct snd_pcm_substream *substream, 
1366                            int cmd)
1367 {
1368         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1369         struct snd_pcm_substream *s;
1370         bool sync;
1371
1372         snd_pcm_group_for_each_entry(s, substream) {
1373                 if (snd_pcm_substream_chip(s) == rme96)
1374                         snd_pcm_trigger_done(s, substream);
1375         }
1376
1377         sync = (rme96->playback_substream && rme96->capture_substream) &&
1378                (rme96->playback_substream->group ==
1379                 rme96->capture_substream->group);
1380
1381         switch (cmd) {
1382         case SNDRV_PCM_TRIGGER_START:
1383                 if (!RME96_ISPLAYING(rme96)) {
1384                         if (substream != rme96->playback_substream)
1385                                 return -EBUSY;
1386                         snd_rme96_trigger(rme96, sync ? RME96_START_BOTH
1387                                                  : RME96_START_PLAYBACK);
1388                 }
1389                 break;
1390
1391         case SNDRV_PCM_TRIGGER_SUSPEND:
1392         case SNDRV_PCM_TRIGGER_STOP:
1393                 if (RME96_ISPLAYING(rme96)) {
1394                         if (substream != rme96->playback_substream)
1395                                 return -EBUSY;
1396                         snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
1397                                                  :  RME96_STOP_PLAYBACK);
1398                 }
1399                 break;
1400
1401         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1402                 if (RME96_ISPLAYING(rme96))
1403                         snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
1404                                                  : RME96_STOP_PLAYBACK);
1405                 break;
1406
1407         case SNDRV_PCM_TRIGGER_RESUME:
1408         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1409                 if (!RME96_ISPLAYING(rme96))
1410                         snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH
1411                                                  : RME96_RESUME_PLAYBACK);
1412                 break;
1413
1414         default:
1415                 return -EINVAL;
1416         }
1417
1418         return 0;
1419 }
1420
1421 static int
1422 snd_rme96_capture_trigger(struct snd_pcm_substream *substream, 
1423                           int cmd)
1424 {
1425         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1426         struct snd_pcm_substream *s;
1427         bool sync;
1428
1429         snd_pcm_group_for_each_entry(s, substream) {
1430                 if (snd_pcm_substream_chip(s) == rme96)
1431                         snd_pcm_trigger_done(s, substream);
1432         }
1433
1434         sync = (rme96->playback_substream && rme96->capture_substream) &&
1435                (rme96->playback_substream->group ==
1436                 rme96->capture_substream->group);
1437
1438         switch (cmd) {
1439         case SNDRV_PCM_TRIGGER_START:
1440                 if (!RME96_ISRECORDING(rme96)) {
1441                         if (substream != rme96->capture_substream)
1442                                 return -EBUSY;
1443                         snd_rme96_trigger(rme96, sync ? RME96_START_BOTH
1444                                                  : RME96_START_CAPTURE);
1445                 }
1446                 break;
1447
1448         case SNDRV_PCM_TRIGGER_SUSPEND:
1449         case SNDRV_PCM_TRIGGER_STOP:
1450                 if (RME96_ISRECORDING(rme96)) {
1451                         if (substream != rme96->capture_substream)
1452                                 return -EBUSY;
1453                         snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
1454                                                  : RME96_STOP_CAPTURE);
1455                 }
1456                 break;
1457
1458         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1459                 if (RME96_ISRECORDING(rme96))
1460                         snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
1461                                                  : RME96_STOP_CAPTURE);
1462                 break;
1463
1464         case SNDRV_PCM_TRIGGER_RESUME:
1465         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1466                 if (!RME96_ISRECORDING(rme96))
1467                         snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH
1468                                                  : RME96_RESUME_CAPTURE);
1469                 break;
1470
1471         default:
1472                 return -EINVAL;
1473         }
1474
1475         return 0;
1476 }
1477
1478 static snd_pcm_uframes_t
1479 snd_rme96_playback_pointer(struct snd_pcm_substream *substream)
1480 {
1481         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1482         return snd_rme96_playback_ptr(rme96);
1483 }
1484
1485 static snd_pcm_uframes_t
1486 snd_rme96_capture_pointer(struct snd_pcm_substream *substream)
1487 {
1488         struct rme96 *rme96 = snd_pcm_substream_chip(substream);
1489         return snd_rme96_capture_ptr(rme96);
1490 }
1491
1492 static const struct snd_pcm_ops snd_rme96_playback_spdif_ops = {
1493         .open =         snd_rme96_playback_spdif_open,
1494         .close =        snd_rme96_playback_close,
1495         .hw_params =    snd_rme96_playback_hw_params,
1496         .prepare =      snd_rme96_playback_prepare,
1497         .trigger =      snd_rme96_playback_trigger,
1498         .pointer =      snd_rme96_playback_pointer,
1499         .copy =         snd_rme96_playback_copy,
1500         .fill_silence = snd_rme96_playback_silence,
1501         .mmap =         snd_pcm_lib_mmap_iomem,
1502 };
1503
1504 static const struct snd_pcm_ops snd_rme96_capture_spdif_ops = {
1505         .open =         snd_rme96_capture_spdif_open,
1506         .close =        snd_rme96_capture_close,
1507         .hw_params =    snd_rme96_capture_hw_params,
1508         .prepare =      snd_rme96_capture_prepare,
1509         .trigger =      snd_rme96_capture_trigger,
1510         .pointer =      snd_rme96_capture_pointer,
1511         .copy =         snd_rme96_capture_copy,
1512         .mmap =         snd_pcm_lib_mmap_iomem,
1513 };
1514
1515 static const struct snd_pcm_ops snd_rme96_playback_adat_ops = {
1516         .open =         snd_rme96_playback_adat_open,
1517         .close =        snd_rme96_playback_close,
1518         .hw_params =    snd_rme96_playback_hw_params,
1519         .prepare =      snd_rme96_playback_prepare,
1520         .trigger =      snd_rme96_playback_trigger,
1521         .pointer =      snd_rme96_playback_pointer,
1522         .copy =         snd_rme96_playback_copy,
1523         .fill_silence = snd_rme96_playback_silence,
1524         .mmap =         snd_pcm_lib_mmap_iomem,
1525 };
1526
1527 static const struct snd_pcm_ops snd_rme96_capture_adat_ops = {
1528         .open =         snd_rme96_capture_adat_open,
1529         .close =        snd_rme96_capture_close,
1530         .hw_params =    snd_rme96_capture_hw_params,
1531         .prepare =      snd_rme96_capture_prepare,
1532         .trigger =      snd_rme96_capture_trigger,
1533         .pointer =      snd_rme96_capture_pointer,
1534         .copy =         snd_rme96_capture_copy,
1535         .mmap =         snd_pcm_lib_mmap_iomem,
1536 };
1537
1538 static void
1539 snd_rme96_free(struct rme96 *rme96)
1540 {
1541         if (rme96->irq >= 0) {
1542                 snd_rme96_trigger(rme96, RME96_STOP_BOTH);
1543                 rme96->areg &= ~RME96_AR_DAC_EN;
1544                 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
1545         }
1546 #ifdef CONFIG_PM_SLEEP
1547         vfree(rme96->playback_suspend_buffer);
1548         vfree(rme96->capture_suspend_buffer);
1549 #endif
1550 }
1551
1552 static void
1553 snd_rme96_free_spdif_pcm(struct snd_pcm *pcm)
1554 {
1555         struct rme96 *rme96 = pcm->private_data;
1556         rme96->spdif_pcm = NULL;
1557 }
1558
1559 static void
1560 snd_rme96_free_adat_pcm(struct snd_pcm *pcm)
1561 {
1562         struct rme96 *rme96 = pcm->private_data;
1563         rme96->adat_pcm = NULL;
1564 }
1565
1566 static int
1567 snd_rme96_create(struct rme96 *rme96)
1568 {
1569         struct pci_dev *pci = rme96->pci;
1570         int err;
1571
1572         rme96->irq = -1;
1573         spin_lock_init(&rme96->lock);
1574
1575         err = pcim_enable_device(pci);
1576         if (err < 0)
1577                 return err;
1578
1579         err = pci_request_regions(pci, "RME96");
1580         if (err < 0)
1581                 return err;
1582         rme96->port = pci_resource_start(rme96->pci, 0);
1583
1584         rme96->iobase = devm_ioremap(&pci->dev, rme96->port, RME96_IO_SIZE);
1585         if (!rme96->iobase) {
1586                 dev_err(rme96->card->dev,
1587                         "unable to remap memory region 0x%lx-0x%lx\n",
1588                         rme96->port, rme96->port + RME96_IO_SIZE - 1);
1589                 return -EBUSY;
1590         }
1591
1592         if (devm_request_irq(&pci->dev, pci->irq, snd_rme96_interrupt,
1593                              IRQF_SHARED, KBUILD_MODNAME, rme96)) {
1594                 dev_err(rme96->card->dev, "unable to grab IRQ %d\n", pci->irq);
1595                 return -EBUSY;
1596         }
1597         rme96->irq = pci->irq;
1598         rme96->card->sync_irq = rme96->irq;
1599
1600         /* read the card's revision number */
1601         pci_read_config_byte(pci, 8, &rme96->rev);      
1602         
1603         /* set up ALSA pcm device for S/PDIF */
1604         err = snd_pcm_new(rme96->card, "Digi96 IEC958", 0,
1605                           1, 1, &rme96->spdif_pcm);
1606         if (err < 0)
1607                 return err;
1608
1609         rme96->spdif_pcm->private_data = rme96;
1610         rme96->spdif_pcm->private_free = snd_rme96_free_spdif_pcm;
1611         strcpy(rme96->spdif_pcm->name, "Digi96 IEC958");
1612         snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_spdif_ops);
1613         snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_spdif_ops);
1614
1615         rme96->spdif_pcm->info_flags = 0;
1616
1617         /* set up ALSA pcm device for ADAT */
1618         if (pci->device == PCI_DEVICE_ID_RME_DIGI96) {
1619                 /* ADAT is not available on the base model */
1620                 rme96->adat_pcm = NULL;
1621         } else {
1622                 err = snd_pcm_new(rme96->card, "Digi96 ADAT", 1,
1623                                   1, 1, &rme96->adat_pcm);
1624                 if (err < 0)
1625                         return err;
1626                 rme96->adat_pcm->private_data = rme96;
1627                 rme96->adat_pcm->private_free = snd_rme96_free_adat_pcm;
1628                 strcpy(rme96->adat_pcm->name, "Digi96 ADAT");
1629                 snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_adat_ops);
1630                 snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_adat_ops);
1631                 
1632                 rme96->adat_pcm->info_flags = 0;
1633         }
1634
1635         rme96->playback_periodsize = 0;
1636         rme96->capture_periodsize = 0;
1637         
1638         /* make sure playback/capture is stopped, if by some reason active */
1639         snd_rme96_trigger(rme96, RME96_STOP_BOTH);
1640         
1641         /* set default values in registers */
1642         rme96->wcreg =
1643                 RME96_WCR_FREQ_1 | /* set 44.1 kHz playback */
1644                 RME96_WCR_SEL |    /* normal playback */
1645                 RME96_WCR_MASTER | /* set to master clock mode */
1646                 RME96_WCR_INP_0;   /* set coaxial input */
1647
1648         rme96->areg = RME96_AR_FREQPAD_1; /* set 44.1 kHz analog capture */
1649
1650         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1651         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
1652         
1653         /* reset the ADC */
1654         writel(rme96->areg | RME96_AR_PD2,
1655                rme96->iobase + RME96_IO_ADDITIONAL_REG);
1656         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);   
1657
1658         /* reset and enable the DAC (order is important). */
1659         snd_rme96_reset_dac(rme96);
1660         rme96->areg |= RME96_AR_DAC_EN;
1661         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
1662
1663         /* reset playback and record buffer pointers */
1664         writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
1665         writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
1666
1667         /* reset volume */
1668         rme96->vol[0] = rme96->vol[1] = 0;
1669         if (RME96_HAS_ANALOG_OUT(rme96)) {
1670                 snd_rme96_apply_dac_volume(rme96);
1671         }
1672         
1673         /* init switch interface */
1674         err = snd_rme96_create_switches(rme96->card, rme96);
1675         if (err < 0)
1676                 return err;
1677
1678         /* init proc interface */
1679         snd_rme96_proc_init(rme96);
1680         
1681         return 0;
1682 }
1683
1684 /*
1685  * proc interface
1686  */
1687
1688 static void 
1689 snd_rme96_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
1690 {
1691         int n;
1692         struct rme96 *rme96 = entry->private_data;
1693         
1694         rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
1695
1696         snd_iprintf(buffer, rme96->card->longname);
1697         snd_iprintf(buffer, " (index #%d)\n", rme96->card->number + 1);
1698
1699         snd_iprintf(buffer, "\nGeneral settings\n");
1700         if (rme96->wcreg & RME96_WCR_IDIS) {
1701                 snd_iprintf(buffer, "  period size: N/A (interrupts "
1702                             "disabled)\n");
1703         } else if (rme96->wcreg & RME96_WCR_ISEL) {
1704                 snd_iprintf(buffer, "  period size: 2048 bytes\n");
1705         } else {
1706                 snd_iprintf(buffer, "  period size: 8192 bytes\n");
1707         }       
1708         snd_iprintf(buffer, "\nInput settings\n");
1709         switch (snd_rme96_getinputtype(rme96)) {
1710         case RME96_INPUT_OPTICAL:
1711                 snd_iprintf(buffer, "  input: optical");
1712                 break;
1713         case RME96_INPUT_COAXIAL:
1714                 snd_iprintf(buffer, "  input: coaxial");
1715                 break;
1716         case RME96_INPUT_INTERNAL:
1717                 snd_iprintf(buffer, "  input: internal");
1718                 break;
1719         case RME96_INPUT_XLR:
1720                 snd_iprintf(buffer, "  input: XLR");
1721                 break;
1722         case RME96_INPUT_ANALOG:
1723                 snd_iprintf(buffer, "  input: analog");
1724                 break;
1725         }
1726         if (snd_rme96_capture_getrate(rme96, &n) < 0) {
1727                 snd_iprintf(buffer, "\n  sample rate: no valid signal\n");
1728         } else {
1729                 if (n) {
1730                         snd_iprintf(buffer, " (8 channels)\n");
1731                 } else {
1732                         snd_iprintf(buffer, " (2 channels)\n");
1733                 }
1734                 snd_iprintf(buffer, "  sample rate: %d Hz\n",
1735                             snd_rme96_capture_getrate(rme96, &n));
1736         }
1737         if (rme96->wcreg & RME96_WCR_MODE24_2) {
1738                 snd_iprintf(buffer, "  sample format: 24 bit\n");
1739         } else {
1740                 snd_iprintf(buffer, "  sample format: 16 bit\n");
1741         }
1742         
1743         snd_iprintf(buffer, "\nOutput settings\n");
1744         if (rme96->wcreg & RME96_WCR_SEL) {
1745                 snd_iprintf(buffer, "  output signal: normal playback\n");
1746         } else {
1747                 snd_iprintf(buffer, "  output signal: same as input\n");
1748         }
1749         snd_iprintf(buffer, "  sample rate: %d Hz\n",
1750                     snd_rme96_playback_getrate(rme96));
1751         if (rme96->wcreg & RME96_WCR_MODE24) {
1752                 snd_iprintf(buffer, "  sample format: 24 bit\n");
1753         } else {
1754                 snd_iprintf(buffer, "  sample format: 16 bit\n");
1755         }
1756         if (rme96->areg & RME96_AR_WSEL) {
1757                 snd_iprintf(buffer, "  sample clock source: word clock\n");
1758         } else if (rme96->wcreg & RME96_WCR_MASTER) {
1759                 snd_iprintf(buffer, "  sample clock source: internal\n");
1760         } else if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
1761                 snd_iprintf(buffer, "  sample clock source: autosync (internal anyway due to analog input setting)\n");
1762         } else if (snd_rme96_capture_getrate(rme96, &n) < 0) {
1763                 snd_iprintf(buffer, "  sample clock source: autosync (internal anyway due to no valid signal)\n");
1764         } else {
1765                 snd_iprintf(buffer, "  sample clock source: autosync\n");
1766         }
1767         if (rme96->wcreg & RME96_WCR_PRO) {
1768                 snd_iprintf(buffer, "  format: AES/EBU (professional)\n");
1769         } else {
1770                 snd_iprintf(buffer, "  format: IEC958 (consumer)\n");
1771         }
1772         if (rme96->wcreg & RME96_WCR_EMP) {
1773                 snd_iprintf(buffer, "  emphasis: on\n");
1774         } else {
1775                 snd_iprintf(buffer, "  emphasis: off\n");
1776         }
1777         if (rme96->wcreg & RME96_WCR_DOLBY) {
1778                 snd_iprintf(buffer, "  non-audio (dolby): on\n");
1779         } else {
1780                 snd_iprintf(buffer, "  non-audio (dolby): off\n");
1781         }
1782         if (RME96_HAS_ANALOG_IN(rme96)) {
1783                 snd_iprintf(buffer, "\nAnalog output settings\n");
1784                 switch (snd_rme96_getmontracks(rme96)) {
1785                 case RME96_MONITOR_TRACKS_1_2:
1786                         snd_iprintf(buffer, "  monitored ADAT tracks: 1+2\n");
1787                         break;
1788                 case RME96_MONITOR_TRACKS_3_4:
1789                         snd_iprintf(buffer, "  monitored ADAT tracks: 3+4\n");
1790                         break;
1791                 case RME96_MONITOR_TRACKS_5_6:
1792                         snd_iprintf(buffer, "  monitored ADAT tracks: 5+6\n");
1793                         break;
1794                 case RME96_MONITOR_TRACKS_7_8:
1795                         snd_iprintf(buffer, "  monitored ADAT tracks: 7+8\n");
1796                         break;
1797                 }
1798                 switch (snd_rme96_getattenuation(rme96)) {
1799                 case RME96_ATTENUATION_0:
1800                         snd_iprintf(buffer, "  attenuation: 0 dB\n");
1801                         break;
1802                 case RME96_ATTENUATION_6:
1803                         snd_iprintf(buffer, "  attenuation: -6 dB\n");
1804                         break;
1805                 case RME96_ATTENUATION_12:
1806                         snd_iprintf(buffer, "  attenuation: -12 dB\n");
1807                         break;
1808                 case RME96_ATTENUATION_18:
1809                         snd_iprintf(buffer, "  attenuation: -18 dB\n");
1810                         break;
1811                 }
1812                 snd_iprintf(buffer, "  volume left: %u\n", rme96->vol[0]);
1813                 snd_iprintf(buffer, "  volume right: %u\n", rme96->vol[1]);
1814         }
1815 }
1816
1817 static void snd_rme96_proc_init(struct rme96 *rme96)
1818 {
1819         snd_card_ro_proc_new(rme96->card, "rme96", rme96, snd_rme96_proc_read);
1820 }
1821
1822 /*
1823  * control interface
1824  */
1825
1826 #define snd_rme96_info_loopback_control         snd_ctl_boolean_mono_info
1827
1828 static int
1829 snd_rme96_get_loopback_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1830 {
1831         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1832         
1833         spin_lock_irq(&rme96->lock);
1834         ucontrol->value.integer.value[0] = rme96->wcreg & RME96_WCR_SEL ? 0 : 1;
1835         spin_unlock_irq(&rme96->lock);
1836         return 0;
1837 }
1838 static int
1839 snd_rme96_put_loopback_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1840 {
1841         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1842         unsigned int val;
1843         int change;
1844         
1845         val = ucontrol->value.integer.value[0] ? 0 : RME96_WCR_SEL;
1846         spin_lock_irq(&rme96->lock);
1847         val = (rme96->wcreg & ~RME96_WCR_SEL) | val;
1848         change = val != rme96->wcreg;
1849         rme96->wcreg = val;
1850         writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
1851         spin_unlock_irq(&rme96->lock);
1852         return change;
1853 }
1854
1855 static int
1856 snd_rme96_info_inputtype_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1857 {
1858         static const char * const _texts[5] = {
1859                 "Optical", "Coaxial", "Internal", "XLR", "Analog"
1860         };
1861         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1862         const char *texts[5] = {
1863                 _texts[0], _texts[1], _texts[2], _texts[3], _texts[4]
1864         };
1865         int num_items;
1866         
1867         switch (rme96->pci->device) {
1868         case PCI_DEVICE_ID_RME_DIGI96:
1869         case PCI_DEVICE_ID_RME_DIGI96_8:
1870                 num_items = 3;
1871                 break;
1872         case PCI_DEVICE_ID_RME_DIGI96_8_PRO:
1873                 num_items = 4;
1874                 break;
1875         case PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST:
1876                 if (rme96->rev > 4) {
1877                         /* PST */
1878                         num_items = 4;
1879                         texts[3] = _texts[4]; /* Analog instead of XLR */
1880                 } else {
1881                         /* PAD */
1882                         num_items = 5;
1883                 }
1884                 break;
1885         default:
1886                 snd_BUG();
1887                 return -EINVAL;
1888         }
1889         return snd_ctl_enum_info(uinfo, 1, num_items, texts);
1890 }
1891 static int
1892 snd_rme96_get_inputtype_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1893 {
1894         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1895         unsigned int items = 3;
1896         
1897         spin_lock_irq(&rme96->lock);
1898         ucontrol->value.enumerated.item[0] = snd_rme96_getinputtype(rme96);
1899         
1900         switch (rme96->pci->device) {
1901         case PCI_DEVICE_ID_RME_DIGI96:
1902         case PCI_DEVICE_ID_RME_DIGI96_8:
1903                 items = 3;
1904                 break;
1905         case PCI_DEVICE_ID_RME_DIGI96_8_PRO:
1906                 items = 4;
1907                 break;
1908         case PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST:
1909                 if (rme96->rev > 4) {
1910                         /* for handling PST case, (INPUT_ANALOG is moved to INPUT_XLR */
1911                         if (ucontrol->value.enumerated.item[0] == RME96_INPUT_ANALOG) {
1912                                 ucontrol->value.enumerated.item[0] = RME96_INPUT_XLR;
1913                         }
1914                         items = 4;
1915                 } else {
1916                         items = 5;
1917                 }
1918                 break;
1919         default:
1920                 snd_BUG();
1921                 break;
1922         }
1923         if (ucontrol->value.enumerated.item[0] >= items) {
1924                 ucontrol->value.enumerated.item[0] = items - 1;
1925         }
1926         
1927         spin_unlock_irq(&rme96->lock);
1928         return 0;
1929 }
1930 static int
1931 snd_rme96_put_inputtype_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1932 {
1933         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1934         unsigned int val;
1935         int change, items = 3;
1936         
1937         switch (rme96->pci->device) {
1938         case PCI_DEVICE_ID_RME_DIGI96:
1939         case PCI_DEVICE_ID_RME_DIGI96_8:
1940                 items = 3;
1941                 break;
1942         case PCI_DEVICE_ID_RME_DIGI96_8_PRO:
1943                 items = 4;
1944                 break;
1945         case PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST:
1946                 if (rme96->rev > 4) {
1947                         items = 4;
1948                 } else {
1949                         items = 5;
1950                 }
1951                 break;
1952         default:
1953                 snd_BUG();
1954                 break;
1955         }
1956         val = ucontrol->value.enumerated.item[0] % items;
1957         
1958         /* special case for PST */
1959         if (rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && rme96->rev > 4) {
1960                 if (val == RME96_INPUT_XLR) {
1961                         val = RME96_INPUT_ANALOG;
1962                 }
1963         }
1964         
1965         spin_lock_irq(&rme96->lock);
1966         change = (int)val != snd_rme96_getinputtype(rme96);
1967         snd_rme96_setinputtype(rme96, val);
1968         spin_unlock_irq(&rme96->lock);
1969         return change;
1970 }
1971
1972 static int
1973 snd_rme96_info_clockmode_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
1974 {
1975         static const char * const texts[3] = { "AutoSync", "Internal", "Word" };
1976         
1977         return snd_ctl_enum_info(uinfo, 1, 3, texts);
1978 }
1979 static int
1980 snd_rme96_get_clockmode_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1981 {
1982         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1983         
1984         spin_lock_irq(&rme96->lock);
1985         ucontrol->value.enumerated.item[0] = snd_rme96_getclockmode(rme96);
1986         spin_unlock_irq(&rme96->lock);
1987         return 0;
1988 }
1989 static int
1990 snd_rme96_put_clockmode_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
1991 {
1992         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
1993         unsigned int val;
1994         int change;
1995         
1996         val = ucontrol->value.enumerated.item[0] % 3;
1997         spin_lock_irq(&rme96->lock);
1998         change = (int)val != snd_rme96_getclockmode(rme96);
1999         snd_rme96_setclockmode(rme96, val);
2000         spin_unlock_irq(&rme96->lock);
2001         return change;
2002 }
2003
2004 static int
2005 snd_rme96_info_attenuation_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2006 {
2007         static const char * const texts[4] = {
2008                 "0 dB", "-6 dB", "-12 dB", "-18 dB"
2009         };
2010         
2011         return snd_ctl_enum_info(uinfo, 1, 4, texts);
2012 }
2013 static int
2014 snd_rme96_get_attenuation_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2015 {
2016         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2017         
2018         spin_lock_irq(&rme96->lock);
2019         ucontrol->value.enumerated.item[0] = snd_rme96_getattenuation(rme96);
2020         spin_unlock_irq(&rme96->lock);
2021         return 0;
2022 }
2023 static int
2024 snd_rme96_put_attenuation_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2025 {
2026         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2027         unsigned int val;
2028         int change;
2029         
2030         val = ucontrol->value.enumerated.item[0] % 4;
2031         spin_lock_irq(&rme96->lock);
2032
2033         change = (int)val != snd_rme96_getattenuation(rme96);
2034         snd_rme96_setattenuation(rme96, val);
2035         spin_unlock_irq(&rme96->lock);
2036         return change;
2037 }
2038
2039 static int
2040 snd_rme96_info_montracks_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2041 {
2042         static const char * const texts[4] = { "1+2", "3+4", "5+6", "7+8" };
2043         
2044         return snd_ctl_enum_info(uinfo, 1, 4, texts);
2045 }
2046 static int
2047 snd_rme96_get_montracks_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2048 {
2049         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2050         
2051         spin_lock_irq(&rme96->lock);
2052         ucontrol->value.enumerated.item[0] = snd_rme96_getmontracks(rme96);
2053         spin_unlock_irq(&rme96->lock);
2054         return 0;
2055 }
2056 static int
2057 snd_rme96_put_montracks_control(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2058 {
2059         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2060         unsigned int val;
2061         int change;
2062         
2063         val = ucontrol->value.enumerated.item[0] % 4;
2064         spin_lock_irq(&rme96->lock);
2065         change = (int)val != snd_rme96_getmontracks(rme96);
2066         snd_rme96_setmontracks(rme96, val);
2067         spin_unlock_irq(&rme96->lock);
2068         return change;
2069 }
2070
2071 static u32 snd_rme96_convert_from_aes(struct snd_aes_iec958 *aes)
2072 {
2073         u32 val = 0;
2074         val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? RME96_WCR_PRO : 0;
2075         val |= (aes->status[0] & IEC958_AES0_NONAUDIO) ? RME96_WCR_DOLBY : 0;
2076         if (val & RME96_WCR_PRO)
2077                 val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? RME96_WCR_EMP : 0;
2078         else
2079                 val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? RME96_WCR_EMP : 0;
2080         return val;
2081 }
2082
2083 static void snd_rme96_convert_to_aes(struct snd_aes_iec958 *aes, u32 val)
2084 {
2085         aes->status[0] = ((val & RME96_WCR_PRO) ? IEC958_AES0_PROFESSIONAL : 0) |
2086                          ((val & RME96_WCR_DOLBY) ? IEC958_AES0_NONAUDIO : 0);
2087         if (val & RME96_WCR_PRO)
2088                 aes->status[0] |= (val & RME96_WCR_EMP) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
2089         else
2090                 aes->status[0] |= (val & RME96_WCR_EMP) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
2091 }
2092
2093 static int snd_rme96_control_spdif_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2094 {
2095         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2096         uinfo->count = 1;
2097         return 0;
2098 }
2099
2100 static int snd_rme96_control_spdif_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2101 {
2102         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2103         
2104         snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif);
2105         return 0;
2106 }
2107
2108 static int snd_rme96_control_spdif_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2109 {
2110         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2111         int change;
2112         u32 val;
2113         
2114         val = snd_rme96_convert_from_aes(&ucontrol->value.iec958);
2115         spin_lock_irq(&rme96->lock);
2116         change = val != rme96->wcreg_spdif;
2117         rme96->wcreg_spdif = val;
2118         spin_unlock_irq(&rme96->lock);
2119         return change;
2120 }
2121
2122 static int snd_rme96_control_spdif_stream_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2123 {
2124         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2125         uinfo->count = 1;
2126         return 0;
2127 }
2128
2129 static int snd_rme96_control_spdif_stream_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2130 {
2131         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2132         
2133         snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif_stream);
2134         return 0;
2135 }
2136
2137 static int snd_rme96_control_spdif_stream_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2138 {
2139         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2140         int change;
2141         u32 val;
2142         
2143         val = snd_rme96_convert_from_aes(&ucontrol->value.iec958);
2144         spin_lock_irq(&rme96->lock);
2145         change = val != rme96->wcreg_spdif_stream;
2146         rme96->wcreg_spdif_stream = val;
2147         rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
2148         rme96->wcreg |= val;
2149         writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
2150         spin_unlock_irq(&rme96->lock);
2151         return change;
2152 }
2153
2154 static int snd_rme96_control_spdif_mask_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2155 {
2156         uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
2157         uinfo->count = 1;
2158         return 0;
2159 }
2160
2161 static int snd_rme96_control_spdif_mask_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
2162 {
2163         ucontrol->value.iec958.status[0] = kcontrol->private_value;
2164         return 0;
2165 }
2166
2167 static int
2168 snd_rme96_dac_volume_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
2169 {
2170         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2171         
2172         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
2173         uinfo->count = 2;
2174         uinfo->value.integer.min = 0;
2175         uinfo->value.integer.max = RME96_185X_MAX_OUT(rme96);
2176         return 0;
2177 }
2178
2179 static int
2180 snd_rme96_dac_volume_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *u)
2181 {
2182         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2183
2184         spin_lock_irq(&rme96->lock);
2185         u->value.integer.value[0] = rme96->vol[0];
2186         u->value.integer.value[1] = rme96->vol[1];
2187         spin_unlock_irq(&rme96->lock);
2188
2189         return 0;
2190 }
2191
2192 static int
2193 snd_rme96_dac_volume_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *u)
2194 {
2195         struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
2196         int change = 0;
2197         unsigned int vol, maxvol;
2198
2199
2200         if (!RME96_HAS_ANALOG_OUT(rme96))
2201                 return -EINVAL;
2202         maxvol = RME96_185X_MAX_OUT(rme96);
2203         spin_lock_irq(&rme96->lock);
2204         vol = u->value.integer.value[0];
2205         if (vol != rme96->vol[0] && vol <= maxvol) {
2206                 rme96->vol[0] = vol;
2207                 change = 1;
2208         }
2209         vol = u->value.integer.value[1];
2210         if (vol != rme96->vol[1] && vol <= maxvol) {
2211                 rme96->vol[1] = vol;
2212                 change = 1;
2213         }
2214         if (change)
2215                 snd_rme96_apply_dac_volume(rme96);
2216         spin_unlock_irq(&rme96->lock);
2217
2218         return change;
2219 }
2220
2221 static const struct snd_kcontrol_new snd_rme96_controls[] = {
2222 {
2223         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2224         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
2225         .info =         snd_rme96_control_spdif_info,
2226         .get =          snd_rme96_control_spdif_get,
2227         .put =          snd_rme96_control_spdif_put
2228 },
2229 {
2230         .access =       SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
2231         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2232         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,PCM_STREAM),
2233         .info =         snd_rme96_control_spdif_stream_info,
2234         .get =          snd_rme96_control_spdif_stream_get,
2235         .put =          snd_rme96_control_spdif_stream_put
2236 },
2237 {
2238         .access =       SNDRV_CTL_ELEM_ACCESS_READ,
2239         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2240         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
2241         .info =         snd_rme96_control_spdif_mask_info,
2242         .get =          snd_rme96_control_spdif_mask_get,
2243         .private_value = IEC958_AES0_NONAUDIO |
2244                         IEC958_AES0_PROFESSIONAL |
2245                         IEC958_AES0_CON_EMPHASIS
2246 },
2247 {
2248         .access =       SNDRV_CTL_ELEM_ACCESS_READ,
2249         .iface =        SNDRV_CTL_ELEM_IFACE_PCM,
2250         .name =         SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),
2251         .info =         snd_rme96_control_spdif_mask_info,
2252         .get =          snd_rme96_control_spdif_mask_get,
2253         .private_value = IEC958_AES0_NONAUDIO |
2254                         IEC958_AES0_PROFESSIONAL |
2255                         IEC958_AES0_PRO_EMPHASIS
2256 },
2257 {
2258         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2259         .name =         "Input Connector",
2260         .info =         snd_rme96_info_inputtype_control, 
2261         .get =          snd_rme96_get_inputtype_control,
2262         .put =          snd_rme96_put_inputtype_control 
2263 },
2264 {
2265         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2266         .name =         "Loopback Input",
2267         .info =         snd_rme96_info_loopback_control,
2268         .get =          snd_rme96_get_loopback_control,
2269         .put =          snd_rme96_put_loopback_control
2270 },
2271 {
2272         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2273         .name =         "Sample Clock Source",
2274         .info =         snd_rme96_info_clockmode_control, 
2275         .get =          snd_rme96_get_clockmode_control,
2276         .put =          snd_rme96_put_clockmode_control
2277 },
2278 {
2279         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2280         .name =         "Monitor Tracks",
2281         .info =         snd_rme96_info_montracks_control, 
2282         .get =          snd_rme96_get_montracks_control,
2283         .put =          snd_rme96_put_montracks_control
2284 },
2285 {
2286         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2287         .name =         "Attenuation",
2288         .info =         snd_rme96_info_attenuation_control, 
2289         .get =          snd_rme96_get_attenuation_control,
2290         .put =          snd_rme96_put_attenuation_control
2291 },
2292 {
2293         .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
2294         .name =         "DAC Playback Volume",
2295         .info =         snd_rme96_dac_volume_info,
2296         .get =          snd_rme96_dac_volume_get,
2297         .put =          snd_rme96_dac_volume_put
2298 }
2299 };
2300
2301 static int
2302 snd_rme96_create_switches(struct snd_card *card,
2303                           struct rme96 *rme96)
2304 {
2305         int idx, err;
2306         struct snd_kcontrol *kctl;
2307
2308         for (idx = 0; idx < 7; idx++) {
2309                 kctl = snd_ctl_new1(&snd_rme96_controls[idx], rme96);
2310                 err = snd_ctl_add(card, kctl);
2311                 if (err < 0)
2312                         return err;
2313                 if (idx == 1)   /* IEC958 (S/PDIF) Stream */
2314                         rme96->spdif_ctl = kctl;
2315         }
2316
2317         if (RME96_HAS_ANALOG_OUT(rme96)) {
2318                 for (idx = 7; idx < 10; idx++) {
2319                         err = snd_ctl_add(card, snd_ctl_new1(&snd_rme96_controls[idx], rme96));
2320                         if (err < 0)
2321                                 return err;
2322                 }
2323         }
2324         
2325         return 0;
2326 }
2327
2328 /*
2329  * Card initialisation
2330  */
2331
2332 #ifdef CONFIG_PM_SLEEP
2333
2334 static int rme96_suspend(struct device *dev)
2335 {
2336         struct snd_card *card = dev_get_drvdata(dev);
2337         struct rme96 *rme96 = card->private_data;
2338
2339         snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2340
2341         /* save capture & playback pointers */
2342         rme96->playback_pointer = readl(rme96->iobase + RME96_IO_GET_PLAY_POS)
2343                                   & RME96_RCR_AUDIO_ADDR_MASK;
2344         rme96->capture_pointer = readl(rme96->iobase + RME96_IO_GET_REC_POS)
2345                                  & RME96_RCR_AUDIO_ADDR_MASK;
2346
2347         /* save playback and capture buffers */
2348         memcpy_fromio(rme96->playback_suspend_buffer,
2349                       rme96->iobase + RME96_IO_PLAY_BUFFER, RME96_BUFFER_SIZE);
2350         memcpy_fromio(rme96->capture_suspend_buffer,
2351                       rme96->iobase + RME96_IO_REC_BUFFER, RME96_BUFFER_SIZE);
2352
2353         /* disable the DAC  */
2354         rme96->areg &= ~RME96_AR_DAC_EN;
2355         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
2356         return 0;
2357 }
2358
2359 static int rme96_resume(struct device *dev)
2360 {
2361         struct snd_card *card = dev_get_drvdata(dev);
2362         struct rme96 *rme96 = card->private_data;
2363
2364         /* reset playback and record buffer pointers */
2365         writel(0, rme96->iobase + RME96_IO_SET_PLAY_POS
2366                   + rme96->playback_pointer);
2367         writel(0, rme96->iobase + RME96_IO_SET_REC_POS
2368                   + rme96->capture_pointer);
2369
2370         /* restore playback and capture buffers */
2371         memcpy_toio(rme96->iobase + RME96_IO_PLAY_BUFFER,
2372                     rme96->playback_suspend_buffer, RME96_BUFFER_SIZE);
2373         memcpy_toio(rme96->iobase + RME96_IO_REC_BUFFER,
2374                     rme96->capture_suspend_buffer, RME96_BUFFER_SIZE);
2375
2376         /* reset the ADC */
2377         writel(rme96->areg | RME96_AR_PD2,
2378                rme96->iobase + RME96_IO_ADDITIONAL_REG);
2379         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
2380
2381         /* reset and enable DAC, restore analog volume */
2382         snd_rme96_reset_dac(rme96);
2383         rme96->areg |= RME96_AR_DAC_EN;
2384         writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
2385         if (RME96_HAS_ANALOG_OUT(rme96)) {
2386                 usleep_range(3000, 10000);
2387                 snd_rme96_apply_dac_volume(rme96);
2388         }
2389
2390         snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2391
2392         return 0;
2393 }
2394
2395 static SIMPLE_DEV_PM_OPS(rme96_pm, rme96_suspend, rme96_resume);
2396 #define RME96_PM_OPS    &rme96_pm
2397 #else
2398 #define RME96_PM_OPS    NULL
2399 #endif /* CONFIG_PM_SLEEP */
2400
2401 static void snd_rme96_card_free(struct snd_card *card)
2402 {
2403         snd_rme96_free(card->private_data);
2404 }
2405
2406 static int
2407 __snd_rme96_probe(struct pci_dev *pci,
2408                   const struct pci_device_id *pci_id)
2409 {
2410         static int dev;
2411         struct rme96 *rme96;
2412         struct snd_card *card;
2413         int err;
2414         u8 val;
2415
2416         if (dev >= SNDRV_CARDS) {
2417                 return -ENODEV;
2418         }
2419         if (!enable[dev]) {
2420                 dev++;
2421                 return -ENOENT;
2422         }
2423         err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2424                                 sizeof(*rme96), &card);
2425         if (err < 0)
2426                 return err;
2427         card->private_free = snd_rme96_card_free;
2428         rme96 = card->private_data;
2429         rme96->card = card;
2430         rme96->pci = pci;
2431         err = snd_rme96_create(rme96);
2432         if (err)
2433                 return err;
2434         
2435 #ifdef CONFIG_PM_SLEEP
2436         rme96->playback_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);
2437         if (!rme96->playback_suspend_buffer)
2438                 return -ENOMEM;
2439         rme96->capture_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);
2440         if (!rme96->capture_suspend_buffer)
2441                 return -ENOMEM;
2442 #endif
2443
2444         strcpy(card->driver, "Digi96");
2445         switch (rme96->pci->device) {
2446         case PCI_DEVICE_ID_RME_DIGI96:
2447                 strcpy(card->shortname, "RME Digi96");
2448                 break;
2449         case PCI_DEVICE_ID_RME_DIGI96_8:
2450                 strcpy(card->shortname, "RME Digi96/8");
2451                 break;
2452         case PCI_DEVICE_ID_RME_DIGI96_8_PRO:
2453                 strcpy(card->shortname, "RME Digi96/8 PRO");
2454                 break;
2455         case PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST:
2456                 pci_read_config_byte(rme96->pci, 8, &val);
2457                 if (val < 5) {
2458                         strcpy(card->shortname, "RME Digi96/8 PAD");
2459                 } else {
2460                         strcpy(card->shortname, "RME Digi96/8 PST");
2461                 }
2462                 break;
2463         }
2464         sprintf(card->longname, "%s at 0x%lx, irq %d", card->shortname,
2465                 rme96->port, rme96->irq);
2466         err = snd_card_register(card);
2467         if (err)
2468                 return err;
2469
2470         pci_set_drvdata(pci, card);
2471         dev++;
2472         return 0;
2473 }
2474
2475 static int snd_rme96_probe(struct pci_dev *pci,
2476                            const struct pci_device_id *pci_id)
2477 {
2478         return snd_card_free_on_error(&pci->dev, __snd_rme96_probe(pci, pci_id));
2479 }
2480
2481 static struct pci_driver rme96_driver = {
2482         .name = KBUILD_MODNAME,
2483         .id_table = snd_rme96_ids,
2484         .probe = snd_rme96_probe,
2485         .driver = {
2486                 .pm = RME96_PM_OPS,
2487         },
2488 };
2489
2490 module_pci_driver(rme96_driver);