/* audio_setup_dma() * * Just a simple funcion to control DMA setting for AC'97 audio */ static void audio_setup_dma(struct audio_stream_a *s, int stream_id) { #ifdef CONFIG_SND_WMT_SOC_AC97 struct snd_pcm_runtime *runtime = s->stream->runtime; #endif DBG_DETAIL(); #ifdef CONFIG_SND_WMT_SOC_I2S if (!strcmp(wmt_dai_name, "i2s")) { if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) s->dma_cfg.DefaultCCR = I2S_TX_DMA_32BITS_CFG ; else s->dma_cfg.DefaultCCR = I2S_RX_DMA_32BITS_CFG ; } #endif #ifdef CONFIG_SND_WMT_SOC_AC97 if (!strcmp(wmt_dai_name, "ac97")) { if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) { /* From memory to device */ switch (runtime->channels * runtime->format) { case 1: s->dma_cfg.DefaultCCR = AC97_TX_DMA_8BITS_CFG; /* setup 1 bytes*/ break ; case 2: s->dma_cfg.DefaultCCR = AC97_TX_DMA_16BITS_CFG; /* setup 2 bytes*/ break ; case 4: s->dma_cfg.DefaultCCR = AC97_TX_DMA_32BITS_CFG; /* setup 4 byte*/ break ; } } else { /* From device to memory */ switch (runtime->channels * runtime->format) { case 1: s->dma_cfg.DefaultCCR = AC97_RX_DMA_8BITS_CFG ; /* setup 1 bytes*/ break ; case 2: s->dma_cfg.DefaultCCR = AC97_RX_DMA_16BITS_CFG ; /* setup 2 bytes*/ break ; case 4: s->dma_cfg.DefaultCCR = AC97_RX_DMA_32BITS_CFG ; /* setup 4 byte*/ break ; } } } #endif s->dma_cfg.ChunkSize = 1; if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) { pcm_out_dma_cfg = &s->dma_cfg; } //DPRINTK("s pointer: %d. audio dma %d cfg.DefaultCCR 0x%x ", (int)s, s->dmach, (unsigned int)s->dma_cfg.DefaultCCR); //DPRINTK("cfg.ChunkSize 0x%x ", s->dma_cfg.ChunkSize); wmt_setup_dma(s->dmach, s->dma_cfg) ; }
/* audio_setup_dma() * * Just a simple funcion to control DMA setting for AC'97 audio */ static void audio_setup_dma(struct audio_stream_a *s, int stream_id) { struct snd_pcm_runtime *runtime = s->stream->runtime; DBG_DETAIL(); if (stream_id == SNDRV_PCM_STREAM_PLAYBACK) { /* From memory to device */ switch (runtime->channels * runtime->format) { case 1: s->dma_cfg.DefaultCCR = PCM_TX_DMA_8BITS_CFG; /* setup 1 bytes*/ break ; case 2: s->dma_cfg.DefaultCCR = PCM_TX_DMA_16BITS_CFG; /* setup 2 bytes*/ break ; case 4: s->dma_cfg.DefaultCCR = PCM_TX_DMA_32BITS_CFG; /* setup 4 byte*/ break ; } } else { /* From device to memory */ switch (runtime->channels * runtime->format) { case 1: s->dma_cfg.DefaultCCR = PCM_RX_DMA_8BITS_CFG ; /* setup 1 bytes*/ break ; case 2: s->dma_cfg.DefaultCCR = PCM_RX_DMA_16BITS_CFG ; /* setup 2 bytes*/ break ; case 4: s->dma_cfg.DefaultCCR = PCM_RX_DMA_32BITS_CFG ; /* setup 4 byte*/ break ; } } s->dma_cfg.ChunkSize = 1; wmt_setup_dma(s->dmach, s->dma_cfg) ; }