• Home
  • Raw
  • Download

Lines Matching refs:gus

32 	struct snd_gus_card * gus;  member
49 static void snd_gf1_pcm_block_change_ack(struct snd_gus_card * gus, void *private_data) in snd_gf1_pcm_block_change_ack() argument
86 if (!snd_gf1_dma_transfer_block(pcmp->gus, &block, 0, 0)) in snd_gf1_pcm_block_change()
95 struct snd_gus_card * gus = pcmp->gus; in snd_gf1_pcm_trigger_up() local
112 rate = snd_gf1_translate_freq(gus, runtime->rate << 4); in snd_gf1_pcm_trigger_up()
132 vol = !voice ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_right; in snd_gf1_pcm_trigger_up()
133 spin_lock_irqsave(&gus->reg_lock, flags); in snd_gf1_pcm_trigger_up()
134 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
135 snd_gf1_write8(gus, SNDRV_GF1_VB_PAN, pan); in snd_gf1_pcm_trigger_up()
136 snd_gf1_write16(gus, SNDRV_GF1_VW_FREQUENCY, rate); in snd_gf1_pcm_trigger_up()
137 snd_gf1_write_addr(gus, SNDRV_GF1_VA_START, begin << 4, voice_ctrl & 4); in snd_gf1_pcm_trigger_up()
138 snd_gf1_write_addr(gus, SNDRV_GF1_VA_END, end << 4, voice_ctrl & 4); in snd_gf1_pcm_trigger_up()
139 snd_gf1_write_addr(gus, SNDRV_GF1_VA_CURRENT, curr << 4, voice_ctrl & 4); in snd_gf1_pcm_trigger_up()
140 snd_gf1_write16(gus, SNDRV_GF1_VW_VOLUME, SNDRV_GF1_MIN_VOLUME << 4); in snd_gf1_pcm_trigger_up()
141 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_RATE, 0x2f); in snd_gf1_pcm_trigger_up()
142 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_START, SNDRV_GF1_MIN_OFFSET); in snd_gf1_pcm_trigger_up()
143 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_END, vol >> 8); in snd_gf1_pcm_trigger_up()
144 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_CONTROL, ramp_ctrl); in snd_gf1_pcm_trigger_up()
145 if (!gus->gf1.enh_mode) { in snd_gf1_pcm_trigger_up()
146 snd_gf1_delay(gus); in snd_gf1_pcm_trigger_up()
147 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_CONTROL, ramp_ctrl); in snd_gf1_pcm_trigger_up()
149 spin_unlock_irqrestore(&gus->reg_lock, flags); in snd_gf1_pcm_trigger_up()
151 spin_lock_irqsave(&gus->reg_lock, flags); in snd_gf1_pcm_trigger_up()
153 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
154 if (gus->gf1.enh_mode) in snd_gf1_pcm_trigger_up()
155 snd_gf1_write8(gus, SNDRV_GF1_VB_MODE, 0x00); /* deactivate voice */ in snd_gf1_pcm_trigger_up()
156 snd_gf1_write8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL, voice_ctrl); in snd_gf1_pcm_trigger_up()
160 if (!gus->gf1.enh_mode) { in snd_gf1_pcm_trigger_up()
161 snd_gf1_delay(gus); in snd_gf1_pcm_trigger_up()
163 snd_gf1_select_voice(gus, pcmp->pvoices[voice]->number); in snd_gf1_pcm_trigger_up()
164 snd_gf1_write8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL, voice_ctrl); in snd_gf1_pcm_trigger_up()
168 spin_unlock_irqrestore(&gus->reg_lock, flags); in snd_gf1_pcm_trigger_up()
171 static void snd_gf1_pcm_interrupt_wave(struct snd_gus_card * gus, in snd_gf1_pcm_interrupt_wave() argument
182 snd_gf1_smart_stop_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_wave()
188 snd_gf1_smart_stop_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_wave()
191 gus = pcmp->gus; in snd_gf1_pcm_interrupt_wave()
194 spin_lock(&gus->reg_lock); in snd_gf1_pcm_interrupt_wave()
195 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_wave()
196 voice_ctrl = snd_gf1_read8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL) & ~0x8b; in snd_gf1_pcm_interrupt_wave()
197 ramp_ctrl = (snd_gf1_read8(gus, SNDRV_GF1_VB_VOLUME_CONTROL) & ~0xa4) | 0x03; in snd_gf1_pcm_interrupt_wave()
199 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_wave()
201 (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4)); in snd_gf1_pcm_interrupt_wave()
202 snd_gf1_select_voice(gus, pcmp->pvoices[1]->number); in snd_gf1_pcm_interrupt_wave()
204 (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4)); in snd_gf1_pcm_interrupt_wave()
205 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_wave()
223 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
224 snd_gf1_write_addr(gus, SNDRV_GF1_VA_END, end << 4, voice_ctrl & 4); in snd_gf1_pcm_interrupt_wave()
225 snd_gf1_write8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL, voice_ctrl); in snd_gf1_pcm_interrupt_wave()
226 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_CONTROL, ramp_ctrl); in snd_gf1_pcm_interrupt_wave()
229 if (!gus->gf1.enh_mode) { in snd_gf1_pcm_interrupt_wave()
230 snd_gf1_delay(gus); in snd_gf1_pcm_interrupt_wave()
233 snd_gf1_select_voice(gus, pcmp->pvoices[idx]->number); in snd_gf1_pcm_interrupt_wave()
234 snd_gf1_write8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL, voice_ctrl); in snd_gf1_pcm_interrupt_wave()
235 snd_gf1_write8(gus, SNDRV_GF1_VB_VOLUME_CONTROL, ramp_ctrl); in snd_gf1_pcm_interrupt_wave()
239 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_interrupt_wave()
256 static void snd_gf1_pcm_interrupt_volume(struct snd_gus_card * gus, in snd_gf1_pcm_interrupt_volume() argument
264 spin_lock(&gus->reg_lock); in snd_gf1_pcm_interrupt_volume()
265 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_volume()
266 snd_gf1_ctrl_stop(gus, SNDRV_GF1_VB_VOLUME_CONTROL); in snd_gf1_pcm_interrupt_volume()
267 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_interrupt_volume()
277 vol = !cvoice ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_right; in snd_gf1_pcm_interrupt_volume()
278 spin_lock(&gus->reg_lock); in snd_gf1_pcm_interrupt_volume()
279 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_interrupt_volume()
280 snd_gf1_write16(gus, SNDRV_GF1_VW_VOLUME, vol); in snd_gf1_pcm_interrupt_volume()
282 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_interrupt_volume()
285 static void snd_gf1_pcm_volume_change(struct snd_gus_card * gus) in snd_gf1_pcm_volume_change() argument
289 static int snd_gf1_pcm_poke_block(struct snd_gus_card *gus, unsigned char *buf, in snd_gf1_pcm_poke_block() argument
306 if (gus->interwave) { in snd_gf1_pcm_poke_block()
307 spin_lock_irqsave(&gus->reg_lock, flags); in snd_gf1_pcm_poke_block()
308 snd_gf1_write8(gus, SNDRV_GF1_GB_MEMORY_CONTROL, 0x01 | (invert ? 0x08 : 0x00)); in snd_gf1_pcm_poke_block()
309 snd_gf1_dram_addr(gus, pos); in snd_gf1_pcm_poke_block()
311 outb(SNDRV_GF1_GW_DRAM_IO16, GUSP(gus, GF1REGSEL)); in snd_gf1_pcm_poke_block()
312 outsw(GUSP(gus, GF1DATALOW), buf, len >> 1); in snd_gf1_pcm_poke_block()
314 outsb(GUSP(gus, DRAM), buf, len); in snd_gf1_pcm_poke_block()
316 spin_unlock_irqrestore(&gus->reg_lock, flags); in snd_gf1_pcm_poke_block()
324 snd_gf1_poke(gus, pos++, *buf++); in snd_gf1_pcm_poke_block()
325 snd_gf1_poke(gus, pos++, *buf++ ^ invert); in snd_gf1_pcm_poke_block()
329 snd_gf1_poke(gus, pos++, *buf++ ^ invert); in snd_gf1_pcm_poke_block()
357 struct snd_gus_card *gus = pcmp->gus; in playback_copy_ack() local
366 return snd_gf1_pcm_poke_block(gus, runtime->dma_area + bpos, in playback_copy_ack()
423 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_playback_hw_params() local
430 snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_params()
433 if ((block = snd_gf1_mem_alloc(&gus->gf1.mem_alloc, in snd_gf1_pcm_playback_hw_params()
443 if ((pcmp->pvoices[0] = snd_gf1_alloc_voice(pcmp->gus, SNDRV_GF1_VOICE_TYPE_PCM, 0, 0)) == NULL) in snd_gf1_pcm_playback_hw_params()
451 if ((pcmp->pvoices[1] = snd_gf1_alloc_voice(pcmp->gus, SNDRV_GF1_VOICE_TYPE_PCM, 0, 0)) == NULL) in snd_gf1_pcm_playback_hw_params()
459 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_params()
472 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]); in snd_gf1_pcm_playback_hw_free()
476 snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[1]); in snd_gf1_pcm_playback_hw_free()
480 snd_gf1_mem_free(&pcmp->gus->gf1.mem_alloc, pcmp->memory); in snd_gf1_pcm_playback_hw_free()
501 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_playback_trigger() local
513 snd_gf1_stop_voices(gus, voice, voice); in snd_gf1_pcm_playback_trigger()
516 snd_gf1_stop_voices(gus, voice, voice); in snd_gf1_pcm_playback_trigger()
526 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_playback_pointer() local
533 spin_lock(&gus->reg_lock); in snd_gf1_pcm_playback_pointer()
535 snd_gf1_select_voice(gus, pcmp->pvoices[0]->number); in snd_gf1_pcm_playback_pointer()
536 voice_ctrl = snd_gf1_read8(gus, SNDRV_GF1_VB_ADDRESS_CONTROL); in snd_gf1_pcm_playback_pointer()
537 pos = (snd_gf1_read_addr(gus, SNDRV_GF1_VA_CURRENT, voice_ctrl & 4) >> 4) - pcmp->memory; in snd_gf1_pcm_playback_pointer()
542 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_playback_pointer()
561 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_hw_params() local
563 gus->c_dma_size = params_buffer_bytes(hw_params); in snd_gf1_pcm_capture_hw_params()
564 gus->c_period_size = params_period_bytes(hw_params); in snd_gf1_pcm_capture_hw_params()
565 gus->c_pos = 0; in snd_gf1_pcm_capture_hw_params()
566 gus->gf1.pcm_rcntrl_reg = 0x21; /* IRQ at end, enable & start */ in snd_gf1_pcm_capture_hw_params()
568 gus->gf1.pcm_rcntrl_reg |= 2; in snd_gf1_pcm_capture_hw_params()
569 if (gus->gf1.dma2 > 3) in snd_gf1_pcm_capture_hw_params()
570 gus->gf1.pcm_rcntrl_reg |= 4; in snd_gf1_pcm_capture_hw_params()
572 gus->gf1.pcm_rcntrl_reg |= 0x80; in snd_gf1_pcm_capture_hw_params()
578 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_prepare() local
581 snd_gf1_i_write8(gus, SNDRV_GF1_GB_RECORD_RATE, runtime->rate_den - 2); in snd_gf1_pcm_capture_prepare()
582 snd_gf1_i_write8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL, 0); /* disable sampling */ in snd_gf1_pcm_capture_prepare()
583 snd_gf1_i_look8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL); /* Sampling Control Register */ in snd_gf1_pcm_capture_prepare()
584 snd_dma_program(gus->gf1.dma2, runtime->dma_addr, gus->c_period_size, DMA_MODE_READ); in snd_gf1_pcm_capture_prepare()
591 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_trigger() local
595 val = gus->gf1.pcm_rcntrl_reg; in snd_gf1_pcm_capture_trigger()
602 spin_lock(&gus->reg_lock); in snd_gf1_pcm_capture_trigger()
603 snd_gf1_write8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL, val); in snd_gf1_pcm_capture_trigger()
604 snd_gf1_look8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL); in snd_gf1_pcm_capture_trigger()
605 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_capture_trigger()
611 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_pointer() local
612 int pos = snd_dma_pointer(gus->gf1.dma2, gus->c_period_size); in snd_gf1_pcm_capture_pointer()
613 pos = bytes_to_frames(substream->runtime, (gus->c_pos + pos) % gus->c_dma_size); in snd_gf1_pcm_capture_pointer()
617 static void snd_gf1_pcm_interrupt_dma_read(struct snd_gus_card * gus) in snd_gf1_pcm_interrupt_dma_read() argument
619 snd_gf1_i_write8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL, 0); /* disable sampling */ in snd_gf1_pcm_interrupt_dma_read()
620 snd_gf1_i_look8(gus, SNDRV_GF1_GB_REC_DMA_CONTROL); /* Sampling Control Register */ in snd_gf1_pcm_interrupt_dma_read()
621 if (gus->pcm_cap_substream != NULL) { in snd_gf1_pcm_interrupt_dma_read()
622 snd_gf1_pcm_capture_prepare(gus->pcm_cap_substream); in snd_gf1_pcm_interrupt_dma_read()
623 snd_gf1_pcm_capture_trigger(gus->pcm_cap_substream, SNDRV_PCM_TRIGGER_START); in snd_gf1_pcm_interrupt_dma_read()
624 gus->c_pos += gus->c_period_size; in snd_gf1_pcm_interrupt_dma_read()
625 snd_pcm_period_elapsed(gus->pcm_cap_substream); in snd_gf1_pcm_interrupt_dma_read()
673 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_playback_open() local
680 pcmp->gus = gus; in snd_gf1_pcm_playback_open()
690 (long) pcm->playback.buffer, (long) gus->gf1.pcm_buffer); in snd_gf1_pcm_playback_open()
692 if ((err = snd_gf1_dma_init(gus)) < 0) in snd_gf1_pcm_playback_open()
697 snd_pcm_limit_isa_dma_size(gus->gf1.dma1, &runtime->hw.buffer_bytes_max); in snd_gf1_pcm_playback_open()
698 snd_pcm_limit_isa_dma_size(gus->gf1.dma1, &runtime->hw.period_bytes_max); in snd_gf1_pcm_playback_open()
705 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_playback_close() local
712 snd_gf1_dma_done(gus); in snd_gf1_pcm_playback_close()
719 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_open() local
721 gus->gf1.interrupt_handler_dma_read = snd_gf1_pcm_interrupt_dma_read; in snd_gf1_pcm_capture_open()
722 gus->pcm_cap_substream = substream; in snd_gf1_pcm_capture_open()
724 snd_pcm_limit_isa_dma_size(gus->gf1.dma2, &runtime->hw.buffer_bytes_max); in snd_gf1_pcm_capture_open()
725 snd_pcm_limit_isa_dma_size(gus->gf1.dma2, &runtime->hw.period_bytes_max); in snd_gf1_pcm_capture_open()
733 struct snd_gus_card *gus = snd_pcm_substream_chip(substream); in snd_gf1_pcm_capture_close() local
735 gus->pcm_cap_substream = NULL; in snd_gf1_pcm_capture_close()
736 snd_gf1_set_default_handlers(gus, SNDRV_GF1_HANDLER_DMA_READ); in snd_gf1_pcm_capture_close()
751 struct snd_gus_card *gus = snd_kcontrol_chip(kcontrol); in snd_gf1_pcm_volume_get() local
754 spin_lock_irqsave(&gus->pcm_volume_level_lock, flags); in snd_gf1_pcm_volume_get()
755 ucontrol->value.integer.value[0] = gus->gf1.pcm_volume_level_left1; in snd_gf1_pcm_volume_get()
756 ucontrol->value.integer.value[1] = gus->gf1.pcm_volume_level_right1; in snd_gf1_pcm_volume_get()
757 spin_unlock_irqrestore(&gus->pcm_volume_level_lock, flags); in snd_gf1_pcm_volume_get()
763 struct snd_gus_card *gus = snd_kcontrol_chip(kcontrol); in snd_gf1_pcm_volume_put() local
773 spin_lock_irqsave(&gus->pcm_volume_level_lock, flags); in snd_gf1_pcm_volume_put()
774 change = val1 != gus->gf1.pcm_volume_level_left1 || in snd_gf1_pcm_volume_put()
775 val2 != gus->gf1.pcm_volume_level_right1; in snd_gf1_pcm_volume_put()
776 gus->gf1.pcm_volume_level_left1 = val1; in snd_gf1_pcm_volume_put()
777 gus->gf1.pcm_volume_level_right1 = val2; in snd_gf1_pcm_volume_put()
778 gus->gf1.pcm_volume_level_left = snd_gf1_lvol_to_gvol_raw(val1 << 9) << 4; in snd_gf1_pcm_volume_put()
779 gus->gf1.pcm_volume_level_right = snd_gf1_lvol_to_gvol_raw(val2 << 9) << 4; in snd_gf1_pcm_volume_put()
780 spin_unlock_irqrestore(&gus->pcm_volume_level_lock, flags); in snd_gf1_pcm_volume_put()
782 spin_lock_irqsave(&gus->voice_alloc, flags); in snd_gf1_pcm_volume_put()
784 pvoice = &gus->gf1.voices[idx]; in snd_gf1_pcm_volume_put()
791 spin_lock(&gus->reg_lock); in snd_gf1_pcm_volume_put()
792 snd_gf1_select_voice(gus, pvoice->number); in snd_gf1_pcm_volume_put()
793 snd_gf1_ctrl_stop(gus, SNDRV_GF1_VB_VOLUME_CONTROL); in snd_gf1_pcm_volume_put()
794 …vol = pvoice == pcmp->pvoices[0] ? gus->gf1.pcm_volume_level_left : gus->gf1.pcm_volume_level_righ… in snd_gf1_pcm_volume_put()
795 snd_gf1_write16(gus, SNDRV_GF1_VW_VOLUME, vol); in snd_gf1_pcm_volume_put()
797 spin_unlock(&gus->reg_lock); in snd_gf1_pcm_volume_put()
799 spin_unlock_irqrestore(&gus->voice_alloc, flags); in snd_gf1_pcm_volume_put()
843 int snd_gf1_pcm_new(struct snd_gus_card *gus, int pcm_dev, int control_index) in snd_gf1_pcm_new() argument
851 card = gus->card; in snd_gf1_pcm_new()
852 capture = !gus->interwave && !gus->ess_flag && !gus->ace_flag ? 1 : 0; in snd_gf1_pcm_new()
854 gus->interwave ? "AMD InterWave" : "GF1", in snd_gf1_pcm_new()
856 gus->gf1.pcm_channels / 2, in snd_gf1_pcm_new()
861 pcm->private_data = gus; in snd_gf1_pcm_new()
868 64*1024, gus->gf1.dma1 > 3 ? 128*1024 : 64*1024); in snd_gf1_pcm_new()
874 if (gus->gf1.dma2 == gus->gf1.dma1) in snd_gf1_pcm_new()
878 64*1024, gus->gf1.dma2 > 3 ? 128*1024 : 64*1024); in snd_gf1_pcm_new()
881 if (gus->interwave) { in snd_gf1_pcm_new()
882 sprintf(pcm->name + strlen(pcm->name), " rev %c", gus->revision + 'A'); in snd_gf1_pcm_new()
885 gus->pcm = pcm; in snd_gf1_pcm_new()
887 if (gus->codec_flag) in snd_gf1_pcm_new()
888 kctl = snd_ctl_new1(&snd_gf1_pcm_volume_control1, gus); in snd_gf1_pcm_new()
890 kctl = snd_ctl_new1(&snd_gf1_pcm_volume_control, gus); in snd_gf1_pcm_new()