Lines Matching refs:chip
165 static void snd_als300_set_irq_flag(struct snd_als300 *chip, int cmd) in snd_als300_set_irq_flag() argument
167 u32 tmp = snd_als300_gcr_read(chip->port, MISC_CONTROL); in snd_als300_set_irq_flag()
172 if (((chip->revision > 5 || chip->chip_type == DEVICE_ALS300_PLUS) ^ in snd_als300_set_irq_flag()
177 snd_als300_gcr_write(chip->port, MISC_CONTROL, tmp); in snd_als300_set_irq_flag()
180 static int snd_als300_free(struct snd_als300 *chip) in snd_als300_free() argument
182 snd_als300_set_irq_flag(chip, IRQ_DISABLE); in snd_als300_free()
183 if (chip->irq >= 0) in snd_als300_free()
184 free_irq(chip->irq, chip); in snd_als300_free()
185 pci_release_regions(chip->pci); in snd_als300_free()
186 pci_disable_device(chip->pci); in snd_als300_free()
187 kfree(chip); in snd_als300_free()
193 struct snd_als300 *chip = device->device_data; in snd_als300_dev_free() local
194 return snd_als300_free(chip); in snd_als300_dev_free()
200 struct snd_als300 *chip = dev_id; in snd_als300_interrupt() local
203 status = inb(chip->port+ALS300_IRQ_STATUS); in snd_als300_interrupt()
208 outb(status, chip->port+ALS300_IRQ_STATUS); in snd_als300_interrupt()
210 if (chip->pcm && chip->playback_substream) { in snd_als300_interrupt()
211 data = chip->playback_substream->runtime->private_data; in snd_als300_interrupt()
213 snd_pcm_period_elapsed(chip->playback_substream); in snd_als300_interrupt()
218 if (chip->pcm && chip->capture_substream) { in snd_als300_interrupt()
219 data = chip->capture_substream->runtime->private_data; in snd_als300_interrupt()
221 snd_pcm_period_elapsed(chip->capture_substream); in snd_als300_interrupt()
231 struct snd_als300 *chip = dev_id; in snd_als300plus_interrupt() local
234 general = inb(chip->port+ALS300P_IRQ_STATUS); in snd_als300plus_interrupt()
235 mpu = inb(chip->port+MPU_IRQ_STATUS); in snd_als300plus_interrupt()
236 dram = inb(chip->port+ALS300P_DRAM_IRQ_STATUS); in snd_als300plus_interrupt()
243 if (chip->pcm && chip->playback_substream) { in snd_als300plus_interrupt()
244 outb(IRQ_PLAYBACK, chip->port+ALS300P_IRQ_STATUS); in snd_als300plus_interrupt()
245 data = chip->playback_substream->runtime->private_data; in snd_als300plus_interrupt()
247 snd_pcm_period_elapsed(chip->playback_substream); in snd_als300plus_interrupt()
252 if (chip->pcm && chip->capture_substream) { in snd_als300plus_interrupt()
253 outb(IRQ_CAPTURE, chip->port+ALS300P_IRQ_STATUS); in snd_als300plus_interrupt()
254 data = chip->capture_substream->runtime->private_data; in snd_als300plus_interrupt()
256 snd_pcm_period_elapsed(chip->capture_substream); in snd_als300plus_interrupt()
274 struct snd_als300 *chip = ac97->private_data; in snd_als300_ac97_read() local
277 if ((inb(chip->port+AC97_STATUS) & (AC97_BUSY)) == 0) in snd_als300_ac97_read()
281 outl((reg << 24) | (1 << 31), chip->port+AC97_ACCESS); in snd_als300_ac97_read()
284 if ((inb(chip->port+AC97_STATUS) & (AC97_DATA_AVAIL)) != 0) in snd_als300_ac97_read()
288 return inw(chip->port+AC97_READ); in snd_als300_ac97_read()
295 struct snd_als300 *chip = ac97->private_data; in snd_als300_ac97_write() local
298 if ((inb(chip->port+AC97_STATUS) & (AC97_BUSY)) == 0) in snd_als300_ac97_write()
302 outl((reg << 24) | val, chip->port+AC97_ACCESS); in snd_als300_ac97_write()
305 static int snd_als300_ac97(struct snd_als300 *chip) in snd_als300_ac97() argument
315 if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus)) < 0) in snd_als300_ac97()
319 ac97.private_data = chip; in snd_als300_ac97()
321 return snd_ac97_mixer(bus, &ac97, &chip->ac97); in snd_als300_ac97()
371 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_playback_open() local
378 chip->playback_substream = substream; in snd_als300_playback_open()
388 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_playback_close() local
393 chip->playback_substream = NULL; in snd_als300_playback_close()
400 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_capture_open() local
407 chip->capture_substream = substream; in snd_als300_capture_open()
417 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_capture_close() local
422 chip->capture_substream = NULL; in snd_als300_capture_close()
442 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_playback_prepare() local
447 spin_lock_irq(&chip->reg_lock); in snd_als300_playback_prepare()
448 tmp = snd_als300_gcr_read(chip->port, PLAYBACK_CONTROL); in snd_als300_playback_prepare()
457 snd_als300_gcr_write(chip->port, PLAYBACK_CONTROL, tmp); in snd_als300_playback_prepare()
460 snd_als300_gcr_write(chip->port, PLAYBACK_START, in snd_als300_playback_prepare()
462 snd_als300_gcr_write(chip->port, PLAYBACK_END, in snd_als300_playback_prepare()
464 spin_unlock_irq(&chip->reg_lock); in snd_als300_playback_prepare()
471 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_capture_prepare() local
476 spin_lock_irq(&chip->reg_lock); in snd_als300_capture_prepare()
477 tmp = snd_als300_gcr_read(chip->port, RECORD_CONTROL); in snd_als300_capture_prepare()
488 snd_als300_gcr_write(chip->port, RECORD_CONTROL, tmp); in snd_als300_capture_prepare()
489 snd_als300_gcr_write(chip->port, RECORD_START, in snd_als300_capture_prepare()
491 snd_als300_gcr_write(chip->port, RECORD_END, in snd_als300_capture_prepare()
493 spin_unlock_irq(&chip->reg_lock); in snd_als300_capture_prepare()
499 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_trigger() local
508 spin_lock(&chip->reg_lock); in snd_als300_trigger()
512 tmp = snd_als300_gcr_read(chip->port, reg); in snd_als300_trigger()
514 snd_als300_gcr_write(chip->port, reg, tmp | TRANSFER_START); in snd_als300_trigger()
519 tmp = snd_als300_gcr_read(chip->port, reg); in snd_als300_trigger()
520 snd_als300_gcr_write(chip->port, reg, tmp & ~TRANSFER_START); in snd_als300_trigger()
524 tmp = snd_als300_gcr_read(chip->port, reg); in snd_als300_trigger()
525 snd_als300_gcr_write(chip->port, reg, tmp | FIFO_PAUSE); in snd_als300_trigger()
529 tmp = snd_als300_gcr_read(chip->port, reg); in snd_als300_trigger()
530 snd_als300_gcr_write(chip->port, reg, tmp & ~FIFO_PAUSE); in snd_als300_trigger()
537 spin_unlock(&chip->reg_lock); in snd_als300_trigger()
544 struct snd_als300 *chip = snd_pcm_substream_chip(substream); in snd_als300_pointer() local
551 spin_lock(&chip->reg_lock); in snd_als300_pointer()
552 current_ptr = (u16) snd_als300_gcr_read(chip->port, in snd_als300_pointer()
554 spin_unlock(&chip->reg_lock); in snd_als300_pointer()
588 static int snd_als300_new_pcm(struct snd_als300 *chip) in snd_als300_new_pcm() argument
593 err = snd_pcm_new(chip->card, "ALS300", 0, 1, 1, &pcm); in snd_als300_new_pcm()
596 pcm->private_data = chip; in snd_als300_new_pcm()
598 chip->pcm = pcm; in snd_als300_new_pcm()
608 snd_dma_pci_data(chip->pci), 64*1024, 64*1024); in snd_als300_new_pcm()
612 static void snd_als300_init(struct snd_als300 *chip) in snd_als300_init() argument
617 spin_lock_irqsave(&chip->reg_lock, flags); in snd_als300_init()
618 chip->revision = (snd_als300_gcr_read(chip->port, MISC_CONTROL) >> 16) in snd_als300_init()
621 tmp = snd_als300_gcr_read(chip->port, DRAM_WRITE_CONTROL); in snd_als300_init()
622 snd_als300_gcr_write(chip->port, DRAM_WRITE_CONTROL, in snd_als300_init()
627 snd_als300_set_irq_flag(chip, IRQ_ENABLE); in snd_als300_init()
631 tmp = snd_als300_gcr_read(chip->port, MISC_CONTROL); in snd_als300_init()
632 snd_als300_gcr_write(chip->port, MISC_CONTROL, in snd_als300_init()
636 snd_als300_gcr_write(chip->port, MUS_VOC_VOL, 0); in snd_als300_init()
639 tmp = snd_als300_gcr_read(chip->port, PLAYBACK_CONTROL); in snd_als300_init()
640 snd_als300_gcr_write(chip->port, PLAYBACK_CONTROL, in snd_als300_init()
642 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_als300_init()
649 struct snd_als300 *chip; in snd_als300_create() local
669 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_als300_create()
670 if (chip == NULL) { in snd_als300_create()
675 chip->card = card; in snd_als300_create()
676 chip->pci = pci; in snd_als300_create()
677 chip->irq = -1; in snd_als300_create()
678 chip->chip_type = chip_type; in snd_als300_create()
679 spin_lock_init(&chip->reg_lock); in snd_als300_create()
682 kfree(chip); in snd_als300_create()
686 chip->port = pci_resource_start(pci, 0); in snd_als300_create()
688 if (chip->chip_type == DEVICE_ALS300_PLUS) in snd_als300_create()
694 KBUILD_MODNAME, chip)) { in snd_als300_create()
696 snd_als300_free(chip); in snd_als300_create()
699 chip->irq = pci->irq; in snd_als300_create()
702 snd_als300_init(chip); in snd_als300_create()
704 err = snd_als300_ac97(chip); in snd_als300_create()
707 snd_als300_free(chip); in snd_als300_create()
711 if ((err = snd_als300_new_pcm(chip)) < 0) { in snd_als300_create()
713 snd_als300_free(chip); in snd_als300_create()
718 chip, &ops)) < 0) { in snd_als300_create()
719 snd_als300_free(chip); in snd_als300_create()
723 *rchip = chip; in snd_als300_create()
731 struct snd_als300 *chip = card->private_data; in snd_als300_suspend() local
734 snd_pcm_suspend_all(chip->pcm); in snd_als300_suspend()
735 snd_ac97_suspend(chip->ac97); in snd_als300_suspend()
742 struct snd_als300 *chip = card->private_data; in snd_als300_resume() local
744 snd_als300_init(chip); in snd_als300_resume()
745 snd_ac97_resume(chip->ac97); in snd_als300_resume()
762 struct snd_als300 *chip; in snd_als300_probe() local
780 if ((err = snd_als300_create(card, pci, chip_type, &chip)) < 0) { in snd_als300_probe()
784 card->private_data = chip; in snd_als300_probe()
787 if (chip->chip_type == DEVICE_ALS300_PLUS) in snd_als300_probe()
790 sprintf(card->shortname, "ALS300+ (Rev. %d)", chip->revision); in snd_als300_probe()
793 chip->revision - 1); in snd_als300_probe()
795 card->shortname, chip->port, chip->irq); in snd_als300_probe()