Lines Matching refs:chip

514 static inline void snd_cs4281_pokeBA0(struct cs4281 *chip, unsigned long offset,  in snd_cs4281_pokeBA0()  argument
517 writel(val, chip->ba0 + offset); in snd_cs4281_pokeBA0()
520 static inline unsigned int snd_cs4281_peekBA0(struct cs4281 *chip, unsigned long offset) in snd_cs4281_peekBA0() argument
522 return readl(chip->ba0 + offset); in snd_cs4281_peekBA0()
535 struct cs4281 *chip = ac97->private_data; in snd_cs4281_ac97_write() local
550 snd_cs4281_pokeBA0(chip, BA0_ACCAD, reg); in snd_cs4281_ac97_write()
551 snd_cs4281_pokeBA0(chip, BA0_ACCDA, val); in snd_cs4281_ac97_write()
552 snd_cs4281_pokeBA0(chip, BA0_ACCTL, BA0_ACCTL_DCV | BA0_ACCTL_VFRM | in snd_cs4281_ac97_write()
563 if (!(snd_cs4281_peekBA0(chip, BA0_ACCTL) & BA0_ACCTL_DCV)) { in snd_cs4281_ac97_write()
567 dev_err(chip->card->dev, in snd_cs4281_ac97_write()
574 struct cs4281 *chip = ac97->private_data; in snd_cs4281_ac97_read() local
590 snd_cs4281_peekBA0(chip, ac97_num ? BA0_ACSDA2 : BA0_ACSDA); in snd_cs4281_ac97_read()
605 snd_cs4281_pokeBA0(chip, BA0_ACCAD, reg); in snd_cs4281_ac97_read()
606 snd_cs4281_pokeBA0(chip, BA0_ACCDA, 0); in snd_cs4281_ac97_read()
607 snd_cs4281_pokeBA0(chip, BA0_ACCTL, BA0_ACCTL_DCV | BA0_ACCTL_CRW | in snd_cs4281_ac97_read()
624 if (!(snd_cs4281_peekBA0(chip, BA0_ACCTL) & BA0_ACCTL_DCV)) in snd_cs4281_ac97_read()
628 dev_err(chip->card->dev, in snd_cs4281_ac97_read()
643 if (snd_cs4281_peekBA0(chip, ac97_num ? BA0_ACSTS2 : BA0_ACSTS) & BA0_ACSTS_VSTS) in snd_cs4281_ac97_read()
648 dev_err(chip->card->dev, in snd_cs4281_ac97_read()
658 result = snd_cs4281_peekBA0(chip, ac97_num ? BA0_ACSDA2 : BA0_ACSDA); in snd_cs4281_ac97_read()
671 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_trigger() local
673 spin_lock(&chip->reg_lock); in snd_cs4281_trigger()
685 snd_cs4281_pokeBA0(chip, dma->regDMR, dma->valDMR & ~BA0_DMR_DMA); in snd_cs4281_trigger()
700 spin_unlock(&chip->reg_lock); in snd_cs4281_trigger()
703 snd_cs4281_pokeBA0(chip, dma->regDMR, dma->valDMR); in snd_cs4281_trigger()
704 snd_cs4281_pokeBA0(chip, dma->regFCR, dma->valFCR); in snd_cs4281_trigger()
705 snd_cs4281_pokeBA0(chip, dma->regDCR, dma->valDCR); in snd_cs4281_trigger()
706 spin_unlock(&chip->reg_lock); in snd_cs4281_trigger()
734 static void snd_cs4281_mode(struct cs4281 *chip, struct cs4281_dma *dma, in snd_cs4281_mode() argument
760 snd_cs4281_pokeBA0(chip, dma->regDBA, runtime->dma_addr); in snd_cs4281_mode()
761 snd_cs4281_pokeBA0(chip, dma->regDBC, runtime->buffer_size - 1); in snd_cs4281_mode()
762 rec_mono = (chip->dma[1].valDMR & BA0_DMR_MONO) == BA0_DMR_MONO; in snd_cs4281_mode()
763 snd_cs4281_pokeBA0(chip, BA0_SRCSA, (chip->src_left_play_slot << 0) | in snd_cs4281_mode()
764 (chip->src_right_play_slot << 8) | in snd_cs4281_mode()
765 (chip->src_left_rec_slot << 16) | in snd_cs4281_mode()
766 ((rec_mono ? 31 : chip->src_right_rec_slot) << 24)); in snd_cs4281_mode()
770 if (dma->left_slot == chip->src_left_play_slot) { in snd_cs4281_mode()
772 snd_BUG_ON(dma->right_slot != chip->src_right_play_slot); in snd_cs4281_mode()
773 snd_cs4281_pokeBA0(chip, BA0_DACSR, val); in snd_cs4281_mode()
776 if (dma->left_slot == chip->src_left_rec_slot) { in snd_cs4281_mode()
778 snd_BUG_ON(dma->right_slot != chip->src_right_rec_slot); in snd_cs4281_mode()
779 snd_cs4281_pokeBA0(chip, BA0_ADCSR, val); in snd_cs4281_mode()
785 snd_cs4281_pokeBA0(chip, dma->regFCR, snd_cs4281_peekBA0(chip, dma->regFCR) & ~BA0_FCR_FEN); in snd_cs4281_mode()
791 snd_cs4281_pokeBA0(chip, dma->regFCR, dma->valFCR | (capture ? BA0_FCR_PSH : 0)); in snd_cs4281_mode()
794 snd_cs4281_pokeBA0(chip, dma->regFCR, dma->valFCR | BA0_FCR_FEN); in snd_cs4281_mode()
796 snd_cs4281_pokeBA0(chip, dma->regFSIC, 0); in snd_cs4281_mode()
814 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_playback_prepare() local
816 spin_lock_irq(&chip->reg_lock); in snd_cs4281_playback_prepare()
817 snd_cs4281_mode(chip, dma, runtime, 0, 1); in snd_cs4281_playback_prepare()
818 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_playback_prepare()
826 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_capture_prepare() local
828 spin_lock_irq(&chip->reg_lock); in snd_cs4281_capture_prepare()
829 snd_cs4281_mode(chip, dma, runtime, 1, 1); in snd_cs4281_capture_prepare()
830 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_capture_prepare()
838 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_pointer() local
847 snd_cs4281_peekBA0(chip, dma->regDCC) - 1; in snd_cs4281_pointer()
902 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_playback_open() local
906 dma = &chip->dma[0]; in snd_cs4281_playback_open()
921 struct cs4281 *chip = snd_pcm_substream_chip(substream); in snd_cs4281_capture_open() local
925 dma = &chip->dma[1]; in snd_cs4281_capture_open()
976 static int snd_cs4281_pcm(struct cs4281 *chip, int device) in snd_cs4281_pcm() argument
981 err = snd_pcm_new(chip->card, "CS4281", device, 1, 1, &pcm); in snd_cs4281_pcm()
988 pcm->private_data = chip; in snd_cs4281_pcm()
991 chip->pcm = pcm; in snd_cs4281_pcm()
994 snd_dma_pci_data(chip->pci), 64*1024, 512*1024); in snd_cs4281_pcm()
1018 struct cs4281 *chip = snd_kcontrol_chip(kcontrol); in snd_cs4281_get_volume() local
1023 volL = CS_VOL_MASK - (snd_cs4281_peekBA0(chip, regL) & CS_VOL_MASK); in snd_cs4281_get_volume()
1024 volR = CS_VOL_MASK - (snd_cs4281_peekBA0(chip, regR) & CS_VOL_MASK); in snd_cs4281_get_volume()
1034 struct cs4281 *chip = snd_kcontrol_chip(kcontrol); in snd_cs4281_put_volume() local
1040 volL = CS_VOL_MASK - (snd_cs4281_peekBA0(chip, regL) & CS_VOL_MASK); in snd_cs4281_put_volume()
1041 volR = CS_VOL_MASK - (snd_cs4281_peekBA0(chip, regR) & CS_VOL_MASK); in snd_cs4281_put_volume()
1045 snd_cs4281_pokeBA0(chip, regL, volL); in snd_cs4281_put_volume()
1050 snd_cs4281_pokeBA0(chip, regR, volR); in snd_cs4281_put_volume()
1082 struct cs4281 *chip = bus->private_data; in snd_cs4281_mixer_free_ac97_bus() local
1083 chip->ac97_bus = NULL; in snd_cs4281_mixer_free_ac97_bus()
1088 struct cs4281 *chip = ac97->private_data; in snd_cs4281_mixer_free_ac97() local
1090 chip->ac97_secondary = NULL; in snd_cs4281_mixer_free_ac97()
1092 chip->ac97 = NULL; in snd_cs4281_mixer_free_ac97()
1095 static int snd_cs4281_mixer(struct cs4281 *chip) in snd_cs4281_mixer() argument
1097 struct snd_card *card = chip->card; in snd_cs4281_mixer()
1105 if ((err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus)) < 0) in snd_cs4281_mixer()
1107 chip->ac97_bus->private_free = snd_cs4281_mixer_free_ac97_bus; in snd_cs4281_mixer()
1110 ac97.private_data = chip; in snd_cs4281_mixer()
1112 if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0) in snd_cs4281_mixer()
1114 if (chip->dual_codec) { in snd_cs4281_mixer()
1116 if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97_secondary)) < 0) in snd_cs4281_mixer()
1119 if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4281_fm_vol, chip))) < 0) in snd_cs4281_mixer()
1121 if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4281_pcm_vol, chip))) < 0) in snd_cs4281_mixer()
1134 struct cs4281 *chip = entry->private_data; in snd_cs4281_proc_read() local
1137 snd_iprintf(buffer, "Spurious half IRQs : %u\n", chip->spurious_dhtc_irq); in snd_cs4281_proc_read()
1138 snd_iprintf(buffer, "Spurious end IRQs : %u\n", chip->spurious_dtc_irq); in snd_cs4281_proc_read()
1146 struct cs4281 *chip = entry->private_data; in snd_cs4281_BA0_read() local
1148 if (copy_to_user_fromio(buf, chip->ba0 + pos, count)) in snd_cs4281_BA0_read()
1158 struct cs4281 *chip = entry->private_data; in snd_cs4281_BA1_read() local
1160 if (copy_to_user_fromio(buf, chip->ba1 + pos, count)) in snd_cs4281_BA1_read()
1173 static void snd_cs4281_proc_init(struct cs4281 *chip) in snd_cs4281_proc_init() argument
1177 if (! snd_card_proc_new(chip->card, "cs4281", &entry)) in snd_cs4281_proc_init()
1178 snd_info_set_text_ops(entry, chip, snd_cs4281_proc_read); in snd_cs4281_proc_init()
1179 if (! snd_card_proc_new(chip->card, "cs4281_BA0", &entry)) { in snd_cs4281_proc_init()
1181 entry->private_data = chip; in snd_cs4281_proc_init()
1185 if (! snd_card_proc_new(chip->card, "cs4281_BA1", &entry)) { in snd_cs4281_proc_init()
1187 entry->private_data = chip; in snd_cs4281_proc_init()
1201 struct cs4281 *chip = gameport_get_port_data(gameport); in snd_cs4281_gameport_trigger() local
1203 if (snd_BUG_ON(!chip)) in snd_cs4281_gameport_trigger()
1205 snd_cs4281_pokeBA0(chip, BA0_JSPT, 0xff); in snd_cs4281_gameport_trigger()
1210 struct cs4281 *chip = gameport_get_port_data(gameport); in snd_cs4281_gameport_read() local
1212 if (snd_BUG_ON(!chip)) in snd_cs4281_gameport_read()
1214 return snd_cs4281_peekBA0(chip, BA0_JSPT); in snd_cs4281_gameport_read()
1221 struct cs4281 *chip = gameport_get_port_data(gameport); in snd_cs4281_gameport_cooked_read() local
1224 if (snd_BUG_ON(!chip)) in snd_cs4281_gameport_cooked_read()
1227 js1 = snd_cs4281_peekBA0(chip, BA0_JSC1); in snd_cs4281_gameport_cooked_read()
1228 js2 = snd_cs4281_peekBA0(chip, BA0_JSC2); in snd_cs4281_gameport_cooked_read()
1229 jst = snd_cs4281_peekBA0(chip, BA0_JSPT); in snd_cs4281_gameport_cooked_read()
1261 static int snd_cs4281_create_gameport(struct cs4281 *chip) in snd_cs4281_create_gameport() argument
1265 chip->gameport = gp = gameport_allocate_port(); in snd_cs4281_create_gameport()
1267 dev_err(chip->card->dev, in snd_cs4281_create_gameport()
1273 gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci)); in snd_cs4281_create_gameport()
1274 gameport_set_dev_parent(gp, &chip->pci->dev); in snd_cs4281_create_gameport()
1279 gameport_set_port_data(gp, chip); in snd_cs4281_create_gameport()
1281 snd_cs4281_pokeBA0(chip, BA0_JSIO, 0xFF); // ? in snd_cs4281_create_gameport()
1282 snd_cs4281_pokeBA0(chip, BA0_JSCTL, JSCTL_SP_MEDIUM_SLOW); in snd_cs4281_create_gameport()
1289 static void snd_cs4281_free_gameport(struct cs4281 *chip) in snd_cs4281_free_gameport() argument
1291 if (chip->gameport) { in snd_cs4281_free_gameport()
1292 gameport_unregister_port(chip->gameport); in snd_cs4281_free_gameport()
1293 chip->gameport = NULL; in snd_cs4281_free_gameport()
1297 static inline int snd_cs4281_create_gameport(struct cs4281 *chip) { return -ENOSYS; } in snd_cs4281_create_gameport() argument
1298 static inline void snd_cs4281_free_gameport(struct cs4281 *chip) { } in snd_cs4281_free_gameport() argument
1301 static int snd_cs4281_free(struct cs4281 *chip) in snd_cs4281_free() argument
1303 snd_cs4281_free_gameport(chip); in snd_cs4281_free()
1305 if (chip->irq >= 0) in snd_cs4281_free()
1306 synchronize_irq(chip->irq); in snd_cs4281_free()
1309 snd_cs4281_pokeBA0(chip, BA0_HIMR, 0x7fffffff); in snd_cs4281_free()
1311 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, 0); in snd_cs4281_free()
1313 snd_cs4281_pokeBA0(chip, BA0_SSPM, 0); in snd_cs4281_free()
1315 pci_set_power_state(chip->pci, PCI_D3hot); in snd_cs4281_free()
1317 if (chip->irq >= 0) in snd_cs4281_free()
1318 free_irq(chip->irq, chip); in snd_cs4281_free()
1319 iounmap(chip->ba0); in snd_cs4281_free()
1320 iounmap(chip->ba1); in snd_cs4281_free()
1321 pci_release_regions(chip->pci); in snd_cs4281_free()
1322 pci_disable_device(chip->pci); in snd_cs4281_free()
1324 kfree(chip); in snd_cs4281_free()
1330 struct cs4281 *chip = device->device_data; in snd_cs4281_dev_free() local
1331 return snd_cs4281_free(chip); in snd_cs4281_dev_free()
1334 static int snd_cs4281_chip_init(struct cs4281 *chip); /* defined below */
1341 struct cs4281 *chip; in snd_cs4281_create() local
1351 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_cs4281_create()
1352 if (chip == NULL) { in snd_cs4281_create()
1356 spin_lock_init(&chip->reg_lock); in snd_cs4281_create()
1357 chip->card = card; in snd_cs4281_create()
1358 chip->pci = pci; in snd_cs4281_create()
1359 chip->irq = -1; in snd_cs4281_create()
1365 chip->dual_codec = dual_codec; in snd_cs4281_create()
1368 kfree(chip); in snd_cs4281_create()
1372 chip->ba0_addr = pci_resource_start(pci, 0); in snd_cs4281_create()
1373 chip->ba1_addr = pci_resource_start(pci, 1); in snd_cs4281_create()
1375 chip->ba0 = pci_ioremap_bar(pci, 0); in snd_cs4281_create()
1376 chip->ba1 = pci_ioremap_bar(pci, 1); in snd_cs4281_create()
1377 if (!chip->ba0 || !chip->ba1) { in snd_cs4281_create()
1378 snd_cs4281_free(chip); in snd_cs4281_create()
1383 KBUILD_MODNAME, chip)) { in snd_cs4281_create()
1385 snd_cs4281_free(chip); in snd_cs4281_create()
1388 chip->irq = pci->irq; in snd_cs4281_create()
1390 tmp = snd_cs4281_chip_init(chip); in snd_cs4281_create()
1392 snd_cs4281_free(chip); in snd_cs4281_create()
1396 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_cs4281_create()
1397 snd_cs4281_free(chip); in snd_cs4281_create()
1401 snd_cs4281_proc_init(chip); in snd_cs4281_create()
1403 *rchip = chip; in snd_cs4281_create()
1407 static int snd_cs4281_chip_init(struct cs4281 *chip) in snd_cs4281_chip_init() argument
1414 tmp = snd_cs4281_peekBA0(chip, BA0_EPPMC); in snd_cs4281_chip_init()
1416 snd_cs4281_pokeBA0(chip, BA0_EPPMC, tmp & ~BA0_EPPMC_FPDN); in snd_cs4281_chip_init()
1419 tmp = snd_cs4281_peekBA0(chip, BA0_CFLR); in snd_cs4281_chip_init()
1421 snd_cs4281_pokeBA0(chip, BA0_CFLR, BA0_CFLR_DEFAULT); in snd_cs4281_chip_init()
1422 tmp = snd_cs4281_peekBA0(chip, BA0_CFLR); in snd_cs4281_chip_init()
1424 dev_err(chip->card->dev, in snd_cs4281_chip_init()
1433 snd_cs4281_pokeBA0(chip, BA0_CWPR, 0x4281); in snd_cs4281_chip_init()
1435 if ((tmp = snd_cs4281_peekBA0(chip, BA0_SERC1)) != (BA0_SERC1_SO1EN | BA0_SERC1_AC97)) { in snd_cs4281_chip_init()
1436 dev_err(chip->card->dev, in snd_cs4281_chip_init()
1440 if ((tmp = snd_cs4281_peekBA0(chip, BA0_SERC2)) != (BA0_SERC2_SI1EN | BA0_SERC2_AC97)) { in snd_cs4281_chip_init()
1441 dev_err(chip->card->dev, in snd_cs4281_chip_init()
1447 snd_cs4281_pokeBA0(chip, BA0_SSPM, BA0_SSPM_MIXEN | BA0_SSPM_CSRCEN | in snd_cs4281_chip_init()
1456 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, 0); in snd_cs4281_chip_init()
1457 snd_cs4281_pokeBA0(chip, BA0_SERMC, 0); in snd_cs4281_chip_init()
1461 snd_cs4281_pokeBA0(chip, BA0_ACCTL, 0); in snd_cs4281_chip_init()
1468 snd_cs4281_pokeBA0(chip, BA0_SPMC, 0); in snd_cs4281_chip_init()
1470 snd_cs4281_pokeBA0(chip, BA0_SPMC, BA0_SPMC_RSTN); in snd_cs4281_chip_init()
1473 if (chip->dual_codec) in snd_cs4281_chip_init()
1474 snd_cs4281_pokeBA0(chip, BA0_SPMC, BA0_SPMC_RSTN | BA0_SPMC_ASDI2E); in snd_cs4281_chip_init()
1479 snd_cs4281_pokeBA0(chip, BA0_SERMC, in snd_cs4281_chip_init()
1480 (chip->dual_codec ? BA0_SERMC_TCID(chip->dual_codec) : BA0_SERMC_TCID(1)) | in snd_cs4281_chip_init()
1486 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, BA0_CLKCR1_DLLP); in snd_cs4281_chip_init()
1488 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, BA0_CLKCR1_SWCE | BA0_CLKCR1_DLLP); in snd_cs4281_chip_init()
1499 if (snd_cs4281_peekBA0(chip, BA0_CLKCR1) & BA0_CLKCR1_DLLRDY) in snd_cs4281_chip_init()
1504 dev_err(chip->card->dev, "DLLRDY not seen\n"); in snd_cs4281_chip_init()
1514 snd_cs4281_pokeBA0(chip, BA0_ACCTL, BA0_ACCTL_ESYN); in snd_cs4281_chip_init()
1525 if (snd_cs4281_peekBA0(chip, BA0_ACSTS) & BA0_ACSTS_CRDY) in snd_cs4281_chip_init()
1530 dev_err(chip->card->dev, in snd_cs4281_chip_init()
1532 snd_cs4281_peekBA0(chip, BA0_ACSTS)); in snd_cs4281_chip_init()
1536 if (chip->dual_codec) { in snd_cs4281_chip_init()
1539 if (snd_cs4281_peekBA0(chip, BA0_ACSTS2) & BA0_ACSTS_CRDY) in snd_cs4281_chip_init()
1543 dev_info(chip->card->dev, in snd_cs4281_chip_init()
1545 chip->dual_codec = 0; in snd_cs4281_chip_init()
1554 snd_cs4281_pokeBA0(chip, BA0_ACCTL, BA0_ACCTL_VFRM | BA0_ACCTL_ESYN); in snd_cs4281_chip_init()
1567 …if ((snd_cs4281_peekBA0(chip, BA0_ACISV) & (BA0_ACISV_SLV(3) | BA0_ACISV_SLV(4))) == (BA0_ACISV_SL… in snd_cs4281_chip_init()
1574 dev_err(chip->card->dev, "never read ISV3 and ISV4 from AC'97\n"); in snd_cs4281_chip_init()
1583 snd_cs4281_pokeBA0(chip, BA0_ACOSV, BA0_ACOSV_SLV(3) | BA0_ACOSV_SLV(4)); in snd_cs4281_chip_init()
1589 struct cs4281_dma *dma = &chip->dma[tmp]; in snd_cs4281_chip_init()
1600 snd_cs4281_pokeBA0(chip, dma->regFCR, in snd_cs4281_chip_init()
1607 chip->src_left_play_slot = 0; /* AC'97 left PCM playback (3) */ in snd_cs4281_chip_init()
1608 chip->src_right_play_slot = 1; /* AC'97 right PCM playback (4) */ in snd_cs4281_chip_init()
1609 chip->src_left_rec_slot = 10; /* AC'97 left PCM record (3) */ in snd_cs4281_chip_init()
1610 chip->src_right_rec_slot = 11; /* AC'97 right PCM record (4) */ in snd_cs4281_chip_init()
1613 chip->dma[0].valFCR = BA0_FCR_FEN | BA0_FCR_LS(0) | in snd_cs4281_chip_init()
1616 BA0_FCR_OF(chip->dma[0].fifo_offset); in snd_cs4281_chip_init()
1617 snd_cs4281_pokeBA0(chip, chip->dma[0].regFCR, chip->dma[0].valFCR); in snd_cs4281_chip_init()
1618 snd_cs4281_pokeBA0(chip, BA0_SRCSA, (chip->src_left_play_slot << 0) | in snd_cs4281_chip_init()
1619 (chip->src_right_play_slot << 8) | in snd_cs4281_chip_init()
1620 (chip->src_left_rec_slot << 16) | in snd_cs4281_chip_init()
1621 (chip->src_right_rec_slot << 24)); in snd_cs4281_chip_init()
1624 snd_cs4281_pokeBA0(chip, BA0_PPLVC, 0); in snd_cs4281_chip_init()
1625 snd_cs4281_pokeBA0(chip, BA0_PPRVC, 0); in snd_cs4281_chip_init()
1628 snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI); in snd_cs4281_chip_init()
1630 snd_cs4281_pokeBA0(chip, BA0_HIMR, 0x7fffffff & ~( in snd_cs4281_chip_init()
1637 synchronize_irq(chip->irq); in snd_cs4281_chip_init()
1646 static void snd_cs4281_midi_reset(struct cs4281 *chip) in snd_cs4281_midi_reset() argument
1648 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr | BA0_MIDCR_MRST); in snd_cs4281_midi_reset()
1650 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_reset()
1655 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_input_open() local
1657 spin_lock_irq(&chip->reg_lock); in snd_cs4281_midi_input_open()
1658 chip->midcr |= BA0_MIDCR_RXE; in snd_cs4281_midi_input_open()
1659 chip->midi_input = substream; in snd_cs4281_midi_input_open()
1660 if (!(chip->uartm & CS4281_MODE_OUTPUT)) { in snd_cs4281_midi_input_open()
1661 snd_cs4281_midi_reset(chip); in snd_cs4281_midi_input_open()
1663 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_input_open()
1665 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_midi_input_open()
1671 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_input_close() local
1673 spin_lock_irq(&chip->reg_lock); in snd_cs4281_midi_input_close()
1674 chip->midcr &= ~(BA0_MIDCR_RXE | BA0_MIDCR_RIE); in snd_cs4281_midi_input_close()
1675 chip->midi_input = NULL; in snd_cs4281_midi_input_close()
1676 if (!(chip->uartm & CS4281_MODE_OUTPUT)) { in snd_cs4281_midi_input_close()
1677 snd_cs4281_midi_reset(chip); in snd_cs4281_midi_input_close()
1679 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_input_close()
1681 chip->uartm &= ~CS4281_MODE_INPUT; in snd_cs4281_midi_input_close()
1682 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_midi_input_close()
1688 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_output_open() local
1690 spin_lock_irq(&chip->reg_lock); in snd_cs4281_midi_output_open()
1691 chip->uartm |= CS4281_MODE_OUTPUT; in snd_cs4281_midi_output_open()
1692 chip->midcr |= BA0_MIDCR_TXE; in snd_cs4281_midi_output_open()
1693 chip->midi_output = substream; in snd_cs4281_midi_output_open()
1694 if (!(chip->uartm & CS4281_MODE_INPUT)) { in snd_cs4281_midi_output_open()
1695 snd_cs4281_midi_reset(chip); in snd_cs4281_midi_output_open()
1697 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_output_open()
1699 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_midi_output_open()
1705 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_output_close() local
1707 spin_lock_irq(&chip->reg_lock); in snd_cs4281_midi_output_close()
1708 chip->midcr &= ~(BA0_MIDCR_TXE | BA0_MIDCR_TIE); in snd_cs4281_midi_output_close()
1709 chip->midi_output = NULL; in snd_cs4281_midi_output_close()
1710 if (!(chip->uartm & CS4281_MODE_INPUT)) { in snd_cs4281_midi_output_close()
1711 snd_cs4281_midi_reset(chip); in snd_cs4281_midi_output_close()
1713 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_output_close()
1715 chip->uartm &= ~CS4281_MODE_OUTPUT; in snd_cs4281_midi_output_close()
1716 spin_unlock_irq(&chip->reg_lock); in snd_cs4281_midi_output_close()
1723 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_input_trigger() local
1725 spin_lock_irqsave(&chip->reg_lock, flags); in snd_cs4281_midi_input_trigger()
1727 if ((chip->midcr & BA0_MIDCR_RIE) == 0) { in snd_cs4281_midi_input_trigger()
1728 chip->midcr |= BA0_MIDCR_RIE; in snd_cs4281_midi_input_trigger()
1729 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_input_trigger()
1732 if (chip->midcr & BA0_MIDCR_RIE) { in snd_cs4281_midi_input_trigger()
1733 chip->midcr &= ~BA0_MIDCR_RIE; in snd_cs4281_midi_input_trigger()
1734 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_input_trigger()
1737 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_cs4281_midi_input_trigger()
1743 struct cs4281 *chip = substream->rmidi->private_data; in snd_cs4281_midi_output_trigger() local
1746 spin_lock_irqsave(&chip->reg_lock, flags); in snd_cs4281_midi_output_trigger()
1748 if ((chip->midcr & BA0_MIDCR_TIE) == 0) { in snd_cs4281_midi_output_trigger()
1749 chip->midcr |= BA0_MIDCR_TIE; in snd_cs4281_midi_output_trigger()
1751 while ((chip->midcr & BA0_MIDCR_TIE) && in snd_cs4281_midi_output_trigger()
1752 (snd_cs4281_peekBA0(chip, BA0_MIDSR) & BA0_MIDSR_TBF) == 0) { in snd_cs4281_midi_output_trigger()
1754 chip->midcr &= ~BA0_MIDCR_TIE; in snd_cs4281_midi_output_trigger()
1756 snd_cs4281_pokeBA0(chip, BA0_MIDWP, byte); in snd_cs4281_midi_output_trigger()
1759 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_output_trigger()
1762 if (chip->midcr & BA0_MIDCR_TIE) { in snd_cs4281_midi_output_trigger()
1763 chip->midcr &= ~BA0_MIDCR_TIE; in snd_cs4281_midi_output_trigger()
1764 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_midi_output_trigger()
1767 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_cs4281_midi_output_trigger()
1784 static int snd_cs4281_midi(struct cs4281 *chip, int device) in snd_cs4281_midi() argument
1789 if ((err = snd_rawmidi_new(chip->card, "CS4281", device, 1, 1, &rmidi)) < 0) in snd_cs4281_midi()
1795 rmidi->private_data = chip; in snd_cs4281_midi()
1796 chip->rmidi = rmidi; in snd_cs4281_midi()
1806 struct cs4281 *chip = dev_id; in snd_cs4281_interrupt() local
1810 if (chip == NULL) in snd_cs4281_interrupt()
1812 status = snd_cs4281_peekBA0(chip, BA0_HISR); in snd_cs4281_interrupt()
1814 snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI); in snd_cs4281_interrupt()
1821 cdma = &chip->dma[dma]; in snd_cs4281_interrupt()
1822 spin_lock(&chip->reg_lock); in snd_cs4281_interrupt()
1824 val = snd_cs4281_peekBA0(chip, cdma->regHDSR); in snd_cs4281_interrupt()
1830 chip->spurious_dhtc_irq++; in snd_cs4281_interrupt()
1831 spin_unlock(&chip->reg_lock); in snd_cs4281_interrupt()
1836 chip->spurious_dtc_irq++; in snd_cs4281_interrupt()
1837 spin_unlock(&chip->reg_lock); in snd_cs4281_interrupt()
1840 spin_unlock(&chip->reg_lock); in snd_cs4281_interrupt()
1845 if ((status & BA0_HISR_MIDI) && chip->rmidi) { in snd_cs4281_interrupt()
1848 spin_lock(&chip->reg_lock); in snd_cs4281_interrupt()
1849 while ((snd_cs4281_peekBA0(chip, BA0_MIDSR) & BA0_MIDSR_RBE) == 0) { in snd_cs4281_interrupt()
1850 c = snd_cs4281_peekBA0(chip, BA0_MIDRP); in snd_cs4281_interrupt()
1851 if ((chip->midcr & BA0_MIDCR_RIE) == 0) in snd_cs4281_interrupt()
1853 snd_rawmidi_receive(chip->midi_input, &c, 1); in snd_cs4281_interrupt()
1855 while ((snd_cs4281_peekBA0(chip, BA0_MIDSR) & BA0_MIDSR_TBF) == 0) { in snd_cs4281_interrupt()
1856 if ((chip->midcr & BA0_MIDCR_TIE) == 0) in snd_cs4281_interrupt()
1858 if (snd_rawmidi_transmit(chip->midi_output, &c, 1) != 1) { in snd_cs4281_interrupt()
1859 chip->midcr &= ~BA0_MIDCR_TIE; in snd_cs4281_interrupt()
1860 snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr); in snd_cs4281_interrupt()
1863 snd_cs4281_pokeBA0(chip, BA0_MIDWP, c); in snd_cs4281_interrupt()
1865 spin_unlock(&chip->reg_lock); in snd_cs4281_interrupt()
1869 snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI); in snd_cs4281_interrupt()
1882 struct cs4281 *chip = opl3->private_data; in snd_cs4281_opl3_command() local
1886 port = chip->ba0 + BA0_B1AP; /* right port */ in snd_cs4281_opl3_command()
1888 port = chip->ba0 + BA0_B0AP; /* left port */ in snd_cs4281_opl3_command()
1906 struct cs4281 *chip; in snd_cs4281_probe() local
1922 if ((err = snd_cs4281_create(card, pci, &chip, dual_codec[dev])) < 0) { in snd_cs4281_probe()
1926 card->private_data = chip; in snd_cs4281_probe()
1928 if ((err = snd_cs4281_mixer(chip)) < 0) { in snd_cs4281_probe()
1932 if ((err = snd_cs4281_pcm(chip, 0)) < 0) { in snd_cs4281_probe()
1936 if ((err = snd_cs4281_midi(chip, 0)) < 0) { in snd_cs4281_probe()
1944 opl3->private_data = chip; in snd_cs4281_probe()
1951 snd_cs4281_create_gameport(chip); in snd_cs4281_probe()
1956 chip->ba0_addr, in snd_cs4281_probe()
1957 chip->irq); in snd_cs4281_probe()
2000 struct cs4281 *chip = card->private_data; in cs4281_suspend() local
2005 snd_pcm_suspend_all(chip->pcm); in cs4281_suspend()
2007 snd_ac97_suspend(chip->ac97); in cs4281_suspend()
2008 snd_ac97_suspend(chip->ac97_secondary); in cs4281_suspend()
2010 ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); in cs4281_suspend()
2012 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); in cs4281_suspend()
2015 snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_CHGM); in cs4281_suspend()
2020 chip->suspend_regs[i] = snd_cs4281_peekBA0(chip, saved_regs[i]); in cs4281_suspend()
2023 snd_cs4281_pokeBA0(chip, BA0_SERMC, 0); in cs4281_suspend()
2026 snd_cs4281_pokeBA0(chip, BA0_SSPM, 0); in cs4281_suspend()
2029 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, 0); in cs4281_suspend()
2032 snd_cs4281_pokeBA0(chip, BA0_SPMC, 0); in cs4281_suspend()
2034 ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); in cs4281_suspend()
2036 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); in cs4281_suspend()
2043 struct cs4281 *chip = card->private_data; in cs4281_resume() local
2047 ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); in cs4281_resume()
2049 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); in cs4281_resume()
2051 snd_cs4281_chip_init(chip); in cs4281_resume()
2056 snd_cs4281_pokeBA0(chip, saved_regs[i], chip->suspend_regs[i]); in cs4281_resume()
2058 snd_ac97_resume(chip->ac97); in cs4281_resume()
2059 snd_ac97_resume(chip->ac97_secondary); in cs4281_resume()
2061 ulCLK = snd_cs4281_peekBA0(chip, BA0_CLKCR1); in cs4281_resume()
2063 snd_cs4281_pokeBA0(chip, BA0_CLKCR1, ulCLK); in cs4281_resume()