H A D | rme96.c | 227 struct rme96 { struct 275 #define RME96_ISPLAYING(rme96) ((rme96)->wcreg & RME96_WCR_START) 276 #define RME96_ISRECORDING(rme96) ((rme96)->wcreg & RME96_WCR_START_2) 277 #define RME96_HAS_ANALOG_IN(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST) 278 #define RME96_HAS_ANALOG_OUT(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO || \ 279 (rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST) 280 #define RME96_DAC_IS_1852(rme96) (RME96_HAS_ANALOG_OUT(rme96) && (rme96)->rev >= 4) 281 #define RME96_DAC_IS_1855(rme96) (((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && (rme96)->rev < 4) || \ 282 ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO && (rme96)->rev == 2)) 283 #define RME96_185X_MAX_OUT(rme96) ((1 << (RME96_DAC_IS_1852(rme96) ? RME96_AD1852_VOL_BITS : RME96_AD1855_VOL_BITS)) - 1) 305 static void snd_rme96_proc_init(struct rme96 *rme96); 309 struct rme96 *rme96); 312 snd_rme96_getinputtype(struct rme96 *rme96); 315 snd_rme96_playback_ptr(struct rme96 *rme96) snd_rme96_playback_ptr() argument 317 return (readl(rme96->iobase + RME96_IO_GET_PLAY_POS) snd_rme96_playback_ptr() 318 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->playback_frlog; snd_rme96_playback_ptr() 322 snd_rme96_capture_ptr(struct rme96 *rme96) snd_rme96_capture_ptr() argument 324 return (readl(rme96->iobase + RME96_IO_GET_REC_POS) snd_rme96_capture_ptr() 325 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->capture_frlog; snd_rme96_capture_ptr() 334 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_silence() local 335 count <<= rme96->playback_frlog; snd_rme96_playback_silence() 336 pos <<= rme96->playback_frlog; snd_rme96_playback_silence() 337 memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos, snd_rme96_playback_silence() 349 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_copy() local 350 count <<= rme96->playback_frlog; snd_rme96_playback_copy() 351 pos <<= rme96->playback_frlog; snd_rme96_playback_copy() 352 return copy_from_user_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos, src, snd_rme96_playback_copy() 363 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_copy() local 364 count <<= rme96->capture_frlog; snd_rme96_capture_copy() 365 pos <<= rme96->capture_frlog; snd_rme96_capture_copy() 366 return copy_to_user_fromio(dst, rme96->iobase + RME96_IO_REC_BUFFER + pos, snd_rme96_capture_copy() 499 snd_rme96_write_SPI(struct rme96 *rme96, u16 val) snd_rme96_write_SPI() argument 505 rme96->areg |= RME96_AR_CDATA; snd_rme96_write_SPI() 507 rme96->areg &= ~RME96_AR_CDATA; snd_rme96_write_SPI() 509 rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CLATCH); snd_rme96_write_SPI() 510 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_write_SPI() 512 rme96->areg |= RME96_AR_CCLK; snd_rme96_write_SPI() 513 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_write_SPI() 517 rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CDATA); snd_rme96_write_SPI() 518 rme96->areg |= RME96_AR_CLATCH; snd_rme96_write_SPI() 519 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_write_SPI() 521 rme96->areg &= ~RME96_AR_CLATCH; snd_rme96_write_SPI() 522 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_write_SPI() 526 snd_rme96_apply_dac_volume(struct rme96 *rme96) snd_rme96_apply_dac_volume() argument 528 if (RME96_DAC_IS_1852(rme96)) { snd_rme96_apply_dac_volume() 529 snd_rme96_write_SPI(rme96, (rme96->vol[0] << 2) | 0x0); snd_rme96_apply_dac_volume() 530 snd_rme96_write_SPI(rme96, (rme96->vol[1] << 2) | 0x2); snd_rme96_apply_dac_volume() 531 } else if (RME96_DAC_IS_1855(rme96)) { snd_rme96_apply_dac_volume() 532 snd_rme96_write_SPI(rme96, (rme96->vol[0] & 0x3FF) | 0x000); snd_rme96_apply_dac_volume() 533 snd_rme96_write_SPI(rme96, (rme96->vol[1] & 0x3FF) | 0x400); snd_rme96_apply_dac_volume() 538 snd_rme96_reset_dac(struct rme96 *rme96) snd_rme96_reset_dac() argument 540 writel(rme96->wcreg | RME96_WCR_PD, snd_rme96_reset_dac() 541 rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_reset_dac() 542 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_reset_dac() 546 snd_rme96_getmontracks(struct rme96 *rme96) snd_rme96_getmontracks() argument 548 return ((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_0) & 1) + snd_rme96_getmontracks() 549 (((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_1) & 1) << 1); snd_rme96_getmontracks() 553 snd_rme96_setmontracks(struct rme96 *rme96, snd_rme96_setmontracks() argument 557 rme96->wcreg |= RME96_WCR_MONITOR_0; snd_rme96_setmontracks() 559 rme96->wcreg &= ~RME96_WCR_MONITOR_0; snd_rme96_setmontracks() 562 rme96->wcreg |= RME96_WCR_MONITOR_1; snd_rme96_setmontracks() 564 rme96->wcreg &= ~RME96_WCR_MONITOR_1; snd_rme96_setmontracks() 566 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_setmontracks() 571 snd_rme96_getattenuation(struct rme96 *rme96) snd_rme96_getattenuation() argument 573 return ((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_0) & 1) + snd_rme96_getattenuation() 574 (((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_1) & 1) << 1); snd_rme96_getattenuation() 578 snd_rme96_setattenuation(struct rme96 *rme96, snd_rme96_setattenuation() argument 583 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) & snd_rme96_setattenuation() 587 rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) & snd_rme96_setattenuation() 591 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) | snd_rme96_setattenuation() 595 rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) | snd_rme96_setattenuation() 601 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_setattenuation() 606 snd_rme96_capture_getrate(struct rme96 *rme96, snd_rme96_capture_getrate() argument 612 if (rme96->areg & RME96_AR_ANALOG) { snd_rme96_capture_getrate() 614 n = ((rme96->areg >> RME96_AR_BITPOS_F0) & 1) + snd_rme96_capture_getrate() 615 (((rme96->areg >> RME96_AR_BITPOS_F1) & 1) << 1); snd_rme96_capture_getrate() 629 return (rme96->areg & RME96_AR_BITPOS_F2) ? rate << 1 : rate; snd_rme96_capture_getrate() 632 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_capture_getrate() 633 if (rme96->rcreg & RME96_RCR_LOCK) { snd_rme96_capture_getrate() 636 if (rme96->rcreg & RME96_RCR_T_OUT) { snd_rme96_capture_getrate() 642 if (rme96->rcreg & RME96_RCR_VERF) { snd_rme96_capture_getrate() 647 n = ((rme96->rcreg >> RME96_RCR_BITPOS_F0) & 1) + snd_rme96_capture_getrate() 648 (((rme96->rcreg >> RME96_RCR_BITPOS_F1) & 1) << 1) + snd_rme96_capture_getrate() 649 (((rme96->rcreg >> RME96_RCR_BITPOS_F2) & 1) << 2); snd_rme96_capture_getrate() 653 if (rme96->rcreg & RME96_RCR_T_OUT) { snd_rme96_capture_getrate() 669 snd_rme96_playback_getrate(struct rme96 *rme96) snd_rme96_playback_getrate() argument 673 if (!(rme96->wcreg & RME96_WCR_MASTER) && snd_rme96_playback_getrate() 674 snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG && snd_rme96_playback_getrate() 675 (rate = snd_rme96_capture_getrate(rme96, &dummy)) > 0) snd_rme96_playback_getrate() 680 rate = ((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_0) & 1) + snd_rme96_playback_getrate() 681 (((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_1) & 1) << 1); snd_rme96_playback_getrate() 695 return (rme96->wcreg & RME96_WCR_DS) ? rate << 1 : rate; snd_rme96_playback_getrate() 699 snd_rme96_playback_setrate(struct rme96 *rme96, snd_rme96_playback_setrate() argument 704 ds = rme96->wcreg & RME96_WCR_DS; snd_rme96_playback_setrate() 707 rme96->wcreg &= ~RME96_WCR_DS; snd_rme96_playback_setrate() 708 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) & snd_rme96_playback_setrate() 712 rme96->wcreg &= ~RME96_WCR_DS; snd_rme96_playback_setrate() 713 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) & snd_rme96_playback_setrate() 717 rme96->wcreg &= ~RME96_WCR_DS; snd_rme96_playback_setrate() 718 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) | snd_rme96_playback_setrate() 722 rme96->wcreg |= RME96_WCR_DS; snd_rme96_playback_setrate() 723 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) & snd_rme96_playback_setrate() 727 rme96->wcreg |= RME96_WCR_DS; snd_rme96_playback_setrate() 728 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) & snd_rme96_playback_setrate() 732 rme96->wcreg |= RME96_WCR_DS; snd_rme96_playback_setrate() 733 rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) | snd_rme96_playback_setrate() 739 if ((!ds && rme96->wcreg & RME96_WCR_DS) || snd_rme96_playback_setrate() 740 (ds && !(rme96->wcreg & RME96_WCR_DS))) snd_rme96_playback_setrate() 743 snd_rme96_reset_dac(rme96); snd_rme96_playback_setrate() 746 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_playback_setrate() 752 snd_rme96_capture_analog_setrate(struct rme96 *rme96, snd_rme96_capture_analog_setrate() argument 757 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) & snd_rme96_capture_analog_setrate() 761 rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) | snd_rme96_capture_analog_setrate() 765 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) | snd_rme96_capture_analog_setrate() 769 if (rme96->rev < 4) { snd_rme96_capture_analog_setrate() 772 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) & snd_rme96_capture_analog_setrate() 776 if (rme96->rev < 4) { snd_rme96_capture_analog_setrate() 779 rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) | snd_rme96_capture_analog_setrate() 783 rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) | snd_rme96_capture_analog_setrate() 789 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_capture_analog_setrate() 794 snd_rme96_setclockmode(struct rme96 *rme96, snd_rme96_setclockmode() argument 800 rme96->wcreg &= ~RME96_WCR_MASTER; snd_rme96_setclockmode() 801 rme96->areg &= ~RME96_AR_WSEL; snd_rme96_setclockmode() 805 rme96->wcreg |= RME96_WCR_MASTER; snd_rme96_setclockmode() 806 rme96->areg &= ~RME96_AR_WSEL; snd_rme96_setclockmode() 810 rme96->wcreg |= RME96_WCR_MASTER; snd_rme96_setclockmode() 811 rme96->areg |= RME96_AR_WSEL; snd_rme96_setclockmode() 816 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_setclockmode() 817 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_setclockmode() 822 snd_rme96_getclockmode(struct rme96 *rme96) snd_rme96_getclockmode() argument 824 if (rme96->areg & RME96_AR_WSEL) { snd_rme96_getclockmode() 827 return (rme96->wcreg & RME96_WCR_MASTER) ? RME96_CLOCKMODE_MASTER : snd_rme96_getclockmode() 832 snd_rme96_setinputtype(struct rme96 *rme96, snd_rme96_setinputtype() argument 839 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) & snd_rme96_setinputtype() 843 rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) & snd_rme96_setinputtype() 847 rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) | snd_rme96_setinputtype() 851 if ((rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && snd_rme96_setinputtype() 852 rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PRO) || snd_rme96_setinputtype() 853 (rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && snd_rme96_setinputtype() 854 rme96->rev > 4)) snd_rme96_setinputtype() 859 rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) | snd_rme96_setinputtype() 863 if (!RME96_HAS_ANALOG_IN(rme96)) { snd_rme96_setinputtype() 866 rme96->areg |= RME96_AR_ANALOG; snd_rme96_setinputtype() 867 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_setinputtype() 868 if (rme96->rev < 4) { snd_rme96_setinputtype() 873 if (snd_rme96_capture_getrate(rme96, &n) == 88200) { snd_rme96_setinputtype() 874 snd_rme96_capture_analog_setrate(rme96, 44100); snd_rme96_setinputtype() 876 if (snd_rme96_capture_getrate(rme96, &n) == 64000) { snd_rme96_setinputtype() 877 snd_rme96_capture_analog_setrate(rme96, 32000); snd_rme96_setinputtype() 884 if (type != RME96_INPUT_ANALOG && RME96_HAS_ANALOG_IN(rme96)) { snd_rme96_setinputtype() 885 rme96->areg &= ~RME96_AR_ANALOG; snd_rme96_setinputtype() 886 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_setinputtype() 888 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_setinputtype() 893 snd_rme96_getinputtype(struct rme96 *rme96) snd_rme96_getinputtype() argument 895 if (rme96->areg & RME96_AR_ANALOG) { snd_rme96_getinputtype() 898 return ((rme96->wcreg >> RME96_WCR_BITPOS_INP_0) & 1) + snd_rme96_getinputtype() 899 (((rme96->wcreg >> RME96_WCR_BITPOS_INP_1) & 1) << 1); snd_rme96_getinputtype() 903 snd_rme96_setframelog(struct rme96 *rme96, snd_rme96_setframelog() argument 916 frlog += (rme96->wcreg & RME96_WCR_MODE24) ? 2 : 1; snd_rme96_setframelog() 917 rme96->playback_frlog = frlog; snd_rme96_setframelog() 919 frlog += (rme96->wcreg & RME96_WCR_MODE24_2) ? 2 : 1; snd_rme96_setframelog() 920 rme96->capture_frlog = frlog; snd_rme96_setframelog() 925 snd_rme96_playback_setformat(struct rme96 *rme96, snd_pcm_format_t format) snd_rme96_playback_setformat() argument 929 rme96->wcreg &= ~RME96_WCR_MODE24; snd_rme96_playback_setformat() 932 rme96->wcreg |= RME96_WCR_MODE24; snd_rme96_playback_setformat() 937 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_playback_setformat() 942 snd_rme96_capture_setformat(struct rme96 *rme96, snd_pcm_format_t format) snd_rme96_capture_setformat() argument 946 rme96->wcreg &= ~RME96_WCR_MODE24_2; snd_rme96_capture_setformat() 949 rme96->wcreg |= RME96_WCR_MODE24_2; snd_rme96_capture_setformat() 954 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_capture_setformat() 959 snd_rme96_set_period_properties(struct rme96 *rme96, snd_rme96_set_period_properties() argument 964 rme96->wcreg &= ~RME96_WCR_ISEL; snd_rme96_set_period_properties() 967 rme96->wcreg |= RME96_WCR_ISEL; snd_rme96_set_period_properties() 973 rme96->wcreg &= ~RME96_WCR_IDIS; snd_rme96_set_period_properties() 974 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_set_period_properties() 981 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_hw_params() local 986 runtime->dma_area = (void __force *)(rme96->iobase + snd_rme96_playback_hw_params() 988 runtime->dma_addr = rme96->port + RME96_IO_PLAY_BUFFER; snd_rme96_playback_hw_params() 991 spin_lock_irq(&rme96->lock); snd_rme96_playback_hw_params() 992 if (!(rme96->wcreg & RME96_WCR_MASTER) && snd_rme96_playback_hw_params() 993 snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG && snd_rme96_playback_hw_params() 994 (rate = snd_rme96_capture_getrate(rme96, &dummy)) > 0) snd_rme96_playback_hw_params() 1002 err = snd_rme96_playback_setrate(rme96, params_rate(params)); snd_rme96_playback_hw_params() 1008 err = snd_rme96_playback_setformat(rme96, params_format(params)); snd_rme96_playback_hw_params() 1011 snd_rme96_setframelog(rme96, params_channels(params), 1); snd_rme96_playback_hw_params() 1012 if (rme96->capture_periodsize != 0) { snd_rme96_playback_hw_params() 1013 if (params_period_size(params) << rme96->playback_frlog != snd_rme96_playback_hw_params() 1014 rme96->capture_periodsize) snd_rme96_playback_hw_params() 1020 rme96->playback_periodsize = snd_rme96_playback_hw_params() 1021 params_period_size(params) << rme96->playback_frlog; snd_rme96_playback_hw_params() 1022 snd_rme96_set_period_properties(rme96, rme96->playback_periodsize); snd_rme96_playback_hw_params() 1024 if ((rme96->wcreg & RME96_WCR_ADAT) == 0) { snd_rme96_playback_hw_params() 1025 rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP); snd_rme96_playback_hw_params() 1026 writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_playback_hw_params() 1031 spin_unlock_irq(&rme96->lock); snd_rme96_playback_hw_params() 1034 snd_rme96_apply_dac_volume(rme96); snd_rme96_playback_hw_params() 1044 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_hw_params() local 1048 runtime->dma_area = (void __force *)(rme96->iobase + snd_rme96_capture_hw_params() 1050 runtime->dma_addr = rme96->port + RME96_IO_REC_BUFFER; snd_rme96_capture_hw_params() 1053 spin_lock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1054 if ((err = snd_rme96_capture_setformat(rme96, params_format(params))) < 0) { snd_rme96_capture_hw_params() 1055 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1058 if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) { snd_rme96_capture_hw_params() 1059 if ((err = snd_rme96_capture_analog_setrate(rme96, snd_rme96_capture_hw_params() 1062 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1065 } else if ((rate = snd_rme96_capture_getrate(rme96, &isadat)) > 0) { snd_rme96_capture_hw_params() 1067 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1073 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1077 snd_rme96_setframelog(rme96, params_channels(params), 0); snd_rme96_capture_hw_params() 1078 if (rme96->playback_periodsize != 0) { snd_rme96_capture_hw_params() 1079 if (params_period_size(params) << rme96->capture_frlog != snd_rme96_capture_hw_params() 1080 rme96->playback_periodsize) snd_rme96_capture_hw_params() 1082 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1086 rme96->capture_periodsize = snd_rme96_capture_hw_params() 1087 params_period_size(params) << rme96->capture_frlog; snd_rme96_capture_hw_params() 1088 snd_rme96_set_period_properties(rme96, rme96->capture_periodsize); snd_rme96_capture_hw_params() 1089 spin_unlock_irq(&rme96->lock); snd_rme96_capture_hw_params() 1095 snd_rme96_trigger(struct rme96 *rme96, snd_rme96_trigger() argument 1099 writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS); snd_rme96_trigger() 1101 writel(0, rme96->iobase + RME96_IO_RESET_REC_POS); snd_rme96_trigger() 1103 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_trigger() 1104 if (rme96->rcreg & RME96_RCR_IRQ) snd_rme96_trigger() 1105 writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ); snd_rme96_trigger() 1108 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_trigger() 1109 if (rme96->rcreg & RME96_RCR_IRQ_2) snd_rme96_trigger() 1110 writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ); snd_rme96_trigger() 1113 rme96->wcreg |= RME96_WCR_START; snd_rme96_trigger() 1115 rme96->wcreg &= ~RME96_WCR_START; snd_rme96_trigger() 1117 rme96->wcreg |= RME96_WCR_START_2; snd_rme96_trigger() 1119 rme96->wcreg &= ~RME96_WCR_START_2; snd_rme96_trigger() 1120 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_trigger() 1129 struct rme96 *rme96 = (struct rme96 *)dev_id; snd_rme96_interrupt() local 1131 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_interrupt() 1133 if (!((rme96->rcreg & RME96_RCR_IRQ) || snd_rme96_interrupt() 1134 (rme96->rcreg & RME96_RCR_IRQ_2))) snd_rme96_interrupt() 1139 if (rme96->rcreg & RME96_RCR_IRQ) { snd_rme96_interrupt() 1141 snd_pcm_period_elapsed(rme96->playback_substream); snd_rme96_interrupt() 1142 writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ); snd_rme96_interrupt() 1144 if (rme96->rcreg & RME96_RCR_IRQ_2) { snd_rme96_interrupt() 1146 snd_pcm_period_elapsed(rme96->capture_substream); snd_rme96_interrupt() 1147 writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ); snd_rme96_interrupt() 1161 rme96_set_buffer_size_constraint(struct rme96 *rme96, rme96_set_buffer_size_constraint() argument 1168 if ((size = rme96->playback_periodsize) != 0 || rme96_set_buffer_size_constraint() 1169 (size = rme96->capture_periodsize) != 0) rme96_set_buffer_size_constraint() 1183 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_spdif_open() local 1187 spin_lock_irq(&rme96->lock); snd_rme96_playback_spdif_open() 1188 if (rme96->playback_substream != NULL) { snd_rme96_playback_spdif_open() 1189 spin_unlock_irq(&rme96->lock); snd_rme96_playback_spdif_open() 1192 rme96->wcreg &= ~RME96_WCR_ADAT; snd_rme96_playback_spdif_open() 1193 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_playback_spdif_open() 1194 rme96->playback_substream = substream; snd_rme96_playback_spdif_open() 1195 spin_unlock_irq(&rme96->lock); snd_rme96_playback_spdif_open() 1198 if (!(rme96->wcreg & RME96_WCR_MASTER) && snd_rme96_playback_spdif_open() 1199 snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG && snd_rme96_playback_spdif_open() 1200 (rate = snd_rme96_capture_getrate(rme96, &dummy)) > 0) snd_rme96_playback_spdif_open() 1207 rme96_set_buffer_size_constraint(rme96, runtime); snd_rme96_playback_spdif_open() 1209 rme96->wcreg_spdif_stream = rme96->wcreg_spdif; snd_rme96_playback_spdif_open() 1210 rme96->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_rme96_playback_spdif_open() 1211 snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE | snd_rme96_playback_spdif_open() 1212 SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id); snd_rme96_playback_spdif_open() 1220 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_spdif_open() local 1225 if (snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG && snd_rme96_capture_spdif_open() 1226 (rate = snd_rme96_capture_getrate(rme96, &isadat)) > 0) snd_rme96_capture_spdif_open() 1236 spin_lock_irq(&rme96->lock); snd_rme96_capture_spdif_open() 1237 if (rme96->capture_substream != NULL) { snd_rme96_capture_spdif_open() 1238 spin_unlock_irq(&rme96->lock); snd_rme96_capture_spdif_open() 1241 rme96->capture_substream = substream; snd_rme96_capture_spdif_open() 1242 spin_unlock_irq(&rme96->lock); snd_rme96_capture_spdif_open() 1244 rme96_set_buffer_size_constraint(rme96, runtime); snd_rme96_capture_spdif_open() 1252 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_adat_open() local 1256 spin_lock_irq(&rme96->lock); snd_rme96_playback_adat_open() 1257 if (rme96->playback_substream != NULL) { snd_rme96_playback_adat_open() 1258 spin_unlock_irq(&rme96->lock); snd_rme96_playback_adat_open() 1261 rme96->wcreg |= RME96_WCR_ADAT; snd_rme96_playback_adat_open() 1262 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_playback_adat_open() 1263 rme96->playback_substream = substream; snd_rme96_playback_adat_open() 1264 spin_unlock_irq(&rme96->lock); snd_rme96_playback_adat_open() 1267 if (!(rme96->wcreg & RME96_WCR_MASTER) && snd_rme96_playback_adat_open() 1268 snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG && snd_rme96_playback_adat_open() 1269 (rate = snd_rme96_capture_getrate(rme96, &dummy)) > 0) snd_rme96_playback_adat_open() 1276 rme96_set_buffer_size_constraint(rme96, runtime); snd_rme96_playback_adat_open() 1284 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_adat_open() local 1289 if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) { snd_rme96_capture_adat_open() 1294 if ((rate = snd_rme96_capture_getrate(rme96, &isadat)) > 0) { snd_rme96_capture_adat_open() 1303 spin_lock_irq(&rme96->lock); snd_rme96_capture_adat_open() 1304 if (rme96->capture_substream != NULL) { snd_rme96_capture_adat_open() 1305 spin_unlock_irq(&rme96->lock); snd_rme96_capture_adat_open() 1308 rme96->capture_substream = substream; snd_rme96_capture_adat_open() 1309 spin_unlock_irq(&rme96->lock); snd_rme96_capture_adat_open() 1311 rme96_set_buffer_size_constraint(rme96, runtime); snd_rme96_capture_adat_open() 1318 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_close() local 1321 spin_lock_irq(&rme96->lock); snd_rme96_playback_close() 1322 if (RME96_ISPLAYING(rme96)) { snd_rme96_playback_close() 1323 snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK); snd_rme96_playback_close() 1325 rme96->playback_substream = NULL; snd_rme96_playback_close() 1326 rme96->playback_periodsize = 0; snd_rme96_playback_close() 1327 spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0; snd_rme96_playback_close() 1328 spin_unlock_irq(&rme96->lock); snd_rme96_playback_close() 1330 rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_rme96_playback_close() 1331 snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE | snd_rme96_playback_close() 1332 SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id); snd_rme96_playback_close() 1340 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_close() local 1342 spin_lock_irq(&rme96->lock); snd_rme96_capture_close() 1343 if (RME96_ISRECORDING(rme96)) { snd_rme96_capture_close() 1344 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE); snd_rme96_capture_close() 1346 rme96->capture_substream = NULL; snd_rme96_capture_close() 1347 rme96->capture_periodsize = 0; snd_rme96_capture_close() 1348 spin_unlock_irq(&rme96->lock); snd_rme96_capture_close() 1355 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_prepare() local 1357 spin_lock_irq(&rme96->lock); snd_rme96_playback_prepare() 1358 if (RME96_ISPLAYING(rme96)) { snd_rme96_playback_prepare() 1359 snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK); snd_rme96_playback_prepare() 1361 writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS); snd_rme96_playback_prepare() 1362 spin_unlock_irq(&rme96->lock); snd_rme96_playback_prepare() 1369 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_prepare() local 1371 spin_lock_irq(&rme96->lock); snd_rme96_capture_prepare() 1372 if (RME96_ISRECORDING(rme96)) { snd_rme96_capture_prepare() 1373 snd_rme96_trigger(rme96, RME96_STOP_CAPTURE); snd_rme96_capture_prepare() 1375 writel(0, rme96->iobase + RME96_IO_RESET_REC_POS); snd_rme96_capture_prepare() 1376 spin_unlock_irq(&rme96->lock); snd_rme96_capture_prepare() 1384 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_trigger() local 1389 if (snd_pcm_substream_chip(s) == rme96) snd_pcm_group_for_each_entry() 1393 sync = (rme96->playback_substream && rme96->capture_substream) && 1394 (rme96->playback_substream->group == 1395 rme96->capture_substream->group); 1399 if (!RME96_ISPLAYING(rme96)) { 1400 if (substream != rme96->playback_substream) 1402 snd_rme96_trigger(rme96, sync ? RME96_START_BOTH 1409 if (RME96_ISPLAYING(rme96)) { 1410 if (substream != rme96->playback_substream) 1412 snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH 1418 if (RME96_ISPLAYING(rme96)) 1419 snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH 1425 if (!RME96_ISPLAYING(rme96)) 1426 snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH 1441 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_trigger() local 1446 if (snd_pcm_substream_chip(s) == rme96) snd_pcm_group_for_each_entry() 1450 sync = (rme96->playback_substream && rme96->capture_substream) && 1451 (rme96->playback_substream->group == 1452 rme96->capture_substream->group); 1456 if (!RME96_ISRECORDING(rme96)) { 1457 if (substream != rme96->capture_substream) 1459 snd_rme96_trigger(rme96, sync ? RME96_START_BOTH 1466 if (RME96_ISRECORDING(rme96)) { 1467 if (substream != rme96->capture_substream) 1469 snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH 1475 if (RME96_ISRECORDING(rme96)) 1476 snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH 1482 if (!RME96_ISRECORDING(rme96)) 1483 snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH 1497 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_playback_pointer() local 1498 return snd_rme96_playback_ptr(rme96); snd_rme96_playback_pointer() 1504 struct rme96 *rme96 = snd_pcm_substream_chip(substream); snd_rme96_capture_pointer() local 1505 return snd_rme96_capture_ptr(rme96); snd_rme96_capture_pointer() 1561 struct rme96 *rme96 = (struct rme96 *)private_data; snd_rme96_free() local 1563 if (rme96 == NULL) { snd_rme96_free() 1566 if (rme96->irq >= 0) { snd_rme96_free() 1567 snd_rme96_trigger(rme96, RME96_STOP_BOTH); snd_rme96_free() 1568 rme96->areg &= ~RME96_AR_DAC_EN; snd_rme96_free() 1569 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_free() 1570 free_irq(rme96->irq, (void *)rme96); snd_rme96_free() 1571 rme96->irq = -1; snd_rme96_free() 1573 if (rme96->iobase) { snd_rme96_free() 1574 iounmap(rme96->iobase); snd_rme96_free() 1575 rme96->iobase = NULL; snd_rme96_free() 1577 if (rme96->port) { snd_rme96_free() 1578 pci_release_regions(rme96->pci); snd_rme96_free() 1579 rme96->port = 0; snd_rme96_free() 1582 vfree(rme96->playback_suspend_buffer); snd_rme96_free() 1583 vfree(rme96->capture_suspend_buffer); snd_rme96_free() 1585 pci_disable_device(rme96->pci); snd_rme96_free() 1591 struct rme96 *rme96 = pcm->private_data; snd_rme96_free_spdif_pcm() local 1592 rme96->spdif_pcm = NULL; snd_rme96_free_spdif_pcm() 1598 struct rme96 *rme96 = pcm->private_data; snd_rme96_free_adat_pcm() local 1599 rme96->adat_pcm = NULL; snd_rme96_free_adat_pcm() 1603 snd_rme96_create(struct rme96 *rme96) snd_rme96_create() argument 1605 struct pci_dev *pci = rme96->pci; snd_rme96_create() 1608 rme96->irq = -1; snd_rme96_create() 1609 spin_lock_init(&rme96->lock); snd_rme96_create() 1616 rme96->port = pci_resource_start(rme96->pci, 0); snd_rme96_create() 1618 rme96->iobase = ioremap_nocache(rme96->port, RME96_IO_SIZE); snd_rme96_create() 1619 if (!rme96->iobase) { snd_rme96_create() 1620 dev_err(rme96->card->dev, snd_rme96_create() 1622 rme96->port, rme96->port + RME96_IO_SIZE - 1); snd_rme96_create() 1627 KBUILD_MODNAME, rme96)) { snd_rme96_create() 1628 dev_err(rme96->card->dev, "unable to grab IRQ %d\n", pci->irq); snd_rme96_create() 1631 rme96->irq = pci->irq; snd_rme96_create() 1634 pci_read_config_byte(pci, 8, &rme96->rev); snd_rme96_create() 1637 if ((err = snd_pcm_new(rme96->card, "Digi96 IEC958", 0, snd_rme96_create() 1638 1, 1, &rme96->spdif_pcm)) < 0) snd_rme96_create() 1642 rme96->spdif_pcm->private_data = rme96; snd_rme96_create() 1643 rme96->spdif_pcm->private_free = snd_rme96_free_spdif_pcm; snd_rme96_create() 1644 strcpy(rme96->spdif_pcm->name, "Digi96 IEC958"); snd_rme96_create() 1645 snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_spdif_ops); snd_rme96_create() 1646 snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_spdif_ops); snd_rme96_create() 1648 rme96->spdif_pcm->info_flags = 0; snd_rme96_create() 1653 rme96->adat_pcm = NULL; snd_rme96_create() 1655 if ((err = snd_pcm_new(rme96->card, "Digi96 ADAT", 1, snd_rme96_create() 1656 1, 1, &rme96->adat_pcm)) < 0) snd_rme96_create() 1660 rme96->adat_pcm->private_data = rme96; snd_rme96_create() 1661 rme96->adat_pcm->private_free = snd_rme96_free_adat_pcm; snd_rme96_create() 1662 strcpy(rme96->adat_pcm->name, "Digi96 ADAT"); snd_rme96_create() 1663 snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_adat_ops); snd_rme96_create() 1664 snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_adat_ops); snd_rme96_create() 1666 rme96->adat_pcm->info_flags = 0; snd_rme96_create() 1669 rme96->playback_periodsize = 0; snd_rme96_create() 1670 rme96->capture_periodsize = 0; snd_rme96_create() 1673 snd_rme96_trigger(rme96, RME96_STOP_BOTH); snd_rme96_create() 1676 rme96->wcreg = snd_rme96_create() 1682 rme96->areg = RME96_AR_FREQPAD_1; /* set 44.1 kHz analog capture */ snd_rme96_create() 1684 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_create() 1685 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_create() 1688 writel(rme96->areg | RME96_AR_PD2, snd_rme96_create() 1689 rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_create() 1690 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_create() 1693 snd_rme96_reset_dac(rme96); snd_rme96_create() 1694 rme96->areg |= RME96_AR_DAC_EN; snd_rme96_create() 1695 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); snd_rme96_create() 1698 writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS); snd_rme96_create() 1699 writel(0, rme96->iobase + RME96_IO_RESET_REC_POS); snd_rme96_create() 1702 rme96->vol[0] = rme96->vol[1] = 0; snd_rme96_create() 1703 if (RME96_HAS_ANALOG_OUT(rme96)) { snd_rme96_create() 1704 snd_rme96_apply_dac_volume(rme96); snd_rme96_create() 1708 if ((err = snd_rme96_create_switches(rme96->card, rme96)) < 0) { snd_rme96_create() 1713 snd_rme96_proc_init(rme96); snd_rme96_create() 1726 struct rme96 *rme96 = entry->private_data; snd_rme96_proc_read() local 1728 rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_proc_read() 1730 snd_iprintf(buffer, rme96->card->longname); snd_rme96_proc_read() 1731 snd_iprintf(buffer, " (index #%d)\n", rme96->card->number + 1); snd_rme96_proc_read() 1734 if (rme96->wcreg & RME96_WCR_IDIS) { snd_rme96_proc_read() 1737 } else if (rme96->wcreg & RME96_WCR_ISEL) { snd_rme96_proc_read() 1743 switch (snd_rme96_getinputtype(rme96)) { snd_rme96_proc_read() 1760 if (snd_rme96_capture_getrate(rme96, &n) < 0) { snd_rme96_proc_read() 1769 snd_rme96_capture_getrate(rme96, &n)); snd_rme96_proc_read() 1771 if (rme96->wcreg & RME96_WCR_MODE24_2) { snd_rme96_proc_read() 1778 if (rme96->wcreg & RME96_WCR_SEL) { snd_rme96_proc_read() 1784 snd_rme96_playback_getrate(rme96)); snd_rme96_proc_read() 1785 if (rme96->wcreg & RME96_WCR_MODE24) { snd_rme96_proc_read() 1790 if (rme96->areg & RME96_AR_WSEL) { snd_rme96_proc_read() 1792 } else if (rme96->wcreg & RME96_WCR_MASTER) { snd_rme96_proc_read() 1794 } else if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) { snd_rme96_proc_read() 1796 } else if (snd_rme96_capture_getrate(rme96, &n) < 0) { snd_rme96_proc_read() 1801 if (rme96->wcreg & RME96_WCR_PRO) { snd_rme96_proc_read() 1806 if (rme96->wcreg & RME96_WCR_EMP) { snd_rme96_proc_read() 1811 if (rme96->wcreg & RME96_WCR_DOLBY) { snd_rme96_proc_read() 1816 if (RME96_HAS_ANALOG_IN(rme96)) { snd_rme96_proc_read() 1818 switch (snd_rme96_getmontracks(rme96)) { snd_rme96_proc_read() 1832 switch (snd_rme96_getattenuation(rme96)) { snd_rme96_proc_read() 1846 snd_iprintf(buffer, " volume left: %u\n", rme96->vol[0]); snd_rme96_proc_read() 1847 snd_iprintf(buffer, " volume right: %u\n", rme96->vol[1]); snd_rme96_proc_read() 1851 static void snd_rme96_proc_init(struct rme96 *rme96) snd_rme96_proc_init() argument 1855 if (! snd_card_proc_new(rme96->card, "rme96", &entry)) snd_rme96_proc_init() 1856 snd_info_set_text_ops(entry, rme96, snd_rme96_proc_read); snd_rme96_proc_init() 1868 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_get_loopback_control() local 1870 spin_lock_irq(&rme96->lock); snd_rme96_get_loopback_control() 1871 ucontrol->value.integer.value[0] = rme96->wcreg & RME96_WCR_SEL ? 0 : 1; snd_rme96_get_loopback_control() 1872 spin_unlock_irq(&rme96->lock); snd_rme96_get_loopback_control() 1878 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_put_loopback_control() local 1883 spin_lock_irq(&rme96->lock); snd_rme96_put_loopback_control() 1884 val = (rme96->wcreg & ~RME96_WCR_SEL) | val; snd_rme96_put_loopback_control() 1885 change = val != rme96->wcreg; snd_rme96_put_loopback_control() 1886 rme96->wcreg = val; snd_rme96_put_loopback_control() 1887 writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_put_loopback_control() 1888 spin_unlock_irq(&rme96->lock); snd_rme96_put_loopback_control() 1898 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_info_inputtype_control() local 1904 switch (rme96->pci->device) { snd_rme96_info_inputtype_control() 1913 if (rme96->rev > 4) { snd_rme96_info_inputtype_control() 1931 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_get_inputtype_control() local 1934 spin_lock_irq(&rme96->lock); snd_rme96_get_inputtype_control() 1935 ucontrol->value.enumerated.item[0] = snd_rme96_getinputtype(rme96); snd_rme96_get_inputtype_control() 1937 switch (rme96->pci->device) { snd_rme96_get_inputtype_control() 1946 if (rme96->rev > 4) { snd_rme96_get_inputtype_control() 1964 spin_unlock_irq(&rme96->lock); snd_rme96_get_inputtype_control() 1970 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_put_inputtype_control() local 1974 switch (rme96->pci->device) { snd_rme96_put_inputtype_control() 1983 if (rme96->rev > 4) { snd_rme96_put_inputtype_control() 1996 if (rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && rme96->rev > 4) { snd_rme96_put_inputtype_control() 2002 spin_lock_irq(&rme96->lock); snd_rme96_put_inputtype_control() 2003 change = (int)val != snd_rme96_getinputtype(rme96); snd_rme96_put_inputtype_control() 2004 snd_rme96_setinputtype(rme96, val); snd_rme96_put_inputtype_control() 2005 spin_unlock_irq(&rme96->lock); snd_rme96_put_inputtype_control() 2019 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_get_clockmode_control() local 2021 spin_lock_irq(&rme96->lock); snd_rme96_get_clockmode_control() 2022 ucontrol->value.enumerated.item[0] = snd_rme96_getclockmode(rme96); snd_rme96_get_clockmode_control() 2023 spin_unlock_irq(&rme96->lock); snd_rme96_get_clockmode_control() 2029 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_put_clockmode_control() local 2034 spin_lock_irq(&rme96->lock); snd_rme96_put_clockmode_control() 2035 change = (int)val != snd_rme96_getclockmode(rme96); snd_rme96_put_clockmode_control() 2036 snd_rme96_setclockmode(rme96, val); snd_rme96_put_clockmode_control() 2037 spin_unlock_irq(&rme96->lock); snd_rme96_put_clockmode_control() 2053 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_get_attenuation_control() local 2055 spin_lock_irq(&rme96->lock); snd_rme96_get_attenuation_control() 2056 ucontrol->value.enumerated.item[0] = snd_rme96_getattenuation(rme96); snd_rme96_get_attenuation_control() 2057 spin_unlock_irq(&rme96->lock); snd_rme96_get_attenuation_control() 2063 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_put_attenuation_control() local 2068 spin_lock_irq(&rme96->lock); snd_rme96_put_attenuation_control() 2070 change = (int)val != snd_rme96_getattenuation(rme96); snd_rme96_put_attenuation_control() 2071 snd_rme96_setattenuation(rme96, val); snd_rme96_put_attenuation_control() 2072 spin_unlock_irq(&rme96->lock); snd_rme96_put_attenuation_control() 2086 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_get_montracks_control() local 2088 spin_lock_irq(&rme96->lock); snd_rme96_get_montracks_control() 2089 ucontrol->value.enumerated.item[0] = snd_rme96_getmontracks(rme96); snd_rme96_get_montracks_control() 2090 spin_unlock_irq(&rme96->lock); snd_rme96_get_montracks_control() 2096 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_put_montracks_control() local 2101 spin_lock_irq(&rme96->lock); snd_rme96_put_montracks_control() 2102 change = (int)val != snd_rme96_getmontracks(rme96); snd_rme96_put_montracks_control() 2103 snd_rme96_setmontracks(rme96, val); snd_rme96_put_montracks_control() 2104 spin_unlock_irq(&rme96->lock); snd_rme96_put_montracks_control() 2139 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_control_spdif_get() local 2141 snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif); snd_rme96_control_spdif_get() 2147 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_control_spdif_put() local 2152 spin_lock_irq(&rme96->lock); snd_rme96_control_spdif_put() 2153 change = val != rme96->wcreg_spdif; snd_rme96_control_spdif_put() 2154 rme96->wcreg_spdif = val; snd_rme96_control_spdif_put() 2155 spin_unlock_irq(&rme96->lock); snd_rme96_control_spdif_put() 2168 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_control_spdif_stream_get() local 2170 snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif_stream); snd_rme96_control_spdif_stream_get() 2176 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_control_spdif_stream_put() local 2181 spin_lock_irq(&rme96->lock); snd_rme96_control_spdif_stream_put() 2182 change = val != rme96->wcreg_spdif_stream; snd_rme96_control_spdif_stream_put() 2183 rme96->wcreg_spdif_stream = val; snd_rme96_control_spdif_stream_put() 2184 rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP); snd_rme96_control_spdif_stream_put() 2185 rme96->wcreg |= val; snd_rme96_control_spdif_stream_put() 2186 writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER); snd_rme96_control_spdif_stream_put() 2187 spin_unlock_irq(&rme96->lock); snd_rme96_control_spdif_stream_put() 2207 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_dac_volume_info() local 2212 uinfo->value.integer.max = RME96_185X_MAX_OUT(rme96); snd_rme96_dac_volume_info() 2219 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_dac_volume_get() local 2221 spin_lock_irq(&rme96->lock); snd_rme96_dac_volume_get() 2222 u->value.integer.value[0] = rme96->vol[0]; snd_rme96_dac_volume_get() 2223 u->value.integer.value[1] = rme96->vol[1]; snd_rme96_dac_volume_get() 2224 spin_unlock_irq(&rme96->lock); snd_rme96_dac_volume_get() 2232 struct rme96 *rme96 = snd_kcontrol_chip(kcontrol); snd_rme96_dac_volume_put() local 2237 if (!RME96_HAS_ANALOG_OUT(rme96)) snd_rme96_dac_volume_put() 2239 maxvol = RME96_185X_MAX_OUT(rme96); snd_rme96_dac_volume_put() 2240 spin_lock_irq(&rme96->lock); snd_rme96_dac_volume_put() 2242 if (vol != rme96->vol[0] && vol <= maxvol) { snd_rme96_dac_volume_put() 2243 rme96->vol[0] = vol; snd_rme96_dac_volume_put() 2247 if (vol != rme96->vol[1] && vol <= maxvol) { snd_rme96_dac_volume_put() 2248 rme96->vol[1] = vol; snd_rme96_dac_volume_put() 2252 snd_rme96_apply_dac_volume(rme96); snd_rme96_dac_volume_put() 2253 spin_unlock_irq(&rme96->lock); snd_rme96_dac_volume_put() 2340 struct rme96 *rme96) snd_rme96_create_switches() 2346 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme96_controls[idx], rme96))) < 0) snd_rme96_create_switches() 2349 rme96->spdif_ctl = kctl; snd_rme96_create_switches() 2352 if (RME96_HAS_ANALOG_OUT(rme96)) { snd_rme96_create_switches() 2354 if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_rme96_controls[idx], rme96))) < 0) snd_rme96_create_switches() 2370 struct rme96 *rme96 = card->private_data; rme96_suspend() local 2373 snd_pcm_suspend(rme96->playback_substream); rme96_suspend() 2374 snd_pcm_suspend(rme96->capture_substream); rme96_suspend() 2377 rme96->playback_pointer = readl(rme96->iobase + RME96_IO_GET_PLAY_POS) rme96_suspend() 2379 rme96->capture_pointer = readl(rme96->iobase + RME96_IO_GET_REC_POS) rme96_suspend() 2383 memcpy_fromio(rme96->playback_suspend_buffer, rme96_suspend() 2384 rme96->iobase + RME96_IO_PLAY_BUFFER, RME96_BUFFER_SIZE); rme96_suspend() 2385 memcpy_fromio(rme96->capture_suspend_buffer, rme96_suspend() 2386 rme96->iobase + RME96_IO_REC_BUFFER, RME96_BUFFER_SIZE); rme96_suspend() 2389 rme96->areg &= ~RME96_AR_DAC_EN; rme96_suspend() 2390 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); rme96_suspend() 2397 struct rme96 *rme96 = card->private_data; rme96_resume() local 2400 writel(0, rme96->iobase + RME96_IO_SET_PLAY_POS rme96_resume() 2401 + rme96->playback_pointer); rme96_resume() 2402 writel(0, rme96->iobase + RME96_IO_SET_REC_POS rme96_resume() 2403 + rme96->capture_pointer); rme96_resume() 2406 memcpy_toio(rme96->iobase + RME96_IO_PLAY_BUFFER, rme96_resume() 2407 rme96->playback_suspend_buffer, RME96_BUFFER_SIZE); rme96_resume() 2408 memcpy_toio(rme96->iobase + RME96_IO_REC_BUFFER, rme96_resume() 2409 rme96->capture_suspend_buffer, RME96_BUFFER_SIZE); rme96_resume() 2412 writel(rme96->areg | RME96_AR_PD2, rme96_resume() 2413 rme96->iobase + RME96_IO_ADDITIONAL_REG); rme96_resume() 2414 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); rme96_resume() 2417 snd_rme96_reset_dac(rme96); rme96_resume() 2418 rme96->areg |= RME96_AR_DAC_EN; rme96_resume() 2419 writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG); rme96_resume() 2420 if (RME96_HAS_ANALOG_OUT(rme96)) { rme96_resume() 2422 snd_rme96_apply_dac_volume(rme96); rme96_resume() 2446 struct rme96 *rme96; snd_rme96_probe() local 2459 sizeof(struct rme96), &card); snd_rme96_probe() 2463 rme96 = card->private_data; snd_rme96_probe() 2464 rme96->card = card; snd_rme96_probe() 2465 rme96->pci = pci; snd_rme96_probe() 2466 if ((err = snd_rme96_create(rme96)) < 0) { snd_rme96_probe() 2472 rme96->playback_suspend_buffer = vmalloc(RME96_BUFFER_SIZE); snd_rme96_probe() 2473 if (!rme96->playback_suspend_buffer) { snd_rme96_probe() 2479 rme96->capture_suspend_buffer = vmalloc(RME96_BUFFER_SIZE); snd_rme96_probe() 2480 if (!rme96->capture_suspend_buffer) { snd_rme96_probe() 2489 switch (rme96->pci->device) { snd_rme96_probe() 2500 pci_read_config_byte(rme96->pci, 8, &val); snd_rme96_probe() 2509 rme96->port, rme96->irq); snd_rme96_probe() 2339 snd_rme96_create_switches(struct snd_card *card, struct rme96 *rme96) snd_rme96_create_switches() argument
|