printk(KERN_INFO "Vortex: periods %d, period_bytes %d, channels = %d\n", params_periods(hw_params),
params_period_bytes(hw_params), params_channels(hw_params));
*/
+ spin_lock_irq(&chip->lock);
// Make audio routes and config buffer DMA.
if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
int dma, type = VORTEX_PCM_TYPE(substream->pcm);
params_periods(hw_params));
}
#endif
+ spin_unlock_irq(&chip->lock);
return 0;
}
vortex_t *chip = snd_pcm_substream_chip(substream);
stream_t *stream = (stream_t *) (substream->runtime->private_data);
+ spin_lock_irq(&chip->lock);
// Delete audio routes.
if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
if (stream != NULL)
}
#endif
substream->runtime->private_data = NULL;
+ spin_unlock_irq(&chip->lock);
return snd_pcm_lib_free_pages(substream);
}
else
dir = 0;
fmt = vortex_alsafmt_aspfmt(runtime->format);
+ spin_lock_irq(&chip->lock);
if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
vortex_adbdma_setmode(chip, dma, 1, dir, fmt, 0 /*? */ ,
0);
vortex_wtdma_setstartbuffer(chip, dma, 0);
}
#endif
+ spin_unlock_irq(&chip->lock);
return 0;
}
stream_t *stream = (stream_t *) substream->runtime->private_data;
int dma = stream->dma;
+ spin_lock(&chip->lock);
switch (cmd) {
case SNDRV_PCM_TRIGGER_START:
// do something to start the PCM engine
//printk(KERN_INFO "vortex: start %d\n", dma);
stream->fifo_enabled = 1;
- if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT)
+ if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
+ vortex_adbdma_resetup(chip, dma);
vortex_adbdma_startfifo(chip, dma);
+ }
#ifndef CHIP_AU8810
else {
printk(KERN_INFO "vortex: wt start %d\n", dma);
#endif
break;
default:
+ spin_unlock(&chip->lock);
return -EINVAL;
}
+ spin_unlock(&chip->lock);
return 0;
}