Message ID | 1372755849-19546-2-git-send-email-voice.shen@atmel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 07/02/2013 11:04 AM, Bo Shen wrote:
[...]
> + dma_params->substream = substream;
Unrelated to this patch, but having a substream field in the dma_params seems
to be redundant, since you need to know the substream to get the dma_params in
the first place. Looking at the code it also seems to be unused other than this
assignment. Maybe you can send a follow up patch to remove it.
[...]
Hi Lars-Peter, On 7/2/2013 23:25, Lars-Peter Clausen wrote: > On 07/02/2013 11:04 AM, Bo Shen wrote: > [...] >> + dma_params->substream = substream; > > Unrelated to this patch, but having a substream field in the dma_params seems > to be redundant, since you need to know the substream to get the dma_params in > the first place. Looking at the code it also seems to be unused other than this > assignment. Maybe you can send a follow up patch to remove it. > > [...] > Yes, this is redundant. I will remove it in next version patches. Best Regards, Bo Shen
Hi Lars, On 7/3/2013 09:20, Bo Shen wrote: > Hi Lars-Peter, > > On 7/2/2013 23:25, Lars-Peter Clausen wrote: >> On 07/02/2013 11:04 AM, Bo Shen wrote: >> [...] >>> + dma_params->substream = substream; >> >> Unrelated to this patch, but having a substream field in the >> dma_params seems >> to be redundant, since you need to know the substream to get the >> dma_params in >> the first place. Looking at the code it also seems to be unused other >> than this >> assignment. Maybe you can send a follow up patch to remove it. >> >> [...] >> > > Yes, this is redundant. I will remove it in next version patches. Sorry for mistake, this substream parameter need by the interrupt for PDC transfer, so, I will keep it. Best Regards, Bo Shen
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c index f3fdfa0..6cf9cf1 100644 --- a/sound/soc/atmel/atmel_ssc_dai.c +++ b/sound/soc/atmel/atmel_ssc_dai.c @@ -196,15 +196,27 @@ static int atmel_ssc_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; - int dir_mask; + struct atmel_pcm_dma_params *dma_params; + int dir, dir_mask; pr_debug("atmel_ssc_startup: SSC_SR=0x%u\n", ssc_readl(ssc_p->ssc->regs, SR)); - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { + dir = 0; dir_mask = SSC_DIR_MASK_PLAYBACK; - else + } else { + dir = 1; dir_mask = SSC_DIR_MASK_CAPTURE; + } + + dma_params = &ssc_dma_params[dai->id][dir]; + dma_params->ssc = ssc_p->ssc; + dma_params->substream = substream; + + ssc_p->dma_params[dir] = dma_params; + + snd_soc_dai_set_dma_data(dai, substream, dma_params); spin_lock_irq(&ssc_p->lock); if (ssc_p->dir_mask & dir_mask) { @@ -325,7 +337,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { - struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream); int id = dai->id; struct atmel_ssc_info *ssc_p = &ssc_info[id]; struct atmel_pcm_dma_params *dma_params; @@ -344,19 +355,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream, else dir = 1; - dma_params = &ssc_dma_params[id][dir]; - dma_params->ssc = ssc_p->ssc; - dma_params->substream = substream; - - ssc_p->dma_params[dir] = dma_params; - - /* - * The snd_soc_pcm_stream->dma_data field is only used to communicate - * the appropriate DMA parameters to the pcm driver hw_params() - * function. It should not be used for other purposes - * as it is common to all substreams. - */ - snd_soc_dai_set_dma_data(rtd->cpu_dai, substream, dma_params); + dma_params = ssc_p->dma_params[dir]; channels = params_channels(params);
move set dma data to startup callback function, if the set dma data exist in hw_params callback, so the dma data only usable when call hw_params, if want use it before hw_params callback, it will cause NULL pointer access oops Signed-off-by: Bo Shen <voice.shen@atmel.com> --- sound/soc/atmel/atmel_ssc_dai.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-)