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