Lines Matching refs:chip

83 static void set_default_audio_parameters(struct snd_msnd *chip)  in set_default_audio_parameters()  argument
85 chip->play_sample_size = DEFSAMPLESIZE; in set_default_audio_parameters()
86 chip->play_sample_rate = DEFSAMPLERATE; in set_default_audio_parameters()
87 chip->play_channels = DEFCHANNELS; in set_default_audio_parameters()
88 chip->capture_sample_size = DEFSAMPLESIZE; in set_default_audio_parameters()
89 chip->capture_sample_rate = DEFSAMPLERATE; in set_default_audio_parameters()
90 chip->capture_channels = DEFCHANNELS; in set_default_audio_parameters()
93 static void snd_msnd_eval_dsp_msg(struct snd_msnd *chip, u16 wMessage) in snd_msnd_eval_dsp_msg() argument
97 if (chip->banksPlayed < 3) in snd_msnd_eval_dsp_msg()
101 if (chip->last_playbank == LOBYTE(wMessage)) { in snd_msnd_eval_dsp_msg()
105 chip->banksPlayed++; in snd_msnd_eval_dsp_msg()
107 if (test_bit(F_WRITING, &chip->flags)) in snd_msnd_eval_dsp_msg()
108 snd_msnd_DAPQ(chip, 0); in snd_msnd_eval_dsp_msg()
110 chip->last_playbank = LOBYTE(wMessage); in snd_msnd_eval_dsp_msg()
111 chip->playDMAPos += chip->play_period_bytes; in snd_msnd_eval_dsp_msg()
112 if (chip->playDMAPos > chip->playLimit) in snd_msnd_eval_dsp_msg()
113 chip->playDMAPos = 0; in snd_msnd_eval_dsp_msg()
114 snd_pcm_period_elapsed(chip->playback_substream); in snd_msnd_eval_dsp_msg()
119 if (chip->last_recbank == LOBYTE(wMessage)) in snd_msnd_eval_dsp_msg()
121 chip->last_recbank = LOBYTE(wMessage); in snd_msnd_eval_dsp_msg()
122 chip->captureDMAPos += chip->capturePeriodBytes; in snd_msnd_eval_dsp_msg()
123 if (chip->captureDMAPos > (chip->captureLimit)) in snd_msnd_eval_dsp_msg()
124 chip->captureDMAPos = 0; in snd_msnd_eval_dsp_msg()
126 if (test_bit(F_READING, &chip->flags)) in snd_msnd_eval_dsp_msg()
127 snd_msnd_DARQ(chip, chip->last_recbank); in snd_msnd_eval_dsp_msg()
129 snd_pcm_period_elapsed(chip->capture_substream); in snd_msnd_eval_dsp_msg()
139 chip->banksPlayed); in snd_msnd_eval_dsp_msg()
140 if (chip->banksPlayed > 2) in snd_msnd_eval_dsp_msg()
141 clear_bit(F_WRITING, &chip->flags); in snd_msnd_eval_dsp_msg()
146 clear_bit(F_READING, &chip->flags); in snd_msnd_eval_dsp_msg()
158 if (chip->msndmidi_mpu) in snd_msnd_eval_dsp_msg()
159 snd_msndmidi_input_read(chip->msndmidi_mpu); in snd_msnd_eval_dsp_msg()
171 struct snd_msnd *chip = dev_id; in snd_msnd_interrupt() local
172 void *pwDSPQData = chip->mappedbase + DSPQ_DATA_BUFF; in snd_msnd_interrupt()
178 while (readw(chip->DSPQ + JQS_wTail) != readw(chip->DSPQ + JQS_wHead)) { in snd_msnd_interrupt()
181 snd_msnd_eval_dsp_msg(chip, in snd_msnd_interrupt()
182 readw(pwDSPQData + 2 * readw(chip->DSPQ + JQS_wHead))); in snd_msnd_interrupt()
184 wTmp = readw(chip->DSPQ + JQS_wHead) + 1; in snd_msnd_interrupt()
185 if (wTmp > readw(chip->DSPQ + JQS_wSize)) in snd_msnd_interrupt()
186 writew(0, chip->DSPQ + JQS_wHead); in snd_msnd_interrupt()
188 writew(wTmp, chip->DSPQ + JQS_wHead); in snd_msnd_interrupt()
191 inb(chip->io + HP_RXL); in snd_msnd_interrupt()
220 struct snd_msnd *chip = card->private_data; in snd_msnd_probe() local
228 if (!request_region(chip->io, DSP_NUMIO, "probing")) { in snd_msnd_probe()
233 if (snd_msnd_reset_dsp(chip->io, &info) < 0) { in snd_msnd_probe()
234 release_region(chip->io, DSP_NUMIO); in snd_msnd_probe()
244 chip->io, chip->io + DSP_NUMIO - 1, in snd_msnd_probe()
245 chip->irq, in snd_msnd_probe()
246 chip->base, chip->base + 0x7fff); in snd_msnd_probe()
305 chip->io, chip->io + DSP_NUMIO - 1, in snd_msnd_probe()
306 chip->irq, in snd_msnd_probe()
307 chip->base, chip->base + 0x7fff); in snd_msnd_probe()
310 release_region(chip->io, DSP_NUMIO); in snd_msnd_probe()
314 static int snd_msnd_init_sma(struct snd_msnd *chip) in snd_msnd_init_sma() argument
321 outb(chip->memid, chip->io + HP_MEMM); in snd_msnd_init_sma()
323 outb(HPBLKSEL_0, chip->io + HP_BLKS); in snd_msnd_init_sma()
325 chip->SMA = chip->mappedbase + SMA_STRUCT_START; in snd_msnd_init_sma()
328 mastVolLeft = readw(chip->SMA + SMA_wCurrMastVolLeft); in snd_msnd_init_sma()
329 mastVolRight = readw(chip->SMA + SMA_wCurrMastVolRight); in snd_msnd_init_sma()
332 memset_io(chip->mappedbase, 0, 0x8000); in snd_msnd_init_sma()
335 spin_lock_irqsave(&chip->lock, flags); in snd_msnd_init_sma()
336 outb(HPBLKSEL_1, chip->io + HP_BLKS); in snd_msnd_init_sma()
337 memset_io(chip->mappedbase, 0, 0x8000); in snd_msnd_init_sma()
338 outb(HPBLKSEL_0, chip->io + HP_BLKS); in snd_msnd_init_sma()
339 spin_unlock_irqrestore(&chip->lock, flags); in snd_msnd_init_sma()
342 chip->DAPQ = chip->mappedbase + DAPQ_OFFSET; in snd_msnd_init_sma()
343 snd_msnd_init_queue(chip->DAPQ, DAPQ_DATA_BUFF, DAPQ_BUFF_SIZE); in snd_msnd_init_sma()
346 chip->DARQ = chip->mappedbase + DARQ_OFFSET; in snd_msnd_init_sma()
347 snd_msnd_init_queue(chip->DARQ, DARQ_DATA_BUFF, DARQ_BUFF_SIZE); in snd_msnd_init_sma()
350 chip->MODQ = chip->mappedbase + MODQ_OFFSET; in snd_msnd_init_sma()
351 snd_msnd_init_queue(chip->MODQ, MODQ_DATA_BUFF, MODQ_BUFF_SIZE); in snd_msnd_init_sma()
354 chip->MIDQ = chip->mappedbase + MIDQ_OFFSET; in snd_msnd_init_sma()
355 snd_msnd_init_queue(chip->MIDQ, MIDQ_DATA_BUFF, MIDQ_BUFF_SIZE); in snd_msnd_init_sma()
358 chip->DSPQ = chip->mappedbase + DSPQ_OFFSET; in snd_msnd_init_sma()
359 snd_msnd_init_queue(chip->DSPQ, DSPQ_DATA_BUFF, DSPQ_BUFF_SIZE); in snd_msnd_init_sma()
363 writew(1, chip->SMA + SMA_wCurrPlayFormat); in snd_msnd_init_sma()
364 writew(chip->play_sample_size, chip->SMA + SMA_wCurrPlaySampleSize); in snd_msnd_init_sma()
365 writew(chip->play_channels, chip->SMA + SMA_wCurrPlayChannels); in snd_msnd_init_sma()
366 writew(chip->play_sample_rate, chip->SMA + SMA_wCurrPlaySampleRate); in snd_msnd_init_sma()
368 writew(chip->play_sample_rate, chip->SMA + SMA_wCalFreqAtoD); in snd_msnd_init_sma()
369 writew(mastVolLeft, chip->SMA + SMA_wCurrMastVolLeft); in snd_msnd_init_sma()
370 writew(mastVolRight, chip->SMA + SMA_wCurrMastVolRight); in snd_msnd_init_sma()
372 writel(0x00010000, chip->SMA + SMA_dwCurrPlayPitch); in snd_msnd_init_sma()
373 writel(0x00000001, chip->SMA + SMA_dwCurrPlayRate); in snd_msnd_init_sma()
375 writew(0x303, chip->SMA + SMA_wCurrInputTagBits); in snd_msnd_init_sma()
385 struct snd_msnd *chip = card->private_data; in upload_dsp_code() local
389 outb(HPBLKSEL_0, chip->io + HP_BLKS); in upload_dsp_code()
402 memcpy_toio(chip->mappedbase, perm_fw->data, perm_fw->size); in upload_dsp_code()
403 if (snd_msnd_upload_host(chip, init_fw->data, init_fw->size) < 0) { in upload_dsp_code()
419 static void reset_proteus(struct snd_msnd *chip) in reset_proteus() argument
421 outb(HPPRORESET_ON, chip->io + HP_PROR); in reset_proteus()
423 outb(HPPRORESET_OFF, chip->io + HP_PROR); in reset_proteus()
430 struct snd_msnd *chip = card->private_data; in snd_msnd_initialize() local
434 outb(HPWAITSTATE_0, chip->io + HP_WAIT); in snd_msnd_initialize()
435 outb(HPBITMODE_16, chip->io + HP_BITM); in snd_msnd_initialize()
437 reset_proteus(chip); in snd_msnd_initialize()
439 err = snd_msnd_init_sma(chip); in snd_msnd_initialize()
445 err = snd_msnd_reset_dsp(chip->io, NULL); in snd_msnd_initialize()
457 while (readw(chip->mappedbase)) { in snd_msnd_initialize()
465 snd_msndmix_setup(chip); in snd_msnd_initialize()
471 struct snd_msnd *chip = card->private_data; in snd_msnd_dsp_full_reset() local
474 if (test_bit(F_RESETTING, &chip->flags) || ++chip->nresets > 10) in snd_msnd_dsp_full_reset()
477 set_bit(F_RESETTING, &chip->flags); in snd_msnd_dsp_full_reset()
478 snd_msnd_dsp_halt(chip, NULL); /* Unconditionally halt */ in snd_msnd_dsp_full_reset()
483 snd_msndmix_force_recsrc(chip, 0); in snd_msnd_dsp_full_reset()
484 clear_bit(F_RESETTING, &chip->flags); in snd_msnd_dsp_full_reset()
494 static int snd_msnd_send_dsp_cmd_chk(struct snd_msnd *chip, u8 cmd) in snd_msnd_send_dsp_cmd_chk() argument
496 if (snd_msnd_send_dsp_cmd(chip, cmd) == 0) in snd_msnd_send_dsp_cmd_chk()
498 snd_msnd_dsp_full_reset(chip->card); in snd_msnd_send_dsp_cmd_chk()
499 return snd_msnd_send_dsp_cmd(chip, cmd); in snd_msnd_send_dsp_cmd_chk()
502 static int snd_msnd_calibrate_adc(struct snd_msnd *chip, u16 srate) in snd_msnd_calibrate_adc() argument
505 writew(srate, chip->SMA + SMA_wCalFreqAtoD); in snd_msnd_calibrate_adc()
506 if (chip->calibrate_signal == 0) in snd_msnd_calibrate_adc()
507 writew(readw(chip->SMA + SMA_wCurrHostStatusFlags) in snd_msnd_calibrate_adc()
508 | 0x0001, chip->SMA + SMA_wCurrHostStatusFlags); in snd_msnd_calibrate_adc()
510 writew(readw(chip->SMA + SMA_wCurrHostStatusFlags) in snd_msnd_calibrate_adc()
511 & ~0x0001, chip->SMA + SMA_wCurrHostStatusFlags); in snd_msnd_calibrate_adc()
512 if (snd_msnd_send_word(chip, 0, 0, HDEXAR_CAL_A_TO_D) == 0 && in snd_msnd_calibrate_adc()
513 snd_msnd_send_dsp_cmd_chk(chip, HDEX_AUX_REQ) == 0) { in snd_msnd_calibrate_adc()
542 struct snd_msnd *chip = card->private_data; in snd_msnd_attach() local
548 err = request_irq(chip->irq, snd_msnd_interrupt, 0, card->shortname, in snd_msnd_attach()
549 chip); in snd_msnd_attach()
551 printk(KERN_ERR LOGNAME ": Couldn't grab IRQ %d\n", chip->irq); in snd_msnd_attach()
554 if (request_region(chip->io, DSP_NUMIO, card->shortname) == NULL) { in snd_msnd_attach()
555 free_irq(chip->irq, chip); in snd_msnd_attach()
559 if (!request_mem_region(chip->base, BUFFSIZE, card->shortname)) { in snd_msnd_attach()
562 chip->base, chip->base + BUFFSIZE - 1); in snd_msnd_attach()
563 release_region(chip->io, DSP_NUMIO); in snd_msnd_attach()
564 free_irq(chip->irq, chip); in snd_msnd_attach()
567 chip->mappedbase = ioremap_nocache(chip->base, 0x8000); in snd_msnd_attach()
568 if (!chip->mappedbase) { in snd_msnd_attach()
571 chip->base, chip->base + BUFFSIZE - 1); in snd_msnd_attach()
581 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); in snd_msnd_attach()
606 &chip->rmidi); in snd_msnd_attach()
612 mpu = chip->rmidi->private_data; in snd_msnd_attach()
616 mpu->private_data = chip; in snd_msnd_attach()
619 disable_irq(chip->irq); in snd_msnd_attach()
620 snd_msnd_calibrate_adc(chip, chip->play_sample_rate); in snd_msnd_attach()
621 snd_msndmix_force_recsrc(chip, 0); in snd_msnd_attach()
630 iounmap(chip->mappedbase); in snd_msnd_attach()
631 release_mem_region(chip->base, BUFFSIZE); in snd_msnd_attach()
632 release_region(chip->io, DSP_NUMIO); in snd_msnd_attach()
633 free_irq(chip->irq, chip); in snd_msnd_attach()
640 struct snd_msnd *chip = card->private_data; in snd_msnd_unload() local
642 iounmap(chip->mappedbase); in snd_msnd_unload()
643 release_mem_region(chip->base, BUFFSIZE); in snd_msnd_unload()
644 release_region(chip->io, DSP_NUMIO); in snd_msnd_unload()
645 free_irq(chip->irq, chip); in snd_msnd_unload()
896 struct snd_msnd *chip; in snd_msnd_isa_probe() local
912 chip = card->private_data; in snd_msnd_isa_probe()
913 chip->card = card; in snd_msnd_isa_probe()
918 chip->irqid = HPIRQ_5; break; in snd_msnd_isa_probe()
920 chip->irqid = HPIRQ_7; break; in snd_msnd_isa_probe()
922 chip->irqid = HPIRQ_9; break; in snd_msnd_isa_probe()
924 chip->irqid = HPIRQ_10; break; in snd_msnd_isa_probe()
926 chip->irqid = HPIRQ_11; break; in snd_msnd_isa_probe()
928 chip->irqid = HPIRQ_12; break; in snd_msnd_isa_probe()
933 chip->memid = HPMEM_B000; break; in snd_msnd_isa_probe()
935 chip->memid = HPMEM_C800; break; in snd_msnd_isa_probe()
937 chip->memid = HPMEM_D000; break; in snd_msnd_isa_probe()
939 chip->memid = HPMEM_D800; break; in snd_msnd_isa_probe()
941 chip->memid = HPMEM_E000; break; in snd_msnd_isa_probe()
943 chip->memid = HPMEM_E800; break; in snd_msnd_isa_probe()
1016 set_default_audio_parameters(chip); in snd_msnd_isa_probe()
1018 chip->type = msndClassic; in snd_msnd_isa_probe()
1020 chip->type = msndPinnacle; in snd_msnd_isa_probe()
1022 chip->io = io[idx]; in snd_msnd_isa_probe()
1023 chip->irq = irq[idx]; in snd_msnd_isa_probe()
1024 chip->base = mem[idx]; in snd_msnd_isa_probe()
1026 chip->calibrate_signal = calibrate_signal ? 1 : 0; in snd_msnd_isa_probe()
1027 chip->recsrc = 0; in snd_msnd_isa_probe()
1028 chip->dspq_data_buff = DSPQ_DATA_BUFF; in snd_msnd_isa_probe()
1029 chip->dspq_buff_size = DSPQ_BUFF_SIZE; in snd_msnd_isa_probe()
1031 clear_bit(F_DISABLE_WRITE_NDELAY, &chip->flags); in snd_msnd_isa_probe()
1033 set_bit(F_DISABLE_WRITE_NDELAY, &chip->flags); in snd_msnd_isa_probe()
1036 set_bit(F_HAVEDIGITAL, &chip->flags); in snd_msnd_isa_probe()
1038 spin_lock_init(&chip->lock); in snd_msnd_isa_probe()
1088 struct snd_msnd *chip; in snd_msnd_pnp_detect() local
1129 chip = card->private_data; in snd_msnd_pnp_detect()
1130 chip->card = card; in snd_msnd_pnp_detect()
1141 set_default_audio_parameters(chip); in snd_msnd_pnp_detect()
1143 chip->type = msndClassic; in snd_msnd_pnp_detect()
1145 chip->type = msndPinnacle; in snd_msnd_pnp_detect()
1147 chip->io = io[idx]; in snd_msnd_pnp_detect()
1148 chip->irq = irq[idx]; in snd_msnd_pnp_detect()
1149 chip->base = mem[idx]; in snd_msnd_pnp_detect()
1151 chip->calibrate_signal = calibrate_signal ? 1 : 0; in snd_msnd_pnp_detect()
1152 chip->recsrc = 0; in snd_msnd_pnp_detect()
1153 chip->dspq_data_buff = DSPQ_DATA_BUFF; in snd_msnd_pnp_detect()
1154 chip->dspq_buff_size = DSPQ_BUFF_SIZE; in snd_msnd_pnp_detect()
1156 clear_bit(F_DISABLE_WRITE_NDELAY, &chip->flags); in snd_msnd_pnp_detect()
1158 set_bit(F_DISABLE_WRITE_NDELAY, &chip->flags); in snd_msnd_pnp_detect()
1161 set_bit(F_HAVEDIGITAL, &chip->flags); in snd_msnd_pnp_detect()
1163 spin_lock_init(&chip->lock); in snd_msnd_pnp_detect()