Lines Matching refs:chip

234 	void (*enable_dma)(struct atiixp *chip, int on);
236 void (*enable_transfer)(struct atiixp *chip, int on);
238 void (*flush_dma)(struct atiixp *chip);
313 static int snd_atiixp_update_bits(struct atiixp *chip, unsigned int reg, in snd_atiixp_update_bits() argument
316 void __iomem *addr = chip->remap_addr + reg; in snd_atiixp_update_bits()
330 #define atiixp_write(chip,reg,value) \ argument
331 writel(value, chip->remap_addr + ATI_REG_##reg)
332 #define atiixp_read(chip,reg) \ argument
333 readl(chip->remap_addr + ATI_REG_##reg)
334 #define atiixp_update(chip,reg,mask,val) \ argument
335 snd_atiixp_update_bits(chip, ATI_REG_##reg, mask, val)
356 static int atiixp_build_dma_packets(struct atiixp *chip, struct atiixp_dma *dma, in atiixp_build_dma_packets() argument
370 snd_dma_pci_data(chip->pci), in atiixp_build_dma_packets()
381 spin_lock_irqsave(&chip->reg_lock, flags); in atiixp_build_dma_packets()
382 writel(0, chip->remap_addr + dma->ops->llp_offset); in atiixp_build_dma_packets()
383 dma->ops->enable_dma(chip, 0); in atiixp_build_dma_packets()
384 dma->ops->enable_dma(chip, 1); in atiixp_build_dma_packets()
385 spin_unlock_irqrestore(&chip->reg_lock, flags); in atiixp_build_dma_packets()
405 chip->remap_addr + dma->ops->llp_offset); in atiixp_build_dma_packets()
416 static void atiixp_clear_dma_packets(struct atiixp *chip, struct atiixp_dma *dma, in atiixp_clear_dma_packets() argument
420 writel(0, chip->remap_addr + dma->ops->llp_offset); in atiixp_clear_dma_packets()
429 static int snd_atiixp_acquire_codec(struct atiixp *chip) in snd_atiixp_acquire_codec() argument
433 while (atiixp_read(chip, PHYS_OUT_ADDR) & ATI_REG_PHYS_OUT_ADDR_EN) { in snd_atiixp_acquire_codec()
435 dev_warn(chip->card->dev, "codec acquire timeout\n"); in snd_atiixp_acquire_codec()
443 static unsigned short snd_atiixp_codec_read(struct atiixp *chip, unsigned short codec, unsigned sho… in snd_atiixp_codec_read() argument
448 if (snd_atiixp_acquire_codec(chip) < 0) in snd_atiixp_codec_read()
454 atiixp_write(chip, PHYS_OUT_ADDR, data); in snd_atiixp_codec_read()
455 if (snd_atiixp_acquire_codec(chip) < 0) in snd_atiixp_codec_read()
459 data = atiixp_read(chip, PHYS_IN_ADDR); in snd_atiixp_codec_read()
466 dev_warn(chip->card->dev, "codec read timeout (reg %x)\n", reg); in snd_atiixp_codec_read()
471 static void snd_atiixp_codec_write(struct atiixp *chip, unsigned short codec, in snd_atiixp_codec_write() argument
476 if (snd_atiixp_acquire_codec(chip) < 0) in snd_atiixp_codec_write()
481 atiixp_write(chip, PHYS_OUT_ADDR, data); in snd_atiixp_codec_write()
488 struct atiixp *chip = ac97->private_data; in snd_atiixp_ac97_read() local
489 return snd_atiixp_codec_read(chip, ac97->num, reg); in snd_atiixp_ac97_read()
496 struct atiixp *chip = ac97->private_data; in snd_atiixp_ac97_write() local
497 snd_atiixp_codec_write(chip, ac97->num, reg, val); in snd_atiixp_ac97_write()
503 static int snd_atiixp_aclink_reset(struct atiixp *chip) in snd_atiixp_aclink_reset() argument
508 if (atiixp_update(chip, CMD, ATI_REG_CMD_POWERDOWN, 0)) in snd_atiixp_aclink_reset()
512 atiixp_update(chip, CMD, ATI_REG_CMD_AC_SOFT_RESET, ATI_REG_CMD_AC_SOFT_RESET); in snd_atiixp_aclink_reset()
513 atiixp_read(chip, CMD); in snd_atiixp_aclink_reset()
515 atiixp_update(chip, CMD, ATI_REG_CMD_AC_SOFT_RESET, 0); in snd_atiixp_aclink_reset()
518 while (! (atiixp_read(chip, CMD) & ATI_REG_CMD_ACLINK_ACTIVE)) { in snd_atiixp_aclink_reset()
520 atiixp_update(chip, CMD, ATI_REG_CMD_AC_SYNC|ATI_REG_CMD_AC_RESET, in snd_atiixp_aclink_reset()
522 atiixp_read(chip, CMD); in snd_atiixp_aclink_reset()
524 atiixp_update(chip, CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_AC_RESET); in snd_atiixp_aclink_reset()
526 dev_err(chip->card->dev, "codec reset timeout\n"); in snd_atiixp_aclink_reset()
532 atiixp_update(chip, CMD, ATI_REG_CMD_AC_SYNC|ATI_REG_CMD_AC_RESET, in snd_atiixp_aclink_reset()
539 static int snd_atiixp_aclink_down(struct atiixp *chip) in snd_atiixp_aclink_down() argument
543 atiixp_update(chip, CMD, in snd_atiixp_aclink_down()
578 static int snd_atiixp_codec_detect(struct atiixp *chip) in snd_atiixp_codec_detect() argument
582 chip->codec_not_ready_bits = 0; in snd_atiixp_codec_detect()
584 ac97_codec = ac97_probing_bugs(chip->pci); in snd_atiixp_codec_detect()
586 chip->codec_not_ready_bits |= in snd_atiixp_codec_detect()
591 atiixp_write(chip, IER, CODEC_CHECK_BITS); in snd_atiixp_codec_detect()
596 if (chip->codec_not_ready_bits) in snd_atiixp_codec_detect()
599 atiixp_write(chip, IER, 0); /* disable irqs */ in snd_atiixp_codec_detect()
601 if ((chip->codec_not_ready_bits & ALL_CODEC_NOT_READY) == ALL_CODEC_NOT_READY) { in snd_atiixp_codec_detect()
602 dev_err(chip->card->dev, "no codec detected!\n"); in snd_atiixp_codec_detect()
612 static int snd_atiixp_chip_start(struct atiixp *chip) in snd_atiixp_chip_start() argument
617 reg = atiixp_read(chip, CMD); in snd_atiixp_chip_start()
620 atiixp_write(chip, CMD, reg); in snd_atiixp_chip_start()
622 reg = atiixp_read(chip, SPDF_CMD); in snd_atiixp_chip_start()
624 atiixp_write(chip, SPDF_CMD, reg); in snd_atiixp_chip_start()
627 atiixp_write(chip, ISR, 0xffffffff); in snd_atiixp_chip_start()
629 atiixp_write(chip, IER, in snd_atiixp_chip_start()
642 static int snd_atiixp_chip_stop(struct atiixp *chip) in snd_atiixp_chip_stop() argument
645 atiixp_write(chip, ISR, atiixp_read(chip, ISR)); in snd_atiixp_chip_stop()
647 atiixp_write(chip, IER, 0); in snd_atiixp_chip_stop()
663 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_pointer() local
670 curptr = readl(chip->remap_addr + dma->ops->dt_cur); in snd_atiixp_pcm_pointer()
678 dev_dbg(chip->card->dev, "invalid DMA pointer read 0x%x (buf=%x)\n", in snd_atiixp_pcm_pointer()
679 readl(chip->remap_addr + dma->ops->dt_cur), dma->buf_addr); in snd_atiixp_pcm_pointer()
686 static void snd_atiixp_xrun_dma(struct atiixp *chip, struct atiixp_dma *dma) in snd_atiixp_xrun_dma() argument
690 dev_dbg(chip->card->dev, "XRUN detected (DMA %d)\n", dma->ops->type); in snd_atiixp_xrun_dma()
697 static void snd_atiixp_update_dma(struct atiixp *chip, struct atiixp_dma *dma) in snd_atiixp_update_dma() argument
706 static void snd_atiixp_check_bus_busy(struct atiixp *chip) in snd_atiixp_check_bus_busy() argument
709 if (atiixp_read(chip, CMD) & (ATI_REG_CMD_SEND_EN | in snd_atiixp_check_bus_busy()
715 atiixp_update(chip, IER, ATI_REG_IER_SET_BUS_BUSY, bus_busy); in snd_atiixp_check_bus_busy()
723 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_trigger() local
731 spin_lock(&chip->reg_lock); in snd_atiixp_pcm_trigger()
736 dma->ops->enable_transfer(chip, 1); in snd_atiixp_pcm_trigger()
743 dma->ops->enable_transfer(chip, 0); in snd_atiixp_pcm_trigger()
752 snd_atiixp_check_bus_busy(chip); in snd_atiixp_pcm_trigger()
754 dma->ops->flush_dma(chip); in snd_atiixp_pcm_trigger()
755 snd_atiixp_check_bus_busy(chip); in snd_atiixp_pcm_trigger()
758 spin_unlock(&chip->reg_lock); in snd_atiixp_pcm_trigger()
770 static void atiixp_out_flush_dma(struct atiixp *chip) in atiixp_out_flush_dma() argument
772 atiixp_write(chip, FIFO_FLUSH, ATI_REG_FIFO_OUT_FLUSH); in atiixp_out_flush_dma()
776 static void atiixp_out_enable_dma(struct atiixp *chip, int on) in atiixp_out_enable_dma() argument
779 data = atiixp_read(chip, CMD); in atiixp_out_enable_dma()
783 atiixp_out_flush_dma(chip); in atiixp_out_enable_dma()
787 atiixp_write(chip, CMD, data); in atiixp_out_enable_dma()
791 static void atiixp_out_enable_transfer(struct atiixp *chip, int on) in atiixp_out_enable_transfer() argument
793 atiixp_update(chip, CMD, ATI_REG_CMD_SEND_EN, in atiixp_out_enable_transfer()
798 static void atiixp_in_enable_dma(struct atiixp *chip, int on) in atiixp_in_enable_dma() argument
800 atiixp_update(chip, CMD, ATI_REG_CMD_IN_DMA_EN, in atiixp_in_enable_dma()
805 static void atiixp_in_enable_transfer(struct atiixp *chip, int on) in atiixp_in_enable_transfer() argument
808 unsigned int data = atiixp_read(chip, CMD); in atiixp_in_enable_transfer()
813 while ((atiixp_read(chip, COUNTER) & in atiixp_in_enable_transfer()
817 atiixp_write(chip, CMD, data); in atiixp_in_enable_transfer()
820 atiixp_update(chip, CMD, ATI_REG_CMD_RECEIVE_EN, 0); in atiixp_in_enable_transfer()
824 static void atiixp_in_flush_dma(struct atiixp *chip) in atiixp_in_flush_dma() argument
826 atiixp_write(chip, FIFO_FLUSH, ATI_REG_FIFO_IN_FLUSH); in atiixp_in_flush_dma()
830 static void atiixp_spdif_enable_dma(struct atiixp *chip, int on) in atiixp_spdif_enable_dma() argument
832 atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_DMA_EN, in atiixp_spdif_enable_dma()
837 static void atiixp_spdif_enable_transfer(struct atiixp *chip, int on) in atiixp_spdif_enable_transfer() argument
840 data = atiixp_read(chip, CMD); in atiixp_spdif_enable_transfer()
845 atiixp_write(chip, CMD, data); in atiixp_spdif_enable_transfer()
849 static void atiixp_spdif_flush_dma(struct atiixp *chip) in atiixp_spdif_flush_dma() argument
854 atiixp_spdif_enable_dma(chip, 0); in atiixp_spdif_flush_dma()
855 atiixp_spdif_enable_transfer(chip, 1); in atiixp_spdif_flush_dma()
859 if (! (atiixp_read(chip, SPDF_DMA_DT_SIZE) & ATI_REG_DMA_FIFO_USED)) in atiixp_spdif_flush_dma()
864 atiixp_spdif_enable_transfer(chip, 0); in atiixp_spdif_flush_dma()
870 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_spdif_prepare() local
872 spin_lock_irq(&chip->reg_lock); in snd_atiixp_spdif_prepare()
873 if (chip->spdif_over_aclink) { in snd_atiixp_spdif_prepare()
876 atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_CONFIG_MASK, in snd_atiixp_spdif_prepare()
878 data = atiixp_read(chip, OUT_DMA_SLOT) & ~ATI_REG_OUT_DMA_SLOT_MASK; in snd_atiixp_spdif_prepare()
882 atiixp_write(chip, OUT_DMA_SLOT, data); in snd_atiixp_spdif_prepare()
883 atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_OUT, in snd_atiixp_spdif_prepare()
887 atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_CONFIG_MASK, 0); in snd_atiixp_spdif_prepare()
888 atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_SPDF, 0); in snd_atiixp_spdif_prepare()
890 spin_unlock_irq(&chip->reg_lock); in snd_atiixp_spdif_prepare()
897 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_playback_prepare() local
900 spin_lock_irq(&chip->reg_lock); in snd_atiixp_playback_prepare()
901 data = atiixp_read(chip, OUT_DMA_SLOT) & ~ATI_REG_OUT_DMA_SLOT_MASK; in snd_atiixp_playback_prepare()
923 atiixp_write(chip, OUT_DMA_SLOT, data); in snd_atiixp_playback_prepare()
925 atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_OUT, in snd_atiixp_playback_prepare()
932 atiixp_update(chip, 6CH_REORDER, ATI_REG_6CH_REORDER_EN, in snd_atiixp_playback_prepare()
935 spin_unlock_irq(&chip->reg_lock); in snd_atiixp_playback_prepare()
942 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_capture_prepare() local
944 spin_lock_irq(&chip->reg_lock); in snd_atiixp_capture_prepare()
945 atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_IN, in snd_atiixp_capture_prepare()
948 spin_unlock_irq(&chip->reg_lock); in snd_atiixp_capture_prepare()
958 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_hw_params() local
968 err = atiixp_build_dma_packets(chip, dma, substream, in snd_atiixp_pcm_hw_params()
975 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type]; in snd_atiixp_pcm_hw_params()
995 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_hw_free() local
999 struct ac97_pcm *pcm = chip->pcms[dma->ac97_pcm_type]; in snd_atiixp_pcm_hw_free()
1003 atiixp_clear_dma_packets(chip, dma, substream); in snd_atiixp_pcm_hw_free()
1035 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_open() local
1048 runtime->hw.rates = chip->pcms[pcm_type]->rates; in snd_atiixp_pcm_open()
1059 spin_lock_irq(&chip->reg_lock); in snd_atiixp_pcm_open()
1060 dma->ops->enable_dma(chip, 1); in snd_atiixp_pcm_open()
1061 spin_unlock_irq(&chip->reg_lock); in snd_atiixp_pcm_open()
1070 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_pcm_close() local
1074 spin_lock_irq(&chip->reg_lock); in snd_atiixp_pcm_close()
1075 dma->ops->enable_dma(chip, 0); in snd_atiixp_pcm_close()
1076 spin_unlock_irq(&chip->reg_lock); in snd_atiixp_pcm_close()
1086 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_playback_open() local
1089 mutex_lock(&chip->open_mutex); in snd_atiixp_playback_open()
1090 err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK], 0); in snd_atiixp_playback_open()
1091 mutex_unlock(&chip->open_mutex); in snd_atiixp_playback_open()
1094 substream->runtime->hw.channels_max = chip->max_channels; in snd_atiixp_playback_open()
1095 if (chip->max_channels > 2) in snd_atiixp_playback_open()
1104 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_playback_close() local
1106 mutex_lock(&chip->open_mutex); in snd_atiixp_playback_close()
1107 err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]); in snd_atiixp_playback_close()
1108 mutex_unlock(&chip->open_mutex); in snd_atiixp_playback_close()
1114 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_capture_open() local
1115 return snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_CAPTURE], 1); in snd_atiixp_capture_open()
1120 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_capture_close() local
1121 return snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_CAPTURE]); in snd_atiixp_capture_close()
1126 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_spdif_open() local
1128 mutex_lock(&chip->open_mutex); in snd_atiixp_spdif_open()
1129 if (chip->spdif_over_aclink) /* share DMA_PLAYBACK */ in snd_atiixp_spdif_open()
1130 err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK], 2); in snd_atiixp_spdif_open()
1132 err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_SPDIF], -1); in snd_atiixp_spdif_open()
1133 mutex_unlock(&chip->open_mutex); in snd_atiixp_spdif_open()
1139 struct atiixp *chip = snd_pcm_substream_chip(substream); in snd_atiixp_spdif_close() local
1141 mutex_lock(&chip->open_mutex); in snd_atiixp_spdif_close()
1142 if (chip->spdif_over_aclink) in snd_atiixp_spdif_close()
1143 err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]); in snd_atiixp_spdif_close()
1145 err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_SPDIF]); in snd_atiixp_spdif_close()
1146 mutex_unlock(&chip->open_mutex); in snd_atiixp_spdif_close()
1250 static int snd_atiixp_pcm_new(struct atiixp *chip) in snd_atiixp_pcm_new() argument
1254 struct snd_ac97_bus *pbus = chip->ac97_bus; in snd_atiixp_pcm_new()
1258 chip->dmas[ATI_DMA_PLAYBACK].ops = &snd_atiixp_playback_dma_ops; in snd_atiixp_pcm_new()
1259 chip->dmas[ATI_DMA_CAPTURE].ops = &snd_atiixp_capture_dma_ops; in snd_atiixp_pcm_new()
1260 if (! chip->spdif_over_aclink) in snd_atiixp_pcm_new()
1261 chip->dmas[ATI_DMA_SPDIF].ops = &snd_atiixp_spdif_dma_ops; in snd_atiixp_pcm_new()
1264 if (chip->spdif_over_aclink) in snd_atiixp_pcm_new()
1272 chip->pcms[i] = &pbus->pcms[i]; in snd_atiixp_pcm_new()
1274 chip->max_channels = 2; in snd_atiixp_pcm_new()
1277 chip->max_channels = 6; in snd_atiixp_pcm_new()
1279 chip->max_channels = 4; in snd_atiixp_pcm_new()
1283 err = snd_pcm_new(chip->card, "ATI IXP AC97", in snd_atiixp_pcm_new()
1289 pcm->private_data = chip; in snd_atiixp_pcm_new()
1291 chip->pcmdevs[ATI_PCMDEV_ANALOG] = pcm; in snd_atiixp_pcm_new()
1294 snd_dma_pci_data(chip->pci), in snd_atiixp_pcm_new()
1298 snd_pcm_alt_chmaps, chip->max_channels, 0, in snd_atiixp_pcm_new()
1303 chip->ac97[0]->chmaps[SNDRV_PCM_STREAM_PLAYBACK] = chmap; in snd_atiixp_pcm_new()
1306 if (chip->pcms[ATI_PCM_SPDIF] && ! chip->pcms[ATI_PCM_SPDIF]->rates) in snd_atiixp_pcm_new()
1310 if (chip->pcms[ATI_PCM_SPDIF]) in snd_atiixp_pcm_new()
1311 chip->pcms[ATI_PCM_SPDIF]->rates = SNDRV_PCM_RATE_48000; in snd_atiixp_pcm_new()
1314 err = snd_pcm_new(chip->card, "ATI IXP IEC958", in snd_atiixp_pcm_new()
1319 pcm->private_data = chip; in snd_atiixp_pcm_new()
1320 if (chip->spdif_over_aclink) in snd_atiixp_pcm_new()
1324 chip->pcmdevs[ATI_PCMDEV_DIGITAL] = pcm; in snd_atiixp_pcm_new()
1327 snd_dma_pci_data(chip->pci), in snd_atiixp_pcm_new()
1332 if (chip->ac97[i]) in snd_atiixp_pcm_new()
1333 snd_ac97_update_bits(chip->ac97[i], in snd_atiixp_pcm_new()
1348 struct atiixp *chip = dev_id; in snd_atiixp_interrupt() local
1351 status = atiixp_read(chip, ISR); in snd_atiixp_interrupt()
1358 snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_PLAYBACK]); in snd_atiixp_interrupt()
1360 snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_PLAYBACK]); in snd_atiixp_interrupt()
1362 snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_CAPTURE]); in snd_atiixp_interrupt()
1364 snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_CAPTURE]); in snd_atiixp_interrupt()
1365 if (! chip->spdif_over_aclink) { in snd_atiixp_interrupt()
1367 snd_atiixp_xrun_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); in snd_atiixp_interrupt()
1369 snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_SPDIF]); in snd_atiixp_interrupt()
1376 spin_lock(&chip->reg_lock); in snd_atiixp_interrupt()
1377 chip->codec_not_ready_bits |= detected; in snd_atiixp_interrupt()
1378 atiixp_update(chip, IER, detected, 0); /* disable the detected irqs */ in snd_atiixp_interrupt()
1379 spin_unlock(&chip->reg_lock); in snd_atiixp_interrupt()
1383 atiixp_write(chip, ISR, status); in snd_atiixp_interrupt()
1415 static int snd_atiixp_mixer_new(struct atiixp *chip, int clock, in snd_atiixp_mixer_new() argument
1432 if (snd_atiixp_codec_detect(chip) < 0) in snd_atiixp_mixer_new()
1435 if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0) in snd_atiixp_mixer_new()
1438 chip->ac97_bus = pbus; in snd_atiixp_mixer_new()
1442 if (chip->codec_not_ready_bits & codec_skip[i]) in snd_atiixp_mixer_new()
1445 ac97.private_data = chip; in snd_atiixp_mixer_new()
1446 ac97.pci = chip->pci; in snd_atiixp_mixer_new()
1449 if (! chip->spdif_over_aclink) in snd_atiixp_mixer_new()
1451 if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) { in snd_atiixp_mixer_new()
1452 chip->ac97[i] = NULL; /* to be sure */ in snd_atiixp_mixer_new()
1453 dev_dbg(chip->card->dev, in snd_atiixp_mixer_new()
1461 dev_err(chip->card->dev, "no codec available\n"); in snd_atiixp_mixer_new()
1465 snd_ac97_tune_hardware(chip->ac97[0], ac97_quirks, quirk_override); in snd_atiixp_mixer_new()
1478 struct atiixp *chip = card->private_data; in snd_atiixp_suspend() local
1483 if (chip->pcmdevs[i]) { in snd_atiixp_suspend()
1484 struct atiixp_dma *dma = &chip->dmas[i]; in snd_atiixp_suspend()
1486 dma->saved_curptr = readl(chip->remap_addr + in snd_atiixp_suspend()
1488 snd_pcm_suspend_all(chip->pcmdevs[i]); in snd_atiixp_suspend()
1491 snd_ac97_suspend(chip->ac97[i]); in snd_atiixp_suspend()
1492 snd_atiixp_aclink_down(chip); in snd_atiixp_suspend()
1493 snd_atiixp_chip_stop(chip); in snd_atiixp_suspend()
1500 struct atiixp *chip = card->private_data; in snd_atiixp_resume() local
1503 snd_atiixp_aclink_reset(chip); in snd_atiixp_resume()
1504 snd_atiixp_chip_start(chip); in snd_atiixp_resume()
1507 snd_ac97_resume(chip->ac97[i]); in snd_atiixp_resume()
1510 if (chip->pcmdevs[i]) { in snd_atiixp_resume()
1511 struct atiixp_dma *dma = &chip->dmas[i]; in snd_atiixp_resume()
1513 dma->ops->enable_dma(chip, 1); in snd_atiixp_resume()
1516 chip->remap_addr + dma->ops->llp_offset); in snd_atiixp_resume()
1517 writel(dma->saved_curptr, chip->remap_addr + in snd_atiixp_resume()
1541 struct atiixp *chip = entry->private_data; in snd_atiixp_proc_read() local
1545 snd_iprintf(buffer, "%02x: %08x\n", i, readl(chip->remap_addr + i)); in snd_atiixp_proc_read()
1548 static void snd_atiixp_proc_init(struct atiixp *chip) in snd_atiixp_proc_init() argument
1552 if (! snd_card_proc_new(chip->card, "atiixp", &entry)) in snd_atiixp_proc_init()
1553 snd_info_set_text_ops(entry, chip, snd_atiixp_proc_read); in snd_atiixp_proc_init()
1556 #define snd_atiixp_proc_init(chip) argument
1564 static int snd_atiixp_free(struct atiixp *chip) in snd_atiixp_free() argument
1566 if (chip->irq < 0) in snd_atiixp_free()
1568 snd_atiixp_chip_stop(chip); in snd_atiixp_free()
1571 if (chip->irq >= 0) in snd_atiixp_free()
1572 free_irq(chip->irq, chip); in snd_atiixp_free()
1573 iounmap(chip->remap_addr); in snd_atiixp_free()
1574 pci_release_regions(chip->pci); in snd_atiixp_free()
1575 pci_disable_device(chip->pci); in snd_atiixp_free()
1576 kfree(chip); in snd_atiixp_free()
1582 struct atiixp *chip = device->device_data; in snd_atiixp_dev_free() local
1583 return snd_atiixp_free(chip); in snd_atiixp_dev_free()
1596 struct atiixp *chip; in snd_atiixp_create() local
1602 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_atiixp_create()
1603 if (chip == NULL) { in snd_atiixp_create()
1608 spin_lock_init(&chip->reg_lock); in snd_atiixp_create()
1609 mutex_init(&chip->open_mutex); in snd_atiixp_create()
1610 chip->card = card; in snd_atiixp_create()
1611 chip->pci = pci; in snd_atiixp_create()
1612 chip->irq = -1; in snd_atiixp_create()
1615 kfree(chip); in snd_atiixp_create()
1618 chip->addr = pci_resource_start(pci, 0); in snd_atiixp_create()
1619 chip->remap_addr = pci_ioremap_bar(pci, 0); in snd_atiixp_create()
1620 if (chip->remap_addr == NULL) { in snd_atiixp_create()
1622 snd_atiixp_free(chip); in snd_atiixp_create()
1627 KBUILD_MODNAME, chip)) { in snd_atiixp_create()
1629 snd_atiixp_free(chip); in snd_atiixp_create()
1632 chip->irq = pci->irq; in snd_atiixp_create()
1634 synchronize_irq(chip->irq); in snd_atiixp_create()
1636 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_atiixp_create()
1637 snd_atiixp_free(chip); in snd_atiixp_create()
1641 *r_chip = chip; in snd_atiixp_create()
1650 struct atiixp *chip; in snd_atiixp_probe() local
1659 if ((err = snd_atiixp_create(card, pci, &chip)) < 0) in snd_atiixp_probe()
1661 card->private_data = chip; in snd_atiixp_probe()
1663 if ((err = snd_atiixp_aclink_reset(chip)) < 0) in snd_atiixp_probe()
1666 chip->spdif_over_aclink = spdif_aclink; in snd_atiixp_probe()
1668 if ((err = snd_atiixp_mixer_new(chip, ac97_clock, ac97_quirk)) < 0) in snd_atiixp_probe()
1671 if ((err = snd_atiixp_pcm_new(chip)) < 0) in snd_atiixp_probe()
1674 snd_atiixp_proc_init(chip); in snd_atiixp_probe()
1676 snd_atiixp_chip_start(chip); in snd_atiixp_probe()
1681 chip->ac97[0] ? snd_ac97_get_short_name(chip->ac97[0]) : "?", in snd_atiixp_probe()
1682 chip->addr, chip->irq); in snd_atiixp_probe()