Lines Matching refs:chip
107 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_playback_prepare() local
115 switch (chip->hardware) { in snd_sb8_playback_prepare()
118 if (chip->mode & SB_MODE_CAPTURE_16) in snd_sb8_playback_prepare()
121 chip->mode |= SB_MODE_PLAYBACK_16; in snd_sb8_playback_prepare()
123 chip->playback_format = SB_DSP_LO_OUTPUT_AUTO; in snd_sb8_playback_prepare()
130 chip->playback_format = SB_DSP_HI_OUTPUT_AUTO; in snd_sb8_playback_prepare()
136 chip->playback_format = SB_DSP_HI_OUTPUT_AUTO; in snd_sb8_playback_prepare()
141 chip->playback_format = SB_DSP_LO_OUTPUT_AUTO; in snd_sb8_playback_prepare()
144 chip->playback_format = SB_DSP_OUTPUT; in snd_sb8_playback_prepare()
149 if (chip->mode & SB_MODE_PLAYBACK_16) { in snd_sb8_playback_prepare()
151 dma = chip->dma16; in snd_sb8_playback_prepare()
154 chip->mode |= SB_MODE_PLAYBACK_8; in snd_sb8_playback_prepare()
155 dma = chip->dma8; in snd_sb8_playback_prepare()
157 size = chip->p_dma_size = snd_pcm_lib_buffer_bytes(substream); in snd_sb8_playback_prepare()
158 count = chip->p_period_size = snd_pcm_lib_period_bytes(substream); in snd_sb8_playback_prepare()
159 spin_lock_irqsave(&chip->reg_lock, flags); in snd_sb8_playback_prepare()
160 snd_sbdsp_command(chip, SB_DSP_SPEAKER_ON); in snd_sb8_playback_prepare()
161 if (chip->hardware == SB_HW_JAZZ16) in snd_sb8_playback_prepare()
162 snd_sbdsp_command(chip, format); in snd_sb8_playback_prepare()
165 spin_lock(&chip->mixer_lock); in snd_sb8_playback_prepare()
166 mixreg = snd_sbmixer_read(chip, SB_DSP_STEREO_SW); in snd_sb8_playback_prepare()
167 snd_sbmixer_write(chip, SB_DSP_STEREO_SW, mixreg | 0x02); in snd_sb8_playback_prepare()
168 spin_unlock(&chip->mixer_lock); in snd_sb8_playback_prepare()
171 snd_sbdsp_command(chip, SB_DSP_DMA8_EXIT); in snd_sb8_playback_prepare()
175 snd_sbdsp_command(chip, SB_DSP_OUTPUT); in snd_sb8_playback_prepare()
176 snd_sbdsp_command(chip, 0); in snd_sb8_playback_prepare()
177 snd_sbdsp_command(chip, 0); in snd_sb8_playback_prepare()
179 snd_sbdsp_command(chip, SB_DSP_SAMPLE_RATE); in snd_sb8_playback_prepare()
181 snd_sbdsp_command(chip, 256 - runtime->rate_den / 2); in snd_sb8_playback_prepare()
182 spin_lock(&chip->mixer_lock); in snd_sb8_playback_prepare()
184 mixreg = snd_sbmixer_read(chip, SB_DSP_PLAYBACK_FILT); in snd_sb8_playback_prepare()
185 snd_sbmixer_write(chip, SB_DSP_PLAYBACK_FILT, mixreg | 0x20); in snd_sb8_playback_prepare()
186 spin_unlock(&chip->mixer_lock); in snd_sb8_playback_prepare()
188 chip->force_mode16 = mixreg; in snd_sb8_playback_prepare()
190 snd_sbdsp_command(chip, 256 - runtime->rate_den); in snd_sb8_playback_prepare()
192 if (chip->playback_format != SB_DSP_OUTPUT) { in snd_sb8_playback_prepare()
193 if (chip->mode & SB_MODE_PLAYBACK_16) in snd_sb8_playback_prepare()
196 snd_sbdsp_command(chip, SB_DSP_BLOCK_SIZE); in snd_sb8_playback_prepare()
197 snd_sbdsp_command(chip, count & 0xff); in snd_sb8_playback_prepare()
198 snd_sbdsp_command(chip, count >> 8); in snd_sb8_playback_prepare()
200 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_sb8_playback_prepare()
210 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_playback_trigger() local
213 spin_lock_irqsave(&chip->reg_lock, flags); in snd_sb8_playback_trigger()
216 snd_sbdsp_command(chip, chip->playback_format); in snd_sb8_playback_trigger()
217 if (chip->playback_format == SB_DSP_OUTPUT) { in snd_sb8_playback_trigger()
218 count = chip->p_period_size - 1; in snd_sb8_playback_trigger()
219 snd_sbdsp_command(chip, count & 0xff); in snd_sb8_playback_trigger()
220 snd_sbdsp_command(chip, count >> 8); in snd_sb8_playback_trigger()
224 if (chip->playback_format == SB_DSP_HI_OUTPUT_AUTO) { in snd_sb8_playback_trigger()
226 snd_sbdsp_reset(chip); in snd_sb8_playback_trigger()
228 spin_lock(&chip->mixer_lock); in snd_sb8_playback_trigger()
230 snd_sbmixer_write(chip, SB_DSP_STEREO_SW, chip->force_mode16 & ~0x02); in snd_sb8_playback_trigger()
231 spin_unlock(&chip->mixer_lock); in snd_sb8_playback_trigger()
234 snd_sbdsp_command(chip, SB_DSP_DMA8_OFF); in snd_sb8_playback_trigger()
236 snd_sbdsp_command(chip, SB_DSP_SPEAKER_OFF); in snd_sb8_playback_trigger()
238 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_sb8_playback_trigger()
257 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_capture_prepare() local
265 switch (chip->hardware) { in snd_sb8_capture_prepare()
268 if (chip->mode & SB_MODE_PLAYBACK_16) in snd_sb8_capture_prepare()
271 chip->mode |= SB_MODE_CAPTURE_16; in snd_sb8_capture_prepare()
273 chip->capture_format = SB_DSP_LO_INPUT_AUTO; in snd_sb8_capture_prepare()
280 chip->capture_format = SB_DSP_HI_INPUT_AUTO; in snd_sb8_capture_prepare()
283 chip->capture_format = (rate > 23000) ? SB_DSP_HI_INPUT_AUTO : SB_DSP_LO_INPUT_AUTO; in snd_sb8_capture_prepare()
287 chip->capture_format = SB_DSP_HI_INPUT_AUTO; in snd_sb8_capture_prepare()
292 chip->capture_format = SB_DSP_LO_INPUT_AUTO; in snd_sb8_capture_prepare()
295 chip->capture_format = SB_DSP_INPUT; in snd_sb8_capture_prepare()
300 if (chip->mode & SB_MODE_CAPTURE_16) { in snd_sb8_capture_prepare()
302 dma = chip->dma16; in snd_sb8_capture_prepare()
305 chip->mode |= SB_MODE_CAPTURE_8; in snd_sb8_capture_prepare()
306 dma = chip->dma8; in snd_sb8_capture_prepare()
308 size = chip->c_dma_size = snd_pcm_lib_buffer_bytes(substream); in snd_sb8_capture_prepare()
309 count = chip->c_period_size = snd_pcm_lib_period_bytes(substream); in snd_sb8_capture_prepare()
310 spin_lock_irqsave(&chip->reg_lock, flags); in snd_sb8_capture_prepare()
311 snd_sbdsp_command(chip, SB_DSP_SPEAKER_OFF); in snd_sb8_capture_prepare()
312 if (chip->hardware == SB_HW_JAZZ16) in snd_sb8_capture_prepare()
313 snd_sbdsp_command(chip, format); in snd_sb8_capture_prepare()
315 snd_sbdsp_command(chip, SB_DSP_STEREO_8BIT); in snd_sb8_capture_prepare()
316 snd_sbdsp_command(chip, SB_DSP_SAMPLE_RATE); in snd_sb8_capture_prepare()
318 snd_sbdsp_command(chip, 256 - runtime->rate_den / 2); in snd_sb8_capture_prepare()
319 spin_lock(&chip->mixer_lock); in snd_sb8_capture_prepare()
321 mixreg = snd_sbmixer_read(chip, SB_DSP_CAPTURE_FILT); in snd_sb8_capture_prepare()
322 snd_sbmixer_write(chip, SB_DSP_CAPTURE_FILT, mixreg | 0x20); in snd_sb8_capture_prepare()
323 spin_unlock(&chip->mixer_lock); in snd_sb8_capture_prepare()
325 chip->force_mode16 = mixreg; in snd_sb8_capture_prepare()
327 snd_sbdsp_command(chip, 256 - runtime->rate_den); in snd_sb8_capture_prepare()
329 if (chip->capture_format != SB_DSP_INPUT) { in snd_sb8_capture_prepare()
330 if (chip->mode & SB_MODE_PLAYBACK_16) in snd_sb8_capture_prepare()
333 snd_sbdsp_command(chip, SB_DSP_BLOCK_SIZE); in snd_sb8_capture_prepare()
334 snd_sbdsp_command(chip, count & 0xff); in snd_sb8_capture_prepare()
335 snd_sbdsp_command(chip, count >> 8); in snd_sb8_capture_prepare()
337 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_sb8_capture_prepare()
347 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_capture_trigger() local
350 spin_lock_irqsave(&chip->reg_lock, flags); in snd_sb8_capture_trigger()
353 snd_sbdsp_command(chip, chip->capture_format); in snd_sb8_capture_trigger()
354 if (chip->capture_format == SB_DSP_INPUT) { in snd_sb8_capture_trigger()
355 count = chip->c_period_size - 1; in snd_sb8_capture_trigger()
356 snd_sbdsp_command(chip, count & 0xff); in snd_sb8_capture_trigger()
357 snd_sbdsp_command(chip, count >> 8); in snd_sb8_capture_trigger()
361 if (chip->capture_format == SB_DSP_HI_INPUT_AUTO) { in snd_sb8_capture_trigger()
363 snd_sbdsp_reset(chip); in snd_sb8_capture_trigger()
366 spin_lock(&chip->mixer_lock); in snd_sb8_capture_trigger()
367 snd_sbmixer_write(chip, SB_DSP_CAPTURE_FILT, chip->force_mode16); in snd_sb8_capture_trigger()
368 spin_unlock(&chip->mixer_lock); in snd_sb8_capture_trigger()
370 snd_sbdsp_command(chip, SB_DSP_MONO_8BIT); in snd_sb8_capture_trigger()
373 snd_sbdsp_command(chip, SB_DSP_DMA8_OFF); in snd_sb8_capture_trigger()
375 snd_sbdsp_command(chip, SB_DSP_SPEAKER_OFF); in snd_sb8_capture_trigger()
377 spin_unlock_irqrestore(&chip->reg_lock, flags); in snd_sb8_capture_trigger()
381 irqreturn_t snd_sb8dsp_interrupt(struct snd_sb *chip) in snd_sb8dsp_interrupt() argument
386 snd_sb_ack_8bit(chip); in snd_sb8dsp_interrupt()
387 switch (chip->mode) { in snd_sb8dsp_interrupt()
389 if (chip->hardware != SB_HW_JAZZ16) in snd_sb8dsp_interrupt()
393 substream = chip->playback_substream; in snd_sb8dsp_interrupt()
395 if (chip->playback_format == SB_DSP_OUTPUT) in snd_sb8dsp_interrupt()
400 if (chip->hardware != SB_HW_JAZZ16) in snd_sb8dsp_interrupt()
404 substream = chip->capture_substream; in snd_sb8dsp_interrupt()
406 if (chip->capture_format == SB_DSP_INPUT) in snd_sb8dsp_interrupt()
416 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_playback_pointer() local
420 if (chip->mode & SB_MODE_PLAYBACK_8) in snd_sb8_playback_pointer()
421 dma = chip->dma8; in snd_sb8_playback_pointer()
422 else if (chip->mode & SB_MODE_PLAYBACK_16) in snd_sb8_playback_pointer()
423 dma = chip->dma16; in snd_sb8_playback_pointer()
426 ptr = snd_dma_pointer(dma, chip->p_dma_size); in snd_sb8_playback_pointer()
432 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_capture_pointer() local
436 if (chip->mode & SB_MODE_CAPTURE_8) in snd_sb8_capture_pointer()
437 dma = chip->dma8; in snd_sb8_capture_pointer()
438 else if (chip->mode & SB_MODE_CAPTURE_16) in snd_sb8_capture_pointer()
439 dma = chip->dma16; in snd_sb8_capture_pointer()
442 ptr = snd_dma_pointer(dma, chip->c_dma_size); in snd_sb8_capture_pointer()
494 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_open() local
498 spin_lock_irqsave(&chip->open_lock, flags); in snd_sb8_open()
499 if (chip->open) { in snd_sb8_open()
500 spin_unlock_irqrestore(&chip->open_lock, flags); in snd_sb8_open()
503 chip->open |= SB_OPEN_PCM; in snd_sb8_open()
504 spin_unlock_irqrestore(&chip->open_lock, flags); in snd_sb8_open()
506 chip->playback_substream = substream; in snd_sb8_open()
509 chip->capture_substream = substream; in snd_sb8_open()
512 switch (chip->hardware) { in snd_sb8_open()
514 if (chip->dma16 == 5 || chip->dma16 == 7) in snd_sb8_open()
543 if (chip->dma8 > 3 || chip->dma16 >= 0) { in snd_sb8_open()
557 struct snd_sb *chip = snd_pcm_substream_chip(substream); in snd_sb8_close() local
559 chip->playback_substream = NULL; in snd_sb8_close()
560 chip->capture_substream = NULL; in snd_sb8_close()
561 spin_lock_irqsave(&chip->open_lock, flags); in snd_sb8_close()
562 chip->open &= ~SB_OPEN_PCM; in snd_sb8_close()
564 chip->mode &= ~SB_MODE_PLAYBACK; in snd_sb8_close()
566 chip->mode &= ~SB_MODE_CAPTURE; in snd_sb8_close()
567 spin_unlock_irqrestore(&chip->open_lock, flags); in snd_sb8_close()
597 int snd_sb8dsp_pcm(struct snd_sb *chip, int device) in snd_sb8dsp_pcm() argument
599 struct snd_card *card = chip->card; in snd_sb8dsp_pcm()
606 sprintf(pcm->name, "DSP v%i.%i", chip->version >> 8, chip->version & 0xff); in snd_sb8dsp_pcm()
608 pcm->private_data = chip; in snd_sb8dsp_pcm()
613 if (chip->dma8 > 3 || chip->dma16 >= 0) in snd_sb8dsp_pcm()