Lines Matching refs:chip
98 ad1889_readw(struct snd_ad1889 *chip, unsigned reg) in ad1889_readw() argument
100 return readw(chip->iobase + reg); in ad1889_readw()
104 ad1889_writew(struct snd_ad1889 *chip, unsigned reg, u16 val) in ad1889_writew() argument
106 writew(val, chip->iobase + reg); in ad1889_writew()
110 ad1889_readl(struct snd_ad1889 *chip, unsigned reg) in ad1889_readl() argument
112 return readl(chip->iobase + reg); in ad1889_readl()
116 ad1889_writel(struct snd_ad1889 *chip, unsigned reg, u32 val) in ad1889_writel() argument
118 writel(val, chip->iobase + reg); in ad1889_writel()
122 ad1889_unmute(struct snd_ad1889 *chip) in ad1889_unmute() argument
125 st = ad1889_readw(chip, AD_DS_WADA) & in ad1889_unmute()
127 ad1889_writew(chip, AD_DS_WADA, st); in ad1889_unmute()
128 ad1889_readw(chip, AD_DS_WADA); in ad1889_unmute()
132 ad1889_mute(struct snd_ad1889 *chip) in ad1889_mute() argument
135 st = ad1889_readw(chip, AD_DS_WADA) | AD_DS_WADA_RWAM | AD_DS_WADA_LWAM; in ad1889_mute()
136 ad1889_writew(chip, AD_DS_WADA, st); in ad1889_mute()
137 ad1889_readw(chip, AD_DS_WADA); in ad1889_mute()
141 ad1889_load_adc_buffer_address(struct snd_ad1889 *chip, u32 address) in ad1889_load_adc_buffer_address() argument
143 ad1889_writel(chip, AD_DMA_ADCBA, address); in ad1889_load_adc_buffer_address()
144 ad1889_writel(chip, AD_DMA_ADCCA, address); in ad1889_load_adc_buffer_address()
148 ad1889_load_adc_buffer_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_adc_buffer_count() argument
150 ad1889_writel(chip, AD_DMA_ADCBC, count); in ad1889_load_adc_buffer_count()
151 ad1889_writel(chip, AD_DMA_ADCCC, count); in ad1889_load_adc_buffer_count()
155 ad1889_load_adc_interrupt_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_adc_interrupt_count() argument
157 ad1889_writel(chip, AD_DMA_ADCIB, count); in ad1889_load_adc_interrupt_count()
158 ad1889_writel(chip, AD_DMA_ADCIC, count); in ad1889_load_adc_interrupt_count()
162 ad1889_load_wave_buffer_address(struct snd_ad1889 *chip, u32 address) in ad1889_load_wave_buffer_address() argument
164 ad1889_writel(chip, AD_DMA_WAVBA, address); in ad1889_load_wave_buffer_address()
165 ad1889_writel(chip, AD_DMA_WAVCA, address); in ad1889_load_wave_buffer_address()
169 ad1889_load_wave_buffer_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_wave_buffer_count() argument
171 ad1889_writel(chip, AD_DMA_WAVBC, count); in ad1889_load_wave_buffer_count()
172 ad1889_writel(chip, AD_DMA_WAVCC, count); in ad1889_load_wave_buffer_count()
176 ad1889_load_wave_interrupt_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_wave_interrupt_count() argument
178 ad1889_writel(chip, AD_DMA_WAVIB, count); in ad1889_load_wave_interrupt_count()
179 ad1889_writel(chip, AD_DMA_WAVIC, count); in ad1889_load_wave_interrupt_count()
183 ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel) in ad1889_channel_reset() argument
189 reg = ad1889_readw(chip, AD_DS_WSMC) & ~AD_DS_WSMC_WAEN; in ad1889_channel_reset()
190 ad1889_writew(chip, AD_DS_WSMC, reg); in ad1889_channel_reset()
191 chip->wave.reg = reg; in ad1889_channel_reset()
194 reg = ad1889_readw(chip, AD_DMA_WAV); in ad1889_channel_reset()
197 ad1889_writew(chip, AD_DMA_WAV, reg); in ad1889_channel_reset()
200 ad1889_load_wave_buffer_address(chip, 0x0); in ad1889_channel_reset()
201 ad1889_load_wave_buffer_count(chip, 0x0); in ad1889_channel_reset()
202 ad1889_load_wave_interrupt_count(chip, 0x0); in ad1889_channel_reset()
205 ad1889_readw(chip, AD_DMA_WAV); in ad1889_channel_reset()
210 reg = ad1889_readw(chip, AD_DS_RAMC) & ~AD_DS_RAMC_ADEN; in ad1889_channel_reset()
211 ad1889_writew(chip, AD_DS_RAMC, reg); in ad1889_channel_reset()
212 chip->ramc.reg = reg; in ad1889_channel_reset()
214 reg = ad1889_readw(chip, AD_DMA_ADC); in ad1889_channel_reset()
217 ad1889_writew(chip, AD_DMA_ADC, reg); in ad1889_channel_reset()
219 ad1889_load_adc_buffer_address(chip, 0x0); in ad1889_channel_reset()
220 ad1889_load_adc_buffer_count(chip, 0x0); in ad1889_channel_reset()
221 ad1889_load_adc_interrupt_count(chip, 0x0); in ad1889_channel_reset()
224 ad1889_readw(chip, AD_DMA_ADC); in ad1889_channel_reset()
231 struct snd_ad1889 *chip = ac97->private_data; in snd_ad1889_ac97_read() local
232 return ad1889_readw(chip, AD_AC97_BASE + reg); in snd_ad1889_ac97_read()
238 struct snd_ad1889 *chip = ac97->private_data; in snd_ad1889_ac97_write() local
239 ad1889_writew(chip, AD_AC97_BASE + reg, val); in snd_ad1889_ac97_write()
243 snd_ad1889_ac97_ready(struct snd_ad1889 *chip) in snd_ad1889_ac97_ready() argument
247 while (!(ad1889_readw(chip, AD_AC97_ACIC) & AD_AC97_ACIC_ACRDY) in snd_ad1889_ac97_ready()
251 dev_err(chip->card->dev, "[%s] Link is not ready.\n", in snd_ad1889_ac97_ready()
255 dev_dbg(chip->card->dev, "[%s] ready after %d ms\n", __func__, 400 - retry); in snd_ad1889_ac97_ready()
297 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_open() local
300 chip->psubs = ss; in snd_ad1889_playback_open()
309 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_open() local
312 chip->csubs = ss; in snd_ad1889_capture_open()
321 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_close() local
322 chip->psubs = NULL; in snd_ad1889_playback_close()
329 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_close() local
330 chip->csubs = NULL; in snd_ad1889_capture_close()
337 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_prepare() local
343 ad1889_channel_reset(chip, AD_CHAN_WAV); in snd_ad1889_playback_prepare()
345 reg = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_prepare()
357 spin_lock_irq(&chip->lock); in snd_ad1889_playback_prepare()
359 chip->wave.size = size; in snd_ad1889_playback_prepare()
360 chip->wave.reg = reg; in snd_ad1889_playback_prepare()
361 chip->wave.addr = rt->dma_addr; in snd_ad1889_playback_prepare()
363 ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg); in snd_ad1889_playback_prepare()
366 ad1889_writew(chip, AD_DS_WAS, rt->rate); in snd_ad1889_playback_prepare()
369 ad1889_load_wave_buffer_address(chip, chip->wave.addr); in snd_ad1889_playback_prepare()
370 ad1889_load_wave_buffer_count(chip, size); in snd_ad1889_playback_prepare()
371 ad1889_load_wave_interrupt_count(chip, count); in snd_ad1889_playback_prepare()
374 ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_prepare()
376 spin_unlock_irq(&chip->lock); in snd_ad1889_playback_prepare()
378 dev_dbg(chip->card->dev, in snd_ad1889_playback_prepare()
380 chip->wave.addr, count, size, reg, rt->rate); in snd_ad1889_playback_prepare()
387 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_prepare() local
393 ad1889_channel_reset(chip, AD_CHAN_ADC); in snd_ad1889_capture_prepare()
395 reg = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_prepare()
407 spin_lock_irq(&chip->lock); in snd_ad1889_capture_prepare()
409 chip->ramc.size = size; in snd_ad1889_capture_prepare()
410 chip->ramc.reg = reg; in snd_ad1889_capture_prepare()
411 chip->ramc.addr = rt->dma_addr; in snd_ad1889_capture_prepare()
413 ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg); in snd_ad1889_capture_prepare()
416 ad1889_load_adc_buffer_address(chip, chip->ramc.addr); in snd_ad1889_capture_prepare()
417 ad1889_load_adc_buffer_count(chip, size); in snd_ad1889_capture_prepare()
418 ad1889_load_adc_interrupt_count(chip, count); in snd_ad1889_capture_prepare()
421 ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_prepare()
423 spin_unlock_irq(&chip->lock); in snd_ad1889_capture_prepare()
425 dev_dbg(chip->card->dev, in snd_ad1889_capture_prepare()
427 chip->ramc.addr, count, size, reg, rt->rate); in snd_ad1889_capture_prepare()
439 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_trigger() local
441 wsmc = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_trigger()
446 ad1889_writew(chip, AD_DMA_WAV, AD_DMA_LOOP | AD_DMA_IM_CNT); in snd_ad1889_playback_trigger()
449 ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_WAVS); in snd_ad1889_playback_trigger()
450 ad1889_unmute(chip); in snd_ad1889_playback_trigger()
453 ad1889_mute(chip); in snd_ad1889_playback_trigger()
461 chip->wave.reg = wsmc; in snd_ad1889_playback_trigger()
462 ad1889_writew(chip, AD_DS_WSMC, wsmc); in snd_ad1889_playback_trigger()
463 ad1889_readw(chip, AD_DS_WSMC); /* flush */ in snd_ad1889_playback_trigger()
467 ad1889_channel_reset(chip, AD_CHAN_WAV); in snd_ad1889_playback_trigger()
480 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_trigger() local
482 ramc = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_trigger()
487 ad1889_writew(chip, AD_DMA_ADC, AD_DMA_LOOP | AD_DMA_IM_CNT); in snd_ad1889_capture_trigger()
490 ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_ADCS); in snd_ad1889_capture_trigger()
499 chip->ramc.reg = ramc; in snd_ad1889_capture_trigger()
500 ad1889_writew(chip, AD_DS_RAMC, ramc); in snd_ad1889_capture_trigger()
501 ad1889_readw(chip, AD_DS_RAMC); /* flush */ in snd_ad1889_capture_trigger()
505 ad1889_channel_reset(chip, AD_CHAN_ADC); in snd_ad1889_capture_trigger()
515 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_pointer() local
517 if (unlikely(!(chip->wave.reg & AD_DS_WSMC_WAEN))) in snd_ad1889_playback_pointer()
520 ptr = ad1889_readl(chip, AD_DMA_WAVCA); in snd_ad1889_playback_pointer()
521 ptr -= chip->wave.addr; in snd_ad1889_playback_pointer()
523 if (snd_BUG_ON(ptr >= chip->wave.size)) in snd_ad1889_playback_pointer()
534 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_pointer() local
536 if (unlikely(!(chip->ramc.reg & AD_DS_RAMC_ADEN))) in snd_ad1889_capture_pointer()
539 ptr = ad1889_readl(chip, AD_DMA_ADCCA); in snd_ad1889_capture_pointer()
540 ptr -= chip->ramc.addr; in snd_ad1889_capture_pointer()
542 if (snd_BUG_ON(ptr >= chip->ramc.size)) in snd_ad1889_capture_pointer()
568 struct snd_ad1889 *chip = dev_id; in snd_ad1889_interrupt() local
570 st = ad1889_readl(chip, AD_DMA_DISR); in snd_ad1889_interrupt()
573 ad1889_writel(chip, AD_DMA_DISR, st); in snd_ad1889_interrupt()
581 dev_dbg(chip->card->dev, in snd_ad1889_interrupt()
584 if ((st & AD_DMA_DISR_WAVI) && chip->psubs) in snd_ad1889_interrupt()
585 snd_pcm_period_elapsed(chip->psubs); in snd_ad1889_interrupt()
586 if ((st & AD_DMA_DISR_ADCI) && chip->csubs) in snd_ad1889_interrupt()
587 snd_pcm_period_elapsed(chip->csubs); in snd_ad1889_interrupt()
593 snd_ad1889_pcm_init(struct snd_ad1889 *chip, int device) in snd_ad1889_pcm_init() argument
598 err = snd_pcm_new(chip->card, chip->card->driver, device, 1, 1, &pcm); in snd_ad1889_pcm_init()
607 pcm->private_data = chip; in snd_ad1889_pcm_init()
609 strcpy(pcm->name, chip->card->shortname); in snd_ad1889_pcm_init()
611 chip->pcm = pcm; in snd_ad1889_pcm_init()
612 chip->psubs = NULL; in snd_ad1889_pcm_init()
613 chip->csubs = NULL; in snd_ad1889_pcm_init()
615 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &chip->pci->dev, in snd_ad1889_pcm_init()
624 struct snd_ad1889 *chip = entry->private_data; in snd_ad1889_proc_read() local
628 reg = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_proc_read()
656 reg = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_proc_read()
687 reg = ad1889_readw(chip, AD_DS_WADA); in snd_ad1889_proc_read()
691 reg = ad1889_readw(chip, AD_DS_WADA); in snd_ad1889_proc_read()
696 reg = ad1889_readw(chip, AD_DS_WAS); in snd_ad1889_proc_read()
698 reg = ad1889_readw(chip, AD_DS_RES); in snd_ad1889_proc_read()
703 snd_ad1889_proc_init(struct snd_ad1889 *chip) in snd_ad1889_proc_init() argument
705 snd_card_ro_proc_new(chip->card, chip->card->driver, in snd_ad1889_proc_init()
706 chip, snd_ad1889_proc_read); in snd_ad1889_proc_init()
721 snd_ad1889_ac97_xinit(struct snd_ad1889 *chip) in snd_ad1889_ac97_xinit() argument
725 reg = ad1889_readw(chip, AD_AC97_ACIC); in snd_ad1889_ac97_xinit()
727 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
728 ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */ in snd_ad1889_ac97_xinit()
732 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
734 snd_ad1889_ac97_ready(chip); in snd_ad1889_ac97_xinit()
737 reg = ad1889_readw(chip, AD_AC97_ACIC); in snd_ad1889_ac97_xinit()
739 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
740 ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */ in snd_ad1889_ac97_xinit()
747 struct snd_ad1889 *chip = bus->private_data; in snd_ad1889_ac97_bus_free() local
748 chip->ac97_bus = NULL; in snd_ad1889_ac97_bus_free()
754 struct snd_ad1889 *chip = ac97->private_data; in snd_ad1889_ac97_free() local
755 chip->ac97 = NULL; in snd_ad1889_ac97_free()
759 snd_ad1889_ac97_init(struct snd_ad1889 *chip, const char *quirk_override) in snd_ad1889_ac97_init() argument
769 snd_ad1889_ac97_xinit(chip); in snd_ad1889_ac97_init()
771 err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus); in snd_ad1889_ac97_init()
775 chip->ac97_bus->private_free = snd_ad1889_ac97_bus_free; in snd_ad1889_ac97_init()
778 ac97.private_data = chip; in snd_ad1889_ac97_init()
780 ac97.pci = chip->pci; in snd_ad1889_ac97_init()
782 err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97); in snd_ad1889_ac97_init()
786 snd_ac97_tune_hardware(chip->ac97, ac97_quirks, quirk_override); in snd_ad1889_ac97_init()
792 snd_ad1889_free(struct snd_ad1889 *chip) in snd_ad1889_free() argument
794 if (chip->irq < 0) in snd_ad1889_free()
797 spin_lock_irq(&chip->lock); in snd_ad1889_free()
799 ad1889_mute(chip); in snd_ad1889_free()
802 ad1889_channel_reset(chip, AD_CHAN_WAV | AD_CHAN_ADC); in snd_ad1889_free()
805 ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PTAI | AD_DMA_DISR_PMAI); in snd_ad1889_free()
806 ad1889_readl(chip, AD_DMA_DISR); /* flush, dammit! */ in snd_ad1889_free()
808 spin_unlock_irq(&chip->lock); in snd_ad1889_free()
810 if (chip->irq >= 0) in snd_ad1889_free()
811 free_irq(chip->irq, chip); in snd_ad1889_free()
814 iounmap(chip->iobase); in snd_ad1889_free()
815 pci_release_regions(chip->pci); in snd_ad1889_free()
816 pci_disable_device(chip->pci); in snd_ad1889_free()
817 kfree(chip); in snd_ad1889_free()
824 struct snd_ad1889 *chip = device->device_data; in snd_ad1889_dev_free() local
825 return snd_ad1889_free(chip); in snd_ad1889_dev_free()
829 snd_ad1889_init(struct snd_ad1889 *chip) in snd_ad1889_init() argument
831 ad1889_writew(chip, AD_DS_CCS, AD_DS_CCS_CLKEN); /* turn on clock */ in snd_ad1889_init()
832 ad1889_readw(chip, AD_DS_CCS); /* flush posted write */ in snd_ad1889_init()
837 ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PMAE | AD_DMA_DISR_PTAE); in snd_ad1889_init()
849 struct snd_ad1889 *chip; in snd_ad1889_create() local
868 if ((chip = kzalloc(sizeof(*chip), GFP_KERNEL)) == NULL) { in snd_ad1889_create()
873 chip->card = card; in snd_ad1889_create()
874 card->private_data = chip; in snd_ad1889_create()
875 chip->pci = pci; in snd_ad1889_create()
876 chip->irq = -1; in snd_ad1889_create()
882 chip->bar = pci_resource_start(pci, 0); in snd_ad1889_create()
883 chip->iobase = pci_ioremap_bar(pci, 0); in snd_ad1889_create()
884 if (chip->iobase == NULL) { in snd_ad1889_create()
892 spin_lock_init(&chip->lock); /* only now can we call ad1889_free */ in snd_ad1889_create()
895 IRQF_SHARED, KBUILD_MODNAME, chip)) { in snd_ad1889_create()
897 snd_ad1889_free(chip); in snd_ad1889_create()
901 chip->irq = pci->irq; in snd_ad1889_create()
902 card->sync_irq = chip->irq; in snd_ad1889_create()
905 if ((err = snd_ad1889_init(chip)) < 0) { in snd_ad1889_create()
906 snd_ad1889_free(chip); in snd_ad1889_create()
910 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { in snd_ad1889_create()
911 snd_ad1889_free(chip); in snd_ad1889_create()
915 *rchip = chip; in snd_ad1889_create()
920 kfree(chip); in snd_ad1889_create()
933 struct snd_ad1889 *chip; in snd_ad1889_probe() local
954 err = snd_ad1889_create(card, pci, &chip); in snd_ad1889_probe()
960 card->shortname, chip->bar, chip->irq); in snd_ad1889_probe()
964 err = snd_ad1889_ac97_init(chip, ac97_quirk[devno]); in snd_ad1889_probe()
968 err = snd_ad1889_pcm_init(chip, 0); in snd_ad1889_probe()
973 snd_ad1889_proc_init(chip); in snd_ad1889_probe()