Lines Matching refs:chip

39 int snd_vx_check_reg_bit(struct vx_core *chip, int reg, int mask, int bit, int time)  in snd_vx_check_reg_bit()  argument
51 if ((snd_vx_inb(chip, reg) & mask) == bit) in snd_vx_check_reg_bit()
55 …eck_reg_bit: timeout, reg=%s, mask=0x%x, val=0x%x\n", reg_names[reg], mask, snd_vx_inb(chip, reg)); in snd_vx_check_reg_bit()
69 static int vx_send_irq_dsp(struct vx_core *chip, int num) in vx_send_irq_dsp() argument
74 if (snd_vx_check_reg_bit(chip, VX_CVR, CVR_HC, 0, 200) < 0) in vx_send_irq_dsp()
78 if (vx_has_new_dsp(chip)) in vx_send_irq_dsp()
80 vx_outb(chip, CVR, (nirq >> 1) | CVR_HC); in vx_send_irq_dsp()
90 static int vx_reset_chk(struct vx_core *chip) in vx_reset_chk() argument
93 if (vx_send_irq_dsp(chip, IRQ_RESET_CHK) < 0) in vx_reset_chk()
96 if (vx_check_isr(chip, ISR_CHK, 0, 200) < 0) in vx_reset_chk()
109 static int vx_transfer_end(struct vx_core *chip, int cmd) in vx_transfer_end() argument
113 err = vx_reset_chk(chip); in vx_transfer_end()
118 err = vx_send_irq_dsp(chip, cmd); in vx_transfer_end()
123 err = vx_wait_isr_bit(chip, ISR_CHK); in vx_transfer_end()
128 err = vx_inb(chip, ISR); in vx_transfer_end()
130 err = vx_wait_for_rx_full(chip); in vx_transfer_end()
135 err = vx_inb(chip, RXH) << 16; in vx_transfer_end()
136 err |= vx_inb(chip, RXM) << 8; in vx_transfer_end()
137 err |= vx_inb(chip, RXL); in vx_transfer_end()
152 static int vx_read_status(struct vx_core *chip, struct vx_rmh *rmh) in vx_read_status() argument
163 err = vx_wait_for_rx_full(chip); in vx_read_status()
168 val = vx_inb(chip, RXH) << 16; in vx_read_status()
169 val |= vx_inb(chip, RXM) << 8; in vx_read_status()
170 val |= vx_inb(chip, RXL); in vx_read_status()
205 err = vx_send_irq_dsp(chip, IRQ_MESS_WRITE_NEXT); in vx_read_status()
209 err = vx_wait_for_rx_full(chip); in vx_read_status()
212 rmh->Stat[i] = vx_inb(chip, RXH) << 16; in vx_read_status()
213 rmh->Stat[i] |= vx_inb(chip, RXM) << 8; in vx_read_status()
214 rmh->Stat[i] |= vx_inb(chip, RXL); in vx_read_status()
217 return vx_transfer_end(chip, IRQ_MESS_WRITE_END); in vx_read_status()
233 int vx_send_msg_nolock(struct vx_core *chip, struct vx_rmh *rmh) in vx_send_msg_nolock() argument
237 if (chip->chip_status & VX_STAT_IS_STALE) in vx_send_msg_nolock()
240 err = vx_reset_chk(chip); in vx_send_msg_nolock()
263 err = vx_wait_isr_bit(chip, ISR_TX_EMPTY); in vx_send_msg_nolock()
270 vx_outb(chip, TXH, (rmh->Cmd[0] >> 16) & 0xff); in vx_send_msg_nolock()
271 vx_outb(chip, TXM, (rmh->Cmd[0] >> 8) & 0xff); in vx_send_msg_nolock()
272 vx_outb(chip, TXL, rmh->Cmd[0] & 0xff); in vx_send_msg_nolock()
275 err = vx_send_irq_dsp(chip, IRQ_MESSAGE); in vx_send_msg_nolock()
282 err = vx_wait_isr_bit(chip, ISR_CHK); in vx_send_msg_nolock()
287 if (vx_inb(chip, ISR) & ISR_ERR) { in vx_send_msg_nolock()
288 err = vx_wait_for_rx_full(chip); in vx_send_msg_nolock()
293 err = vx_inb(chip, RXH) << 16; in vx_send_msg_nolock()
294 err |= vx_inb(chip, RXM) << 8; in vx_send_msg_nolock()
295 err |= vx_inb(chip, RXL); in vx_send_msg_nolock()
305 err = vx_wait_isr_bit(chip, ISR_TX_READY); in vx_send_msg_nolock()
312 vx_outb(chip, TXH, (rmh->Cmd[i] >> 16) & 0xff); in vx_send_msg_nolock()
313 vx_outb(chip, TXM, (rmh->Cmd[i] >> 8) & 0xff); in vx_send_msg_nolock()
314 vx_outb(chip, TXL, rmh->Cmd[i] & 0xff); in vx_send_msg_nolock()
317 err = vx_send_irq_dsp(chip, IRQ_MESS_READ_NEXT); in vx_send_msg_nolock()
324 err = vx_wait_isr_bit(chip, ISR_TX_READY); in vx_send_msg_nolock()
330 err = vx_transfer_end(chip, IRQ_MESS_READ_END); in vx_send_msg_nolock()
335 return vx_read_status(chip, rmh); in vx_send_msg_nolock()
346 int vx_send_msg(struct vx_core *chip, struct vx_rmh *rmh) in vx_send_msg() argument
350 mutex_lock(&chip->lock); in vx_send_msg()
351 err = vx_send_msg_nolock(chip, rmh); in vx_send_msg()
352 mutex_unlock(&chip->lock); in vx_send_msg()
368 int vx_send_rih_nolock(struct vx_core *chip, int cmd) in vx_send_rih_nolock() argument
372 if (chip->chip_status & VX_STAT_IS_STALE) in vx_send_rih_nolock()
378 err = vx_reset_chk(chip); in vx_send_rih_nolock()
382 err = vx_send_irq_dsp(chip, cmd); in vx_send_rih_nolock()
386 err = vx_wait_isr_bit(chip, ISR_CHK); in vx_send_rih_nolock()
390 if (vx_inb(chip, ISR) & ISR_ERR) { in vx_send_rih_nolock()
391 err = vx_wait_for_rx_full(chip); in vx_send_rih_nolock()
394 err = vx_inb(chip, RXH) << 16; in vx_send_rih_nolock()
395 err |= vx_inb(chip, RXM) << 8; in vx_send_rih_nolock()
396 err |= vx_inb(chip, RXL); in vx_send_rih_nolock()
409 int vx_send_rih(struct vx_core *chip, int cmd) in vx_send_rih() argument
413 mutex_lock(&chip->lock); in vx_send_rih()
414 err = vx_send_rih_nolock(chip, cmd); in vx_send_rih()
415 mutex_unlock(&chip->lock); in vx_send_rih()
426 int snd_vx_load_boot_image(struct vx_core *chip, const struct firmware *boot) in snd_vx_load_boot_image() argument
429 int no_fillup = vx_has_new_dsp(chip); in snd_vx_load_boot_image()
446 vx_reset_dsp(chip); in snd_vx_load_boot_image()
455 if (vx_wait_isr_bit(chip, ISR_TX_EMPTY) < 0) { in snd_vx_load_boot_image()
459 vx_outb(chip, TXH, 0); in snd_vx_load_boot_image()
460 vx_outb(chip, TXM, 0); in snd_vx_load_boot_image()
461 vx_outb(chip, TXL, 0); in snd_vx_load_boot_image()
464 if (vx_wait_isr_bit(chip, ISR_TX_EMPTY) < 0) { in snd_vx_load_boot_image()
468 vx_outb(chip, TXH, image[0]); in snd_vx_load_boot_image()
469 vx_outb(chip, TXM, image[1]); in snd_vx_load_boot_image()
470 vx_outb(chip, TXL, image[2]); in snd_vx_load_boot_image()
483 static int vx_test_irq_src(struct vx_core *chip, unsigned int *ret) in vx_test_irq_src() argument
487 vx_init_rmh(&chip->irq_rmh, CMD_TEST_IT); in vx_test_irq_src()
488 mutex_lock(&chip->lock); in vx_test_irq_src()
489 err = vx_send_msg_nolock(chip, &chip->irq_rmh); in vx_test_irq_src()
493 *ret = chip->irq_rmh.Stat[0]; in vx_test_irq_src()
494 mutex_unlock(&chip->lock); in vx_test_irq_src()
504 struct vx_core *chip = dev; in snd_vx_threaded_irq_handler() local
507 if (chip->chip_status & VX_STAT_IS_STALE) in snd_vx_threaded_irq_handler()
510 if (vx_test_irq_src(chip, &events) < 0) in snd_vx_threaded_irq_handler()
537 vx_change_frequency(chip); in snd_vx_threaded_irq_handler()
540 vx_pcm_update_intr(chip, events); in snd_vx_threaded_irq_handler()
552 struct vx_core *chip = dev; in snd_vx_irq_handler() local
554 if (! (chip->chip_status & VX_STAT_CHIP_INIT) || in snd_vx_irq_handler()
555 (chip->chip_status & VX_STAT_IS_STALE)) in snd_vx_irq_handler()
557 if (! vx_test_and_ack(chip)) in snd_vx_irq_handler()
566 static void vx_reset_board(struct vx_core *chip, int cold_reset) in vx_reset_board() argument
568 if (snd_BUG_ON(!chip->ops->reset_board)) in vx_reset_board()
572 chip->audio_source = VX_AUDIO_SRC_LINE; in vx_reset_board()
574 chip->audio_source_target = chip->audio_source; in vx_reset_board()
575 chip->clock_source = INTERNAL_QUARTZ; in vx_reset_board()
576 chip->clock_mode = VX_CLOCK_MODE_AUTO; in vx_reset_board()
577 chip->freq = 48000; in vx_reset_board()
578 chip->uer_detected = VX_UER_MODE_NOT_PRESENT; in vx_reset_board()
579 chip->uer_bits = SNDRV_PCM_DEFAULT_CON_SPDIF; in vx_reset_board()
582 chip->ops->reset_board(chip, cold_reset); in vx_reset_board()
584 vx_reset_codec(chip, cold_reset); in vx_reset_board()
586 vx_set_internal_clock(chip, chip->freq); in vx_reset_board()
589 vx_reset_dsp(chip); in vx_reset_board()
591 if (vx_is_pcmcia(chip)) { in vx_reset_board()
593 vx_test_and_ack(chip); in vx_reset_board()
594 vx_validate_irq(chip, 1); in vx_reset_board()
598 vx_set_iec958_status(chip, chip->uer_bits); in vx_reset_board()
608 struct vx_core *chip = entry->private_data; in vx_proc_read() local
615 snd_iprintf(buffer, "%s\n", chip->card->longname); in vx_proc_read()
617 (chip->chip_status & VX_STAT_XILINX_LOADED) ? "Loaded" : "No"); in vx_proc_read()
619 (chip->chip_status & VX_STAT_DEVICE_INIT) ? "Yes" : "No"); in vx_proc_read()
621 if (chip->audio_info & VX_AUDIO_INFO_REAL_TIME) in vx_proc_read()
623 if (chip->audio_info & VX_AUDIO_INFO_OFFLINE) in vx_proc_read()
625 if (chip->audio_info & VX_AUDIO_INFO_MPEG1) in vx_proc_read()
627 if (chip->audio_info & VX_AUDIO_INFO_MPEG2) in vx_proc_read()
629 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_8) in vx_proc_read()
631 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_16) in vx_proc_read()
633 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_24) in vx_proc_read()
636 snd_iprintf(buffer, "Input Source: %s\n", vx_is_pcmcia(chip) ? in vx_proc_read()
637 audio_src_vxp[chip->audio_source] : in vx_proc_read()
638 audio_src_vx2[chip->audio_source]); in vx_proc_read()
639 snd_iprintf(buffer, "Clock Mode: %s\n", clock_mode[chip->clock_mode]); in vx_proc_read()
640 snd_iprintf(buffer, "Clock Source: %s\n", clock_src[chip->clock_source]); in vx_proc_read()
641 snd_iprintf(buffer, "Frequency: %d\n", chip->freq); in vx_proc_read()
642 snd_iprintf(buffer, "Detected Frequency: %d\n", chip->freq_detected); in vx_proc_read()
643 snd_iprintf(buffer, "Detected UER type: %s\n", uer_type[chip->uer_detected]); in vx_proc_read()
645 chip->ibl.min_size, chip->ibl.max_size, chip->ibl.size, in vx_proc_read()
646 chip->ibl.granularity); in vx_proc_read()
649 static void vx_proc_init(struct vx_core *chip) in vx_proc_init() argument
651 snd_card_ro_proc_new(chip->card, "vx-status", chip, vx_proc_read); in vx_proc_init()
660 int snd_vx_dsp_boot(struct vx_core *chip, const struct firmware *boot) in snd_vx_dsp_boot() argument
663 int cold_reset = !(chip->chip_status & VX_STAT_DEVICE_INIT); in snd_vx_dsp_boot()
665 vx_reset_board(chip, cold_reset); in snd_vx_dsp_boot()
666 vx_validate_irq(chip, 0); in snd_vx_dsp_boot()
668 err = snd_vx_load_boot_image(chip, boot); in snd_vx_dsp_boot()
683 int snd_vx_dsp_load(struct vx_core *chip, const struct firmware *dsp) in snd_vx_dsp_load() argument
693 vx_toggle_dac_mute(chip, 1); in snd_vx_dsp_load()
699 err = vx_wait_isr_bit(chip, ISR_TX_EMPTY); in snd_vx_dsp_load()
708 vx_outb(chip, TXH, *cptr++); in snd_vx_dsp_load()
711 vx_outb(chip, TXM, *cptr++); in snd_vx_dsp_load()
714 vx_outb(chip, TXL, *cptr++); in snd_vx_dsp_load()
720 err = vx_wait_isr_bit(chip, ISR_CHK); in snd_vx_dsp_load()
724 vx_toggle_dac_mute(chip, 0); in snd_vx_dsp_load()
726 vx_test_and_ack(chip); in snd_vx_dsp_load()
727 vx_validate_irq(chip, 1); in snd_vx_dsp_load()
738 int snd_vx_suspend(struct vx_core *chip) in snd_vx_suspend() argument
740 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot); in snd_vx_suspend()
741 chip->chip_status |= VX_STAT_IN_SUSPEND; in snd_vx_suspend()
751 int snd_vx_resume(struct vx_core *chip) in snd_vx_resume() argument
755 chip->chip_status &= ~VX_STAT_CHIP_INIT; in snd_vx_resume()
758 if (! chip->firmware[i]) in snd_vx_resume()
760 err = chip->ops->load_dsp(chip, i, chip->firmware[i]); in snd_vx_resume()
767 chip->chip_status |= VX_STAT_CHIP_INIT; in snd_vx_resume()
768 chip->chip_status &= ~VX_STAT_IN_SUSPEND; in snd_vx_resume()
770 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0); in snd_vx_resume()
801 struct vx_core *chip; in snd_vx_create() local
806 chip = devres_alloc(snd_vx_release, sizeof(*chip) + extra_size, in snd_vx_create()
808 if (!chip) in snd_vx_create()
810 mutex_init(&chip->lock); in snd_vx_create()
811 chip->irq = -1; in snd_vx_create()
812 chip->hw = hw; in snd_vx_create()
813 chip->type = hw->type; in snd_vx_create()
814 chip->ops = ops; in snd_vx_create()
815 mutex_init(&chip->mixer_mutex); in snd_vx_create()
817 chip->card = card; in snd_vx_create()
818 card->private_data = chip; in snd_vx_create()
822 vx_proc_init(chip); in snd_vx_create()
824 return chip; in snd_vx_create()