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