Thanks Russell and Vinod.<br><br><div class="gmail_quote">On Fri, May 25, 2012 at 4:05 PM, Russell King - ARM Linux <span dir="ltr"><<a href="mailto:linux@arm.linux.org.uk" target="_blank">linux@arm.linux.org.uk</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Fri, May 25, 2012 at 01:23:36PM +0530, Vinod Koul wrote:<br>
> On Fri, 2012-05-25 at 15:11 +0800, Zhangfei Gao wrote:<br>
> > mmp-pcm handle audio dma based on dmaengine<br>
> > Support mmp and pxa910<br>
> Looks like this is *not* using soc-dmaengine library, why?<br>
<br>
</div>Note also...<br></blockquote><div>Will look into soc-dmaengine.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><br>
> > +   prtd->dma_chan = dma_request_channel(mask, filter, prtd);<br>
> > +   if (!prtd->dma_chan)<br>
> > +           return -EINVAL;<br>
<br>
</div>This should be done at probe time, so we know the struct device, so<br>
that...<br></blockquote><div> </div><div>Do you mean at open time, like snd_dmaengine_pcm_open.</div><div>The channel resource is limited and better get dynamically.</div><div>As a  result the pcm_new and preallocate already called before.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><br>
> > +static int mmp_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)<br>
> > +{<br>
> > +   struct snd_pcm_substream *substream = pcm->streams[stream].substream;<br>
> > +   struct snd_dma_buffer *buf = &substream->dma_buffer;<br>
> > +   size_t size = mmp_pcm_hardware[stream].buffer_bytes_max;<br>
> > +   struct gen_pool *gpool;<br>
> > +<br>
> > +   buf->dev.type = SNDRV_DMA_TYPE_DEV;<br>
> > +   buf->dev.dev = pcm->card->dev;<br>
<br>
</div>... this uses the right device, and...<br>
<div><br>
> > +static u64 mmp_pcm_dmamask = DMA_BIT_MASK(64);<br>
> > +<br>
> > +int mmp_pcm_new(struct snd_soc_pcm_runtime *rtd)<br>
> > +{<br>
> > +   struct snd_card *card = rtd->card->snd_card;<br>
> > +   struct snd_pcm *pcm = rtd->pcm;<br>
> > +   int ret = 0;<br>
> > +<br>
> > +   if (!card->dev->dma_mask)<br>
> > +           card->dev->dma_mask = &mmp_pcm_dmamask;<br>
> > +<br>
> > +   if (!card->dev->coherent_dma_mask)<br>
> > +           card->dev->coherent_dma_mask = DMA_BIT_MASK(64);<br>
<br>
</div>... we don't need crap like this.<br>
<br>
Because then we'll be allocating buffers against the _right_ struct device<br>
which is the DMA engine struct device.<br>
<div><div>--<br>
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in<br>
the body of a message to <a href="mailto:majordomo@vger.kernel.org" target="_blank">majordomo@vger.kernel.org</a><br>
More majordomo info at  <a href="http://vger.kernel.org/majordomo-info.html" target="_blank">http://vger.kernel.org/majordomo-info.html</a><br>
<br>
_______________________________________________<br>
Alsa-devel mailing list<br>
<a href="mailto:Alsa-devel@alsa-project.org" target="_blank">Alsa-devel@alsa-project.org</a><br>
<a href="http://mailman.alsa-project.org/mailman/listinfo/alsa-devel" target="_blank">http://mailman.alsa-project.org/mailman/listinfo/alsa-devel</a><br>
</div></div></blockquote></div><br>