Lines Matching +full:chip +full:- +full:to +full:- +full:chip
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
53 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_reg_addr() local
54 return chip->port + vxp_reg_offset[reg]; in vxp_reg_addr()
58 * snd_vx_inb - read a byte from the register
61 static unsigned char vxp_inb(struct vx_core *chip, int offset) in vxp_inb() argument
63 return inb(vxp_reg_addr(chip, offset)); in vxp_inb()
67 * snd_vx_outb - write a byte on the register
69 * @val: the value to write
71 static void vxp_outb(struct vx_core *chip, int offset, unsigned char val) in vxp_outb() argument
73 outb(val, vxp_reg_addr(chip, offset)); in vxp_outb()
77 * redefine macros to call directly
80 #define vx_inb(chip,reg) vxp_inb((struct vx_core *)(chip), VX_##reg) argument
82 #define vx_outb(chip,reg,val) vxp_outb((struct vx_core *)(chip), VX_##reg,val) argument
86 * vx_check_magic - check the magic word on xilinx
90 static int vx_check_magic(struct vx_core *chip) in vx_check_magic() argument
95 c = vx_inb(chip, CDSP); in vx_check_magic()
101 return -EIO; in vx_check_magic()
106 * vx_reset_dsp - reset the DSP
113 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_reset_dsp() local
115 /* set the reset dsp bit to 1 */ in vxp_reset_dsp()
116 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_DSP_RESET_MASK); in vxp_reset_dsp()
117 vx_inb(chip, CDSP); in vxp_reset_dsp()
120 chip->regCDSP &= ~VXP_CDSP_DSP_RESET_MASK; in vxp_reset_dsp()
121 vx_outb(chip, CDSP, chip->regCDSP); in vxp_reset_dsp()
122 vx_inb(chip, CDSP); in vxp_reset_dsp()
131 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_reset_codec() local
133 /* Set the reset CODEC bit to 1. */ in vxp_reset_codec()
134 vx_outb(chip, CDSP, chip->regCDSP | VXP_CDSP_CODEC_RESET_MASK); in vxp_reset_codec()
135 vx_inb(chip, CDSP); in vxp_reset_codec()
137 /* Set the reset CODEC bit to 0. */ in vxp_reset_codec()
138 chip->regCDSP &= ~VXP_CDSP_CODEC_RESET_MASK; in vxp_reset_codec()
139 vx_outb(chip, CDSP, chip->regCDSP); in vxp_reset_codec()
140 vx_inb(chip, CDSP); in vxp_reset_codec()
145 * vx_load_xilinx_binary - load the xilinx binary image
150 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_load_xilinx_binary() local
157 /* Switch to programmation mode */ in vxp_load_xilinx_binary()
158 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
159 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
162 regCSUER = vx_inb(chip, CSUER); in vxp_load_xilinx_binary()
163 regRUER = vx_inb(chip, RUER); in vxp_load_xilinx_binary()
166 vx_outb(chip, ICR, 0); in vxp_load_xilinx_binary()
168 /* Wait for answer HF2 equal to 1 */ in vxp_load_xilinx_binary()
174 vx_outb(chip, ICR, ICR_HF1); in vxp_load_xilinx_binary()
175 image = fw->data; in vxp_load_xilinx_binary()
176 for (i = 0; i < fw->size; i++, image++) { in vxp_load_xilinx_binary()
180 vx_outb(chip, TXL, data); in vxp_load_xilinx_binary()
184 c = vx_inb(chip, RXL); in vxp_load_xilinx_binary()
190 vx_outb(chip, ICR, 0); in vxp_load_xilinx_binary()
200 c = (int)vx_inb(chip, RXH) << 16; in vxp_load_xilinx_binary()
201 c |= (int)vx_inb(chip, RXM) << 8; in vxp_load_xilinx_binary()
202 c |= vx_inb(chip, RXL); in vxp_load_xilinx_binary()
204 snd_printdd(KERN_DEBUG "xilinx: dsp size received 0x%x, orig 0x%Zx\n", c, fw->size); in vxp_load_xilinx_binary()
206 vx_outb(chip, ICR, ICR_HF0); in vxp_load_xilinx_binary()
216 vx_outb(chip, CSUER, regCSUER); in vxp_load_xilinx_binary()
217 vx_outb(chip, RUER, regRUER); in vxp_load_xilinx_binary()
220 chip->regDIALOG |= VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
221 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
222 vx_inb(chip, DIALOG); 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 vx_inb(chip, DIALOG); in vxp_load_xilinx_binary()
235 vx_outb(chip, CSUER, regCSUER); in vxp_load_xilinx_binary()
236 vx_outb(chip, RUER, regRUER); in vxp_load_xilinx_binary()
237 chip->regDIALOG &= ~VXP_DLG_XILINX_REPROG_MASK; in vxp_load_xilinx_binary()
238 vx_outb(chip, DIALOG, chip->regDIALOG); in vxp_load_xilinx_binary()
239 return -EIO; in vxp_load_xilinx_binary()
244 * vxp_load_dsp - load_dsp callback
269 return -EINVAL; in vxp_load_dsp()
275 * vx_test_and_ack - test and acknowledge interrupt
283 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_test_and_ack() local
286 if (! (_chip->chip_status & VX_STAT_XILINX_LOADED)) in vxp_test_and_ack()
287 return -ENXIO; in vxp_test_and_ack()
289 if (! (vx_inb(chip, DIALOG) & VXP_DLG_MEMIRQ_MASK)) in vxp_test_and_ack()
290 return -EIO; in vxp_test_and_ack()
294 vx_outb(chip, DIALOG, chip->regDIALOG | VXP_DLG_ACK_MEMIRQ_MASK); in vxp_test_and_ack()
295 /* useless read just to spend some time and maintain in vxp_test_and_ack()
298 vx_inb(chip, DIALOG); in vxp_test_and_ack()
299 vx_outb(chip, DIALOG, chip->regDIALOG & ~VXP_DLG_ACK_MEMIRQ_MASK); in vxp_test_and_ack()
306 * vx_validate_irq - enable/disable IRQ
310 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_validate_irq() local
312 /* Set the interrupt enable bit to 1 in CDSP register */ in vxp_validate_irq()
314 chip->regCDSP |= VXP_CDSP_VALID_IRQ_MASK; in vxp_validate_irq()
316 chip->regCDSP &= ~VXP_CDSP_VALID_IRQ_MASK; in vxp_validate_irq()
317 vx_outb(chip, CDSP, chip->regCDSP); in vxp_validate_irq()
321 * vx_setup_pseudo_dma - set up the pseudo dma read/write mode.
326 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vx_setup_pseudo_dma() local
329 vx_outb(chip, ICR, do_write ? ICR_TREQ : ICR_RREQ); in vx_setup_pseudo_dma()
330 /* Reset the pseudo-dma register */ in vx_setup_pseudo_dma()
331 vx_inb(chip, ISR); in vx_setup_pseudo_dma()
332 vx_outb(chip, ISR, 0); in vx_setup_pseudo_dma()
334 /* Select DMA in read/write transfer mode and in 16-bit accesses */ in vx_setup_pseudo_dma()
335 chip->regDIALOG |= VXP_DLG_DMA16_SEL_MASK; in vx_setup_pseudo_dma()
336 chip->regDIALOG |= do_write ? VXP_DLG_DMAWRITE_SEL_MASK : VXP_DLG_DMAREAD_SEL_MASK; in vx_setup_pseudo_dma()
337 vx_outb(chip, DIALOG, chip->regDIALOG); in vx_setup_pseudo_dma()
342 * vx_release_pseudo_dma - disable the pseudo-DMA mode
346 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vx_release_pseudo_dma() local
348 /* Disable DMA and 16-bit accesses */ in vx_release_pseudo_dma()
349 chip->regDIALOG &= ~(VXP_DLG_DMAWRITE_SEL_MASK| in vx_release_pseudo_dma()
352 vx_outb(chip, DIALOG, chip->regDIALOG); in vx_release_pseudo_dma()
354 vx_outb(chip, ICR, 0); in vx_release_pseudo_dma()
358 * vx_pseudo_dma_write - write bulk data on pseudo-DMA mode
359 * @count: data length to transfer in bytes
361 * data size must be aligned to 6 bytes to ensure the 24bit alignment on DSP.
364 static void vxp_dma_write(struct vx_core *chip, struct snd_pcm_runtime *runtime, in vxp_dma_write() argument
367 long port = vxp_reg_addr(chip, VX_DMA); in vxp_dma_write()
368 int offset = pipe->hw_ptr; in vxp_dma_write()
369 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset); in vxp_dma_write()
371 vx_setup_pseudo_dma(chip, 1); in vxp_dma_write()
372 if (offset + count > pipe->buffer_bytes) { in vxp_dma_write()
373 int length = pipe->buffer_bytes - offset; in vxp_dma_write()
374 count -= length; in vxp_dma_write()
376 /* Transfer using pseudo-dma. */ in vxp_dma_write()
377 while (length-- > 0) { in vxp_dma_write()
381 addr = (unsigned short *)runtime->dma_area; in vxp_dma_write()
382 pipe->hw_ptr = 0; in vxp_dma_write()
384 pipe->hw_ptr += count; in vxp_dma_write()
386 /* Transfer using pseudo-dma. */ in vxp_dma_write()
387 while (count-- > 0) { in vxp_dma_write()
391 vx_release_pseudo_dma(chip); in vxp_dma_write()
396 * vx_pseudo_dma_read - read bulk data on pseudo DMA mode
398 * @count: data length to transfer in bytes
400 * the read length must be aligned to 6 bytes, as well as write.
403 static void vxp_dma_read(struct vx_core *chip, struct snd_pcm_runtime *runtime, in vxp_dma_read() argument
406 struct snd_vxpocket *pchip = (struct snd_vxpocket *)chip; in vxp_dma_read()
407 long port = vxp_reg_addr(chip, VX_DMA); in vxp_dma_read()
408 int offset = pipe->hw_ptr; in vxp_dma_read()
409 unsigned short *addr = (unsigned short *)(runtime->dma_area + offset); in vxp_dma_read()
413 vx_setup_pseudo_dma(chip, 0); in vxp_dma_read()
414 if (offset + count > pipe->buffer_bytes) { in vxp_dma_read()
415 int length = pipe->buffer_bytes - offset; in vxp_dma_read()
416 count -= length; in vxp_dma_read()
418 /* Transfer using pseudo-dma. */ in vxp_dma_read()
419 while (length-- > 0) in vxp_dma_read()
421 addr = (unsigned short *)runtime->dma_area; in vxp_dma_read()
422 pipe->hw_ptr = 0; in vxp_dma_read()
424 pipe->hw_ptr += count; in vxp_dma_read()
426 /* Transfer using pseudo-dma. */ in vxp_dma_read()
427 while (count-- > 1) in vxp_dma_read()
430 pchip->regDIALOG &= ~VXP_DLG_DMAREAD_SEL_MASK; in vxp_dma_read()
431 vx_outb(chip, DIALOG, pchip->regDIALOG); in vxp_dma_read()
434 /* Disable 16-bit accesses */ in vxp_dma_read()
435 pchip->regDIALOG &= ~VXP_DLG_DMA16_SEL_MASK; in vxp_dma_read()
436 vx_outb(chip, DIALOG, pchip->regDIALOG); in vxp_dma_read()
438 vx_outb(chip, ICR, 0); in vxp_dma_read()
445 static void vxp_write_codec_reg(struct vx_core *chip, int codec, unsigned int data) in vxp_write_codec_reg() argument
449 /* Activate access to the corresponding codec register */ in vxp_write_codec_reg()
451 vx_inb(chip, LOFREQ); in vxp_write_codec_reg()
453 vx_inb(chip, CODEC2); in vxp_write_codec_reg()
455 /* We have to send 24 bits (3 x 8 bits). Start with most signif. Bit */ in vxp_write_codec_reg()
457 vx_outb(chip, DATA, ((data & 0x800000) ? VX_DATA_CODEC_MASK : 0)); in vxp_write_codec_reg()
459 /* Terminate access to codec registers */ in vxp_write_codec_reg()
460 vx_inb(chip, HIFREQ); in vxp_write_codec_reg()
465 * vx_set_mic_boost - set mic boost level (on vxp440 only)
468 void vx_set_mic_boost(struct vx_core *chip, int boost) in vx_set_mic_boost() argument
470 struct snd_vxpocket *pchip = (struct snd_vxpocket *)chip; in vx_set_mic_boost()
473 if (chip->chip_status & VX_STAT_IS_STALE) in vx_set_mic_boost()
476 spin_lock_irqsave(&chip->lock, flags); in vx_set_mic_boost()
477 if (pchip->regCDSP & P24_CDSP_MICS_SEL_MASK) { in vx_set_mic_boost()
480 pchip->regCDSP &= ~P24_CDSP_MIC20_SEL_MASK; in vx_set_mic_boost()
481 pchip->regCDSP |= P24_CDSP_MIC38_SEL_MASK; in vx_set_mic_boost()
484 pchip->regCDSP |= P24_CDSP_MIC20_SEL_MASK; in vx_set_mic_boost()
485 pchip->regCDSP &= ~P24_CDSP_MIC38_SEL_MASK; in vx_set_mic_boost()
487 vx_outb(chip, CDSP, pchip->regCDSP); in vx_set_mic_boost()
489 spin_unlock_irqrestore(&chip->lock, flags); in vx_set_mic_boost()
493 * remap the linear value (0-8) to the actual value (0-15)
508 * vx_set_mic_level - set mic level (on vxpocket only)
509 * @level: the mic level = 0 - 8 (max)
511 void vx_set_mic_level(struct vx_core *chip, int level) in vx_set_mic_level() argument
513 struct snd_vxpocket *pchip = (struct snd_vxpocket *)chip; in vx_set_mic_level()
516 if (chip->chip_status & VX_STAT_IS_STALE) in vx_set_mic_level()
519 spin_lock_irqsave(&chip->lock, flags); in vx_set_mic_level()
520 if (pchip->regCDSP & VXP_CDSP_MIC_SEL_MASK) { in vx_set_mic_level()
522 vx_outb(chip, MICRO, level); in vx_set_mic_level()
524 spin_unlock_irqrestore(&chip->lock, flags); in vx_set_mic_level()
533 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_change_audio_source() local
537 chip->regCDSP |= VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
538 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
541 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
542 if (_chip->type == VX_TYPE_VXP440) in vxp_change_audio_source()
543 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK; in vxp_change_audio_source()
545 chip->regCDSP &= ~VXP_CDSP_MIC_SEL_MASK; in vxp_change_audio_source()
546 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
549 chip->regCDSP &= ~VXP_CDSP_DATAIN_SEL_MASK; in vxp_change_audio_source()
551 if (_chip->type == VX_TYPE_VXP440) { in vxp_change_audio_source()
552 chip->regCDSP &= ~P24_CDSP_MICS_SEL_MASK; in vxp_change_audio_source()
553 if (chip->mic_level) in vxp_change_audio_source()
554 chip->regCDSP |= P24_CDSP_MIC38_SEL_MASK; in vxp_change_audio_source()
556 chip->regCDSP |= P24_CDSP_MIC20_SEL_MASK; in vxp_change_audio_source()
557 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
559 chip->regCDSP |= VXP_CDSP_MIC_SEL_MASK; in vxp_change_audio_source()
560 vx_outb(chip, CDSP, chip->regCDSP); in vxp_change_audio_source()
561 vx_outb(chip, MICRO, vx_compute_mic_level(chip->mic_level)); in vxp_change_audio_source()
573 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_set_clock_source() local
576 chip->regCDSP &= ~VXP_CDSP_CLOCKIN_SEL_MASK; in vxp_set_clock_source()
578 chip->regCDSP |= VXP_CDSP_CLOCKIN_SEL_MASK; in vxp_set_clock_source()
579 vx_outb(chip, CDSP, chip->regCDSP); in vxp_set_clock_source()
588 struct snd_vxpocket *chip = (struct snd_vxpocket *)_chip; in vxp_reset_board() local
590 chip->regCDSP = 0; in vxp_reset_board()
591 chip->regDIALOG = 0; in vxp_reset_board()