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