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