Lines Matching refs:chip

52 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
64 if ((snd_vx_inb(chip, reg) & mask) == bit) in snd_vx_check_reg_bit()
68 …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()
82 static int vx_send_irq_dsp(struct vx_core *chip, int num) in vx_send_irq_dsp() argument
87 if (snd_vx_check_reg_bit(chip, VX_CVR, CVR_HC, 0, 200) < 0) in vx_send_irq_dsp()
91 if (vx_has_new_dsp(chip)) in vx_send_irq_dsp()
93 vx_outb(chip, CVR, (nirq >> 1) | CVR_HC); in vx_send_irq_dsp()
103 static int vx_reset_chk(struct vx_core *chip) in vx_reset_chk() argument
106 if (vx_send_irq_dsp(chip, IRQ_RESET_CHK) < 0) in vx_reset_chk()
109 if (vx_check_isr(chip, ISR_CHK, 0, 200) < 0) in vx_reset_chk()
122 static int vx_transfer_end(struct vx_core *chip, int cmd) in vx_transfer_end() argument
126 if ((err = vx_reset_chk(chip)) < 0) in vx_transfer_end()
130 if ((err = vx_send_irq_dsp(chip, cmd)) < 0) in vx_transfer_end()
134 if ((err = vx_wait_isr_bit(chip, ISR_CHK)) < 0) in vx_transfer_end()
138 if ((err = vx_inb(chip, ISR)) & ISR_ERR) { in vx_transfer_end()
139 if ((err = vx_wait_for_rx_full(chip)) < 0) { in vx_transfer_end()
143 err = vx_inb(chip, RXH) << 16; in vx_transfer_end()
144 err |= vx_inb(chip, RXM) << 8; in vx_transfer_end()
145 err |= vx_inb(chip, RXL); in vx_transfer_end()
160 static int vx_read_status(struct vx_core *chip, struct vx_rmh *rmh) in vx_read_status() argument
171 err = vx_wait_for_rx_full(chip); in vx_read_status()
176 val = vx_inb(chip, RXH) << 16; in vx_read_status()
177 val |= vx_inb(chip, RXM) << 8; in vx_read_status()
178 val |= vx_inb(chip, RXL); in vx_read_status()
213 err = vx_send_irq_dsp(chip, IRQ_MESS_WRITE_NEXT); in vx_read_status()
217 err = vx_wait_for_rx_full(chip); in vx_read_status()
220 rmh->Stat[i] = vx_inb(chip, RXH) << 16; in vx_read_status()
221 rmh->Stat[i] |= vx_inb(chip, RXM) << 8; in vx_read_status()
222 rmh->Stat[i] |= vx_inb(chip, RXL); in vx_read_status()
225 return vx_transfer_end(chip, IRQ_MESS_WRITE_END); in vx_read_status()
241 int vx_send_msg_nolock(struct vx_core *chip, struct vx_rmh *rmh) in vx_send_msg_nolock() argument
245 if (chip->chip_status & VX_STAT_IS_STALE) in vx_send_msg_nolock()
248 if ((err = vx_reset_chk(chip)) < 0) { in vx_send_msg_nolock()
270 if ((err = vx_wait_isr_bit(chip, ISR_TX_EMPTY)) < 0) { in vx_send_msg_nolock()
276 vx_outb(chip, TXH, (rmh->Cmd[0] >> 16) & 0xff); in vx_send_msg_nolock()
277 vx_outb(chip, TXM, (rmh->Cmd[0] >> 8) & 0xff); in vx_send_msg_nolock()
278 vx_outb(chip, TXL, rmh->Cmd[0] & 0xff); in vx_send_msg_nolock()
281 if ((err = vx_send_irq_dsp(chip, IRQ_MESSAGE)) < 0) { in vx_send_msg_nolock()
287 if ((err = vx_wait_isr_bit(chip, ISR_CHK)) < 0) in vx_send_msg_nolock()
291 if (vx_inb(chip, ISR) & ISR_ERR) { in vx_send_msg_nolock()
292 if ((err = vx_wait_for_rx_full(chip)) < 0) { in vx_send_msg_nolock()
296 err = vx_inb(chip, RXH) << 16; in vx_send_msg_nolock()
297 err |= vx_inb(chip, RXM) << 8; in vx_send_msg_nolock()
298 err |= vx_inb(chip, RXL); in vx_send_msg_nolock()
308 if ((err = vx_wait_isr_bit(chip, ISR_TX_READY)) < 0) { in vx_send_msg_nolock()
314 vx_outb(chip, TXH, (rmh->Cmd[i] >> 16) & 0xff); in vx_send_msg_nolock()
315 vx_outb(chip, TXM, (rmh->Cmd[i] >> 8) & 0xff); in vx_send_msg_nolock()
316 vx_outb(chip, TXL, rmh->Cmd[i] & 0xff); in vx_send_msg_nolock()
319 if ((err = vx_send_irq_dsp(chip, IRQ_MESS_READ_NEXT)) < 0) { in vx_send_msg_nolock()
325 if ((err = vx_wait_isr_bit(chip, ISR_TX_READY)) < 0) { 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 if ((err = vx_reset_chk(chip)) < 0) in vx_send_rih_nolock()
381 if ((err = vx_send_irq_dsp(chip, cmd)) < 0) in vx_send_rih_nolock()
384 if ((err = vx_wait_isr_bit(chip, ISR_CHK)) < 0) in vx_send_rih_nolock()
387 if (vx_inb(chip, ISR) & ISR_ERR) { in vx_send_rih_nolock()
388 if ((err = vx_wait_for_rx_full(chip)) < 0) in vx_send_rih_nolock()
390 err = vx_inb(chip, RXH) << 16; in vx_send_rih_nolock()
391 err |= vx_inb(chip, RXM) << 8; in vx_send_rih_nolock()
392 err |= vx_inb(chip, RXL); in vx_send_rih_nolock()
405 int vx_send_rih(struct vx_core *chip, int cmd) in vx_send_rih() argument
409 mutex_lock(&chip->lock); in vx_send_rih()
410 err = vx_send_rih_nolock(chip, cmd); in vx_send_rih()
411 mutex_unlock(&chip->lock); in vx_send_rih()
422 int snd_vx_load_boot_image(struct vx_core *chip, const struct firmware *boot) in snd_vx_load_boot_image() argument
425 int no_fillup = vx_has_new_dsp(chip); in snd_vx_load_boot_image()
442 vx_reset_dsp(chip); in snd_vx_load_boot_image()
451 if (vx_wait_isr_bit(chip, ISR_TX_EMPTY) < 0) { in snd_vx_load_boot_image()
455 vx_outb(chip, TXH, 0); in snd_vx_load_boot_image()
456 vx_outb(chip, TXM, 0); in snd_vx_load_boot_image()
457 vx_outb(chip, TXL, 0); in snd_vx_load_boot_image()
460 if (vx_wait_isr_bit(chip, ISR_TX_EMPTY) < 0) { in snd_vx_load_boot_image()
464 vx_outb(chip, TXH, image[0]); in snd_vx_load_boot_image()
465 vx_outb(chip, TXM, image[1]); in snd_vx_load_boot_image()
466 vx_outb(chip, TXL, image[2]); in snd_vx_load_boot_image()
479 static int vx_test_irq_src(struct vx_core *chip, unsigned int *ret) in vx_test_irq_src() argument
483 vx_init_rmh(&chip->irq_rmh, CMD_TEST_IT); in vx_test_irq_src()
484 mutex_lock(&chip->lock); in vx_test_irq_src()
485 err = vx_send_msg_nolock(chip, &chip->irq_rmh); in vx_test_irq_src()
489 *ret = chip->irq_rmh.Stat[0]; in vx_test_irq_src()
490 mutex_unlock(&chip->lock); in vx_test_irq_src()
500 struct vx_core *chip = dev; in snd_vx_threaded_irq_handler() local
503 if (chip->chip_status & VX_STAT_IS_STALE) in snd_vx_threaded_irq_handler()
506 if (vx_test_irq_src(chip, &events) < 0) in snd_vx_threaded_irq_handler()
532 vx_change_frequency(chip); in snd_vx_threaded_irq_handler()
535 vx_pcm_update_intr(chip, events); in snd_vx_threaded_irq_handler()
547 struct vx_core *chip = dev; in snd_vx_irq_handler() local
549 if (! (chip->chip_status & VX_STAT_CHIP_INIT) || in snd_vx_irq_handler()
550 (chip->chip_status & VX_STAT_IS_STALE)) in snd_vx_irq_handler()
552 if (! vx_test_and_ack(chip)) in snd_vx_irq_handler()
561 static void vx_reset_board(struct vx_core *chip, int cold_reset) in vx_reset_board() argument
563 if (snd_BUG_ON(!chip->ops->reset_board)) in vx_reset_board()
567 chip->audio_source = VX_AUDIO_SRC_LINE; in vx_reset_board()
569 chip->audio_source_target = chip->audio_source; in vx_reset_board()
570 chip->clock_source = INTERNAL_QUARTZ; in vx_reset_board()
571 chip->clock_mode = VX_CLOCK_MODE_AUTO; in vx_reset_board()
572 chip->freq = 48000; in vx_reset_board()
573 chip->uer_detected = VX_UER_MODE_NOT_PRESENT; in vx_reset_board()
574 chip->uer_bits = SNDRV_PCM_DEFAULT_CON_SPDIF; in vx_reset_board()
577 chip->ops->reset_board(chip, cold_reset); in vx_reset_board()
579 vx_reset_codec(chip, cold_reset); in vx_reset_board()
581 vx_set_internal_clock(chip, chip->freq); in vx_reset_board()
584 vx_reset_dsp(chip); in vx_reset_board()
586 if (vx_is_pcmcia(chip)) { in vx_reset_board()
588 vx_test_and_ack(chip); in vx_reset_board()
589 vx_validate_irq(chip, 1); in vx_reset_board()
593 vx_set_iec958_status(chip, chip->uer_bits); in vx_reset_board()
603 struct vx_core *chip = entry->private_data; in vx_proc_read() local
610 snd_iprintf(buffer, "%s\n", chip->card->longname); in vx_proc_read()
612 chip->chip_status & VX_STAT_XILINX_LOADED ? "Loaded" : "No"); in vx_proc_read()
614 chip->chip_status & VX_STAT_DEVICE_INIT ? "Yes" : "No"); in vx_proc_read()
616 if (chip->audio_info & VX_AUDIO_INFO_REAL_TIME) in vx_proc_read()
618 if (chip->audio_info & VX_AUDIO_INFO_OFFLINE) in vx_proc_read()
620 if (chip->audio_info & VX_AUDIO_INFO_MPEG1) in vx_proc_read()
622 if (chip->audio_info & VX_AUDIO_INFO_MPEG2) in vx_proc_read()
624 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_8) in vx_proc_read()
626 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_16) in vx_proc_read()
628 if (chip->audio_info & VX_AUDIO_INFO_LINEAR_24) in vx_proc_read()
631 snd_iprintf(buffer, "Input Source: %s\n", vx_is_pcmcia(chip) ? in vx_proc_read()
632 audio_src_vxp[chip->audio_source] : in vx_proc_read()
633 audio_src_vx2[chip->audio_source]); in vx_proc_read()
634 snd_iprintf(buffer, "Clock Mode: %s\n", clock_mode[chip->clock_mode]); in vx_proc_read()
635 snd_iprintf(buffer, "Clock Source: %s\n", clock_src[chip->clock_source]); in vx_proc_read()
636 snd_iprintf(buffer, "Frequency: %d\n", chip->freq); in vx_proc_read()
637 snd_iprintf(buffer, "Detected Frequency: %d\n", chip->freq_detected); in vx_proc_read()
638 snd_iprintf(buffer, "Detected UER type: %s\n", uer_type[chip->uer_detected]); in vx_proc_read()
640 chip->ibl.min_size, chip->ibl.max_size, chip->ibl.size, in vx_proc_read()
641 chip->ibl.granularity); in vx_proc_read()
644 static void vx_proc_init(struct vx_core *chip) in vx_proc_init() argument
648 if (! snd_card_proc_new(chip->card, "vx-status", &entry)) in vx_proc_init()
649 snd_info_set_text_ops(entry, chip, vx_proc_read); in vx_proc_init()
658 int snd_vx_dsp_boot(struct vx_core *chip, const struct firmware *boot) in snd_vx_dsp_boot() argument
661 int cold_reset = !(chip->chip_status & VX_STAT_DEVICE_INIT); in snd_vx_dsp_boot()
663 vx_reset_board(chip, cold_reset); in snd_vx_dsp_boot()
664 vx_validate_irq(chip, 0); in snd_vx_dsp_boot()
666 if ((err = snd_vx_load_boot_image(chip, boot)) < 0) in snd_vx_dsp_boot()
680 int snd_vx_dsp_load(struct vx_core *chip, const struct firmware *dsp) in snd_vx_dsp_load() argument
690 vx_toggle_dac_mute(chip, 1); in snd_vx_dsp_load()
696 if ((err = vx_wait_isr_bit(chip, ISR_TX_EMPTY)) < 0) { in snd_vx_dsp_load()
704 vx_outb(chip, TXH, *cptr++); in snd_vx_dsp_load()
707 vx_outb(chip, TXM, *cptr++); in snd_vx_dsp_load()
710 vx_outb(chip, TXL, *cptr++); in snd_vx_dsp_load()
716 if ((err = vx_wait_isr_bit(chip, ISR_CHK)) < 0) in snd_vx_dsp_load()
719 vx_toggle_dac_mute(chip, 0); in snd_vx_dsp_load()
721 vx_test_and_ack(chip); in snd_vx_dsp_load()
722 vx_validate_irq(chip, 1); in snd_vx_dsp_load()
733 int snd_vx_suspend(struct vx_core *chip) in snd_vx_suspend() argument
737 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D3hot); in snd_vx_suspend()
738 chip->chip_status |= VX_STAT_IN_SUSPEND; in snd_vx_suspend()
739 for (i = 0; i < chip->hw->num_codecs; i++) in snd_vx_suspend()
740 snd_pcm_suspend_all(chip->pcm[i]); in snd_vx_suspend()
750 int snd_vx_resume(struct vx_core *chip) in snd_vx_resume() argument
754 chip->chip_status &= ~VX_STAT_CHIP_INIT; in snd_vx_resume()
757 if (! chip->firmware[i]) in snd_vx_resume()
759 err = chip->ops->load_dsp(chip, i, chip->firmware[i]); in snd_vx_resume()
766 chip->chip_status |= VX_STAT_CHIP_INIT; in snd_vx_resume()
767 chip->chip_status &= ~VX_STAT_IN_SUSPEND; in snd_vx_resume()
769 snd_power_change_state(chip->card, SNDRV_CTL_POWER_D0); in snd_vx_resume()
792 struct vx_core *chip; in snd_vx_create() local
797 chip = kzalloc(sizeof(*chip) + extra_size, GFP_KERNEL); in snd_vx_create()
798 if (! chip) { in snd_vx_create()
802 mutex_init(&chip->lock); in snd_vx_create()
803 chip->irq = -1; in snd_vx_create()
804 chip->hw = hw; in snd_vx_create()
805 chip->type = hw->type; in snd_vx_create()
806 chip->ops = ops; in snd_vx_create()
807 mutex_init(&chip->mixer_mutex); in snd_vx_create()
809 chip->card = card; in snd_vx_create()
810 card->private_data = chip; in snd_vx_create()
814 vx_proc_init(chip); in snd_vx_create()
816 return chip; in snd_vx_create()