0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058 #include <linux/delay.h>
0059 #include <linux/gfp.h>
0060 #include <linux/init.h>
0061 #include <linux/interrupt.h>
0062 #include <linux/pci.h>
0063 #include <linux/module.h>
0064 #include <linux/io.h>
0065
0066 #include <sound/core.h>
0067 #include <sound/info.h>
0068 #include <sound/control.h>
0069 #include <sound/pcm.h>
0070 #include <sound/pcm_params.h>
0071 #include <sound/pcm-indirect.h>
0072 #include <sound/asoundef.h>
0073 #include <sound/initval.h>
0074
0075 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
0076 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
0077 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
0078 static bool fullduplex[SNDRV_CARDS];
0079
0080 module_param_array(index, int, NULL, 0444);
0081 MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard.");
0082 module_param_array(id, charp, NULL, 0444);
0083 MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard.");
0084 module_param_array(enable, bool, NULL, 0444);
0085 MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard.");
0086 module_param_array(fullduplex, bool, NULL, 0444);
0087 MODULE_PARM_DESC(fullduplex, "Support full-duplex mode.");
0088 MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>, Pilo Chambert <pilo.c@wanadoo.fr>");
0089 MODULE_DESCRIPTION("RME Digi32, Digi32/8, Digi32 PRO");
0090 MODULE_LICENSE("GPL");
0091
0092
0093 #define RME32_SPDIF_NCHANNELS 2
0094
0095
0096 #define RME32_BUFFER_SIZE 0x20000
0097
0098
0099 #define RME32_IO_SIZE 0x30000
0100
0101
0102 #define RME32_IO_DATA_BUFFER 0x0
0103 #define RME32_IO_CONTROL_REGISTER 0x20000
0104 #define RME32_IO_GET_POS 0x20000
0105 #define RME32_IO_CONFIRM_ACTION_IRQ 0x20004
0106 #define RME32_IO_RESET_POS 0x20100
0107
0108
0109 #define RME32_WCR_START (1 << 0)
0110 #define RME32_WCR_MONO (1 << 1)
0111
0112
0113
0114
0115
0116
0117
0118 #define RME32_WCR_MODE24 (1 << 2)
0119 #define RME32_WCR_SEL (1 << 3)
0120 #define RME32_WCR_FREQ_0 (1 << 4)
0121 #define RME32_WCR_FREQ_1 (1 << 5)
0122 #define RME32_WCR_INP_0 (1 << 6)
0123 #define RME32_WCR_INP_1 (1 << 7)
0124 #define RME32_WCR_RESET (1 << 8)
0125 #define RME32_WCR_MUTE (1 << 9)
0126 #define RME32_WCR_PRO (1 << 10)
0127 #define RME32_WCR_DS_BM (1 << 11)
0128 #define RME32_WCR_ADAT (1 << 12)
0129 #define RME32_WCR_AUTOSYNC (1 << 13)
0130 #define RME32_WCR_PD (1 << 14)
0131 #define RME32_WCR_EMP (1 << 15)
0132
0133 #define RME32_WCR_BITPOS_FREQ_0 4
0134 #define RME32_WCR_BITPOS_FREQ_1 5
0135 #define RME32_WCR_BITPOS_INP_0 6
0136 #define RME32_WCR_BITPOS_INP_1 7
0137
0138
0139 #define RME32_RCR_AUDIO_ADDR_MASK 0x1ffff
0140 #define RME32_RCR_LOCK (1 << 23)
0141 #define RME32_RCR_ERF (1 << 26)
0142 #define RME32_RCR_FREQ_0 (1 << 27)
0143 #define RME32_RCR_FREQ_1 (1 << 28)
0144 #define RME32_RCR_FREQ_2 (1 << 29)
0145 #define RME32_RCR_KMODE (1 << 30)
0146 #define RME32_RCR_IRQ (1 << 31)
0147
0148 #define RME32_RCR_BITPOS_F0 27
0149 #define RME32_RCR_BITPOS_F1 28
0150 #define RME32_RCR_BITPOS_F2 29
0151
0152
0153 #define RME32_INPUT_OPTICAL 0
0154 #define RME32_INPUT_COAXIAL 1
0155 #define RME32_INPUT_INTERNAL 2
0156 #define RME32_INPUT_XLR 3
0157
0158
0159 #define RME32_CLOCKMODE_SLAVE 0
0160 #define RME32_CLOCKMODE_MASTER_32 1
0161 #define RME32_CLOCKMODE_MASTER_44 2
0162 #define RME32_CLOCKMODE_MASTER_48 3
0163
0164
0165 #define RME32_BLOCK_SIZE 8192
0166
0167
0168 #define RME32_MID_BUFFER_SIZE (1024*1024)
0169
0170
0171 #define RME32_32_REVISION 192
0172 #define RME32_328_REVISION_OLD 100
0173 #define RME32_328_REVISION_NEW 101
0174 #define RME32_PRO_REVISION_WITH_8412 192
0175 #define RME32_PRO_REVISION_WITH_8414 150
0176
0177
0178 struct rme32 {
0179 spinlock_t lock;
0180 int irq;
0181 unsigned long port;
0182 void __iomem *iobase;
0183
0184 u32 wcreg;
0185 u32 wcreg_spdif;
0186 u32 wcreg_spdif_stream;
0187 u32 rcreg;
0188
0189 u8 rev;
0190
0191 struct snd_pcm_substream *playback_substream;
0192 struct snd_pcm_substream *capture_substream;
0193
0194 int playback_frlog;
0195 int capture_frlog;
0196
0197 size_t playback_periodsize;
0198 size_t capture_periodsize;
0199
0200 unsigned int fullduplex_mode;
0201 int running;
0202
0203 struct snd_pcm_indirect playback_pcm;
0204 struct snd_pcm_indirect capture_pcm;
0205
0206 struct snd_card *card;
0207 struct snd_pcm *spdif_pcm;
0208 struct snd_pcm *adat_pcm;
0209 struct pci_dev *pci;
0210 struct snd_kcontrol *spdif_ctl;
0211 };
0212
0213 static const struct pci_device_id snd_rme32_ids[] = {
0214 {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32), 0,},
0215 {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_8), 0,},
0216 {PCI_VDEVICE(XILINX_RME, PCI_DEVICE_ID_RME_DIGI32_PRO), 0,},
0217 {0,}
0218 };
0219
0220 MODULE_DEVICE_TABLE(pci, snd_rme32_ids);
0221
0222 #define RME32_ISWORKING(rme32) ((rme32)->wcreg & RME32_WCR_START)
0223 #define RME32_PRO_WITH_8414(rme32) ((rme32)->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO && (rme32)->rev == RME32_PRO_REVISION_WITH_8414)
0224
0225 static int snd_rme32_playback_prepare(struct snd_pcm_substream *substream);
0226
0227 static int snd_rme32_capture_prepare(struct snd_pcm_substream *substream);
0228
0229 static int snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd);
0230
0231 static void snd_rme32_proc_init(struct rme32 * rme32);
0232
0233 static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32);
0234
0235 static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32)
0236 {
0237 return (readl(rme32->iobase + RME32_IO_GET_POS)
0238 & RME32_RCR_AUDIO_ADDR_MASK);
0239 }
0240
0241
0242 static int snd_rme32_playback_silence(struct snd_pcm_substream *substream,
0243 int channel, unsigned long pos,
0244 unsigned long count)
0245 {
0246 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0247
0248 memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count);
0249 return 0;
0250 }
0251
0252
0253 static int snd_rme32_playback_copy(struct snd_pcm_substream *substream,
0254 int channel, unsigned long pos,
0255 void __user *src, unsigned long count)
0256 {
0257 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0258
0259 if (copy_from_user_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos,
0260 src, count))
0261 return -EFAULT;
0262 return 0;
0263 }
0264
0265 static int snd_rme32_playback_copy_kernel(struct snd_pcm_substream *substream,
0266 int channel, unsigned long pos,
0267 void *src, unsigned long count)
0268 {
0269 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0270
0271 memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos, src, count);
0272 return 0;
0273 }
0274
0275
0276 static int snd_rme32_capture_copy(struct snd_pcm_substream *substream,
0277 int channel, unsigned long pos,
0278 void __user *dst, unsigned long count)
0279 {
0280 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0281
0282 if (copy_to_user_fromio(dst,
0283 rme32->iobase + RME32_IO_DATA_BUFFER + pos,
0284 count))
0285 return -EFAULT;
0286 return 0;
0287 }
0288
0289 static int snd_rme32_capture_copy_kernel(struct snd_pcm_substream *substream,
0290 int channel, unsigned long pos,
0291 void *dst, unsigned long count)
0292 {
0293 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0294
0295 memcpy_fromio(dst, rme32->iobase + RME32_IO_DATA_BUFFER + pos, count);
0296 return 0;
0297 }
0298
0299
0300
0301
0302 static const struct snd_pcm_hardware snd_rme32_spdif_info = {
0303 .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
0304 SNDRV_PCM_INFO_MMAP_VALID |
0305 SNDRV_PCM_INFO_INTERLEAVED |
0306 SNDRV_PCM_INFO_PAUSE |
0307 SNDRV_PCM_INFO_SYNC_START |
0308 SNDRV_PCM_INFO_SYNC_APPLPTR),
0309 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
0310 SNDRV_PCM_FMTBIT_S32_LE),
0311 .rates = (SNDRV_PCM_RATE_32000 |
0312 SNDRV_PCM_RATE_44100 |
0313 SNDRV_PCM_RATE_48000),
0314 .rate_min = 32000,
0315 .rate_max = 48000,
0316 .channels_min = 2,
0317 .channels_max = 2,
0318 .buffer_bytes_max = RME32_BUFFER_SIZE,
0319 .period_bytes_min = RME32_BLOCK_SIZE,
0320 .period_bytes_max = RME32_BLOCK_SIZE,
0321 .periods_min = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
0322 .periods_max = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
0323 .fifo_size = 0,
0324 };
0325
0326
0327
0328
0329 static const struct snd_pcm_hardware snd_rme32_adat_info =
0330 {
0331 .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
0332 SNDRV_PCM_INFO_MMAP_VALID |
0333 SNDRV_PCM_INFO_INTERLEAVED |
0334 SNDRV_PCM_INFO_PAUSE |
0335 SNDRV_PCM_INFO_SYNC_START |
0336 SNDRV_PCM_INFO_SYNC_APPLPTR),
0337 .formats= SNDRV_PCM_FMTBIT_S16_LE,
0338 .rates = (SNDRV_PCM_RATE_44100 |
0339 SNDRV_PCM_RATE_48000),
0340 .rate_min = 44100,
0341 .rate_max = 48000,
0342 .channels_min = 8,
0343 .channels_max = 8,
0344 .buffer_bytes_max = RME32_BUFFER_SIZE,
0345 .period_bytes_min = RME32_BLOCK_SIZE,
0346 .period_bytes_max = RME32_BLOCK_SIZE,
0347 .periods_min = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
0348 .periods_max = RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
0349 .fifo_size = 0,
0350 };
0351
0352
0353
0354
0355 static const struct snd_pcm_hardware snd_rme32_spdif_fd_info = {
0356 .info = (SNDRV_PCM_INFO_MMAP |
0357 SNDRV_PCM_INFO_MMAP_VALID |
0358 SNDRV_PCM_INFO_INTERLEAVED |
0359 SNDRV_PCM_INFO_PAUSE |
0360 SNDRV_PCM_INFO_SYNC_START |
0361 SNDRV_PCM_INFO_SYNC_APPLPTR),
0362 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
0363 SNDRV_PCM_FMTBIT_S32_LE),
0364 .rates = (SNDRV_PCM_RATE_32000 |
0365 SNDRV_PCM_RATE_44100 |
0366 SNDRV_PCM_RATE_48000),
0367 .rate_min = 32000,
0368 .rate_max = 48000,
0369 .channels_min = 2,
0370 .channels_max = 2,
0371 .buffer_bytes_max = RME32_MID_BUFFER_SIZE,
0372 .period_bytes_min = RME32_BLOCK_SIZE,
0373 .period_bytes_max = RME32_BLOCK_SIZE,
0374 .periods_min = 2,
0375 .periods_max = RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
0376 .fifo_size = 0,
0377 };
0378
0379
0380
0381
0382 static const struct snd_pcm_hardware snd_rme32_adat_fd_info =
0383 {
0384 .info = (SNDRV_PCM_INFO_MMAP |
0385 SNDRV_PCM_INFO_MMAP_VALID |
0386 SNDRV_PCM_INFO_INTERLEAVED |
0387 SNDRV_PCM_INFO_PAUSE |
0388 SNDRV_PCM_INFO_SYNC_START |
0389 SNDRV_PCM_INFO_SYNC_APPLPTR),
0390 .formats= SNDRV_PCM_FMTBIT_S16_LE,
0391 .rates = (SNDRV_PCM_RATE_44100 |
0392 SNDRV_PCM_RATE_48000),
0393 .rate_min = 44100,
0394 .rate_max = 48000,
0395 .channels_min = 8,
0396 .channels_max = 8,
0397 .buffer_bytes_max = RME32_MID_BUFFER_SIZE,
0398 .period_bytes_min = RME32_BLOCK_SIZE,
0399 .period_bytes_max = RME32_BLOCK_SIZE,
0400 .periods_min = 2,
0401 .periods_max = RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
0402 .fifo_size = 0,
0403 };
0404
0405 static void snd_rme32_reset_dac(struct rme32 *rme32)
0406 {
0407 writel(rme32->wcreg | RME32_WCR_PD,
0408 rme32->iobase + RME32_IO_CONTROL_REGISTER);
0409 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0410 }
0411
0412 static int snd_rme32_playback_getrate(struct rme32 * rme32)
0413 {
0414 int rate;
0415
0416 rate = ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) +
0417 (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1);
0418 switch (rate) {
0419 case 1:
0420 rate = 32000;
0421 break;
0422 case 2:
0423 rate = 44100;
0424 break;
0425 case 3:
0426 rate = 48000;
0427 break;
0428 default:
0429 return -1;
0430 }
0431 return (rme32->wcreg & RME32_WCR_DS_BM) ? rate << 1 : rate;
0432 }
0433
0434 static int snd_rme32_capture_getrate(struct rme32 * rme32, int *is_adat)
0435 {
0436 int n;
0437
0438 *is_adat = 0;
0439 if (rme32->rcreg & RME32_RCR_LOCK) {
0440
0441 *is_adat = 1;
0442 }
0443 if (rme32->rcreg & RME32_RCR_ERF) {
0444 return -1;
0445 }
0446
0447
0448 n = ((rme32->rcreg >> RME32_RCR_BITPOS_F0) & 1) +
0449 (((rme32->rcreg >> RME32_RCR_BITPOS_F1) & 1) << 1) +
0450 (((rme32->rcreg >> RME32_RCR_BITPOS_F2) & 1) << 2);
0451
0452 if (RME32_PRO_WITH_8414(rme32))
0453 switch (n) {
0454 case 0:
0455 case 1:
0456 case 2:
0457 return -1;
0458 case 3:
0459 return 96000;
0460 case 4:
0461 return 88200;
0462 case 5:
0463 return 48000;
0464 case 6:
0465 return 44100;
0466 case 7:
0467 return 32000;
0468 default:
0469 return -1;
0470 }
0471 else
0472 switch (n) {
0473 case 0:
0474 return -1;
0475 case 1:
0476 return 48000;
0477 case 2:
0478 return 44100;
0479 case 3:
0480 return 32000;
0481 case 4:
0482 return 48000;
0483 case 5:
0484 return 44100;
0485 case 6:
0486 return 44056;
0487 case 7:
0488 return 32000;
0489 default:
0490 break;
0491 }
0492 return -1;
0493 }
0494
0495 static int snd_rme32_playback_setrate(struct rme32 * rme32, int rate)
0496 {
0497 int ds;
0498
0499 ds = rme32->wcreg & RME32_WCR_DS_BM;
0500 switch (rate) {
0501 case 32000:
0502 rme32->wcreg &= ~RME32_WCR_DS_BM;
0503 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
0504 ~RME32_WCR_FREQ_1;
0505 break;
0506 case 44100:
0507 rme32->wcreg &= ~RME32_WCR_DS_BM;
0508 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) &
0509 ~RME32_WCR_FREQ_0;
0510 break;
0511 case 48000:
0512 rme32->wcreg &= ~RME32_WCR_DS_BM;
0513 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
0514 RME32_WCR_FREQ_1;
0515 break;
0516 case 64000:
0517 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
0518 return -EINVAL;
0519 rme32->wcreg |= RME32_WCR_DS_BM;
0520 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
0521 ~RME32_WCR_FREQ_1;
0522 break;
0523 case 88200:
0524 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
0525 return -EINVAL;
0526 rme32->wcreg |= RME32_WCR_DS_BM;
0527 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) &
0528 ~RME32_WCR_FREQ_0;
0529 break;
0530 case 96000:
0531 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO)
0532 return -EINVAL;
0533 rme32->wcreg |= RME32_WCR_DS_BM;
0534 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
0535 RME32_WCR_FREQ_1;
0536 break;
0537 default:
0538 return -EINVAL;
0539 }
0540 if ((!ds && rme32->wcreg & RME32_WCR_DS_BM) ||
0541 (ds && !(rme32->wcreg & RME32_WCR_DS_BM)))
0542 {
0543
0544 snd_rme32_reset_dac(rme32);
0545 } else {
0546 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0547 }
0548 return 0;
0549 }
0550
0551 static int snd_rme32_setclockmode(struct rme32 * rme32, int mode)
0552 {
0553 switch (mode) {
0554 case RME32_CLOCKMODE_SLAVE:
0555
0556 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) &
0557 ~RME32_WCR_FREQ_1;
0558 break;
0559 case RME32_CLOCKMODE_MASTER_32:
0560
0561 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) &
0562 ~RME32_WCR_FREQ_1;
0563 break;
0564 case RME32_CLOCKMODE_MASTER_44:
0565
0566 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) |
0567 RME32_WCR_FREQ_1;
0568 break;
0569 case RME32_CLOCKMODE_MASTER_48:
0570
0571 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) |
0572 RME32_WCR_FREQ_1;
0573 break;
0574 default:
0575 return -EINVAL;
0576 }
0577 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0578 return 0;
0579 }
0580
0581 static int snd_rme32_getclockmode(struct rme32 * rme32)
0582 {
0583 return ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) +
0584 (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1);
0585 }
0586
0587 static int snd_rme32_setinputtype(struct rme32 * rme32, int type)
0588 {
0589 switch (type) {
0590 case RME32_INPUT_OPTICAL:
0591 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) &
0592 ~RME32_WCR_INP_1;
0593 break;
0594 case RME32_INPUT_COAXIAL:
0595 rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) &
0596 ~RME32_WCR_INP_1;
0597 break;
0598 case RME32_INPUT_INTERNAL:
0599 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) |
0600 RME32_WCR_INP_1;
0601 break;
0602 case RME32_INPUT_XLR:
0603 rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) |
0604 RME32_WCR_INP_1;
0605 break;
0606 default:
0607 return -EINVAL;
0608 }
0609 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0610 return 0;
0611 }
0612
0613 static int snd_rme32_getinputtype(struct rme32 * rme32)
0614 {
0615 return ((rme32->wcreg >> RME32_WCR_BITPOS_INP_0) & 1) +
0616 (((rme32->wcreg >> RME32_WCR_BITPOS_INP_1) & 1) << 1);
0617 }
0618
0619 static void
0620 snd_rme32_setframelog(struct rme32 * rme32, int n_channels, int is_playback)
0621 {
0622 int frlog;
0623
0624 if (n_channels == 2) {
0625 frlog = 1;
0626 } else {
0627
0628 frlog = 3;
0629 }
0630 if (is_playback) {
0631 frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1;
0632 rme32->playback_frlog = frlog;
0633 } else {
0634 frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1;
0635 rme32->capture_frlog = frlog;
0636 }
0637 }
0638
0639 static int snd_rme32_setformat(struct rme32 *rme32, snd_pcm_format_t format)
0640 {
0641 switch (format) {
0642 case SNDRV_PCM_FORMAT_S16_LE:
0643 rme32->wcreg &= ~RME32_WCR_MODE24;
0644 break;
0645 case SNDRV_PCM_FORMAT_S32_LE:
0646 rme32->wcreg |= RME32_WCR_MODE24;
0647 break;
0648 default:
0649 return -EINVAL;
0650 }
0651 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0652 return 0;
0653 }
0654
0655 static int
0656 snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
0657 struct snd_pcm_hw_params *params)
0658 {
0659 int err, rate, dummy;
0660 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0661 struct snd_pcm_runtime *runtime = substream->runtime;
0662
0663 if (!rme32->fullduplex_mode) {
0664 runtime->dma_area = (void __force *)(rme32->iobase +
0665 RME32_IO_DATA_BUFFER);
0666 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
0667 runtime->dma_bytes = RME32_BUFFER_SIZE;
0668 }
0669
0670 spin_lock_irq(&rme32->lock);
0671 rate = 0;
0672 if (rme32->rcreg & RME32_RCR_KMODE)
0673 rate = snd_rme32_capture_getrate(rme32, &dummy);
0674 if (rate > 0) {
0675
0676 if ((int)params_rate(params) != rate) {
0677 spin_unlock_irq(&rme32->lock);
0678 return -EIO;
0679 }
0680 } else {
0681 err = snd_rme32_playback_setrate(rme32, params_rate(params));
0682 if (err < 0) {
0683 spin_unlock_irq(&rme32->lock);
0684 return err;
0685 }
0686 }
0687 err = snd_rme32_setformat(rme32, params_format(params));
0688 if (err < 0) {
0689 spin_unlock_irq(&rme32->lock);
0690 return err;
0691 }
0692
0693 snd_rme32_setframelog(rme32, params_channels(params), 1);
0694 if (rme32->capture_periodsize != 0) {
0695 if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) {
0696 spin_unlock_irq(&rme32->lock);
0697 return -EBUSY;
0698 }
0699 }
0700 rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog;
0701
0702 if ((rme32->wcreg & RME32_WCR_ADAT) == 0) {
0703 rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
0704 rme32->wcreg |= rme32->wcreg_spdif_stream;
0705 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0706 }
0707 spin_unlock_irq(&rme32->lock);
0708
0709 return 0;
0710 }
0711
0712 static int
0713 snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
0714 struct snd_pcm_hw_params *params)
0715 {
0716 int err, isadat, rate;
0717 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0718 struct snd_pcm_runtime *runtime = substream->runtime;
0719
0720 if (!rme32->fullduplex_mode) {
0721 runtime->dma_area = (void __force *)rme32->iobase +
0722 RME32_IO_DATA_BUFFER;
0723 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
0724 runtime->dma_bytes = RME32_BUFFER_SIZE;
0725 }
0726
0727 spin_lock_irq(&rme32->lock);
0728
0729 rme32->wcreg |= RME32_WCR_AUTOSYNC;
0730 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0731
0732 err = snd_rme32_setformat(rme32, params_format(params));
0733 if (err < 0) {
0734 spin_unlock_irq(&rme32->lock);
0735 return err;
0736 }
0737 err = snd_rme32_playback_setrate(rme32, params_rate(params));
0738 if (err < 0) {
0739 spin_unlock_irq(&rme32->lock);
0740 return err;
0741 }
0742 rate = snd_rme32_capture_getrate(rme32, &isadat);
0743 if (rate > 0) {
0744 if ((int)params_rate(params) != rate) {
0745 spin_unlock_irq(&rme32->lock);
0746 return -EIO;
0747 }
0748 if ((isadat && runtime->hw.channels_min == 2) ||
0749 (!isadat && runtime->hw.channels_min == 8)) {
0750 spin_unlock_irq(&rme32->lock);
0751 return -EIO;
0752 }
0753 }
0754
0755 rme32->wcreg &= ~RME32_WCR_AUTOSYNC;
0756 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0757
0758 snd_rme32_setframelog(rme32, params_channels(params), 0);
0759 if (rme32->playback_periodsize != 0) {
0760 if (params_period_size(params) << rme32->capture_frlog !=
0761 rme32->playback_periodsize) {
0762 spin_unlock_irq(&rme32->lock);
0763 return -EBUSY;
0764 }
0765 }
0766 rme32->capture_periodsize =
0767 params_period_size(params) << rme32->capture_frlog;
0768 spin_unlock_irq(&rme32->lock);
0769
0770 return 0;
0771 }
0772
0773 static void snd_rme32_pcm_start(struct rme32 * rme32, int from_pause)
0774 {
0775 if (!from_pause) {
0776 writel(0, rme32->iobase + RME32_IO_RESET_POS);
0777 }
0778
0779 rme32->wcreg |= RME32_WCR_START;
0780 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0781 }
0782
0783 static void snd_rme32_pcm_stop(struct rme32 * rme32, int to_pause)
0784 {
0785
0786
0787
0788
0789 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
0790 if (rme32->rcreg & RME32_RCR_IRQ) {
0791 writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
0792 }
0793 rme32->wcreg &= ~RME32_WCR_START;
0794 if (rme32->wcreg & RME32_WCR_SEL)
0795 rme32->wcreg |= RME32_WCR_MUTE;
0796 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0797 if (! to_pause)
0798 writel(0, rme32->iobase + RME32_IO_RESET_POS);
0799 }
0800
0801 static irqreturn_t snd_rme32_interrupt(int irq, void *dev_id)
0802 {
0803 struct rme32 *rme32 = (struct rme32 *) dev_id;
0804
0805 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
0806 if (!(rme32->rcreg & RME32_RCR_IRQ)) {
0807 return IRQ_NONE;
0808 } else {
0809 if (rme32->capture_substream) {
0810 snd_pcm_period_elapsed(rme32->capture_substream);
0811 }
0812 if (rme32->playback_substream) {
0813 snd_pcm_period_elapsed(rme32->playback_substream);
0814 }
0815 writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
0816 }
0817 return IRQ_HANDLED;
0818 }
0819
0820 static const unsigned int period_bytes[] = { RME32_BLOCK_SIZE };
0821
0822 static const struct snd_pcm_hw_constraint_list hw_constraints_period_bytes = {
0823 .count = ARRAY_SIZE(period_bytes),
0824 .list = period_bytes,
0825 .mask = 0
0826 };
0827
0828 static void snd_rme32_set_buffer_constraint(struct rme32 *rme32, struct snd_pcm_runtime *runtime)
0829 {
0830 if (! rme32->fullduplex_mode) {
0831 snd_pcm_hw_constraint_single(runtime,
0832 SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
0833 RME32_BUFFER_SIZE);
0834 snd_pcm_hw_constraint_list(runtime, 0,
0835 SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
0836 &hw_constraints_period_bytes);
0837 }
0838 }
0839
0840 static int snd_rme32_playback_spdif_open(struct snd_pcm_substream *substream)
0841 {
0842 int rate, dummy;
0843 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0844 struct snd_pcm_runtime *runtime = substream->runtime;
0845
0846 snd_pcm_set_sync(substream);
0847
0848 spin_lock_irq(&rme32->lock);
0849 if (rme32->playback_substream != NULL) {
0850 spin_unlock_irq(&rme32->lock);
0851 return -EBUSY;
0852 }
0853 rme32->wcreg &= ~RME32_WCR_ADAT;
0854 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0855 rme32->playback_substream = substream;
0856 spin_unlock_irq(&rme32->lock);
0857
0858 if (rme32->fullduplex_mode)
0859 runtime->hw = snd_rme32_spdif_fd_info;
0860 else
0861 runtime->hw = snd_rme32_spdif_info;
0862 if (rme32->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO) {
0863 runtime->hw.rates |= SNDRV_PCM_RATE_64000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
0864 runtime->hw.rate_max = 96000;
0865 }
0866 rate = 0;
0867 if (rme32->rcreg & RME32_RCR_KMODE)
0868 rate = snd_rme32_capture_getrate(rme32, &dummy);
0869 if (rate > 0) {
0870
0871 runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
0872 runtime->hw.rate_min = rate;
0873 runtime->hw.rate_max = rate;
0874 }
0875
0876 snd_rme32_set_buffer_constraint(rme32, runtime);
0877
0878 rme32->wcreg_spdif_stream = rme32->wcreg_spdif;
0879 rme32->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
0880 snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE |
0881 SNDRV_CTL_EVENT_MASK_INFO, &rme32->spdif_ctl->id);
0882 return 0;
0883 }
0884
0885 static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
0886 {
0887 int isadat, rate;
0888 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0889 struct snd_pcm_runtime *runtime = substream->runtime;
0890
0891 snd_pcm_set_sync(substream);
0892
0893 spin_lock_irq(&rme32->lock);
0894 if (rme32->capture_substream != NULL) {
0895 spin_unlock_irq(&rme32->lock);
0896 return -EBUSY;
0897 }
0898 rme32->capture_substream = substream;
0899 spin_unlock_irq(&rme32->lock);
0900
0901 if (rme32->fullduplex_mode)
0902 runtime->hw = snd_rme32_spdif_fd_info;
0903 else
0904 runtime->hw = snd_rme32_spdif_info;
0905 if (RME32_PRO_WITH_8414(rme32)) {
0906 runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
0907 runtime->hw.rate_max = 96000;
0908 }
0909 rate = snd_rme32_capture_getrate(rme32, &isadat);
0910 if (rate > 0) {
0911 if (isadat) {
0912 return -EIO;
0913 }
0914 runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
0915 runtime->hw.rate_min = rate;
0916 runtime->hw.rate_max = rate;
0917 }
0918
0919 snd_rme32_set_buffer_constraint(rme32, runtime);
0920
0921 return 0;
0922 }
0923
0924 static int
0925 snd_rme32_playback_adat_open(struct snd_pcm_substream *substream)
0926 {
0927 int rate, dummy;
0928 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0929 struct snd_pcm_runtime *runtime = substream->runtime;
0930
0931 snd_pcm_set_sync(substream);
0932
0933 spin_lock_irq(&rme32->lock);
0934 if (rme32->playback_substream != NULL) {
0935 spin_unlock_irq(&rme32->lock);
0936 return -EBUSY;
0937 }
0938 rme32->wcreg |= RME32_WCR_ADAT;
0939 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
0940 rme32->playback_substream = substream;
0941 spin_unlock_irq(&rme32->lock);
0942
0943 if (rme32->fullduplex_mode)
0944 runtime->hw = snd_rme32_adat_fd_info;
0945 else
0946 runtime->hw = snd_rme32_adat_info;
0947 rate = 0;
0948 if (rme32->rcreg & RME32_RCR_KMODE)
0949 rate = snd_rme32_capture_getrate(rme32, &dummy);
0950 if (rate > 0) {
0951
0952 runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
0953 runtime->hw.rate_min = rate;
0954 runtime->hw.rate_max = rate;
0955 }
0956
0957 snd_rme32_set_buffer_constraint(rme32, runtime);
0958 return 0;
0959 }
0960
0961 static int
0962 snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
0963 {
0964 int isadat, rate;
0965 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0966 struct snd_pcm_runtime *runtime = substream->runtime;
0967
0968 if (rme32->fullduplex_mode)
0969 runtime->hw = snd_rme32_adat_fd_info;
0970 else
0971 runtime->hw = snd_rme32_adat_info;
0972 rate = snd_rme32_capture_getrate(rme32, &isadat);
0973 if (rate > 0) {
0974 if (!isadat) {
0975 return -EIO;
0976 }
0977 runtime->hw.rates = snd_pcm_rate_to_rate_bit(rate);
0978 runtime->hw.rate_min = rate;
0979 runtime->hw.rate_max = rate;
0980 }
0981
0982 snd_pcm_set_sync(substream);
0983
0984 spin_lock_irq(&rme32->lock);
0985 if (rme32->capture_substream != NULL) {
0986 spin_unlock_irq(&rme32->lock);
0987 return -EBUSY;
0988 }
0989 rme32->capture_substream = substream;
0990 spin_unlock_irq(&rme32->lock);
0991
0992 snd_rme32_set_buffer_constraint(rme32, runtime);
0993 return 0;
0994 }
0995
0996 static int snd_rme32_playback_close(struct snd_pcm_substream *substream)
0997 {
0998 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
0999 int spdif = 0;
1000
1001 spin_lock_irq(&rme32->lock);
1002 rme32->playback_substream = NULL;
1003 rme32->playback_periodsize = 0;
1004 spdif = (rme32->wcreg & RME32_WCR_ADAT) == 0;
1005 spin_unlock_irq(&rme32->lock);
1006 if (spdif) {
1007 rme32->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
1008 snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE |
1009 SNDRV_CTL_EVENT_MASK_INFO,
1010 &rme32->spdif_ctl->id);
1011 }
1012 return 0;
1013 }
1014
1015 static int snd_rme32_capture_close(struct snd_pcm_substream *substream)
1016 {
1017 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1018
1019 spin_lock_irq(&rme32->lock);
1020 rme32->capture_substream = NULL;
1021 rme32->capture_periodsize = 0;
1022 spin_unlock_irq(&rme32->lock);
1023 return 0;
1024 }
1025
1026 static int snd_rme32_playback_prepare(struct snd_pcm_substream *substream)
1027 {
1028 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1029
1030 spin_lock_irq(&rme32->lock);
1031 if (rme32->fullduplex_mode) {
1032 memset(&rme32->playback_pcm, 0, sizeof(rme32->playback_pcm));
1033 rme32->playback_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
1034 rme32->playback_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
1035 } else {
1036 writel(0, rme32->iobase + RME32_IO_RESET_POS);
1037 }
1038 if (rme32->wcreg & RME32_WCR_SEL)
1039 rme32->wcreg &= ~RME32_WCR_MUTE;
1040 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
1041 spin_unlock_irq(&rme32->lock);
1042 return 0;
1043 }
1044
1045 static int snd_rme32_capture_prepare(struct snd_pcm_substream *substream)
1046 {
1047 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1048
1049 spin_lock_irq(&rme32->lock);
1050 if (rme32->fullduplex_mode) {
1051 memset(&rme32->capture_pcm, 0, sizeof(rme32->capture_pcm));
1052 rme32->capture_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
1053 rme32->capture_pcm.hw_queue_size = RME32_BUFFER_SIZE / 2;
1054 rme32->capture_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
1055 } else {
1056 writel(0, rme32->iobase + RME32_IO_RESET_POS);
1057 }
1058 spin_unlock_irq(&rme32->lock);
1059 return 0;
1060 }
1061
1062 static int
1063 snd_rme32_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1064 {
1065 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1066 struct snd_pcm_substream *s;
1067
1068 spin_lock(&rme32->lock);
1069 snd_pcm_group_for_each_entry(s, substream) {
1070 if (s != rme32->playback_substream &&
1071 s != rme32->capture_substream)
1072 continue;
1073 switch (cmd) {
1074 case SNDRV_PCM_TRIGGER_START:
1075 rme32->running |= (1 << s->stream);
1076 if (rme32->fullduplex_mode) {
1077
1078 if (s == rme32->playback_substream) {
1079 rme32->playback_pcm.hw_io =
1080 rme32->playback_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
1081 } else {
1082 rme32->capture_pcm.hw_io =
1083 rme32->capture_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
1084 }
1085 }
1086 break;
1087 case SNDRV_PCM_TRIGGER_STOP:
1088 rme32->running &= ~(1 << s->stream);
1089 break;
1090 }
1091 snd_pcm_trigger_done(s, substream);
1092 }
1093
1094 switch (cmd) {
1095 case SNDRV_PCM_TRIGGER_START:
1096 if (rme32->running && ! RME32_ISWORKING(rme32))
1097 snd_rme32_pcm_start(rme32, 0);
1098 break;
1099 case SNDRV_PCM_TRIGGER_STOP:
1100 if (! rme32->running && RME32_ISWORKING(rme32))
1101 snd_rme32_pcm_stop(rme32, 0);
1102 break;
1103 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1104 if (rme32->running && RME32_ISWORKING(rme32))
1105 snd_rme32_pcm_stop(rme32, 1);
1106 break;
1107 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1108 if (rme32->running && ! RME32_ISWORKING(rme32))
1109 snd_rme32_pcm_start(rme32, 1);
1110 break;
1111 }
1112 spin_unlock(&rme32->lock);
1113 return 0;
1114 }
1115
1116
1117 static snd_pcm_uframes_t
1118 snd_rme32_playback_pointer(struct snd_pcm_substream *substream)
1119 {
1120 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1121 return snd_rme32_pcm_byteptr(rme32) >> rme32->playback_frlog;
1122 }
1123
1124 static snd_pcm_uframes_t
1125 snd_rme32_capture_pointer(struct snd_pcm_substream *substream)
1126 {
1127 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1128 return snd_rme32_pcm_byteptr(rme32) >> rme32->capture_frlog;
1129 }
1130
1131
1132
1133 static void snd_rme32_pb_trans_copy(struct snd_pcm_substream *substream,
1134 struct snd_pcm_indirect *rec, size_t bytes)
1135 {
1136 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1137 memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
1138 substream->runtime->dma_area + rec->sw_data, bytes);
1139 }
1140
1141 static int snd_rme32_playback_fd_ack(struct snd_pcm_substream *substream)
1142 {
1143 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1144 struct snd_pcm_indirect *rec, *cprec;
1145
1146 rec = &rme32->playback_pcm;
1147 cprec = &rme32->capture_pcm;
1148 spin_lock(&rme32->lock);
1149 rec->hw_queue_size = RME32_BUFFER_SIZE;
1150 if (rme32->running & (1 << SNDRV_PCM_STREAM_CAPTURE))
1151 rec->hw_queue_size -= cprec->hw_ready;
1152 spin_unlock(&rme32->lock);
1153 return snd_pcm_indirect_playback_transfer(substream, rec,
1154 snd_rme32_pb_trans_copy);
1155 }
1156
1157 static void snd_rme32_cp_trans_copy(struct snd_pcm_substream *substream,
1158 struct snd_pcm_indirect *rec, size_t bytes)
1159 {
1160 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1161 memcpy_fromio(substream->runtime->dma_area + rec->sw_data,
1162 rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
1163 bytes);
1164 }
1165
1166 static int snd_rme32_capture_fd_ack(struct snd_pcm_substream *substream)
1167 {
1168 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1169 return snd_pcm_indirect_capture_transfer(substream, &rme32->capture_pcm,
1170 snd_rme32_cp_trans_copy);
1171 }
1172
1173 static snd_pcm_uframes_t
1174 snd_rme32_playback_fd_pointer(struct snd_pcm_substream *substream)
1175 {
1176 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1177 return snd_pcm_indirect_playback_pointer(substream, &rme32->playback_pcm,
1178 snd_rme32_pcm_byteptr(rme32));
1179 }
1180
1181 static snd_pcm_uframes_t
1182 snd_rme32_capture_fd_pointer(struct snd_pcm_substream *substream)
1183 {
1184 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
1185 return snd_pcm_indirect_capture_pointer(substream, &rme32->capture_pcm,
1186 snd_rme32_pcm_byteptr(rme32));
1187 }
1188
1189
1190 static const struct snd_pcm_ops snd_rme32_playback_spdif_ops = {
1191 .open = snd_rme32_playback_spdif_open,
1192 .close = snd_rme32_playback_close,
1193 .hw_params = snd_rme32_playback_hw_params,
1194 .prepare = snd_rme32_playback_prepare,
1195 .trigger = snd_rme32_pcm_trigger,
1196 .pointer = snd_rme32_playback_pointer,
1197 .copy_user = snd_rme32_playback_copy,
1198 .copy_kernel = snd_rme32_playback_copy_kernel,
1199 .fill_silence = snd_rme32_playback_silence,
1200 .mmap = snd_pcm_lib_mmap_iomem,
1201 };
1202
1203 static const struct snd_pcm_ops snd_rme32_capture_spdif_ops = {
1204 .open = snd_rme32_capture_spdif_open,
1205 .close = snd_rme32_capture_close,
1206 .hw_params = snd_rme32_capture_hw_params,
1207 .prepare = snd_rme32_capture_prepare,
1208 .trigger = snd_rme32_pcm_trigger,
1209 .pointer = snd_rme32_capture_pointer,
1210 .copy_user = snd_rme32_capture_copy,
1211 .copy_kernel = snd_rme32_capture_copy_kernel,
1212 .mmap = snd_pcm_lib_mmap_iomem,
1213 };
1214
1215 static const struct snd_pcm_ops snd_rme32_playback_adat_ops = {
1216 .open = snd_rme32_playback_adat_open,
1217 .close = snd_rme32_playback_close,
1218 .hw_params = snd_rme32_playback_hw_params,
1219 .prepare = snd_rme32_playback_prepare,
1220 .trigger = snd_rme32_pcm_trigger,
1221 .pointer = snd_rme32_playback_pointer,
1222 .copy_user = snd_rme32_playback_copy,
1223 .copy_kernel = snd_rme32_playback_copy_kernel,
1224 .fill_silence = snd_rme32_playback_silence,
1225 .mmap = snd_pcm_lib_mmap_iomem,
1226 };
1227
1228 static const struct snd_pcm_ops snd_rme32_capture_adat_ops = {
1229 .open = snd_rme32_capture_adat_open,
1230 .close = snd_rme32_capture_close,
1231 .hw_params = snd_rme32_capture_hw_params,
1232 .prepare = snd_rme32_capture_prepare,
1233 .trigger = snd_rme32_pcm_trigger,
1234 .pointer = snd_rme32_capture_pointer,
1235 .copy_user = snd_rme32_capture_copy,
1236 .copy_kernel = snd_rme32_capture_copy_kernel,
1237 .mmap = snd_pcm_lib_mmap_iomem,
1238 };
1239
1240
1241 static const struct snd_pcm_ops snd_rme32_playback_spdif_fd_ops = {
1242 .open = snd_rme32_playback_spdif_open,
1243 .close = snd_rme32_playback_close,
1244 .hw_params = snd_rme32_playback_hw_params,
1245 .prepare = snd_rme32_playback_prepare,
1246 .trigger = snd_rme32_pcm_trigger,
1247 .pointer = snd_rme32_playback_fd_pointer,
1248 .ack = snd_rme32_playback_fd_ack,
1249 };
1250
1251 static const struct snd_pcm_ops snd_rme32_capture_spdif_fd_ops = {
1252 .open = snd_rme32_capture_spdif_open,
1253 .close = snd_rme32_capture_close,
1254 .hw_params = snd_rme32_capture_hw_params,
1255 .prepare = snd_rme32_capture_prepare,
1256 .trigger = snd_rme32_pcm_trigger,
1257 .pointer = snd_rme32_capture_fd_pointer,
1258 .ack = snd_rme32_capture_fd_ack,
1259 };
1260
1261 static const struct snd_pcm_ops snd_rme32_playback_adat_fd_ops = {
1262 .open = snd_rme32_playback_adat_open,
1263 .close = snd_rme32_playback_close,
1264 .hw_params = snd_rme32_playback_hw_params,
1265 .prepare = snd_rme32_playback_prepare,
1266 .trigger = snd_rme32_pcm_trigger,
1267 .pointer = snd_rme32_playback_fd_pointer,
1268 .ack = snd_rme32_playback_fd_ack,
1269 };
1270
1271 static const struct snd_pcm_ops snd_rme32_capture_adat_fd_ops = {
1272 .open = snd_rme32_capture_adat_open,
1273 .close = snd_rme32_capture_close,
1274 .hw_params = snd_rme32_capture_hw_params,
1275 .prepare = snd_rme32_capture_prepare,
1276 .trigger = snd_rme32_pcm_trigger,
1277 .pointer = snd_rme32_capture_fd_pointer,
1278 .ack = snd_rme32_capture_fd_ack,
1279 };
1280
1281 static void snd_rme32_free(struct rme32 *rme32)
1282 {
1283 if (rme32->irq >= 0)
1284 snd_rme32_pcm_stop(rme32, 0);
1285 }
1286
1287 static void snd_rme32_free_spdif_pcm(struct snd_pcm *pcm)
1288 {
1289 struct rme32 *rme32 = (struct rme32 *) pcm->private_data;
1290 rme32->spdif_pcm = NULL;
1291 }
1292
1293 static void
1294 snd_rme32_free_adat_pcm(struct snd_pcm *pcm)
1295 {
1296 struct rme32 *rme32 = (struct rme32 *) pcm->private_data;
1297 rme32->adat_pcm = NULL;
1298 }
1299
1300 static int snd_rme32_create(struct rme32 *rme32)
1301 {
1302 struct pci_dev *pci = rme32->pci;
1303 int err;
1304
1305 rme32->irq = -1;
1306 spin_lock_init(&rme32->lock);
1307
1308 err = pcim_enable_device(pci);
1309 if (err < 0)
1310 return err;
1311
1312 err = pci_request_regions(pci, "RME32");
1313 if (err < 0)
1314 return err;
1315 rme32->port = pci_resource_start(rme32->pci, 0);
1316
1317 rme32->iobase = devm_ioremap(&pci->dev, rme32->port, RME32_IO_SIZE);
1318 if (!rme32->iobase) {
1319 dev_err(rme32->card->dev,
1320 "unable to remap memory region 0x%lx-0x%lx\n",
1321 rme32->port, rme32->port + RME32_IO_SIZE - 1);
1322 return -ENOMEM;
1323 }
1324
1325 if (devm_request_irq(&pci->dev, pci->irq, snd_rme32_interrupt,
1326 IRQF_SHARED, KBUILD_MODNAME, rme32)) {
1327 dev_err(rme32->card->dev, "unable to grab IRQ %d\n", pci->irq);
1328 return -EBUSY;
1329 }
1330 rme32->irq = pci->irq;
1331 rme32->card->sync_irq = rme32->irq;
1332
1333
1334 pci_read_config_byte(pci, 8, &rme32->rev);
1335
1336
1337 err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm);
1338 if (err < 0)
1339 return err;
1340 rme32->spdif_pcm->private_data = rme32;
1341 rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
1342 strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
1343 if (rme32->fullduplex_mode) {
1344 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
1345 &snd_rme32_playback_spdif_fd_ops);
1346 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
1347 &snd_rme32_capture_spdif_fd_ops);
1348 snd_pcm_set_managed_buffer_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1349 NULL, 0, RME32_MID_BUFFER_SIZE);
1350 rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
1351 } else {
1352 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
1353 &snd_rme32_playback_spdif_ops);
1354 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
1355 &snd_rme32_capture_spdif_ops);
1356 rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
1357 }
1358
1359
1360 if ((pci->device == PCI_DEVICE_ID_RME_DIGI32) ||
1361 (pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO)) {
1362
1363 rme32->adat_pcm = NULL;
1364 }
1365 else {
1366 err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1,
1367 1, 1, &rme32->adat_pcm);
1368 if (err < 0)
1369 return err;
1370 rme32->adat_pcm->private_data = rme32;
1371 rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
1372 strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
1373 if (rme32->fullduplex_mode) {
1374 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK,
1375 &snd_rme32_playback_adat_fd_ops);
1376 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE,
1377 &snd_rme32_capture_adat_fd_ops);
1378 snd_pcm_set_managed_buffer_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1379 NULL,
1380 0, RME32_MID_BUFFER_SIZE);
1381 rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
1382 } else {
1383 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK,
1384 &snd_rme32_playback_adat_ops);
1385 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE,
1386 &snd_rme32_capture_adat_ops);
1387 rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
1388 }
1389 }
1390
1391
1392 rme32->playback_periodsize = 0;
1393 rme32->capture_periodsize = 0;
1394
1395
1396 snd_rme32_pcm_stop(rme32, 0);
1397
1398
1399 snd_rme32_reset_dac(rme32);
1400
1401
1402 writel(0, rme32->iobase + RME32_IO_RESET_POS);
1403
1404
1405 rme32->wcreg = RME32_WCR_SEL |
1406 RME32_WCR_INP_0 |
1407 RME32_WCR_MUTE;
1408 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
1409
1410
1411
1412 err = snd_rme32_create_switches(rme32->card, rme32);
1413 if (err < 0)
1414 return err;
1415
1416
1417 snd_rme32_proc_init(rme32);
1418
1419 rme32->capture_substream = NULL;
1420 rme32->playback_substream = NULL;
1421
1422 return 0;
1423 }
1424
1425
1426
1427
1428
1429 static void
1430 snd_rme32_proc_read(struct snd_info_entry * entry, struct snd_info_buffer *buffer)
1431 {
1432 int n;
1433 struct rme32 *rme32 = (struct rme32 *) entry->private_data;
1434
1435 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
1436
1437 snd_iprintf(buffer, rme32->card->longname);
1438 snd_iprintf(buffer, " (index #%d)\n", rme32->card->number + 1);
1439
1440 snd_iprintf(buffer, "\nGeneral settings\n");
1441 if (rme32->fullduplex_mode)
1442 snd_iprintf(buffer, " Full-duplex mode\n");
1443 else
1444 snd_iprintf(buffer, " Half-duplex mode\n");
1445 if (RME32_PRO_WITH_8414(rme32)) {
1446 snd_iprintf(buffer, " receiver: CS8414\n");
1447 } else {
1448 snd_iprintf(buffer, " receiver: CS8412\n");
1449 }
1450 if (rme32->wcreg & RME32_WCR_MODE24) {
1451 snd_iprintf(buffer, " format: 24 bit");
1452 } else {
1453 snd_iprintf(buffer, " format: 16 bit");
1454 }
1455 if (rme32->wcreg & RME32_WCR_MONO) {
1456 snd_iprintf(buffer, ", Mono\n");
1457 } else {
1458 snd_iprintf(buffer, ", Stereo\n");
1459 }
1460
1461 snd_iprintf(buffer, "\nInput settings\n");
1462 switch (snd_rme32_getinputtype(rme32)) {
1463 case RME32_INPUT_OPTICAL:
1464 snd_iprintf(buffer, " input: optical");
1465 break;
1466 case RME32_INPUT_COAXIAL:
1467 snd_iprintf(buffer, " input: coaxial");
1468 break;
1469 case RME32_INPUT_INTERNAL:
1470 snd_iprintf(buffer, " input: internal");
1471 break;
1472 case RME32_INPUT_XLR:
1473 snd_iprintf(buffer, " input: XLR");
1474 break;
1475 }
1476 if (snd_rme32_capture_getrate(rme32, &n) < 0) {
1477 snd_iprintf(buffer, "\n sample rate: no valid signal\n");
1478 } else {
1479 if (n) {
1480 snd_iprintf(buffer, " (8 channels)\n");
1481 } else {
1482 snd_iprintf(buffer, " (2 channels)\n");
1483 }
1484 snd_iprintf(buffer, " sample rate: %d Hz\n",
1485 snd_rme32_capture_getrate(rme32, &n));
1486 }
1487
1488 snd_iprintf(buffer, "\nOutput settings\n");
1489 if (rme32->wcreg & RME32_WCR_SEL) {
1490 snd_iprintf(buffer, " output signal: normal playback");
1491 } else {
1492 snd_iprintf(buffer, " output signal: same as input");
1493 }
1494 if (rme32->wcreg & RME32_WCR_MUTE) {
1495 snd_iprintf(buffer, " (muted)\n");
1496 } else {
1497 snd_iprintf(buffer, "\n");
1498 }
1499
1500
1501 if (!
1502 ((!(rme32->wcreg & RME32_WCR_FREQ_0))
1503 && (!(rme32->wcreg & RME32_WCR_FREQ_1)))) {
1504 snd_iprintf(buffer, " sample rate: %d Hz\n",
1505 snd_rme32_playback_getrate(rme32));
1506 }
1507 if (rme32->rcreg & RME32_RCR_KMODE) {
1508 snd_iprintf(buffer, " sample clock source: AutoSync\n");
1509 } else {
1510 snd_iprintf(buffer, " sample clock source: Internal\n");
1511 }
1512 if (rme32->wcreg & RME32_WCR_PRO) {
1513 snd_iprintf(buffer, " format: AES/EBU (professional)\n");
1514 } else {
1515 snd_iprintf(buffer, " format: IEC958 (consumer)\n");
1516 }
1517 if (rme32->wcreg & RME32_WCR_EMP) {
1518 snd_iprintf(buffer, " emphasis: on\n");
1519 } else {
1520 snd_iprintf(buffer, " emphasis: off\n");
1521 }
1522 }
1523
1524 static void snd_rme32_proc_init(struct rme32 *rme32)
1525 {
1526 snd_card_ro_proc_new(rme32->card, "rme32", rme32, snd_rme32_proc_read);
1527 }
1528
1529
1530
1531
1532
1533 #define snd_rme32_info_loopback_control snd_ctl_boolean_mono_info
1534
1535 static int
1536 snd_rme32_get_loopback_control(struct snd_kcontrol *kcontrol,
1537 struct snd_ctl_elem_value *ucontrol)
1538 {
1539 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1540
1541 spin_lock_irq(&rme32->lock);
1542 ucontrol->value.integer.value[0] =
1543 rme32->wcreg & RME32_WCR_SEL ? 0 : 1;
1544 spin_unlock_irq(&rme32->lock);
1545 return 0;
1546 }
1547 static int
1548 snd_rme32_put_loopback_control(struct snd_kcontrol *kcontrol,
1549 struct snd_ctl_elem_value *ucontrol)
1550 {
1551 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1552 unsigned int val;
1553 int change;
1554
1555 val = ucontrol->value.integer.value[0] ? 0 : RME32_WCR_SEL;
1556 spin_lock_irq(&rme32->lock);
1557 val = (rme32->wcreg & ~RME32_WCR_SEL) | val;
1558 change = val != rme32->wcreg;
1559 if (ucontrol->value.integer.value[0])
1560 val &= ~RME32_WCR_MUTE;
1561 else
1562 val |= RME32_WCR_MUTE;
1563 rme32->wcreg = val;
1564 writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
1565 spin_unlock_irq(&rme32->lock);
1566 return change;
1567 }
1568
1569 static int
1570 snd_rme32_info_inputtype_control(struct snd_kcontrol *kcontrol,
1571 struct snd_ctl_elem_info *uinfo)
1572 {
1573 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1574 static const char * const texts[4] = {
1575 "Optical", "Coaxial", "Internal", "XLR"
1576 };
1577 int num_items;
1578
1579 switch (rme32->pci->device) {
1580 case PCI_DEVICE_ID_RME_DIGI32:
1581 case PCI_DEVICE_ID_RME_DIGI32_8:
1582 num_items = 3;
1583 break;
1584 case PCI_DEVICE_ID_RME_DIGI32_PRO:
1585 num_items = 4;
1586 break;
1587 default:
1588 snd_BUG();
1589 return -EINVAL;
1590 }
1591 return snd_ctl_enum_info(uinfo, 1, num_items, texts);
1592 }
1593 static int
1594 snd_rme32_get_inputtype_control(struct snd_kcontrol *kcontrol,
1595 struct snd_ctl_elem_value *ucontrol)
1596 {
1597 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1598 unsigned int items = 3;
1599
1600 spin_lock_irq(&rme32->lock);
1601 ucontrol->value.enumerated.item[0] = snd_rme32_getinputtype(rme32);
1602
1603 switch (rme32->pci->device) {
1604 case PCI_DEVICE_ID_RME_DIGI32:
1605 case PCI_DEVICE_ID_RME_DIGI32_8:
1606 items = 3;
1607 break;
1608 case PCI_DEVICE_ID_RME_DIGI32_PRO:
1609 items = 4;
1610 break;
1611 default:
1612 snd_BUG();
1613 break;
1614 }
1615 if (ucontrol->value.enumerated.item[0] >= items) {
1616 ucontrol->value.enumerated.item[0] = items - 1;
1617 }
1618
1619 spin_unlock_irq(&rme32->lock);
1620 return 0;
1621 }
1622 static int
1623 snd_rme32_put_inputtype_control(struct snd_kcontrol *kcontrol,
1624 struct snd_ctl_elem_value *ucontrol)
1625 {
1626 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1627 unsigned int val;
1628 int change, items = 3;
1629
1630 switch (rme32->pci->device) {
1631 case PCI_DEVICE_ID_RME_DIGI32:
1632 case PCI_DEVICE_ID_RME_DIGI32_8:
1633 items = 3;
1634 break;
1635 case PCI_DEVICE_ID_RME_DIGI32_PRO:
1636 items = 4;
1637 break;
1638 default:
1639 snd_BUG();
1640 break;
1641 }
1642 val = ucontrol->value.enumerated.item[0] % items;
1643
1644 spin_lock_irq(&rme32->lock);
1645 change = val != (unsigned int)snd_rme32_getinputtype(rme32);
1646 snd_rme32_setinputtype(rme32, val);
1647 spin_unlock_irq(&rme32->lock);
1648 return change;
1649 }
1650
1651 static int
1652 snd_rme32_info_clockmode_control(struct snd_kcontrol *kcontrol,
1653 struct snd_ctl_elem_info *uinfo)
1654 {
1655 static const char * const texts[4] = { "AutoSync",
1656 "Internal 32.0kHz",
1657 "Internal 44.1kHz",
1658 "Internal 48.0kHz" };
1659
1660 return snd_ctl_enum_info(uinfo, 1, 4, texts);
1661 }
1662 static int
1663 snd_rme32_get_clockmode_control(struct snd_kcontrol *kcontrol,
1664 struct snd_ctl_elem_value *ucontrol)
1665 {
1666 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1667
1668 spin_lock_irq(&rme32->lock);
1669 ucontrol->value.enumerated.item[0] = snd_rme32_getclockmode(rme32);
1670 spin_unlock_irq(&rme32->lock);
1671 return 0;
1672 }
1673 static int
1674 snd_rme32_put_clockmode_control(struct snd_kcontrol *kcontrol,
1675 struct snd_ctl_elem_value *ucontrol)
1676 {
1677 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1678 unsigned int val;
1679 int change;
1680
1681 val = ucontrol->value.enumerated.item[0] % 3;
1682 spin_lock_irq(&rme32->lock);
1683 change = val != (unsigned int)snd_rme32_getclockmode(rme32);
1684 snd_rme32_setclockmode(rme32, val);
1685 spin_unlock_irq(&rme32->lock);
1686 return change;
1687 }
1688
1689 static u32 snd_rme32_convert_from_aes(struct snd_aes_iec958 * aes)
1690 {
1691 u32 val = 0;
1692 val |= (aes->status[0] & IEC958_AES0_PROFESSIONAL) ? RME32_WCR_PRO : 0;
1693 if (val & RME32_WCR_PRO)
1694 val |= (aes->status[0] & IEC958_AES0_PRO_EMPHASIS_5015) ? RME32_WCR_EMP : 0;
1695 else
1696 val |= (aes->status[0] & IEC958_AES0_CON_EMPHASIS_5015) ? RME32_WCR_EMP : 0;
1697 return val;
1698 }
1699
1700 static void snd_rme32_convert_to_aes(struct snd_aes_iec958 * aes, u32 val)
1701 {
1702 aes->status[0] = ((val & RME32_WCR_PRO) ? IEC958_AES0_PROFESSIONAL : 0);
1703 if (val & RME32_WCR_PRO)
1704 aes->status[0] |= (val & RME32_WCR_EMP) ? IEC958_AES0_PRO_EMPHASIS_5015 : 0;
1705 else
1706 aes->status[0] |= (val & RME32_WCR_EMP) ? IEC958_AES0_CON_EMPHASIS_5015 : 0;
1707 }
1708
1709 static int snd_rme32_control_spdif_info(struct snd_kcontrol *kcontrol,
1710 struct snd_ctl_elem_info *uinfo)
1711 {
1712 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1713 uinfo->count = 1;
1714 return 0;
1715 }
1716
1717 static int snd_rme32_control_spdif_get(struct snd_kcontrol *kcontrol,
1718 struct snd_ctl_elem_value *ucontrol)
1719 {
1720 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1721
1722 snd_rme32_convert_to_aes(&ucontrol->value.iec958,
1723 rme32->wcreg_spdif);
1724 return 0;
1725 }
1726
1727 static int snd_rme32_control_spdif_put(struct snd_kcontrol *kcontrol,
1728 struct snd_ctl_elem_value *ucontrol)
1729 {
1730 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1731 int change;
1732 u32 val;
1733
1734 val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
1735 spin_lock_irq(&rme32->lock);
1736 change = val != rme32->wcreg_spdif;
1737 rme32->wcreg_spdif = val;
1738 spin_unlock_irq(&rme32->lock);
1739 return change;
1740 }
1741
1742 static int snd_rme32_control_spdif_stream_info(struct snd_kcontrol *kcontrol,
1743 struct snd_ctl_elem_info *uinfo)
1744 {
1745 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1746 uinfo->count = 1;
1747 return 0;
1748 }
1749
1750 static int snd_rme32_control_spdif_stream_get(struct snd_kcontrol *kcontrol,
1751 struct snd_ctl_elem_value *
1752 ucontrol)
1753 {
1754 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1755
1756 snd_rme32_convert_to_aes(&ucontrol->value.iec958,
1757 rme32->wcreg_spdif_stream);
1758 return 0;
1759 }
1760
1761 static int snd_rme32_control_spdif_stream_put(struct snd_kcontrol *kcontrol,
1762 struct snd_ctl_elem_value *
1763 ucontrol)
1764 {
1765 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol);
1766 int change;
1767 u32 val;
1768
1769 val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
1770 spin_lock_irq(&rme32->lock);
1771 change = val != rme32->wcreg_spdif_stream;
1772 rme32->wcreg_spdif_stream = val;
1773 rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP);
1774 rme32->wcreg |= val;
1775 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
1776 spin_unlock_irq(&rme32->lock);
1777 return change;
1778 }
1779
1780 static int snd_rme32_control_spdif_mask_info(struct snd_kcontrol *kcontrol,
1781 struct snd_ctl_elem_info *uinfo)
1782 {
1783 uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
1784 uinfo->count = 1;
1785 return 0;
1786 }
1787
1788 static int snd_rme32_control_spdif_mask_get(struct snd_kcontrol *kcontrol,
1789 struct snd_ctl_elem_value *
1790 ucontrol)
1791 {
1792 ucontrol->value.iec958.status[0] = kcontrol->private_value;
1793 return 0;
1794 }
1795
1796 static const struct snd_kcontrol_new snd_rme32_controls[] = {
1797 {
1798 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1799 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),
1800 .info = snd_rme32_control_spdif_info,
1801 .get = snd_rme32_control_spdif_get,
1802 .put = snd_rme32_control_spdif_put
1803 },
1804 {
1805 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE,
1806 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1807 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PCM_STREAM),
1808 .info = snd_rme32_control_spdif_stream_info,
1809 .get = snd_rme32_control_spdif_stream_get,
1810 .put = snd_rme32_control_spdif_stream_put
1811 },
1812 {
1813 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1814 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1815 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, CON_MASK),
1816 .info = snd_rme32_control_spdif_mask_info,
1817 .get = snd_rme32_control_spdif_mask_get,
1818 .private_value = IEC958_AES0_PROFESSIONAL | IEC958_AES0_CON_EMPHASIS
1819 },
1820 {
1821 .access = SNDRV_CTL_ELEM_ACCESS_READ,
1822 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
1823 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, PRO_MASK),
1824 .info = snd_rme32_control_spdif_mask_info,
1825 .get = snd_rme32_control_spdif_mask_get,
1826 .private_value = IEC958_AES0_PROFESSIONAL | IEC958_AES0_PRO_EMPHASIS
1827 },
1828 {
1829 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1830 .name = "Input Connector",
1831 .info = snd_rme32_info_inputtype_control,
1832 .get = snd_rme32_get_inputtype_control,
1833 .put = snd_rme32_put_inputtype_control
1834 },
1835 {
1836 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1837 .name = "Loopback Input",
1838 .info = snd_rme32_info_loopback_control,
1839 .get = snd_rme32_get_loopback_control,
1840 .put = snd_rme32_put_loopback_control
1841 },
1842 {
1843 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
1844 .name = "Sample Clock Source",
1845 .info = snd_rme32_info_clockmode_control,
1846 .get = snd_rme32_get_clockmode_control,
1847 .put = snd_rme32_put_clockmode_control
1848 }
1849 };
1850
1851 static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32)
1852 {
1853 int idx, err;
1854 struct snd_kcontrol *kctl;
1855
1856 for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
1857 kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32);
1858 err = snd_ctl_add(card, kctl);
1859 if (err < 0)
1860 return err;
1861 if (idx == 1)
1862 rme32->spdif_ctl = kctl;
1863 }
1864
1865 return 0;
1866 }
1867
1868
1869
1870
1871
1872 static void snd_rme32_card_free(struct snd_card *card)
1873 {
1874 snd_rme32_free(card->private_data);
1875 }
1876
1877 static int
1878 __snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
1879 {
1880 static int dev;
1881 struct rme32 *rme32;
1882 struct snd_card *card;
1883 int err;
1884
1885 if (dev >= SNDRV_CARDS) {
1886 return -ENODEV;
1887 }
1888 if (!enable[dev]) {
1889 dev++;
1890 return -ENOENT;
1891 }
1892
1893 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
1894 sizeof(*rme32), &card);
1895 if (err < 0)
1896 return err;
1897 card->private_free = snd_rme32_card_free;
1898 rme32 = (struct rme32 *) card->private_data;
1899 rme32->card = card;
1900 rme32->pci = pci;
1901 if (fullduplex[dev])
1902 rme32->fullduplex_mode = 1;
1903 err = snd_rme32_create(rme32);
1904 if (err < 0)
1905 return err;
1906
1907 strcpy(card->driver, "Digi32");
1908 switch (rme32->pci->device) {
1909 case PCI_DEVICE_ID_RME_DIGI32:
1910 strcpy(card->shortname, "RME Digi32");
1911 break;
1912 case PCI_DEVICE_ID_RME_DIGI32_8:
1913 strcpy(card->shortname, "RME Digi32/8");
1914 break;
1915 case PCI_DEVICE_ID_RME_DIGI32_PRO:
1916 strcpy(card->shortname, "RME Digi32 PRO");
1917 break;
1918 }
1919 sprintf(card->longname, "%s (Rev. %d) at 0x%lx, irq %d",
1920 card->shortname, rme32->rev, rme32->port, rme32->irq);
1921
1922 err = snd_card_register(card);
1923 if (err < 0)
1924 return err;
1925 pci_set_drvdata(pci, card);
1926 dev++;
1927 return 0;
1928 }
1929
1930 static int
1931 snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
1932 {
1933 return snd_card_free_on_error(&pci->dev, __snd_rme32_probe(pci, pci_id));
1934 }
1935
1936 static struct pci_driver rme32_driver = {
1937 .name = KBUILD_MODNAME,
1938 .id_table = snd_rme32_ids,
1939 .probe = snd_rme32_probe,
1940 };
1941
1942 module_pci_driver(rme32_driver);