Exemple #1
0
static void jz_pcm_stop_substream(struct snd_pcm_substream *substream,
		struct snd_soc_dai *dai)
{
	struct device *dev = dai->dev;
	PCM_DEBUG_MSG("enter %s, substream = %s\n",
			__func__,
			(substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ? "playback" : "capture");

	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
		if (__pcm_transmit_dma_is_enable(dev)) {
			__pcm_disable_transmit_dma(dev);
			__pcm_clear_tur(dev);
			/* Hrtimer mode: stop will be happen in any where, make sure there is
			 *	no data transfer on ahb bus before stop dma
			 * Harzard:
			 *	In pcm slave mode, the clk maybe stop before here, we will dead here
			 */
			while(!__pcm_test_tur(dev));
		}
		__pcm_disable_replay(dev);
		__pcm_clear_tur(dev);
	} else {
		if (__pcm_receive_dma_is_enable(dev)) {
			__pcm_disable_receive_dma(dev);
			__pcm_clear_ror(dev);
			while(!__pcm_test_ror(dev));
		}
		__pcm_disable_record(dev);
		__pcm_clear_ror(dev);
	}
	return;
}
Exemple #2
0
/*##################################################################*\
|* functions
\*##################################################################*/
static irqreturn_t pcm_irq_handler(int irq, void *dev_id)
{
	unsigned long flags;
	irqreturn_t ret = IRQ_HANDLED;

	spin_lock_irqsave(&pcm_irq_lock,flags);
	if (__pcm_test_tur()) {
		printk("UNDERRUN HAPPEN\n");
		__pcm_clear_tur();
	}
	spin_unlock_irqrestore(&pcm_irq_lock,flags);

	return ret;
}