Lines Matching full:chip
97 ad1889_readw(struct snd_ad1889 *chip, unsigned reg) in ad1889_readw() argument
99 return readw(chip->iobase + reg); in ad1889_readw()
103 ad1889_writew(struct snd_ad1889 *chip, unsigned reg, u16 val) in ad1889_writew() argument
105 writew(val, chip->iobase + reg); in ad1889_writew()
109 ad1889_readl(struct snd_ad1889 *chip, unsigned reg) in ad1889_readl() argument
111 return readl(chip->iobase + reg); in ad1889_readl()
115 ad1889_writel(struct snd_ad1889 *chip, unsigned reg, u32 val) in ad1889_writel() argument
117 writel(val, chip->iobase + reg); in ad1889_writel()
121 ad1889_unmute(struct snd_ad1889 *chip) in ad1889_unmute() argument
124 st = ad1889_readw(chip, AD_DS_WADA) & in ad1889_unmute()
126 ad1889_writew(chip, AD_DS_WADA, st); in ad1889_unmute()
127 ad1889_readw(chip, AD_DS_WADA); in ad1889_unmute()
131 ad1889_mute(struct snd_ad1889 *chip) in ad1889_mute() argument
134 st = ad1889_readw(chip, AD_DS_WADA) | AD_DS_WADA_RWAM | AD_DS_WADA_LWAM; in ad1889_mute()
135 ad1889_writew(chip, AD_DS_WADA, st); in ad1889_mute()
136 ad1889_readw(chip, AD_DS_WADA); in ad1889_mute()
140 ad1889_load_adc_buffer_address(struct snd_ad1889 *chip, u32 address) in ad1889_load_adc_buffer_address() argument
142 ad1889_writel(chip, AD_DMA_ADCBA, address); in ad1889_load_adc_buffer_address()
143 ad1889_writel(chip, AD_DMA_ADCCA, address); in ad1889_load_adc_buffer_address()
147 ad1889_load_adc_buffer_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_adc_buffer_count() argument
149 ad1889_writel(chip, AD_DMA_ADCBC, count); in ad1889_load_adc_buffer_count()
150 ad1889_writel(chip, AD_DMA_ADCCC, count); in ad1889_load_adc_buffer_count()
154 ad1889_load_adc_interrupt_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_adc_interrupt_count() argument
156 ad1889_writel(chip, AD_DMA_ADCIB, count); in ad1889_load_adc_interrupt_count()
157 ad1889_writel(chip, AD_DMA_ADCIC, count); in ad1889_load_adc_interrupt_count()
161 ad1889_load_wave_buffer_address(struct snd_ad1889 *chip, u32 address) in ad1889_load_wave_buffer_address() argument
163 ad1889_writel(chip, AD_DMA_WAVBA, address); in ad1889_load_wave_buffer_address()
164 ad1889_writel(chip, AD_DMA_WAVCA, address); in ad1889_load_wave_buffer_address()
168 ad1889_load_wave_buffer_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_wave_buffer_count() argument
170 ad1889_writel(chip, AD_DMA_WAVBC, count); in ad1889_load_wave_buffer_count()
171 ad1889_writel(chip, AD_DMA_WAVCC, count); in ad1889_load_wave_buffer_count()
175 ad1889_load_wave_interrupt_count(struct snd_ad1889 *chip, u32 count) in ad1889_load_wave_interrupt_count() argument
177 ad1889_writel(chip, AD_DMA_WAVIB, count); in ad1889_load_wave_interrupt_count()
178 ad1889_writel(chip, AD_DMA_WAVIC, count); in ad1889_load_wave_interrupt_count()
182 ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel) in ad1889_channel_reset() argument
188 reg = ad1889_readw(chip, AD_DS_WSMC) & ~AD_DS_WSMC_WAEN; in ad1889_channel_reset()
189 ad1889_writew(chip, AD_DS_WSMC, reg); in ad1889_channel_reset()
190 chip->wave.reg = reg; in ad1889_channel_reset()
193 reg = ad1889_readw(chip, AD_DMA_WAV); in ad1889_channel_reset()
196 ad1889_writew(chip, AD_DMA_WAV, reg); in ad1889_channel_reset()
199 ad1889_load_wave_buffer_address(chip, 0x0); in ad1889_channel_reset()
200 ad1889_load_wave_buffer_count(chip, 0x0); in ad1889_channel_reset()
201 ad1889_load_wave_interrupt_count(chip, 0x0); in ad1889_channel_reset()
204 ad1889_readw(chip, AD_DMA_WAV); in ad1889_channel_reset()
209 reg = ad1889_readw(chip, AD_DS_RAMC) & ~AD_DS_RAMC_ADEN; in ad1889_channel_reset()
210 ad1889_writew(chip, AD_DS_RAMC, reg); in ad1889_channel_reset()
211 chip->ramc.reg = reg; in ad1889_channel_reset()
213 reg = ad1889_readw(chip, AD_DMA_ADC); in ad1889_channel_reset()
216 ad1889_writew(chip, AD_DMA_ADC, reg); in ad1889_channel_reset()
218 ad1889_load_adc_buffer_address(chip, 0x0); in ad1889_channel_reset()
219 ad1889_load_adc_buffer_count(chip, 0x0); in ad1889_channel_reset()
220 ad1889_load_adc_interrupt_count(chip, 0x0); in ad1889_channel_reset()
223 ad1889_readw(chip, AD_DMA_ADC); in ad1889_channel_reset()
230 struct snd_ad1889 *chip = ac97->private_data; in snd_ad1889_ac97_read() local
231 return ad1889_readw(chip, AD_AC97_BASE + reg); in snd_ad1889_ac97_read()
237 struct snd_ad1889 *chip = ac97->private_data; in snd_ad1889_ac97_write() local
238 ad1889_writew(chip, AD_AC97_BASE + reg, val); in snd_ad1889_ac97_write()
242 snd_ad1889_ac97_ready(struct snd_ad1889 *chip) in snd_ad1889_ac97_ready() argument
246 while (!(ad1889_readw(chip, AD_AC97_ACIC) & AD_AC97_ACIC_ACRDY) in snd_ad1889_ac97_ready()
250 dev_err(chip->card->dev, "[%s] Link is not ready.\n", in snd_ad1889_ac97_ready()
254 dev_dbg(chip->card->dev, "[%s] ready after %d ms\n", __func__, 400 - retry); in snd_ad1889_ac97_ready()
296 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_open() local
299 chip->psubs = ss; in snd_ad1889_playback_open()
308 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_open() local
311 chip->csubs = ss; in snd_ad1889_capture_open()
320 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_close() local
321 chip->psubs = NULL; in snd_ad1889_playback_close()
328 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_close() local
329 chip->csubs = NULL; in snd_ad1889_capture_close()
336 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_prepare() local
342 ad1889_channel_reset(chip, AD_CHAN_WAV); in snd_ad1889_playback_prepare()
344 reg = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_prepare()
356 spin_lock_irq(&chip->lock); in snd_ad1889_playback_prepare()
358 chip->wave.size = size; in snd_ad1889_playback_prepare()
359 chip->wave.reg = reg; in snd_ad1889_playback_prepare()
360 chip->wave.addr = rt->dma_addr; in snd_ad1889_playback_prepare()
362 ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg); in snd_ad1889_playback_prepare()
365 ad1889_writew(chip, AD_DS_WAS, rt->rate); in snd_ad1889_playback_prepare()
368 ad1889_load_wave_buffer_address(chip, chip->wave.addr); in snd_ad1889_playback_prepare()
369 ad1889_load_wave_buffer_count(chip, size); in snd_ad1889_playback_prepare()
370 ad1889_load_wave_interrupt_count(chip, count); in snd_ad1889_playback_prepare()
373 ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_prepare()
375 spin_unlock_irq(&chip->lock); in snd_ad1889_playback_prepare()
377 dev_dbg(chip->card->dev, in snd_ad1889_playback_prepare()
379 chip->wave.addr, count, size, reg, rt->rate); in snd_ad1889_playback_prepare()
386 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_prepare() local
392 ad1889_channel_reset(chip, AD_CHAN_ADC); in snd_ad1889_capture_prepare()
394 reg = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_prepare()
406 spin_lock_irq(&chip->lock); in snd_ad1889_capture_prepare()
408 chip->ramc.size = size; in snd_ad1889_capture_prepare()
409 chip->ramc.reg = reg; in snd_ad1889_capture_prepare()
410 chip->ramc.addr = rt->dma_addr; in snd_ad1889_capture_prepare()
412 ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg); in snd_ad1889_capture_prepare()
415 ad1889_load_adc_buffer_address(chip, chip->ramc.addr); in snd_ad1889_capture_prepare()
416 ad1889_load_adc_buffer_count(chip, size); in snd_ad1889_capture_prepare()
417 ad1889_load_adc_interrupt_count(chip, count); in snd_ad1889_capture_prepare()
420 ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_prepare()
422 spin_unlock_irq(&chip->lock); in snd_ad1889_capture_prepare()
424 dev_dbg(chip->card->dev, in snd_ad1889_capture_prepare()
426 chip->ramc.addr, count, size, reg, rt->rate); in snd_ad1889_capture_prepare()
438 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_trigger() local
440 wsmc = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_playback_trigger()
445 ad1889_writew(chip, AD_DMA_WAV, AD_DMA_LOOP | AD_DMA_IM_CNT); in snd_ad1889_playback_trigger()
448 ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_WAVS); in snd_ad1889_playback_trigger()
449 ad1889_unmute(chip); in snd_ad1889_playback_trigger()
452 ad1889_mute(chip); in snd_ad1889_playback_trigger()
460 chip->wave.reg = wsmc; in snd_ad1889_playback_trigger()
461 ad1889_writew(chip, AD_DS_WSMC, wsmc); in snd_ad1889_playback_trigger()
462 ad1889_readw(chip, AD_DS_WSMC); /* flush */ in snd_ad1889_playback_trigger()
464 /* reset the chip when STOP - will disable IRQs */ in snd_ad1889_playback_trigger()
466 ad1889_channel_reset(chip, AD_CHAN_WAV); in snd_ad1889_playback_trigger()
479 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_trigger() local
481 ramc = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_capture_trigger()
486 ad1889_writew(chip, AD_DMA_ADC, AD_DMA_LOOP | AD_DMA_IM_CNT); in snd_ad1889_capture_trigger()
489 ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_ADCS); in snd_ad1889_capture_trigger()
498 chip->ramc.reg = ramc; in snd_ad1889_capture_trigger()
499 ad1889_writew(chip, AD_DS_RAMC, ramc); in snd_ad1889_capture_trigger()
500 ad1889_readw(chip, AD_DS_RAMC); /* flush */ in snd_ad1889_capture_trigger()
502 /* reset the chip when STOP - will disable IRQs */ in snd_ad1889_capture_trigger()
504 ad1889_channel_reset(chip, AD_CHAN_ADC); in snd_ad1889_capture_trigger()
514 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_playback_pointer() local
516 if (unlikely(!(chip->wave.reg & AD_DS_WSMC_WAEN))) in snd_ad1889_playback_pointer()
519 ptr = ad1889_readl(chip, AD_DMA_WAVCA); in snd_ad1889_playback_pointer()
520 ptr -= chip->wave.addr; in snd_ad1889_playback_pointer()
522 if (snd_BUG_ON(ptr >= chip->wave.size)) in snd_ad1889_playback_pointer()
533 struct snd_ad1889 *chip = snd_pcm_substream_chip(ss); in snd_ad1889_capture_pointer() local
535 if (unlikely(!(chip->ramc.reg & AD_DS_RAMC_ADEN))) in snd_ad1889_capture_pointer()
538 ptr = ad1889_readl(chip, AD_DMA_ADCCA); in snd_ad1889_capture_pointer()
539 ptr -= chip->ramc.addr; in snd_ad1889_capture_pointer()
541 if (snd_BUG_ON(ptr >= chip->ramc.size)) in snd_ad1889_capture_pointer()
567 struct snd_ad1889 *chip = dev_id; in snd_ad1889_interrupt() local
569 st = ad1889_readl(chip, AD_DMA_DISR); in snd_ad1889_interrupt()
572 ad1889_writel(chip, AD_DMA_DISR, st); in snd_ad1889_interrupt()
580 dev_dbg(chip->card->dev, in snd_ad1889_interrupt()
583 if ((st & AD_DMA_DISR_WAVI) && chip->psubs) in snd_ad1889_interrupt()
584 snd_pcm_period_elapsed(chip->psubs); in snd_ad1889_interrupt()
585 if ((st & AD_DMA_DISR_ADCI) && chip->csubs) in snd_ad1889_interrupt()
586 snd_pcm_period_elapsed(chip->csubs); in snd_ad1889_interrupt()
592 snd_ad1889_pcm_init(struct snd_ad1889 *chip, int device) in snd_ad1889_pcm_init() argument
597 err = snd_pcm_new(chip->card, chip->card->driver, device, 1, 1, &pcm); in snd_ad1889_pcm_init()
606 pcm->private_data = chip; in snd_ad1889_pcm_init()
608 strcpy(pcm->name, chip->card->shortname); in snd_ad1889_pcm_init()
610 chip->pcm = pcm; in snd_ad1889_pcm_init()
611 chip->psubs = NULL; in snd_ad1889_pcm_init()
612 chip->csubs = NULL; in snd_ad1889_pcm_init()
614 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &chip->pci->dev, in snd_ad1889_pcm_init()
623 struct snd_ad1889 *chip = entry->private_data; in snd_ad1889_proc_read() local
627 reg = ad1889_readw(chip, AD_DS_WSMC); in snd_ad1889_proc_read()
655 reg = ad1889_readw(chip, AD_DS_RAMC); in snd_ad1889_proc_read()
686 reg = ad1889_readw(chip, AD_DS_WADA); in snd_ad1889_proc_read()
690 reg = ad1889_readw(chip, AD_DS_WADA); in snd_ad1889_proc_read()
695 reg = ad1889_readw(chip, AD_DS_WAS); in snd_ad1889_proc_read()
697 reg = ad1889_readw(chip, AD_DS_RES); in snd_ad1889_proc_read()
702 snd_ad1889_proc_init(struct snd_ad1889 *chip) in snd_ad1889_proc_init() argument
704 snd_card_ro_proc_new(chip->card, chip->card->driver, in snd_ad1889_proc_init()
705 chip, snd_ad1889_proc_read); in snd_ad1889_proc_init()
720 snd_ad1889_ac97_xinit(struct snd_ad1889 *chip) in snd_ad1889_ac97_xinit() argument
724 reg = ad1889_readw(chip, AD_AC97_ACIC); in snd_ad1889_ac97_xinit()
726 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
727 ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */ in snd_ad1889_ac97_xinit()
731 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
733 snd_ad1889_ac97_ready(chip); in snd_ad1889_ac97_xinit()
736 reg = ad1889_readw(chip, AD_AC97_ACIC); in snd_ad1889_ac97_xinit()
738 ad1889_writew(chip, AD_AC97_ACIC, reg); in snd_ad1889_ac97_xinit()
739 ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */ in snd_ad1889_ac97_xinit()
744 snd_ad1889_ac97_init(struct snd_ad1889 *chip, const char *quirk_override) in snd_ad1889_ac97_init() argument
754 snd_ad1889_ac97_xinit(chip); in snd_ad1889_ac97_init()
756 err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus); in snd_ad1889_ac97_init()
761 ac97.private_data = chip; in snd_ad1889_ac97_init()
762 ac97.pci = chip->pci; in snd_ad1889_ac97_init()
764 err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97); in snd_ad1889_ac97_init()
768 snd_ac97_tune_hardware(chip->ac97, ac97_quirks, quirk_override); in snd_ad1889_ac97_init()
776 struct snd_ad1889 *chip = card->private_data; in snd_ad1889_free() local
778 spin_lock_irq(&chip->lock); in snd_ad1889_free()
780 ad1889_mute(chip); in snd_ad1889_free()
783 ad1889_channel_reset(chip, AD_CHAN_WAV | AD_CHAN_ADC); in snd_ad1889_free()
786 ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PTAI | AD_DMA_DISR_PMAI); in snd_ad1889_free()
787 ad1889_readl(chip, AD_DMA_DISR); /* flush, dammit! */ in snd_ad1889_free()
789 spin_unlock_irq(&chip->lock); in snd_ad1889_free()
795 struct snd_ad1889 *chip = card->private_data; in snd_ad1889_create() local
808 chip->card = card; in snd_ad1889_create()
809 chip->pci = pci; in snd_ad1889_create()
810 chip->irq = -1; in snd_ad1889_create()
813 chip->iobase = pcim_iomap_region(pci, 0, card->driver); in snd_ad1889_create()
814 if (IS_ERR(chip->iobase)) in snd_ad1889_create()
815 return PTR_ERR(chip->iobase); in snd_ad1889_create()
817 chip->bar = pci_resource_start(pci, 0); in snd_ad1889_create()
821 spin_lock_init(&chip->lock); /* only now can we call ad1889_free */ in snd_ad1889_create()
824 IRQF_SHARED, KBUILD_MODNAME, chip)) { in snd_ad1889_create()
829 chip->irq = pci->irq; in snd_ad1889_create()
830 card->sync_irq = chip->irq; in snd_ad1889_create()
833 /* (2) initialization of the chip hardware */ in snd_ad1889_create()
834 ad1889_writew(chip, AD_DS_CCS, AD_DS_CCS_CLKEN); /* turn on clock */ in snd_ad1889_create()
835 ad1889_readw(chip, AD_DS_CCS); /* flush posted write */ in snd_ad1889_create()
840 ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PMAE | AD_DMA_DISR_PTAE); in snd_ad1889_create()
852 struct snd_ad1889 *chip; in __snd_ad1889_probe() local
864 sizeof(*chip), &card); in __snd_ad1889_probe()
867 chip = card->private_data; in __snd_ad1889_probe()
879 card->shortname, chip->bar, chip->irq); in __snd_ad1889_probe()
883 err = snd_ad1889_ac97_init(chip, ac97_quirk[devno]); in __snd_ad1889_probe()
887 err = snd_ad1889_pcm_init(chip, 0); in __snd_ad1889_probe()
892 snd_ad1889_proc_init(chip); in __snd_ad1889_probe()