Commit 1011509d authored by Jeeja KP's avatar Jeeja KP Committed by Mark Brown

ASoC: Intel: Skylake: Use set_tdm_slot to set the dma channel

DMA channel(stream tag) used by the HDA link need to programmed in
codec so that codec receives packet from the link associated with the
same channel.

DMA channel is allocated in link BE dai hw_params, the same needs to be
set for the BE codec dai. Instead of using get/set dma_data(), use
dai_ops snd_soc_dai_set_tdm_slot() to set the stream tag.
Signed-off-by: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: default avatarJeeja KP <jeeja.kp@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c9bfb5d7
...@@ -532,10 +532,10 @@ static int skl_link_hw_params(struct snd_pcm_substream *substream, ...@@ -532,10 +532,10 @@ static int skl_link_hw_params(struct snd_pcm_substream *substream,
struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev); struct hdac_ext_bus *ebus = dev_get_drvdata(dai->dev);
struct hdac_ext_stream *link_dev; struct hdac_ext_stream *link_dev;
struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream); struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
struct hdac_ext_dma_params *dma_params;
struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *codec_dai = rtd->codec_dai;
struct skl_pipe_params p_params = {0}; struct skl_pipe_params p_params = {0};
struct hdac_ext_link *link; struct hdac_ext_link *link;
int stream_tag;
link_dev = snd_hdac_ext_stream_assign(ebus, substream, link_dev = snd_hdac_ext_stream_assign(ebus, substream,
HDAC_EXT_STREAM_TYPE_LINK); HDAC_EXT_STREAM_TYPE_LINK);
...@@ -548,16 +548,16 @@ static int skl_link_hw_params(struct snd_pcm_substream *substream, ...@@ -548,16 +548,16 @@ static int skl_link_hw_params(struct snd_pcm_substream *substream,
if (!link) if (!link)
return -EINVAL; return -EINVAL;
stream_tag = hdac_stream(link_dev)->stream_tag;
/* set the stream tag in the codec dai dma params */ /* set the stream tag in the codec dai dma params */
dma_params = snd_soc_dai_get_dma_data(codec_dai, substream); snd_soc_dai_set_tdm_slot(codec_dai, stream_tag, 0, 0, 0);
if (dma_params)
dma_params->stream_tag = hdac_stream(link_dev)->stream_tag;
p_params.s_fmt = snd_pcm_format_width(params_format(params)); p_params.s_fmt = snd_pcm_format_width(params_format(params));
p_params.ch = params_channels(params); p_params.ch = params_channels(params);
p_params.s_freq = params_rate(params); p_params.s_freq = params_rate(params);
p_params.stream = substream->stream; p_params.stream = substream->stream;
p_params.link_dma_id = hdac_stream(link_dev)->stream_tag - 1; p_params.link_dma_id = stream_tag - 1;
p_params.link_index = link->index; p_params.link_index = link->index;
p_params.format = params_format(params); p_params.format = params_format(params);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment