ASoC: ux500_pcm: Expect different saved DMA data when obtaining from DAI store
[firefly-linux-kernel-4.4.55.git] / sound / soc / ux500 / ux500_pcm.c
index 32d4572321100b379dc7666585cee5b4c85e8bf0..8b53f22edcafe061827d21e0abcfe5ef6736797a 100644 (file)
@@ -108,10 +108,21 @@ static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
                struct dma_slave_config *slave_config)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ux500_msp_dma_params *dma_params;
+       struct msp_i2s_platform_data *pdata = rtd->cpu_dai->dev->platform_data;
+       struct snd_dmaengine_dai_dma_data *snd_dma_params;
+       struct ux500_msp_dma_params *ste_dma_params;
+       dma_addr_t dma_addr;
        int ret;
 
-       dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
+       if (pdata) {
+               ste_dma_params =
+                       snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
+               dma_addr = ste_dma_params->tx_rx_addr;
+       } else {
+               snd_dma_params =
+                       snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
+               dma_addr = snd_dma_params->addr;
+       }
 
        ret = snd_hwparams_to_dma_slave_config(substream, params, slave_config);
        if (ret)
@@ -124,9 +135,9 @@ static int ux500_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
        slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-               slave_config->dst_addr = dma_params->tx_rx_addr;
+               slave_config->dst_addr = dma_addr;
        else
-               slave_config->src_addr = dma_params->tx_rx_addr;
+               slave_config->src_addr = dma_addr;
 
        return 0;
 }