Lines Matching +full:mono +full:- +full:channel

1 // SPDX-License-Identifier: GPL-2.0-only
5 * on the HP PA-RISC [BCJ]-xxx0 workstations.
7 * Copyright (C) 2004-2005, Kyle McMartin <kyle@parisc-linux.org>
8 * Copyright (C) 2005, Thibaut Varene <varenet@parisc-linux.org>
25 #include <linux/dma-mapping.h>
43 MODULE_AUTHOR("Kyle McMartin <kyle@parisc-linux.org>, Thibaut Varene <t-bone@parisc-linux.org>");
99 return readw(chip->iobase + reg);
105 writew(val, chip->iobase + reg);
111 return readl(chip->iobase + reg);
117 writel(val, chip->iobase + reg);
182 ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel)
186 if (channel & AD_CHAN_WAV) {
187 /* Disable wave channel */
190 chip->wave.reg = reg;
207 if (channel & AD_CHAN_ADC) {
208 /* Disable ADC channel */
211 chip->ramc.reg = reg;
230 struct snd_ad1889 *chip = ac97->private_data;
237 struct snd_ad1889 *chip = ac97->private_data;
247 && --retry)
250 dev_err(chip->card->dev, "[%s] Link is not ready.\n",
252 return -EIO;
254 dev_dbg(chip->card->dev, "[%s] ready after %d ms\n", __func__, 400 - retry);
297 struct snd_pcm_runtime *rt = ss->runtime;
299 chip->psubs = ss;
300 rt->hw = snd_ad1889_playback_hw;
309 struct snd_pcm_runtime *rt = ss->runtime;
311 chip->csubs = ss;
312 rt->hw = snd_ad1889_capture_hw;
321 chip->psubs = NULL;
329 chip->csubs = NULL;
337 struct snd_pcm_runtime *rt = ss->runtime;
346 /* Mask out 16-bit / Stereo */
349 if (snd_pcm_format_width(rt->format) == 16)
352 if (rt->channels > 1)
356 guard(spinlock_irq)(&chip->lock);
358 chip->wave.size = size;
359 chip->wave.reg = reg;
360 chip->wave.addr = rt->dma_addr;
362 ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg);
365 ad1889_writew(chip, AD_DS_WAS, rt->rate);
368 ad1889_load_wave_buffer_address(chip, chip->wave.addr);
375 dev_dbg(chip->card->dev,
377 chip->wave.addr, count, size, reg, rt->rate);
385 struct snd_pcm_runtime *rt = ss->runtime;
394 /* Mask out 16-bit / Stereo */
397 if (snd_pcm_format_width(rt->format) == 16)
400 if (rt->channels > 1)
404 guard(spinlock_irq)(&chip->lock);
406 chip->ramc.size = size;
407 chip->ramc.reg = reg;
408 chip->ramc.addr = rt->dma_addr;
410 ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg);
413 ad1889_load_adc_buffer_address(chip, chip->ramc.addr);
420 dev_dbg(chip->card->dev,
422 chip->ramc.addr, count, size, reg, rt->rate);
453 return -EINVAL;
456 chip->wave.reg = wsmc;
460 /* reset the chip when STOP - will disable IRQs */
491 return -EINVAL;
494 chip->ramc.reg = ramc;
498 /* reset the chip when STOP - will disable IRQs */
512 if (unlikely(!(chip->wave.reg & AD_DS_WSMC_WAEN)))
516 ptr -= chip->wave.addr;
518 if (snd_BUG_ON(ptr >= chip->wave.size))
521 return bytes_to_frames(ss->runtime, ptr);
531 if (unlikely(!(chip->ramc.reg & AD_DS_RAMC_ADEN)))
535 ptr -= chip->ramc.addr;
537 if (snd_BUG_ON(ptr >= chip->ramc.size))
540 return bytes_to_frames(ss->runtime, ptr);
576 dev_dbg(chip->card->dev,
579 if ((st & AD_DMA_DISR_WAVI) && chip->psubs)
580 snd_pcm_period_elapsed(chip->psubs);
581 if ((st & AD_DMA_DISR_ADCI) && chip->csubs)
582 snd_pcm_period_elapsed(chip->csubs);
593 err = snd_pcm_new(chip->card, chip->card->driver, device, 1, 1, &pcm);
602 pcm->private_data = chip;
603 pcm->info_flags = 0;
604 strscpy(pcm->name, chip->card->shortname);
606 chip->pcm = pcm;
607 chip->psubs = NULL;
608 chip->csubs = NULL;
610 snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &chip->pci->dev,
619 struct snd_ad1889 *chip = entry->private_data;
627 (reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
628 snd_iprintf(buffer, "Wave Quality: %d-bit linear\n",
637 (reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
649 (reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
655 (reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
656 snd_iprintf(buffer, "ADC Quality: %d-bit linear\n",
665 (reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
676 (reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
679 /* doc says LSB represents -1.5dB, but the max value (-94.5dB)
680 suggests that LSB is -3dB, which is more coherent with the logarithmic
683 snd_iprintf(buffer, "Left: %s, -%d dB\n",
687 snd_iprintf(buffer, "Right: %s, -%d dB\n",
700 snd_card_ro_proc_new(chip->card, chip->card->driver,
752 err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus);
758 ac97.pci = chip->pci;
760 err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97);
764 snd_ac97_tune_hardware(chip->ac97, ac97_quirks, quirk_override);
772 struct snd_ad1889 *chip = card->private_data;
774 guard(spinlock_irq)(&chip->lock);
789 struct snd_ad1889 *chip = card->private_data;
797 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) {
798 dev_err(card->dev, "error setting 32-bit DMA mask.\n");
799 return -ENXIO;
802 chip->card = card;
803 chip->pci = pci;
804 chip->irq = -1;
807 chip->iobase = pcim_iomap_region(pci, 0, card->driver);
808 if (IS_ERR(chip->iobase))
809 return PTR_ERR(chip->iobase);
811 chip->bar = pci_resource_start(pci, 0);
815 spin_lock_init(&chip->lock); /* only now can we call ad1889_free */
817 if (devm_request_irq(&pci->dev, pci->irq, snd_ad1889_interrupt,
819 dev_err(card->dev, "cannot obtain IRQ %d\n", pci->irq);
820 return -EBUSY;
823 chip->irq = pci->irq;
824 card->sync_irq = chip->irq;
825 card->private_free = snd_ad1889_free;
850 return -ENODEV;
853 return -ENOENT;
857 err = snd_devm_card_new(&pci->dev, index[devno], id[devno], THIS_MODULE,
861 chip = card->private_data;
863 strscpy(card->driver, "AD1889");
864 strscpy(card->shortname, "Analog Devices AD1889");
872 sprintf(card->longname, "%s at 0x%lx irq %i",
873 card->shortname, chip->bar, chip->irq);
903 return snd_card_free_on_error(&pci->dev, __snd_ad1889_probe(pci, pci_id));