ASoC: davinci-mcasp: Assign the dma_data earlier in dai_probe callback
[cascardo/linux.git] / sound / soc / davinci / davinci-mcasp.c
index 4f75cac..b4c5cf5 100644 (file)
@@ -716,22 +716,7 @@ static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
        return ret;
 }
 
-static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
-                                struct snd_soc_dai *dai)
-{
-       struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
-
-       if (mcasp->version == MCASP_VERSION_4)
-               snd_soc_dai_set_dma_data(dai, substream,
-                                       &mcasp->dma_data[substream->stream]);
-       else
-               snd_soc_dai_set_dma_data(dai, substream, mcasp->dma_params);
-
-       return 0;
-}
-
 static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
-       .startup        = davinci_mcasp_startup,
        .trigger        = davinci_mcasp_trigger,
        .hw_params      = davinci_mcasp_hw_params,
        .set_fmt        = davinci_mcasp_set_dai_fmt,
@@ -739,6 +724,25 @@ static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
        .set_sysclk     = davinci_mcasp_set_sysclk,
 };
 
+static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
+{
+       struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
+
+       if (mcasp->version == MCASP_VERSION_4) {
+               /* Using dmaengine PCM */
+               dai->playback_dma_data =
+                               &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
+               dai->capture_dma_data =
+                               &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
+       } else {
+               /* Using davinci-pcm */
+               dai->playback_dma_data = mcasp->dma_params;
+               dai->capture_dma_data = mcasp->dma_params;
+       }
+
+       return 0;
+}
+
 #ifdef CONFIG_PM_SLEEP
 static int davinci_mcasp_suspend(struct snd_soc_dai *dai)
 {
@@ -792,6 +796,7 @@ static int davinci_mcasp_resume(struct snd_soc_dai *dai)
 static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
        {
                .name           = "davinci-mcasp.0",
+               .probe          = davinci_mcasp_dai_probe,
                .suspend        = davinci_mcasp_suspend,
                .resume         = davinci_mcasp_resume,
                .playback       = {
@@ -811,6 +816,7 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
        },
        {
                .name           = "davinci-mcasp.1",
+               .probe          = davinci_mcasp_dai_probe,
                .playback       = {
                        .channels_min   = 1,
                        .channels_max   = 384,