Lines Matching +full:codec +full:- +full:reset
1 // SPDX-License-Identifier: GPL-2.0-or-later
41 return chip->port + vxp_reg_offset[reg]; in vxp_reg_addr()
45 * snd_vx_inb - read a byte from the register
54 * snd_vx_outb - write a byte on the register
73 * vx_check_magic - check the magic word on xilinx
88 return -EIO; in vx_check_magic()
93 * vx_reset_dsp - reset the DSP
102 /* set the reset dsp bit to 1 */ in vxp_reset_dsp()
103 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_DSP_RESET_MASK); in vxp_reset_dsp()
106 /* reset the bit */ in vxp_reset_dsp()
107 chip->regCDSP &= ~VXP_CDSP_DSP_RESET_MASK; in vxp_reset_dsp()
108 vx_outb(chip, CDSP, chip->regCDSP); in vxp_reset_dsp()
114 * reset codec bit
120 /* Set the reset CODEC bit to 1. */ in vxp_reset_codec()
121 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_CODEC_RESET_MASK); in vxp_reset_codec()
124 /* Set the reset CODEC bit to 0. */ in vxp_reset_codec()
125 chip->regCDSP &= ~VXP_CDSP_CODEC_RESET_MASK; in vxp_reset_codec()
126 vx_outb(chip, CDSP, chip->regCDSP); in vxp_reset_codec()
132 * vx_load_xilinx_binary - load the xilinx binary image
145 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
146 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
152 /* reset HF0 and HF1 */ in vxp_load_xilinx_binary()
162 image = fw->data; in vxp_load_xilinx_binary()
163 for (i = 0; i < fw->size; i++, image++) { in vxp_load_xilinx_binary()
176 /* reset HF1 */ in vxp_load_xilinx_binary()
191 snd_printdd(KERN_DEBUG "xilinx: dsp size received 0x%x, orig 0x%zx\n", c, fw->size); in vxp_load_xilinx_binary()
206 /* Reset the Xilinx's signal enabling IO access */ in vxp_load_xilinx_binary()
207 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
208 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
211 chip->regDIALOG &= ~VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
212 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
215 /* Reset of the Codec */ in vxp_load_xilinx_binary()
224 chip->regDIALOG &= ~VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
225 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
226 return -EIO; in vxp_load_xilinx_binary()
231 * vxp_load_dsp - load_dsp callback
256 return -EINVAL; in vxp_load_dsp()
262 * vx_test_and_ack - test and acknowledge interrupt
273 if (! (_chip->chip_status & VX_STAT_XILINX_LOADED)) in vxp_test_and_ack()
274 return -ENXIO; in vxp_test_and_ack()
277 return -EIO; in vxp_test_and_ack()
281 vx_outb(chip, DIALOG, chip->regDIALOG | VXP_DLG_ACK_MEMIRQ_MASK); in vxp_test_and_ack()
286 vx_outb(chip, DIALOG, chip->regDIALOG & ~VXP_DLG_ACK_MEMIRQ_MASK); in vxp_test_and_ack()
293 * vx_validate_irq - enable/disable IRQ
301 chip->regCDSP |= VXP_CDSP_VALID_IRQ_MASK; in vxp_validate_irq()
303 chip->regCDSP &= ~VXP_CDSP_VALID_IRQ_MASK; in vxp_validate_irq()
304 vx_outb(chip, CDSP, chip->regCDSP); in vxp_validate_irq()
308 * vx_setup_pseudo_dma - set up the pseudo dma read/write mode.
317 /* Reset the pseudo-dma register */ in vx_setup_pseudo_dma()
321 /* Select DMA in read/write transfer mode and in 16-bit accesses */ in vx_setup_pseudo_dma()
322 chip->regDIALOG |= VXP_DLG_DMA16_SEL_MASK; in vx_setup_pseudo_dma()
323 chip->regDIALOG |= do_write ? VXP_DLG_DMAWRITE_SEL_MASK : VXP_DLG_DMAREAD_SEL_MASK; in vx_setup_pseudo_dma()
324 vx_outb(chip, DIALOG, chip->regDIALOG); in vx_setup_pseudo_dma()
329 * vx_release_pseudo_dma - disable the pseudo-DMA mode
335 /* Disable DMA and 16-bit accesses */ in vx_release_pseudo_dma()
336 chip->regDIALOG &= ~(VXP_DLG_DMAWRITE_SEL_MASK| in vx_release_pseudo_dma()
339 vx_outb(chip, DIALOG, chip->regDIALOG); in vx_release_pseudo_dma()
345 * vx_pseudo_dma_write - write bulk data on pseudo-DMA mode
355 int offset = pipe->hw_ptr; in vxp_dma_write()
356 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset); in vxp_dma_write()
359 if (offset + count >= pipe->buffer_bytes) { in vxp_dma_write()
360 int length = pipe->buffer_bytes - offset; in vxp_dma_write()
361 count -= length; in vxp_dma_write()
363 /* Transfer using pseudo-dma. */ in vxp_dma_write()
364 for (; length > 0; length--) { in vxp_dma_write()
368 addr = (unsigned short *)runtime->dma_area; in vxp_dma_write()
369 pipe->hw_ptr = 0; in vxp_dma_write()
371 pipe->hw_ptr += count; in vxp_dma_write()
373 /* Transfer using pseudo-dma. */ in vxp_dma_write()
374 for (; count > 0; count--) { in vxp_dma_write()
383 * vx_pseudo_dma_read - read bulk data on pseudo DMA mode
395 int offset = pipe->hw_ptr; in vxp_dma_read()
396 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset); in vxp_dma_read()
401 if (offset + count >= pipe->buffer_bytes) { in vxp_dma_read()
402 int length = pipe->buffer_bytes - offset; in vxp_dma_read()
403 count -= length; in vxp_dma_read()
405 /* Transfer using pseudo-dma. */ in vxp_dma_read()
406 for (; length > 0; length--) in vxp_dma_read()
408 addr = (unsigned short *)runtime->dma_area; in vxp_dma_read()
409 pipe->hw_ptr = 0; in vxp_dma_read()
411 pipe->hw_ptr += count; in vxp_dma_read()
413 /* Transfer using pseudo-dma. */ in vxp_dma_read()
414 for (; count > 1; count--) in vxp_dma_read()
417 pchip->regDIALOG &= ~VXP_DLG_DMAREAD_SEL_MASK; in vxp_dma_read()
418 vx_outb(chip, DIALOG, pchip->regDIALOG); in vxp_dma_read()
421 /* Disable 16-bit accesses */ in vxp_dma_read()
422 pchip->regDIALOG &= ~VXP_DLG_DMA16_SEL_MASK; in vxp_dma_read()
423 vx_outb(chip, DIALOG, pchip->regDIALOG); in vxp_dma_read()
430 * write a codec data (24bit)
432 static void vxp_write_codec_reg(struct vx_core *chip, int codec, unsigned int data) in vxp_write_codec_reg() argument
436 /* Activate access to the corresponding codec register */ in vxp_write_codec_reg()
437 if (! codec) in vxp_write_codec_reg()
446 /* Terminate access to codec registers */ in vxp_write_codec_reg()
452 * vx_set_mic_boost - set mic boost level (on vxp440 only)
459 if (chip->chip_status & VX_STAT_IS_STALE) in vx_set_mic_boost()
462 mutex_lock(&chip->lock); in vx_set_mic_boost()
463 if (pchip->regCDSP & P24_CDSP_MICS_SEL_MASK) { in vx_set_mic_boost()
466 pchip->regCDSP &= ~P24_CDSP_MIC20_SEL_MASK; in vx_set_mic_boost()
467 pchip->regCDSP |= P24_CDSP_MIC38_SEL_MASK; in vx_set_mic_boost()
470 pchip->regCDSP |= P24_CDSP_MIC20_SEL_MASK; in vx_set_mic_boost()
471 pchip->regCDSP &= ~P24_CDSP_MIC38_SEL_MASK; in vx_set_mic_boost()
473 vx_outb(chip, CDSP, pchip->regCDSP); in vx_set_mic_boost()
475 mutex_unlock(&chip->lock); in vx_set_mic_boost()
479 * remap the linear value (0-8) to the actual value (0-15)
494 * vx_set_mic_level - set mic level (on vxpocket only)
495 * @level: the mic level = 0 - 8 (max)
501 if (chip->chip_status & VX_STAT_IS_STALE) in vx_set_mic_level()
504 mutex_lock(&chip->lock); in vx_set_mic_level()
505 if (pchip->regCDSP & VXP_CDSP_MIC_SEL_MASK) { in vx_set_mic_level()
509 mutex_unlock(&chip->lock); in vx_set_mic_level()
522 chip->regCDSP |= VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
523 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
526 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
527 if (_chip->type == VX_TYPE_VXP440) in vxp_change_audio_source()
528 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK; in vxp_change_audio_source()
530 chip->regCDSP &= ~VXP_CDSP_MIC_SEL_MASK; in vxp_change_audio_source()
531 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
534 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
535 /* reset mic levels */ in vxp_change_audio_source()
536 if (_chip->type == VX_TYPE_VXP440) { in vxp_change_audio_source()
537 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK; in vxp_change_audio_source()
538 if (chip->mic_level) in vxp_change_audio_source()
539 chip->regCDSP |= P24_CDSP_MIC38_SEL_MASK; in vxp_change_audio_source()
541 chip->regCDSP |= P24_CDSP_MIC20_SEL_MASK; in vxp_change_audio_source()
542 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
544 chip->regCDSP |= VXP_CDSP_MIC_SEL_MASK; in vxp_change_audio_source()
545 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
546 vx_outb(chip, MICRO, vx_compute_mic_level(chip->mic_level)); in vxp_change_audio_source()
561 chip->regCDSP &= ~VXP_CDSP_CLOCKIN_SEL_MASK; in vxp_set_clock_source()
563 chip->regCDSP |= VXP_CDSP_CLOCKIN_SEL_MASK; in vxp_set_clock_source()
564 vx_outb(chip, CDSP, chip->regCDSP); in vxp_set_clock_source()
569 * reset the board
575 chip->regCDSP = 0; in vxp_reset_board()
576 chip->regDIALOG = 0; in vxp_reset_board()