• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/sound/pci/

Lines Matching refs:ensoniq

135 #define ES_REG(ensoniq, x) ((ensoniq)->port + ES_REG_##x)
375 struct ensoniq {
509 static unsigned int snd_es1371_wait_src_ready(struct ensoniq * ensoniq)
514 r = inl(ES_REG(ensoniq, 1371_SMPRATE));
520 ES_REG(ensoniq, 1371_SMPRATE), r);
524 static unsigned int snd_es1371_src_read(struct ensoniq * ensoniq, unsigned short reg)
529 temp = orig = snd_es1371_wait_src_ready(ensoniq);
535 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
538 temp = snd_es1371_wait_src_ready(ensoniq);
543 temp = inl(ES_REG(ensoniq, 1371_SMPRATE));
553 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
558 static void snd_es1371_src_write(struct ensoniq * ensoniq,
563 r = snd_es1371_wait_src_ready(ensoniq) &
567 outl(r | ES_1371_SRC_RAM_WE, ES_REG(ensoniq, 1371_SMPRATE));
577 struct ensoniq *ensoniq = ak4531->private_data;
581 if (!(inl(ES_REG(ensoniq, STATUS)) & ES_1370_CSTAT)) {
582 outw(ES_1370_CODEC_WRITE(reg, val), ES_REG(ensoniq, 1370_CODEC));
588 inl(ES_REG(ensoniq, STATUS)));
598 struct ensoniq *ensoniq = ac97->private_data;
601 mutex_lock(&ensoniq->src_mutex);
603 if (!(inl(ES_REG(ensoniq, 1371_CODEC)) & ES_1371_CODEC_WIP)) {
605 x = snd_es1371_wait_src_ready(ensoniq);
608 ES_REG(ensoniq, 1371_SMPRATE));
612 if ((inl(ES_REG(ensoniq, 1371_SMPRATE)) & 0x00870000) ==
618 if ((inl(ES_REG(ensoniq, 1371_SMPRATE)) & 0x00870000) ==
622 outl(ES_1371_CODEC_WRITE(reg, val), ES_REG(ensoniq, 1371_CODEC));
624 snd_es1371_wait_src_ready(ensoniq);
625 outl(x, ES_REG(ensoniq, 1371_SMPRATE));
626 mutex_unlock(&ensoniq->src_mutex);
630 mutex_unlock(&ensoniq->src_mutex);
632 ES_REG(ensoniq, 1371_CODEC), inl(ES_REG(ensoniq, 1371_CODEC)));
638 struct ensoniq *ensoniq = ac97->private_data;
642 mutex_lock(&ensoniq->src_mutex);
644 if (!(inl(ES_REG(ensoniq, 1371_CODEC)) & ES_1371_CODEC_WIP)) {
646 x = snd_es1371_wait_src_ready(ensoniq);
649 ES_REG(ensoniq, 1371_SMPRATE));
653 if ((inl(ES_REG(ensoniq, 1371_SMPRATE)) & 0x00870000) ==
659 if ((inl(ES_REG(ensoniq, 1371_SMPRATE)) & 0x00870000) ==
663 outl(ES_1371_CODEC_READS(reg), ES_REG(ensoniq, 1371_CODEC));
665 snd_es1371_wait_src_ready(ensoniq);
666 outl(x, ES_REG(ensoniq, 1371_SMPRATE));
669 if (!(inl(ES_REG(ensoniq, 1371_CODEC)) & ES_1371_CODEC_WIP))
674 if ((x = inl(ES_REG(ensoniq, 1371_CODEC))) & ES_1371_CODEC_RDY) {
675 mutex_unlock(&ensoniq->src_mutex);
679 mutex_unlock(&ensoniq->src_mutex);
683 ES_REG(ensoniq, 1371_CODEC), reg,
684 inl(ES_REG(ensoniq, 1371_CODEC)));
690 mutex_unlock(&ensoniq->src_mutex);
692 ES_REG(ensoniq, 1371_CODEC), inl(ES_REG(ensoniq, 1371_CODEC)));
705 static void snd_es1371_adc_rate(struct ensoniq * ensoniq, unsigned int rate)
709 mutex_lock(&ensoniq->src_mutex);
719 snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
724 snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_TRUNC_N,
727 snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_INT_REGS,
728 (snd_es1371_src_read(ensoniq, ES_SMPREG_ADC +
731 snd_es1371_src_write(ensoniq, ES_SMPREG_ADC + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
732 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC, n << 8);
733 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC + 1, n << 8);
734 mutex_unlock(&ensoniq->src_mutex);
737 static void snd_es1371_dac1_rate(struct ensoniq * ensoniq, unsigned int rate)
741 mutex_lock(&ensoniq->src_mutex);
743 r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
746 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
747 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC1 + ES_SMPREG_INT_REGS,
748 (snd_es1371_src_read(ensoniq, ES_SMPREG_DAC1 +
751 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC1 + ES_SMPREG_VFREQ_FRAC, freq & 0x7fff);
752 r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
754 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
755 mutex_unlock(&ensoniq->src_mutex);
758 static void snd_es1371_dac2_rate(struct ensoniq * ensoniq, unsigned int rate)
762 mutex_lock(&ensoniq->src_mutex);
764 r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
767 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
768 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC2 + ES_SMPREG_INT_REGS,
769 (snd_es1371_src_read(ensoniq, ES_SMPREG_DAC2 +
772 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC2 + ES_SMPREG_VFREQ_FRAC,
774 r = (snd_es1371_wait_src_ready(ensoniq) & (ES_1371_SRC_DISABLE |
776 outl(r, ES_REG(ensoniq, 1371_SMPRATE));
777 mutex_unlock(&ensoniq->src_mutex);
784 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
792 if (s == ensoniq->playback1_substream) {
795 } else if (s == ensoniq->playback2_substream) {
798 } else if (s == ensoniq->capture_substream)
801 spin_lock(&ensoniq->reg_lock);
803 ensoniq->sctrl |= what;
805 ensoniq->sctrl &= ~what;
806 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
807 spin_unlock(&ensoniq->reg_lock);
816 if (s == ensoniq->playback1_substream) {
819 } else if (s == ensoniq->playback2_substream) {
822 } else if (s == ensoniq->capture_substream) {
827 spin_lock(&ensoniq->reg_lock);
829 ensoniq->ctrl |= what;
831 ensoniq->ctrl &= ~what;
832 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
833 spin_unlock(&ensoniq->reg_lock);
859 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
863 ensoniq->p1_dma_size = snd_pcm_lib_buffer_bytes(substream);
864 ensoniq->p1_period_size = snd_pcm_lib_period_bytes(substream);
869 spin_lock_irq(&ensoniq->reg_lock);
870 ensoniq->ctrl &= ~ES_DAC1_EN;
874 ensoniq->ctrl |= ES_1373_BYPASS_P1;
876 ensoniq->ctrl &= ~ES_1373_BYPASS_P1;
878 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
879 outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
880 outl(runtime->dma_addr, ES_REG(ensoniq, DAC1_FRAME));
881 outl((ensoniq->p1_dma_size >> 2) - 1, ES_REG(ensoniq, DAC1_SIZE));
882 ensoniq->sctrl &= ~(ES_P1_LOOP_SEL | ES_P1_PAUSE | ES_P1_SCT_RLD | ES_P1_MODEM);
883 ensoniq->sctrl |= ES_P1_INT_EN | ES_P1_MODEO(mode);
884 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
885 outl((ensoniq->p1_period_size >> snd_ensoniq_sample_shift[mode]) - 1,
886 ES_REG(ensoniq, DAC1_COUNT));
888 ensoniq->ctrl &= ~ES_1370_WTSRSELM;
890 case 5512: ensoniq->ctrl |= ES_1370_WTSRSEL(0); break;
891 case 11025: ensoniq->ctrl |= ES_1370_WTSRSEL(1); break;
892 case 22050: ensoniq->ctrl |= ES_1370_WTSRSEL(2); break;
893 case 44100: ensoniq->ctrl |= ES_1370_WTSRSEL(3); break;
897 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
898 spin_unlock_irq(&ensoniq->reg_lock);
900 snd_es1371_dac1_rate(ensoniq, runtime->rate);
907 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
911 ensoniq->p2_dma_size = snd_pcm_lib_buffer_bytes(substream);
912 ensoniq->p2_period_size = snd_pcm_lib_period_bytes(substream);
917 spin_lock_irq(&ensoniq->reg_lock);
918 ensoniq->ctrl &= ~ES_DAC2_EN;
919 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
920 outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
921 outl(runtime->dma_addr, ES_REG(ensoniq, DAC2_FRAME));
922 outl((ensoniq->p2_dma_size >> 2) - 1, ES_REG(ensoniq, DAC2_SIZE));
923 ensoniq->sctrl &= ~(ES_P2_LOOP_SEL | ES_P2_PAUSE | ES_P2_DAC_SEN |
925 ensoniq->sctrl |= ES_P2_INT_EN | ES_P2_MODEO(mode) |
927 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
928 outl((ensoniq->p2_period_size >> snd_ensoniq_sample_shift[mode]) - 1,
929 ES_REG(ensoniq, DAC2_COUNT));
931 if (!(ensoniq->u.es1370.pclkdiv_lock & ES_MODE_CAPTURE)) {
932 ensoniq->ctrl &= ~ES_1370_PCLKDIVM;
933 ensoniq->ctrl |= ES_1370_PCLKDIVO(ES_1370_SRTODIV(runtime->rate));
934 ensoniq->u.es1370.pclkdiv_lock |= ES_MODE_PLAY2;
937 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
938 spin_unlock_irq(&ensoniq->reg_lock);
940 snd_es1371_dac2_rate(ensoniq, runtime->rate);
947 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
951 ensoniq->c_dma_size = snd_pcm_lib_buffer_bytes(substream);
952 ensoniq->c_period_size = snd_pcm_lib_period_bytes(substream);
957 spin_lock_irq(&ensoniq->reg_lock);
958 ensoniq->ctrl &= ~ES_ADC_EN;
959 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
960 outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
961 outl(runtime->dma_addr, ES_REG(ensoniq, ADC_FRAME));
962 outl((ensoniq->c_dma_size >> 2) - 1, ES_REG(ensoniq, ADC_SIZE));
963 ensoniq->sctrl &= ~(ES_R1_LOOP_SEL | ES_R1_MODEM);
964 ensoniq->sctrl |= ES_R1_INT_EN | ES_R1_MODEO(mode);
965 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
966 outl((ensoniq->c_period_size >> snd_ensoniq_sample_shift[mode]) - 1,
967 ES_REG(ensoniq, ADC_COUNT));
969 if (!(ensoniq->u.es1370.pclkdiv_lock & ES_MODE_PLAY2)) {
970 ensoniq->ctrl &= ~ES_1370_PCLKDIVM;
971 ensoniq->ctrl |= ES_1370_PCLKDIVO(ES_1370_SRTODIV(runtime->rate));
972 ensoniq->u.es1370.pclkdiv_lock |= ES_MODE_CAPTURE;
975 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
976 spin_unlock_irq(&ensoniq->reg_lock);
978 snd_es1371_adc_rate(ensoniq, runtime->rate);
985 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
988 spin_lock(&ensoniq->reg_lock);
989 if (inl(ES_REG(ensoniq, CONTROL)) & ES_DAC1_EN) {
990 outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
991 ptr = ES_REG_FCURR_COUNTI(inl(ES_REG(ensoniq, DAC1_SIZE)));
996 spin_unlock(&ensoniq->reg_lock);
1002 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1005 spin_lock(&ensoniq->reg_lock);
1006 if (inl(ES_REG(ensoniq, CONTROL)) & ES_DAC2_EN) {
1007 outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
1008 ptr = ES_REG_FCURR_COUNTI(inl(ES_REG(ensoniq, DAC2_SIZE)));
1013 spin_unlock(&ensoniq->reg_lock);
1019 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1022 spin_lock(&ensoniq->reg_lock);
1023 if (inl(ES_REG(ensoniq, CONTROL)) & ES_ADC_EN) {
1024 outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
1025 ptr = ES_REG_FCURR_COUNTI(inl(ES_REG(ensoniq, ADC_SIZE)));
1030 spin_unlock(&ensoniq->reg_lock);
1102 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1105 ensoniq->mode |= ES_MODE_PLAY1;
1106 ensoniq->playback1_substream = substream;
1109 spin_lock_irq(&ensoniq->reg_lock);
1110 if (ensoniq->spdif && ensoniq->playback2_substream == NULL)
1111 ensoniq->spdif_stream = ensoniq->spdif_default;
1112 spin_unlock_irq(&ensoniq->reg_lock);
1125 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1128 ensoniq->mode |= ES_MODE_PLAY2;
1129 ensoniq->playback2_substream = substream;
1132 spin_lock_irq(&ensoniq->reg_lock);
1133 if (ensoniq->spdif && ensoniq->playback1_substream == NULL)
1134 ensoniq->spdif_stream = ensoniq->spdif_default;
1135 spin_unlock_irq(&ensoniq->reg_lock);
1148 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1151 ensoniq->mode |= ES_MODE_CAPTURE;
1152 ensoniq->capture_substream = substream;
1167 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1169 ensoniq->playback1_substream = NULL;
1170 ensoniq->mode &= ~ES_MODE_PLAY1;
1176 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1178 ensoniq->playback2_substream = NULL;
1179 spin_lock_irq(&ensoniq->reg_lock);
1181 ensoniq->u.es1370.pclkdiv_lock &= ~ES_MODE_PLAY2;
1183 ensoniq->mode &= ~ES_MODE_PLAY2;
1184 spin_unlock_irq(&ensoniq->reg_lock);
1190 struct ensoniq *ensoniq = snd_pcm_substream_chip(substream);
1192 ensoniq->capture_substream = NULL;
1193 spin_lock_irq(&ensoniq->reg_lock);
1195 ensoniq->u.es1370.pclkdiv_lock &= ~ES_MODE_CAPTURE;
1197 ensoniq->mode &= ~ES_MODE_CAPTURE;
1198 spin_unlock_irq(&ensoniq->reg_lock);
1235 static int __devinit snd_ensoniq_pcm(struct ensoniq * ensoniq, int device,
1244 err = snd_pcm_new(ensoniq->card, "ES1370/1", device, 1, 1, &pcm);
1246 err = snd_pcm_new(ensoniq->card, "ES1371/1", device, 1, 1, &pcm);
1258 pcm->private_data = ensoniq;
1265 ensoniq->pcm1 = pcm;
1268 snd_dma_pci_data(ensoniq->pci), 64*1024, 128*1024);
1275 static int __devinit snd_ensoniq_pcm2(struct ensoniq * ensoniq, int device,
1284 err = snd_pcm_new(ensoniq->card, "ES1370/2", device, 1, 0, &pcm);
1286 err = snd_pcm_new(ensoniq->card, "ES1371/2", device, 1, 0, &pcm);
1296 pcm->private_data = ensoniq;
1303 ensoniq->pcm2 = pcm;
1306 snd_dma_pci_data(ensoniq->pci), 64*1024, 128*1024);
1332 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1333 spin_lock_irq(&ensoniq->reg_lock);
1334 ucontrol->value.iec958.status[0] = (ensoniq->spdif_default >> 0) & 0xff;
1335 ucontrol->value.iec958.status[1] = (ensoniq->spdif_default >> 8) & 0xff;
1336 ucontrol->value.iec958.status[2] = (ensoniq->spdif_default >> 16) & 0xff;
1337 ucontrol->value.iec958.status[3] = (ensoniq->spdif_default >> 24) & 0xff;
1338 spin_unlock_irq(&ensoniq->reg_lock);
1345 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1353 spin_lock_irq(&ensoniq->reg_lock);
1354 change = ensoniq->spdif_default != val;
1355 ensoniq->spdif_default = val;
1356 if (change && ensoniq->playback1_substream == NULL &&
1357 ensoniq->playback2_substream == NULL)
1358 outl(val, ES_REG(ensoniq, CHANNEL_STATUS));
1359 spin_unlock_irq(&ensoniq->reg_lock);
1376 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1377 spin_lock_irq(&ensoniq->reg_lock);
1378 ucontrol->value.iec958.status[0] = (ensoniq->spdif_stream >> 0) & 0xff;
1379 ucontrol->value.iec958.status[1] = (ensoniq->spdif_stream >> 8) & 0xff;
1380 ucontrol->value.iec958.status[2] = (ensoniq->spdif_stream >> 16) & 0xff;
1381 ucontrol->value.iec958.status[3] = (ensoniq->spdif_stream >> 24) & 0xff;
1382 spin_unlock_irq(&ensoniq->reg_lock);
1389 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1397 spin_lock_irq(&ensoniq->reg_lock);
1398 change = ensoniq->spdif_stream != val;
1399 ensoniq->spdif_stream = val;
1400 if (change && (ensoniq->playback1_substream != NULL ||
1401 ensoniq->playback2_substream != NULL))
1402 outl(val, ES_REG(ensoniq, CHANNEL_STATUS));
1403 spin_unlock_irq(&ensoniq->reg_lock);
1416 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1418 spin_lock_irq(&ensoniq->reg_lock);
1419 ucontrol->value.integer.value[0] = ensoniq->ctrl & ES_1373_SPDIF_THRU ? 1 : 0;
1420 spin_unlock_irq(&ensoniq->reg_lock);
1427 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1433 spin_lock_irq(&ensoniq->reg_lock);
1434 change = (ensoniq->ctrl & ES_1373_SPDIF_THRU) != nval1;
1435 ensoniq->ctrl &= ~ES_1373_SPDIF_THRU;
1436 ensoniq->ctrl |= nval1;
1437 ensoniq->cssr &= ~ES_1373_SPDIF_EN;
1438 ensoniq->cssr |= nval2;
1439 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1440 outl(ensoniq->cssr, ES_REG(ensoniq, STATUS));
1441 spin_unlock_irq(&ensoniq->reg_lock);
1478 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1481 spin_lock_irq(&ensoniq->reg_lock);
1482 if ((ensoniq->cssr & (ES_1373_REAR_BIT27|ES_1373_REAR_BIT26|
1486 spin_unlock_irq(&ensoniq->reg_lock);
1493 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1499 spin_lock_irq(&ensoniq->reg_lock);
1500 change = (ensoniq->cssr & (ES_1373_REAR_BIT27|
1502 ensoniq->cssr &= ~(ES_1373_REAR_BIT27|ES_1373_REAR_BIT26|ES_1373_REAR_BIT24);
1503 ensoniq->cssr |= nval1;
1504 outl(ensoniq->cssr, ES_REG(ensoniq, STATUS));
1505 spin_unlock_irq(&ensoniq->reg_lock);
1523 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1526 spin_lock_irq(&ensoniq->reg_lock);
1527 if ((ensoniq->ctrl & ES_1371_GPIO_OUTM) >= 4)
1530 spin_unlock_irq(&ensoniq->reg_lock);
1537 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1541 spin_lock_irq(&ensoniq->reg_lock);
1542 ctrl = ensoniq->ctrl;
1544 ensoniq->ctrl |= ES_1371_GPIO_OUT(4); /* switch line-in -> rear out */
1546 ensoniq->ctrl &= ~ES_1371_GPIO_OUT(4);
1547 changed = (ctrl != ensoniq->ctrl);
1549 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1550 spin_unlock_irq(&ensoniq->reg_lock);
1565 struct ensoniq *ensoniq = ac97->private_data;
1566 ensoniq->u.es1371.ac97 = NULL;
1575 static int es1371_quirk_lookup(struct ensoniq *ensoniq,
1579 if (ensoniq->pci->vendor == list->vid &&
1580 ensoniq->pci->device == list->did &&
1581 ensoniq->rev == list->rev)
1603 static int __devinit snd_ensoniq_1371_mixer(struct ensoniq *ensoniq,
1606 struct snd_card *card = ensoniq->card;
1620 ac97.private_data = ensoniq;
1622 ac97.pci = ensoniq->pci;
1624 if ((err = snd_ac97_mixer(pbus, &ac97, &ensoniq->u.es1371.ac97)) < 0)
1627 (!has_spdif && es1371_quirk_lookup(ensoniq, es1371_spdif_present))) {
1631 ensoniq->spdif_default = ensoniq->spdif_stream =
1633 outl(ensoniq->spdif_default, ES_REG(ensoniq, CHANNEL_STATUS));
1635 if (ensoniq->u.es1371.ac97->ext_id & AC97_EI_SPDIF)
1639 kctl = snd_ctl_new1(&snd_es1371_mixer_spdif[i], ensoniq);
1648 if (ensoniq->u.es1371.ac97->ext_id & AC97_EI_SDAC) {
1650 ensoniq->cssr &= ~(ES_1373_REAR_BIT27|ES_1373_REAR_BIT24);
1651 ensoniq->cssr |= ES_1373_REAR_BIT26;
1652 err = snd_ctl_add(card, snd_ctl_new1(&snd_ens1373_rear, ensoniq));
1657 snd_pci_quirk_lookup(ensoniq->pci, ens1373_line_quirk)) {
1659 ensoniq));
1681 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1684 spin_lock_irq(&ensoniq->reg_lock);
1685 ucontrol->value.integer.value[0] = ensoniq->ctrl & mask ? 1 : 0;
1686 spin_unlock_irq(&ensoniq->reg_lock);
1693 struct ensoniq *ensoniq = snd_kcontrol_chip(kcontrol);
1699 spin_lock_irq(&ensoniq->reg_lock);
1700 change = (ensoniq->ctrl & mask) != nval;
1701 ensoniq->ctrl &= ~mask;
1702 ensoniq->ctrl |= nval;
1703 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1704 spin_unlock_irq(&ensoniq->reg_lock);
1721 struct ensoniq *ensoniq = ak4531->private_data;
1722 ensoniq->u.es1370.ak4531 = NULL;
1725 static int __devinit snd_ensoniq_1370_mixer(struct ensoniq * ensoniq)
1727 struct snd_card *card = ensoniq->card;
1733 outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x02), ES_REG(ensoniq, 1370_CODEC));
1734 inw(ES_REG(ensoniq, 1370_CODEC));
1736 outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x03), ES_REG(ensoniq, 1370_CODEC));
1737 inw(ES_REG(ensoniq, 1370_CODEC));
1742 ak4531.private_data = ensoniq;
1744 if ((err = snd_ak4531_mixer(card, &ak4531, &ensoniq->u.es1370.ak4531)) < 0)
1747 err = snd_ctl_add(card, snd_ctl_new1(&snd_es1370_controls[idx], ensoniq));
1782 static int __devinit snd_ensoniq_create_gameport(struct ensoniq *ensoniq, int dev)
1812 ensoniq->gameport = gp = gameport_allocate_port();
1820 gameport_set_phys(gp, "pci%s/gameport0", pci_name(ensoniq->pci));
1821 gameport_set_dev_parent(gp, &ensoniq->pci->dev);
1824 ensoniq->ctrl |= ES_JYSTK_EN;
1826 ensoniq->ctrl &= ~ES_1371_JOY_ASELM;
1827 ensoniq->ctrl |= ES_1371_JOY_ASEL((io_port - 0x200) / 8);
1829 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1831 gameport_register_port(ensoniq->gameport);
1836 static void snd_ensoniq_free_gameport(struct ensoniq *ensoniq)
1838 if (ensoniq->gameport) {
1839 int port = ensoniq->gameport->io;
1841 gameport_unregister_port(ensoniq->gameport);
1842 ensoniq->gameport = NULL;
1843 ensoniq->ctrl &= ~ES_JYSTK_EN;
1844 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1849 static inline int snd_ensoniq_create_gameport(struct ensoniq *ensoniq, long port) { return -ENOSYS; }
1850 static inline void snd_ensoniq_free_gameport(struct ensoniq *ensoniq) { }
1860 struct ensoniq *ensoniq = entry->private_data;
1868 ensoniq->ctrl & ES_JYSTK_EN ? "on" : "off");
1871 ensoniq->ctrl & ES_1370_XCTL1 ? "on" : "off");
1873 ensoniq->ctrl & ES_1370_XCTL0 ? "on" : "off");
1876 (ES_1371_JOY_ASELI(ensoniq->ctrl) * 8) + 0x200);
1880 static void __devinit snd_ensoniq_proc_init(struct ensoniq * ensoniq)
1884 if (! snd_card_proc_new(ensoniq->card, "audiopci", &entry))
1885 snd_info_set_text_ops(entry, ensoniq, snd_ensoniq_proc_read);
1892 static int snd_ensoniq_free(struct ensoniq *ensoniq)
1894 snd_ensoniq_free_gameport(ensoniq);
1895 if (ensoniq->irq < 0)
1898 outl(ES_1370_SERR_DISABLE, ES_REG(ensoniq, CONTROL)); /* switch everything off */
1899 outl(0, ES_REG(ensoniq, SERIAL)); /* clear serial interface */
1901 outl(0, ES_REG(ensoniq, CONTROL)); /* switch everything off */
1902 outl(0, ES_REG(ensoniq, SERIAL)); /* clear serial interface */
1904 if (ensoniq->irq >= 0)
1905 synchronize_irq(ensoniq->irq);
1906 pci_set_power_state(ensoniq->pci, 3);
1909 if (ensoniq->dma_bug.area)
1910 snd_dma_free_pages(&ensoniq->dma_bug);
1912 if (ensoniq->irq >= 0)
1913 free_irq(ensoniq->irq, ensoniq);
1914 pci_release_regions(ensoniq->pci);
1915 pci_disable_device(ensoniq->pci);
1916 kfree(ensoniq);
1922 struct ensoniq *ensoniq = device->device_data;
1923 return snd_ensoniq_free(ensoniq);
1945 static void snd_ensoniq_chip_init(struct ensoniq *ensoniq)
1954 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1955 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
1956 outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
1957 outl(ensoniq->dma_bug.addr, ES_REG(ensoniq, PHANTOM_FRAME));
1958 outl(0, ES_REG(ensoniq, PHANTOM_COUNT));
1960 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1961 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
1962 outl(0, ES_REG(ensoniq, 1371_LEGACY));
1963 if (es1371_quirk_lookup(ensoniq, es1371_ac97_reset_hack)) {
1964 outl(ensoniq->cssr, ES_REG(ensoniq, STATUS));
1970 outl(ensoniq->ctrl | ES_1371_SYNC_RES, ES_REG(ensoniq, CONTROL));
1971 inl(ES_REG(ensoniq, CONTROL));
1973 outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
1975 snd_es1371_wait_src_ready(ensoniq);
1976 outl(ES_1371_SRC_DISABLE, ES_REG(ensoniq, 1371_SMPRATE));
1978 snd_es1371_src_write(ensoniq, idx, 0);
1979 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC1 + ES_SMPREG_TRUNC_N, 16 << 4);
1980 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC1 + ES_SMPREG_INT_REGS, 16 << 10);
1981 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC2 + ES_SMPREG_TRUNC_N, 16 << 4);
1982 snd_es1371_src_write(ensoniq, ES_SMPREG_DAC2 + ES_SMPREG_INT_REGS, 16 << 10);
1983 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC, 1 << 12);
1984 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_ADC + 1, 1 << 12);
1985 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_DAC1, 1 << 12);
1986 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_DAC1 + 1, 1 << 12);
1987 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_DAC2, 1 << 12);
1988 snd_es1371_src_write(ensoniq, ES_SMPREG_VOL_DAC2 + 1, 1 << 12);
1989 snd_es1371_adc_rate(ensoniq, 22050);
1990 snd_es1371_dac1_rate(ensoniq, 22050);
1991 snd_es1371_dac2_rate(ensoniq, 22050);
1998 snd_es1371_wait_src_ready(ensoniq);
1999 outl(0, ES_REG(ensoniq, 1371_SMPRATE));
2001 outl(ES_1371_CODEC_WRITE(0, 0), ES_REG(ensoniq, 1371_CODEC));
2003 outb(ensoniq->uartc = 0x00, ES_REG(ensoniq, UART_CONTROL));
2004 outb(0x00, ES_REG(ensoniq, UART_RES));
2005 outl(ensoniq->cssr, ES_REG(ensoniq, STATUS));
2006 synchronize_irq(ensoniq->irq);
2013 struct ensoniq *ensoniq = card->private_data;
2017 snd_pcm_suspend_all(ensoniq->pcm1);
2018 snd_pcm_suspend_all(ensoniq->pcm2);
2021 snd_ac97_suspend(ensoniq->u.es1371.ac97);
2024 outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x02), ES_REG(ensoniq, 1370_CODEC));
2025 inw(ES_REG(ensoniq, 1370_CODEC));
2027 outw(ES_1370_CODEC_WRITE(AK4531_RESET, 0x03), ES_REG(ensoniq, 1370_CODEC));
2028 inw(ES_REG(ensoniq, 1370_CODEC));
2030 snd_ak4531_suspend(ensoniq->u.es1370.ak4531);
2042 struct ensoniq *ensoniq = card->private_data;
2054 snd_ensoniq_chip_init(ensoniq);
2057 snd_ac97_resume(ensoniq->u.es1371.ac97);
2059 snd_ak4531_resume(ensoniq->u.es1370.ak4531);
2069 struct ensoniq ** rensoniq)
2071 struct ensoniq *ensoniq;
2080 ensoniq = kzalloc(sizeof(*ensoniq), GFP_KERNEL);
2081 if (ensoniq == NULL) {
2085 spin_lock_init(&ensoniq->reg_lock);
2086 mutex_init(&ensoniq->src_mutex);
2087 ensoniq->card = card;
2088 ensoniq->pci = pci;
2089 ensoniq->irq = -1;
2091 kfree(ensoniq);
2095 ensoniq->port = pci_resource_start(pci, 0);
2097 "Ensoniq AudioPCI", ensoniq)) {
2099 snd_ensoniq_free(ensoniq);
2102 ensoniq->irq = pci->irq;
2105 16, &ensoniq->dma_bug) < 0) {
2107 snd_ensoniq_free(ensoniq);
2112 ensoniq->rev = pci->revision;
2114 ensoniq->ctrl = ES_1370_CDC_EN | ES_1370_PCLKDIVO(ES_1370_SRTODIV(8000));
2115 ensoniq->sctrl = 0;
2117 ensoniq->ctrl = 0;
2118 ensoniq->sctrl = 0;
2119 ensoniq->cssr = 0;
2121 ensoniq->ctrl |= ES_1371_GPIO_OUT(1); /* turn amplifier on */
2123 if (es1371_quirk_lookup(ensoniq, es1371_ac97_reset_hack))
2124 ensoniq->cssr |= ES_1371_ST_AC97_RST;
2127 snd_ensoniq_chip_init(ensoniq);
2129 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ensoniq, &ops)) < 0) {
2130 snd_ensoniq_free(ensoniq);
2134 snd_ensoniq_proc_init(ensoniq);
2138 *rensoniq = ensoniq;
2146 static void snd_ensoniq_midi_interrupt(struct ensoniq * ensoniq)
2148 struct snd_rawmidi *rmidi = ensoniq->rmidi;
2154 spin_lock(&ensoniq->reg_lock);
2155 mask = ensoniq->uartm & ES_MODE_INPUT ? ES_RXRDY : 0;
2157 status = inb(ES_REG(ensoniq, UART_STATUS));
2160 byte = inb(ES_REG(ensoniq, UART_DATA));
2161 snd_rawmidi_receive(ensoniq->midi_input, &byte, 1);
2163 spin_unlock(&ensoniq->reg_lock);
2166 spin_lock(&ensoniq->reg_lock);
2167 mask = ensoniq->uartm & ES_MODE_OUTPUT ? ES_TXRDY : 0;
2169 status = inb(ES_REG(ensoniq, UART_STATUS));
2172 if (snd_rawmidi_transmit(ensoniq->midi_output, &byte, 1) != 1) {
2173 ensoniq->uartc &= ~ES_TXINTENM;
2174 outb(ensoniq->uartc, ES_REG(ensoniq, UART_CONTROL));
2177 outb(byte, ES_REG(ensoniq, UART_DATA));
2180 spin_unlock(&ensoniq->reg_lock);
2185 struct ensoniq *ensoniq = substream->rmidi->private_data;
2187 spin_lock_irq(&ensoniq->reg_lock);
2188 ensoniq->uartm |= ES_MODE_INPUT;
2189 ensoniq->midi_input = substream;
2190 if (!(ensoniq->uartm & ES_MODE_OUTPUT)) {
2191 outb(ES_CNTRL(3), ES_REG(ensoniq, UART_CONTROL));
2192 outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
2193 outl(ensoniq->ctrl |= ES_UART_EN, ES_REG(ensoniq, CONTROL));
2195 spin_unlock_irq(&ensoniq->reg_lock);
2201 struct ensoniq *ensoniq = substream->rmidi->private_data;
2203 spin_lock_irq(&ensoniq->reg_lock);
2204 if (!(ensoniq->uartm & ES_MODE_OUTPUT)) {
2205 outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
2206 outl(ensoniq->ctrl &= ~ES_UART_EN, ES_REG(ensoniq, CONTROL));
2208 outb(ensoniq->uartc &= ~ES_RXINTEN, ES_REG(ensoniq, UART_CONTROL));
2210 ensoniq->midi_input = NULL;
2211 ensoniq->uartm &= ~ES_MODE_INPUT;
2212 spin_unlock_irq(&ensoniq->reg_lock);
2218 struct ensoniq *ensoniq = substream->rmidi->private_data;
2220 spin_lock_irq(&ensoniq->reg_lock);
2221 ensoniq->uartm |= ES_MODE_OUTPUT;
2222 ensoniq->midi_output = substream;
2223 if (!(ensoniq->uartm & ES_MODE_INPUT)) {
2224 outb(ES_CNTRL(3), ES_REG(ensoniq, UART_CONTROL));
2225 outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
2226 outl(ensoniq->ctrl |= ES_UART_EN, ES_REG(ensoniq, CONTROL));
2228 spin_unlock_irq(&ensoniq->reg_lock);
2234 struct ensoniq *ensoniq = substream->rmidi->private_data;
2236 spin_lock_irq(&ensoniq->reg_lock);
2237 if (!(ensoniq->uartm & ES_MODE_INPUT)) {
2238 outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
2239 outl(ensoniq->ctrl &= ~ES_UART_EN, ES_REG(ensoniq, CONTROL));
2241 outb(ensoniq->uartc &= ~ES_TXINTENM, ES_REG(ensoniq, UART_CONTROL));
2243 ensoniq->midi_output = NULL;
2244 ensoniq->uartm &= ~ES_MODE_OUTPUT;
2245 spin_unlock_irq(&ensoniq->reg_lock);
2252 struct ensoniq *ensoniq = substream->rmidi->private_data;
2255 spin_lock_irqsave(&ensoniq->reg_lock, flags);
2257 if ((ensoniq->uartc & ES_RXINTEN) == 0) {
2260 inb(ES_REG(ensoniq, UART_DATA));
2261 ensoniq->uartc |= ES_RXINTEN;
2262 outb(ensoniq->uartc, ES_REG(ensoniq, UART_CONTROL));
2265 if (ensoniq->uartc & ES_RXINTEN) {
2266 ensoniq->uartc &= ~ES_RXINTEN;
2267 outb(ensoniq->uartc, ES_REG(ensoniq, UART_CONTROL));
2270 spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
2276 struct ensoniq *ensoniq = substream->rmidi->private_data;
2279 spin_lock_irqsave(&ensoniq->reg_lock, flags);
2281 if (ES_TXINTENI(ensoniq->uartc) == 0) {
2282 ensoniq->uartc |= ES_TXINTENO(1);
2284 while (ES_TXINTENI(ensoniq->uartc) == 1 &&
2285 (inb(ES_REG(ensoniq, UART_STATUS)) & ES_TXRDY)) {
2287 ensoniq->uartc &= ~ES_TXINTENM;
2289 outb(byte, ES_REG(ensoniq, UART_DATA));
2292 outb(ensoniq->uartc, ES_REG(ensoniq, UART_CONTROL));
2295 if (ES_TXINTENI(ensoniq->uartc) == 1) {
2296 ensoniq->uartc &= ~ES_TXINTENM;
2297 outb(ensoniq->uartc, ES_REG(ensoniq, UART_CONTROL));
2300 spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
2317 static int __devinit snd_ensoniq_midi(struct ensoniq * ensoniq, int device,
2325 if ((err = snd_rawmidi_new(ensoniq->card, "ES1370/1", device, 1, 1, &rmidi)) < 0)
2336 rmidi->private_data = ensoniq;
2337 ensoniq->rmidi = rmidi;
2349 struct ensoniq *ensoniq = dev_id;
2352 if (ensoniq == NULL)
2355 status = inl(ES_REG(ensoniq, STATUS));
2359 spin_lock(&ensoniq->reg_lock);
2360 sctrl = ensoniq->sctrl;
2367 outl(sctrl, ES_REG(ensoniq, SERIAL));
2368 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
2369 spin_unlock(&ensoniq->reg_lock);
2372 snd_ensoniq_midi_interrupt(ensoniq);
2373 if ((status & ES_DAC2) && ensoniq->playback2_substream)
2374 snd_pcm_period_elapsed(ensoniq->playback2_substream);
2375 if ((status & ES_ADC) && ensoniq->capture_substream)
2376 snd_pcm_period_elapsed(ensoniq->capture_substream);
2377 if ((status & ES_DAC1) && ensoniq->playback1_substream)
2378 snd_pcm_period_elapsed(ensoniq->playback1_substream);
2387 struct ensoniq *ensoniq;
2401 if ((err = snd_ensoniq_create(card, pci, &ensoniq)) < 0) {
2405 card->private_data = ensoniq;
2409 if ((err = snd_ensoniq_1370_mixer(ensoniq)) < 0) {
2415 if ((err = snd_ensoniq_1371_mixer(ensoniq, spdif[dev], lineio[dev])) < 0) {
2420 if ((err = snd_ensoniq_pcm(ensoniq, 0, NULL)) < 0) {
2424 if ((err = snd_ensoniq_pcm2(ensoniq, 1, NULL)) < 0) {
2428 if ((err = snd_ensoniq_midi(ensoniq, 0, NULL)) < 0) {
2433 snd_ensoniq_create_gameport(ensoniq, dev);
2441 ensoniq->port,
2442 ensoniq->irq);