Lines Matching refs:rme32
179 struct rme32 { struct
223 #define RME32_ISWORKING(rme32) ((rme32)->wcreg & RME32_WCR_START) argument
224 #define RME32_PRO_WITH_8414(rme32) ((rme32)->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO && (rme32)… argument
232 static void snd_rme32_proc_init(struct rme32 * rme32);
234 static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32);
236 static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32) in snd_rme32_pcm_byteptr() argument
238 return (readl(rme32->iobase + RME32_IO_GET_POS) in snd_rme32_pcm_byteptr()
247 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_silence() local
249 memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count); in snd_rme32_playback_silence()
258 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_copy() local
260 if (copy_from_user_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos, in snd_rme32_playback_copy()
270 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_copy_kernel() local
272 memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos, src, count); in snd_rme32_playback_copy_kernel()
281 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_copy() local
284 rme32->iobase + RME32_IO_DATA_BUFFER + pos, in snd_rme32_capture_copy()
294 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_copy_kernel() local
296 memcpy_fromio(dst, rme32->iobase + RME32_IO_DATA_BUFFER + pos, count); in snd_rme32_capture_copy_kernel()
406 static void snd_rme32_reset_dac(struct rme32 *rme32) in snd_rme32_reset_dac() argument
408 writel(rme32->wcreg | RME32_WCR_PD, in snd_rme32_reset_dac()
409 rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_reset_dac()
410 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_reset_dac()
413 static int snd_rme32_playback_getrate(struct rme32 * rme32) in snd_rme32_playback_getrate() argument
417 rate = ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) + in snd_rme32_playback_getrate()
418 (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1); in snd_rme32_playback_getrate()
432 return (rme32->wcreg & RME32_WCR_DS_BM) ? rate << 1 : rate; in snd_rme32_playback_getrate()
435 static int snd_rme32_capture_getrate(struct rme32 * rme32, int *is_adat) in snd_rme32_capture_getrate() argument
440 if (rme32->rcreg & RME32_RCR_LOCK) { in snd_rme32_capture_getrate()
444 if (rme32->rcreg & RME32_RCR_ERF) { in snd_rme32_capture_getrate()
449 n = ((rme32->rcreg >> RME32_RCR_BITPOS_F0) & 1) + in snd_rme32_capture_getrate()
450 (((rme32->rcreg >> RME32_RCR_BITPOS_F1) & 1) << 1) + in snd_rme32_capture_getrate()
451 (((rme32->rcreg >> RME32_RCR_BITPOS_F2) & 1) << 2); in snd_rme32_capture_getrate()
453 if (RME32_PRO_WITH_8414(rme32)) in snd_rme32_capture_getrate()
497 static int snd_rme32_playback_setrate(struct rme32 * rme32, int rate) in snd_rme32_playback_setrate() argument
501 ds = rme32->wcreg & RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
504 rme32->wcreg &= ~RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
505 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) & in snd_rme32_playback_setrate()
509 rme32->wcreg &= ~RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
510 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) & in snd_rme32_playback_setrate()
514 rme32->wcreg &= ~RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
515 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) | in snd_rme32_playback_setrate()
519 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO) in snd_rme32_playback_setrate()
521 rme32->wcreg |= RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
522 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) & in snd_rme32_playback_setrate()
526 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO) in snd_rme32_playback_setrate()
528 rme32->wcreg |= RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
529 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_1) & in snd_rme32_playback_setrate()
533 if (rme32->pci->device != PCI_DEVICE_ID_RME_DIGI32_PRO) in snd_rme32_playback_setrate()
535 rme32->wcreg |= RME32_WCR_DS_BM; in snd_rme32_playback_setrate()
536 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) | in snd_rme32_playback_setrate()
542 if ((!ds && rme32->wcreg & RME32_WCR_DS_BM) || in snd_rme32_playback_setrate()
543 (ds && !(rme32->wcreg & RME32_WCR_DS_BM))) in snd_rme32_playback_setrate()
546 snd_rme32_reset_dac(rme32); in snd_rme32_playback_setrate()
548 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_playback_setrate()
553 static int snd_rme32_setclockmode(struct rme32 * rme32, int mode) in snd_rme32_setclockmode() argument
558 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) & in snd_rme32_setclockmode()
563 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) & in snd_rme32_setclockmode()
568 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_FREQ_0) | in snd_rme32_setclockmode()
573 rme32->wcreg = (rme32->wcreg | RME32_WCR_FREQ_0) | in snd_rme32_setclockmode()
579 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_setclockmode()
583 static int snd_rme32_getclockmode(struct rme32 * rme32) in snd_rme32_getclockmode() argument
585 return ((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_0) & 1) + in snd_rme32_getclockmode()
586 (((rme32->wcreg >> RME32_WCR_BITPOS_FREQ_1) & 1) << 1); in snd_rme32_getclockmode()
589 static int snd_rme32_setinputtype(struct rme32 * rme32, int type) in snd_rme32_setinputtype() argument
593 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) & in snd_rme32_setinputtype()
597 rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) & in snd_rme32_setinputtype()
601 rme32->wcreg = (rme32->wcreg & ~RME32_WCR_INP_0) | in snd_rme32_setinputtype()
605 rme32->wcreg = (rme32->wcreg | RME32_WCR_INP_0) | in snd_rme32_setinputtype()
611 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_setinputtype()
615 static int snd_rme32_getinputtype(struct rme32 * rme32) in snd_rme32_getinputtype() argument
617 return ((rme32->wcreg >> RME32_WCR_BITPOS_INP_0) & 1) + in snd_rme32_getinputtype()
618 (((rme32->wcreg >> RME32_WCR_BITPOS_INP_1) & 1) << 1); in snd_rme32_getinputtype()
622 snd_rme32_setframelog(struct rme32 * rme32, int n_channels, int is_playback) in snd_rme32_setframelog() argument
633 frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1; in snd_rme32_setframelog()
634 rme32->playback_frlog = frlog; in snd_rme32_setframelog()
636 frlog += (rme32->wcreg & RME32_WCR_MODE24) ? 2 : 1; in snd_rme32_setframelog()
637 rme32->capture_frlog = frlog; in snd_rme32_setframelog()
641 static int snd_rme32_setformat(struct rme32 *rme32, snd_pcm_format_t format) in snd_rme32_setformat() argument
645 rme32->wcreg &= ~RME32_WCR_MODE24; in snd_rme32_setformat()
648 rme32->wcreg |= RME32_WCR_MODE24; in snd_rme32_setformat()
653 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_setformat()
662 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_hw_params() local
665 if (!rme32->fullduplex_mode) { in snd_rme32_playback_hw_params()
666 runtime->dma_area = (void __force *)(rme32->iobase + in snd_rme32_playback_hw_params()
668 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER; in snd_rme32_playback_hw_params()
672 spin_lock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
673 if ((rme32->rcreg & RME32_RCR_KMODE) && in snd_rme32_playback_hw_params()
674 (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) { in snd_rme32_playback_hw_params()
677 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
680 } else if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) { in snd_rme32_playback_hw_params()
681 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
684 if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) { in snd_rme32_playback_hw_params()
685 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
689 snd_rme32_setframelog(rme32, params_channels(params), 1); in snd_rme32_playback_hw_params()
690 if (rme32->capture_periodsize != 0) { in snd_rme32_playback_hw_params()
691 if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) { in snd_rme32_playback_hw_params()
692 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
696 rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog; in snd_rme32_playback_hw_params()
698 if ((rme32->wcreg & RME32_WCR_ADAT) == 0) { in snd_rme32_playback_hw_params()
699 rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP); in snd_rme32_playback_hw_params()
700 rme32->wcreg |= rme32->wcreg_spdif_stream; in snd_rme32_playback_hw_params()
701 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_playback_hw_params()
703 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_hw_params()
713 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_hw_params() local
716 if (!rme32->fullduplex_mode) { in snd_rme32_capture_hw_params()
717 runtime->dma_area = (void __force *)rme32->iobase + in snd_rme32_capture_hw_params()
719 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER; in snd_rme32_capture_hw_params()
723 spin_lock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
725 rme32->wcreg |= RME32_WCR_AUTOSYNC; in snd_rme32_capture_hw_params()
726 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_capture_hw_params()
728 if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) { in snd_rme32_capture_hw_params()
729 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
732 if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) { in snd_rme32_capture_hw_params()
733 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
736 if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) { in snd_rme32_capture_hw_params()
738 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
743 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
748 rme32->wcreg &= ~RME32_WCR_AUTOSYNC; in snd_rme32_capture_hw_params()
749 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_capture_hw_params()
751 snd_rme32_setframelog(rme32, params_channels(params), 0); in snd_rme32_capture_hw_params()
752 if (rme32->playback_periodsize != 0) { in snd_rme32_capture_hw_params()
753 if (params_period_size(params) << rme32->capture_frlog != in snd_rme32_capture_hw_params()
754 rme32->playback_periodsize) { in snd_rme32_capture_hw_params()
755 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
759 rme32->capture_periodsize = in snd_rme32_capture_hw_params()
760 params_period_size(params) << rme32->capture_frlog; in snd_rme32_capture_hw_params()
761 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_hw_params()
766 static void snd_rme32_pcm_start(struct rme32 * rme32, int from_pause) in snd_rme32_pcm_start() argument
769 writel(0, rme32->iobase + RME32_IO_RESET_POS); in snd_rme32_pcm_start()
772 rme32->wcreg |= RME32_WCR_START; in snd_rme32_pcm_start()
773 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_pcm_start()
776 static void snd_rme32_pcm_stop(struct rme32 * rme32, int to_pause) in snd_rme32_pcm_stop() argument
782 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_pcm_stop()
783 if (rme32->rcreg & RME32_RCR_IRQ) { in snd_rme32_pcm_stop()
784 writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ); in snd_rme32_pcm_stop()
786 rme32->wcreg &= ~RME32_WCR_START; in snd_rme32_pcm_stop()
787 if (rme32->wcreg & RME32_WCR_SEL) in snd_rme32_pcm_stop()
788 rme32->wcreg |= RME32_WCR_MUTE; in snd_rme32_pcm_stop()
789 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_pcm_stop()
791 writel(0, rme32->iobase + RME32_IO_RESET_POS); in snd_rme32_pcm_stop()
796 struct rme32 *rme32 = (struct rme32 *) dev_id; in snd_rme32_interrupt() local
798 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_interrupt()
799 if (!(rme32->rcreg & RME32_RCR_IRQ)) { in snd_rme32_interrupt()
802 if (rme32->capture_substream) { in snd_rme32_interrupt()
803 snd_pcm_period_elapsed(rme32->capture_substream); in snd_rme32_interrupt()
805 if (rme32->playback_substream) { in snd_rme32_interrupt()
806 snd_pcm_period_elapsed(rme32->playback_substream); in snd_rme32_interrupt()
808 writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ); in snd_rme32_interrupt()
821 static void snd_rme32_set_buffer_constraint(struct rme32 *rme32, struct snd_pcm_runtime *runtime) in snd_rme32_set_buffer_constraint() argument
823 if (! rme32->fullduplex_mode) { in snd_rme32_set_buffer_constraint()
836 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_spdif_open() local
841 spin_lock_irq(&rme32->lock); in snd_rme32_playback_spdif_open()
842 if (rme32->playback_substream != NULL) { in snd_rme32_playback_spdif_open()
843 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_spdif_open()
846 rme32->wcreg &= ~RME32_WCR_ADAT; in snd_rme32_playback_spdif_open()
847 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_playback_spdif_open()
848 rme32->playback_substream = substream; in snd_rme32_playback_spdif_open()
849 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_spdif_open()
851 if (rme32->fullduplex_mode) in snd_rme32_playback_spdif_open()
855 if (rme32->pci->device == PCI_DEVICE_ID_RME_DIGI32_PRO) { in snd_rme32_playback_spdif_open()
859 if ((rme32->rcreg & RME32_RCR_KMODE) && in snd_rme32_playback_spdif_open()
860 (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) { in snd_rme32_playback_spdif_open()
867 snd_rme32_set_buffer_constraint(rme32, runtime); in snd_rme32_playback_spdif_open()
869 rme32->wcreg_spdif_stream = rme32->wcreg_spdif; in snd_rme32_playback_spdif_open()
870 rme32->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; in snd_rme32_playback_spdif_open()
871 snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE | in snd_rme32_playback_spdif_open()
872 SNDRV_CTL_EVENT_MASK_INFO, &rme32->spdif_ctl->id); in snd_rme32_playback_spdif_open()
879 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_spdif_open() local
884 spin_lock_irq(&rme32->lock); in snd_rme32_capture_spdif_open()
885 if (rme32->capture_substream != NULL) { in snd_rme32_capture_spdif_open()
886 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_spdif_open()
889 rme32->capture_substream = substream; in snd_rme32_capture_spdif_open()
890 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_spdif_open()
892 if (rme32->fullduplex_mode) in snd_rme32_capture_spdif_open()
896 if (RME32_PRO_WITH_8414(rme32)) { in snd_rme32_capture_spdif_open()
900 if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) { in snd_rme32_capture_spdif_open()
909 snd_rme32_set_buffer_constraint(rme32, runtime); in snd_rme32_capture_spdif_open()
918 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_adat_open() local
923 spin_lock_irq(&rme32->lock); in snd_rme32_playback_adat_open()
924 if (rme32->playback_substream != NULL) { in snd_rme32_playback_adat_open()
925 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_adat_open()
928 rme32->wcreg |= RME32_WCR_ADAT; in snd_rme32_playback_adat_open()
929 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_playback_adat_open()
930 rme32->playback_substream = substream; in snd_rme32_playback_adat_open()
931 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_adat_open()
933 if (rme32->fullduplex_mode) in snd_rme32_playback_adat_open()
937 if ((rme32->rcreg & RME32_RCR_KMODE) && in snd_rme32_playback_adat_open()
938 (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) { in snd_rme32_playback_adat_open()
945 snd_rme32_set_buffer_constraint(rme32, runtime); in snd_rme32_playback_adat_open()
953 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_adat_open() local
956 if (rme32->fullduplex_mode) in snd_rme32_capture_adat_open()
960 if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) { in snd_rme32_capture_adat_open()
971 spin_lock_irq(&rme32->lock); in snd_rme32_capture_adat_open()
972 if (rme32->capture_substream != NULL) { in snd_rme32_capture_adat_open()
973 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_adat_open()
976 rme32->capture_substream = substream; in snd_rme32_capture_adat_open()
977 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_adat_open()
979 snd_rme32_set_buffer_constraint(rme32, runtime); in snd_rme32_capture_adat_open()
985 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_close() local
988 spin_lock_irq(&rme32->lock); in snd_rme32_playback_close()
989 rme32->playback_substream = NULL; in snd_rme32_playback_close()
990 rme32->playback_periodsize = 0; in snd_rme32_playback_close()
991 spdif = (rme32->wcreg & RME32_WCR_ADAT) == 0; in snd_rme32_playback_close()
992 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_close()
994 rme32->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; in snd_rme32_playback_close()
995 snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE | in snd_rme32_playback_close()
997 &rme32->spdif_ctl->id); in snd_rme32_playback_close()
1004 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_close() local
1006 spin_lock_irq(&rme32->lock); in snd_rme32_capture_close()
1007 rme32->capture_substream = NULL; in snd_rme32_capture_close()
1008 rme32->capture_periodsize = 0; in snd_rme32_capture_close()
1009 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_close()
1015 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_prepare() local
1017 spin_lock_irq(&rme32->lock); in snd_rme32_playback_prepare()
1018 if (rme32->fullduplex_mode) { in snd_rme32_playback_prepare()
1019 memset(&rme32->playback_pcm, 0, sizeof(rme32->playback_pcm)); in snd_rme32_playback_prepare()
1020 rme32->playback_pcm.hw_buffer_size = RME32_BUFFER_SIZE; in snd_rme32_playback_prepare()
1021 rme32->playback_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream); in snd_rme32_playback_prepare()
1023 writel(0, rme32->iobase + RME32_IO_RESET_POS); in snd_rme32_playback_prepare()
1025 if (rme32->wcreg & RME32_WCR_SEL) in snd_rme32_playback_prepare()
1026 rme32->wcreg &= ~RME32_WCR_MUTE; in snd_rme32_playback_prepare()
1027 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_playback_prepare()
1028 spin_unlock_irq(&rme32->lock); in snd_rme32_playback_prepare()
1034 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_prepare() local
1036 spin_lock_irq(&rme32->lock); in snd_rme32_capture_prepare()
1037 if (rme32->fullduplex_mode) { in snd_rme32_capture_prepare()
1038 memset(&rme32->capture_pcm, 0, sizeof(rme32->capture_pcm)); in snd_rme32_capture_prepare()
1039 rme32->capture_pcm.hw_buffer_size = RME32_BUFFER_SIZE; in snd_rme32_capture_prepare()
1040 rme32->capture_pcm.hw_queue_size = RME32_BUFFER_SIZE / 2; in snd_rme32_capture_prepare()
1041 rme32->capture_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream); in snd_rme32_capture_prepare()
1043 writel(0, rme32->iobase + RME32_IO_RESET_POS); in snd_rme32_capture_prepare()
1045 spin_unlock_irq(&rme32->lock); in snd_rme32_capture_prepare()
1052 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_pcm_trigger() local
1055 spin_lock(&rme32->lock); in snd_rme32_pcm_trigger()
1057 if (s != rme32->playback_substream && in snd_rme32_pcm_trigger()
1058 s != rme32->capture_substream) in snd_rme32_pcm_trigger()
1062 rme32->running |= (1 << s->stream); in snd_rme32_pcm_trigger()
1063 if (rme32->fullduplex_mode) { in snd_rme32_pcm_trigger()
1065 if (s == rme32->playback_substream) { in snd_rme32_pcm_trigger()
1066 rme32->playback_pcm.hw_io = in snd_rme32_pcm_trigger()
1067 rme32->playback_pcm.hw_data = snd_rme32_pcm_byteptr(rme32); in snd_rme32_pcm_trigger()
1069 rme32->capture_pcm.hw_io = in snd_rme32_pcm_trigger()
1070 rme32->capture_pcm.hw_data = snd_rme32_pcm_byteptr(rme32); in snd_rme32_pcm_trigger()
1075 rme32->running &= ~(1 << s->stream); in snd_rme32_pcm_trigger()
1083 if (rme32->running && ! RME32_ISWORKING(rme32)) in snd_rme32_pcm_trigger()
1084 snd_rme32_pcm_start(rme32, 0); in snd_rme32_pcm_trigger()
1087 if (! rme32->running && RME32_ISWORKING(rme32)) in snd_rme32_pcm_trigger()
1088 snd_rme32_pcm_stop(rme32, 0); in snd_rme32_pcm_trigger()
1091 if (rme32->running && RME32_ISWORKING(rme32)) in snd_rme32_pcm_trigger()
1092 snd_rme32_pcm_stop(rme32, 1); in snd_rme32_pcm_trigger()
1095 if (rme32->running && ! RME32_ISWORKING(rme32)) in snd_rme32_pcm_trigger()
1096 snd_rme32_pcm_start(rme32, 1); in snd_rme32_pcm_trigger()
1099 spin_unlock(&rme32->lock); in snd_rme32_pcm_trigger()
1107 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_pointer() local
1108 return snd_rme32_pcm_byteptr(rme32) >> rme32->playback_frlog; in snd_rme32_playback_pointer()
1114 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_pointer() local
1115 return snd_rme32_pcm_byteptr(rme32) >> rme32->capture_frlog; in snd_rme32_capture_pointer()
1123 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_pb_trans_copy() local
1124 memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data, in snd_rme32_pb_trans_copy()
1130 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_fd_ack() local
1133 rec = &rme32->playback_pcm; in snd_rme32_playback_fd_ack()
1134 cprec = &rme32->capture_pcm; in snd_rme32_playback_fd_ack()
1135 spin_lock(&rme32->lock); in snd_rme32_playback_fd_ack()
1137 if (rme32->running & (1 << SNDRV_PCM_STREAM_CAPTURE)) in snd_rme32_playback_fd_ack()
1139 spin_unlock(&rme32->lock); in snd_rme32_playback_fd_ack()
1147 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_cp_trans_copy() local
1149 rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data, in snd_rme32_cp_trans_copy()
1155 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_fd_ack() local
1156 return snd_pcm_indirect_capture_transfer(substream, &rme32->capture_pcm, in snd_rme32_capture_fd_ack()
1163 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_playback_fd_pointer() local
1164 return snd_pcm_indirect_playback_pointer(substream, &rme32->playback_pcm, in snd_rme32_playback_fd_pointer()
1165 snd_rme32_pcm_byteptr(rme32)); in snd_rme32_playback_fd_pointer()
1171 struct rme32 *rme32 = snd_pcm_substream_chip(substream); in snd_rme32_capture_fd_pointer() local
1172 return snd_pcm_indirect_capture_pointer(substream, &rme32->capture_pcm, in snd_rme32_capture_fd_pointer()
1173 snd_rme32_pcm_byteptr(rme32)); in snd_rme32_capture_fd_pointer()
1270 struct rme32 *rme32 = (struct rme32 *) private_data; in snd_rme32_free() local
1272 if (rme32 == NULL) { in snd_rme32_free()
1275 if (rme32->irq >= 0) { in snd_rme32_free()
1276 snd_rme32_pcm_stop(rme32, 0); in snd_rme32_free()
1277 free_irq(rme32->irq, (void *) rme32); in snd_rme32_free()
1278 rme32->irq = -1; in snd_rme32_free()
1280 if (rme32->iobase) { in snd_rme32_free()
1281 iounmap(rme32->iobase); in snd_rme32_free()
1282 rme32->iobase = NULL; in snd_rme32_free()
1284 if (rme32->port) { in snd_rme32_free()
1285 pci_release_regions(rme32->pci); in snd_rme32_free()
1286 rme32->port = 0; in snd_rme32_free()
1288 pci_disable_device(rme32->pci); in snd_rme32_free()
1293 struct rme32 *rme32 = (struct rme32 *) pcm->private_data; in snd_rme32_free_spdif_pcm() local
1294 rme32->spdif_pcm = NULL; in snd_rme32_free_spdif_pcm()
1300 struct rme32 *rme32 = (struct rme32 *) pcm->private_data; in snd_rme32_free_adat_pcm() local
1301 rme32->adat_pcm = NULL; in snd_rme32_free_adat_pcm()
1304 static int snd_rme32_create(struct rme32 *rme32) in snd_rme32_create() argument
1306 struct pci_dev *pci = rme32->pci; in snd_rme32_create()
1309 rme32->irq = -1; in snd_rme32_create()
1310 spin_lock_init(&rme32->lock); in snd_rme32_create()
1317 rme32->port = pci_resource_start(rme32->pci, 0); in snd_rme32_create()
1319 rme32->iobase = ioremap(rme32->port, RME32_IO_SIZE); in snd_rme32_create()
1320 if (!rme32->iobase) { in snd_rme32_create()
1321 dev_err(rme32->card->dev, in snd_rme32_create()
1323 rme32->port, rme32->port + RME32_IO_SIZE - 1); in snd_rme32_create()
1328 KBUILD_MODNAME, rme32)) { in snd_rme32_create()
1329 dev_err(rme32->card->dev, "unable to grab IRQ %d\n", pci->irq); in snd_rme32_create()
1332 rme32->irq = pci->irq; in snd_rme32_create()
1333 rme32->card->sync_irq = rme32->irq; in snd_rme32_create()
1336 pci_read_config_byte(pci, 8, &rme32->rev); in snd_rme32_create()
1339 if ((err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm)) < 0) { in snd_rme32_create()
1342 rme32->spdif_pcm->private_data = rme32; in snd_rme32_create()
1343 rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm; in snd_rme32_create()
1344 strcpy(rme32->spdif_pcm->name, "Digi32 IEC958"); in snd_rme32_create()
1345 if (rme32->fullduplex_mode) { in snd_rme32_create()
1346 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK, in snd_rme32_create()
1348 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE, in snd_rme32_create()
1350 snd_pcm_set_managed_buffer_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS, in snd_rme32_create()
1352 rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX; in snd_rme32_create()
1354 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK, in snd_rme32_create()
1356 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE, in snd_rme32_create()
1358 rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX; in snd_rme32_create()
1365 rme32->adat_pcm = NULL; in snd_rme32_create()
1368 if ((err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1, in snd_rme32_create()
1369 1, 1, &rme32->adat_pcm)) < 0) in snd_rme32_create()
1373 rme32->adat_pcm->private_data = rme32; in snd_rme32_create()
1374 rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm; in snd_rme32_create()
1375 strcpy(rme32->adat_pcm->name, "Digi32 ADAT"); in snd_rme32_create()
1376 if (rme32->fullduplex_mode) { in snd_rme32_create()
1377 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, in snd_rme32_create()
1379 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, in snd_rme32_create()
1381 snd_pcm_set_managed_buffer_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS, in snd_rme32_create()
1384 rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX; in snd_rme32_create()
1386 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, in snd_rme32_create()
1388 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, in snd_rme32_create()
1390 rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX; in snd_rme32_create()
1395 rme32->playback_periodsize = 0; in snd_rme32_create()
1396 rme32->capture_periodsize = 0; in snd_rme32_create()
1399 snd_rme32_pcm_stop(rme32, 0); in snd_rme32_create()
1402 snd_rme32_reset_dac(rme32); in snd_rme32_create()
1405 writel(0, rme32->iobase + RME32_IO_RESET_POS); in snd_rme32_create()
1408 rme32->wcreg = RME32_WCR_SEL | /* normal playback */ in snd_rme32_create()
1411 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_create()
1415 if ((err = snd_rme32_create_switches(rme32->card, rme32)) < 0) { in snd_rme32_create()
1420 snd_rme32_proc_init(rme32); in snd_rme32_create()
1422 rme32->capture_substream = NULL; in snd_rme32_create()
1423 rme32->playback_substream = NULL; in snd_rme32_create()
1436 struct rme32 *rme32 = (struct rme32 *) entry->private_data; in snd_rme32_proc_read() local
1438 rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_proc_read()
1440 snd_iprintf(buffer, rme32->card->longname); in snd_rme32_proc_read()
1441 snd_iprintf(buffer, " (index #%d)\n", rme32->card->number + 1); in snd_rme32_proc_read()
1444 if (rme32->fullduplex_mode) in snd_rme32_proc_read()
1448 if (RME32_PRO_WITH_8414(rme32)) { in snd_rme32_proc_read()
1453 if (rme32->wcreg & RME32_WCR_MODE24) { in snd_rme32_proc_read()
1458 if (rme32->wcreg & RME32_WCR_MONO) { in snd_rme32_proc_read()
1465 switch (snd_rme32_getinputtype(rme32)) { in snd_rme32_proc_read()
1479 if (snd_rme32_capture_getrate(rme32, &n) < 0) { in snd_rme32_proc_read()
1488 snd_rme32_capture_getrate(rme32, &n)); in snd_rme32_proc_read()
1492 if (rme32->wcreg & RME32_WCR_SEL) { in snd_rme32_proc_read()
1497 if (rme32->wcreg & RME32_WCR_MUTE) { in snd_rme32_proc_read()
1505 ((!(rme32->wcreg & RME32_WCR_FREQ_0)) in snd_rme32_proc_read()
1506 && (!(rme32->wcreg & RME32_WCR_FREQ_1)))) { in snd_rme32_proc_read()
1508 snd_rme32_playback_getrate(rme32)); in snd_rme32_proc_read()
1510 if (rme32->rcreg & RME32_RCR_KMODE) { in snd_rme32_proc_read()
1515 if (rme32->wcreg & RME32_WCR_PRO) { in snd_rme32_proc_read()
1520 if (rme32->wcreg & RME32_WCR_EMP) { in snd_rme32_proc_read()
1527 static void snd_rme32_proc_init(struct rme32 *rme32) in snd_rme32_proc_init() argument
1529 snd_card_ro_proc_new(rme32->card, "rme32", rme32, snd_rme32_proc_read); in snd_rme32_proc_init()
1542 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_get_loopback_control() local
1544 spin_lock_irq(&rme32->lock); in snd_rme32_get_loopback_control()
1546 rme32->wcreg & RME32_WCR_SEL ? 0 : 1; in snd_rme32_get_loopback_control()
1547 spin_unlock_irq(&rme32->lock); in snd_rme32_get_loopback_control()
1554 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_put_loopback_control() local
1559 spin_lock_irq(&rme32->lock); in snd_rme32_put_loopback_control()
1560 val = (rme32->wcreg & ~RME32_WCR_SEL) | val; in snd_rme32_put_loopback_control()
1561 change = val != rme32->wcreg; in snd_rme32_put_loopback_control()
1566 rme32->wcreg = val; in snd_rme32_put_loopback_control()
1567 writel(val, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_put_loopback_control()
1568 spin_unlock_irq(&rme32->lock); in snd_rme32_put_loopback_control()
1576 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_info_inputtype_control() local
1582 switch (rme32->pci->device) { in snd_rme32_info_inputtype_control()
1600 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_get_inputtype_control() local
1603 spin_lock_irq(&rme32->lock); in snd_rme32_get_inputtype_control()
1604 ucontrol->value.enumerated.item[0] = snd_rme32_getinputtype(rme32); in snd_rme32_get_inputtype_control()
1606 switch (rme32->pci->device) { in snd_rme32_get_inputtype_control()
1622 spin_unlock_irq(&rme32->lock); in snd_rme32_get_inputtype_control()
1629 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_put_inputtype_control() local
1633 switch (rme32->pci->device) { in snd_rme32_put_inputtype_control()
1647 spin_lock_irq(&rme32->lock); in snd_rme32_put_inputtype_control()
1648 change = val != (unsigned int)snd_rme32_getinputtype(rme32); in snd_rme32_put_inputtype_control()
1649 snd_rme32_setinputtype(rme32, val); in snd_rme32_put_inputtype_control()
1650 spin_unlock_irq(&rme32->lock); in snd_rme32_put_inputtype_control()
1669 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_get_clockmode_control() local
1671 spin_lock_irq(&rme32->lock); in snd_rme32_get_clockmode_control()
1672 ucontrol->value.enumerated.item[0] = snd_rme32_getclockmode(rme32); in snd_rme32_get_clockmode_control()
1673 spin_unlock_irq(&rme32->lock); in snd_rme32_get_clockmode_control()
1680 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_put_clockmode_control() local
1685 spin_lock_irq(&rme32->lock); in snd_rme32_put_clockmode_control()
1686 change = val != (unsigned int)snd_rme32_getclockmode(rme32); in snd_rme32_put_clockmode_control()
1687 snd_rme32_setclockmode(rme32, val); in snd_rme32_put_clockmode_control()
1688 spin_unlock_irq(&rme32->lock); in snd_rme32_put_clockmode_control()
1723 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_control_spdif_get() local
1726 rme32->wcreg_spdif); in snd_rme32_control_spdif_get()
1733 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_control_spdif_put() local
1738 spin_lock_irq(&rme32->lock); in snd_rme32_control_spdif_put()
1739 change = val != rme32->wcreg_spdif; in snd_rme32_control_spdif_put()
1740 rme32->wcreg_spdif = val; in snd_rme32_control_spdif_put()
1741 spin_unlock_irq(&rme32->lock); in snd_rme32_control_spdif_put()
1757 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_control_spdif_stream_get() local
1760 rme32->wcreg_spdif_stream); in snd_rme32_control_spdif_stream_get()
1768 struct rme32 *rme32 = snd_kcontrol_chip(kcontrol); in snd_rme32_control_spdif_stream_put() local
1773 spin_lock_irq(&rme32->lock); in snd_rme32_control_spdif_stream_put()
1774 change = val != rme32->wcreg_spdif_stream; in snd_rme32_control_spdif_stream_put()
1775 rme32->wcreg_spdif_stream = val; in snd_rme32_control_spdif_stream_put()
1776 rme32->wcreg &= ~(RME32_WCR_PRO | RME32_WCR_EMP); in snd_rme32_control_spdif_stream_put()
1777 rme32->wcreg |= val; in snd_rme32_control_spdif_stream_put()
1778 writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER); in snd_rme32_control_spdif_stream_put()
1779 spin_unlock_irq(&rme32->lock); in snd_rme32_control_spdif_stream_put()
1854 static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32) in snd_rme32_create_switches() argument
1860 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32))) < 0) in snd_rme32_create_switches()
1863 rme32->spdif_ctl = kctl; in snd_rme32_create_switches()
1882 struct rme32 *rme32; in snd_rme32_probe() local
1895 sizeof(struct rme32), &card); in snd_rme32_probe()
1899 rme32 = (struct rme32 *) card->private_data; in snd_rme32_probe()
1900 rme32->card = card; in snd_rme32_probe()
1901 rme32->pci = pci; in snd_rme32_probe()
1903 rme32->fullduplex_mode = 1; in snd_rme32_probe()
1904 if ((err = snd_rme32_create(rme32)) < 0) { in snd_rme32_probe()
1910 switch (rme32->pci->device) { in snd_rme32_probe()
1922 card->shortname, rme32->rev, rme32->port, rme32->irq); in snd_rme32_probe()