Lines Matching +full:boost +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-or-later
41 return chip->port + vxp_reg_offset[reg];
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
87 dev_err(chip->card->dev, "cannot find xilinx magic word (%x)\n", c);
88 return -EIO;
93 * vx_reset_dsp - reset the DSP
103 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_DSP_RESET_MASK);
107 chip->regCDSP &= ~VXP_CDSP_DSP_RESET_MASK;
108 vx_outb(chip, CDSP, chip->regCDSP);
121 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_CODEC_RESET_MASK);
125 chip->regCDSP &= ~VXP_CDSP_CODEC_RESET_MASK;
126 vx_outb(chip, CDSP, chip->regCDSP);
132 * vx_load_xilinx_binary - load the xilinx binary image
144 /* Switch to programmation mode */
145 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK;
146 vx_outb(chip, DIALOG, chip->regDIALOG);
161 image = fw->data;
162 for (i = 0; i < fw->size; i++, image++) {
172 dev_err(_chip->card->dev,
192 dev_dbg(_chip->card->dev,
193 "xilinx: dsp size received 0x%x, orig 0x%zx\n", c, fw->size);
209 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK;
210 vx_outb(chip, DIALOG, chip->regDIALOG);
213 chip->regDIALOG &= ~VXP_DLG_XILINX_REPROG_MASK;
214 vx_outb(chip, DIALOG, chip->regDIALOG);
226 chip->regDIALOG &= ~VXP_DLG_XILINX_REPROG_MASK;
227 vx_outb(chip, DIALOG, chip->regDIALOG);
228 return -EIO;
233 * vxp_load_dsp - load_dsp callback
260 return -EINVAL;
266 * vx_test_and_ack - test and acknowledge interrupt
277 if (! (_chip->chip_status & VX_STAT_XILINX_LOADED))
278 return -ENXIO;
281 return -EIO;
285 vx_outb(chip, DIALOG, chip->regDIALOG | VXP_DLG_ACK_MEMIRQ_MASK);
290 vx_outb(chip, DIALOG, chip->regDIALOG & ~VXP_DLG_ACK_MEMIRQ_MASK);
297 * vx_validate_irq - enable/disable IRQ
305 chip->regCDSP |= VXP_CDSP_VALID_IRQ_MASK;
307 chip->regCDSP &= ~VXP_CDSP_VALID_IRQ_MASK;
308 vx_outb(chip, CDSP, chip->regCDSP);
312 * vx_setup_pseudo_dma - set up the pseudo dma read/write mode.
319 /* Interrupt mode and HREQ pin enabled for host transmit / receive data transfers */
321 /* Reset the pseudo-dma register */
325 /* Select DMA in read/write transfer mode and in 16-bit accesses */
326 chip->regDIALOG |= VXP_DLG_DMA16_SEL_MASK;
327 chip->regDIALOG |= do_write ? VXP_DLG_DMAWRITE_SEL_MASK : VXP_DLG_DMAREAD_SEL_MASK;
328 vx_outb(chip, DIALOG, chip->regDIALOG);
333 * vx_release_pseudo_dma - disable the pseudo-DMA mode
339 /* Disable DMA and 16-bit accesses */
340 chip->regDIALOG &= ~(VXP_DLG_DMAWRITE_SEL_MASK|
343 vx_outb(chip, DIALOG, chip->regDIALOG);
349 * vx_pseudo_dma_write - write bulk data on pseudo-DMA mode
359 int offset = pipe->hw_ptr;
360 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset);
363 if (offset + count >= pipe->buffer_bytes) {
364 int length = pipe->buffer_bytes - offset;
365 count -= length;
367 /* Transfer using pseudo-dma. */
368 for (; length > 0; length--) {
372 addr = (unsigned short *)runtime->dma_area;
373 pipe->hw_ptr = 0;
375 pipe->hw_ptr += count;
377 /* Transfer using pseudo-dma. */
378 for (; count > 0; count--) {
387 * vx_pseudo_dma_read - read bulk data on pseudo DMA mode
399 int offset = pipe->hw_ptr;
400 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset);
405 if (offset + count >= pipe->buffer_bytes) {
406 int length = pipe->buffer_bytes - offset;
407 count -= length;
409 /* Transfer using pseudo-dma. */
410 for (; length > 0; length--)
412 addr = (unsigned short *)runtime->dma_area;
413 pipe->hw_ptr = 0;
415 pipe->hw_ptr += count;
417 /* Transfer using pseudo-dma. */
418 for (; count > 1; count--)
421 pchip->regDIALOG &= ~VXP_DLG_DMAREAD_SEL_MASK;
422 vx_outb(chip, DIALOG, pchip->regDIALOG);
425 /* Disable 16-bit accesses */
426 pchip->regDIALOG &= ~VXP_DLG_DMA16_SEL_MASK;
427 vx_outb(chip, DIALOG, pchip->regDIALOG);
456 * vx_set_mic_boost - set mic boost level (on vxp440 only)
457 * @boost: 0 = 20dB, 1 = +38dB
459 void vx_set_mic_boost(struct vx_core *chip, int boost)
463 if (chip->chip_status & VX_STAT_IS_STALE)
466 guard(mutex)(&chip->lock);
467 if (pchip->regCDSP & P24_CDSP_MICS_SEL_MASK) {
468 if (boost) {
469 /* boost: 38 dB */
470 pchip->regCDSP &= ~P24_CDSP_MIC20_SEL_MASK;
471 pchip->regCDSP |= P24_CDSP_MIC38_SEL_MASK;
474 pchip->regCDSP |= P24_CDSP_MIC20_SEL_MASK;
475 pchip->regCDSP &= ~P24_CDSP_MIC38_SEL_MASK;
477 vx_outb(chip, CDSP, pchip->regCDSP);
482 * remap the linear value (0-8) to the actual value (0-15)
497 * vx_set_mic_level - set mic level (on vxpocket only)
498 * @level: the mic level = 0 - 8 (max)
504 if (chip->chip_status & VX_STAT_IS_STALE)
507 guard(mutex)(&chip->lock);
508 if (pchip->regCDSP & VXP_CDSP_MIC_SEL_MASK) {
524 chip->regCDSP |= VXP_CDSP_DATAIN_SEL_MASK;
525 vx_outb(chip, CDSP, chip->regCDSP);
528 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK;
529 if (_chip->type == VX_TYPE_VXP440)
530 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK;
532 chip->regCDSP &= ~VXP_CDSP_MIC_SEL_MASK;
533 vx_outb(chip, CDSP, chip->regCDSP);
536 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK;
538 if (_chip->type == VX_TYPE_VXP440) {
539 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK;
540 if (chip->mic_level)
541 chip->regCDSP |= P24_CDSP_MIC38_SEL_MASK;
543 chip->regCDSP |= P24_CDSP_MIC20_SEL_MASK;
544 vx_outb(chip, CDSP, chip->regCDSP);
546 chip->regCDSP |= VXP_CDSP_MIC_SEL_MASK;
547 vx_outb(chip, CDSP, chip->regCDSP);
548 vx_outb(chip, MICRO, vx_compute_mic_level(chip->mic_level));
563 chip->regCDSP &= ~VXP_CDSP_CLOCKIN_SEL_MASK;
565 chip->regCDSP |= VXP_CDSP_CLOCKIN_SEL_MASK;
566 vx_outb(chip, CDSP, chip->regCDSP);
577 chip->regCDSP = 0;
578 chip->regDIALOG = 0;