Commit c7fc96df authored by Bard Liao's avatar Bard Liao Committed by Mark Brown

ASoC: SOF: topology: Get ALH rate amd channels from topology

FW will need these params for synchronized playback over multiple
DAIs.
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarGuennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Reviewed-by: default avatarSławomir Błauciak <slawomir.blauciak@linux.intel.com>
Reviewed-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20200415202816.934-21-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 1f846505
...@@ -126,4 +126,8 @@ ...@@ -126,4 +126,8 @@
#define SOF_TKN_MUTE_LED_USE 1300 #define SOF_TKN_MUTE_LED_USE 1300
#define SOF_TKN_MUTE_LED_DIRECTION 1301 #define SOF_TKN_MUTE_LED_DIRECTION 1301
/* ALH */
#define SOF_TKN_INTEL_ALH_RATE 1400
#define SOF_TKN_INTEL_ALH_CH 1401
#endif #endif
...@@ -656,6 +656,16 @@ static const struct sof_topology_token ssp_tokens[] = { ...@@ -656,6 +656,16 @@ static const struct sof_topology_token ssp_tokens[] = {
}; };
/* ALH */
static const struct sof_topology_token alh_tokens[] = {
{SOF_TKN_INTEL_ALH_RATE,
SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
offsetof(struct sof_ipc_dai_alh_params, rate), 0},
{SOF_TKN_INTEL_ALH_CH,
SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
offsetof(struct sof_ipc_dai_alh_params, channels), 0},
};
/* DMIC */ /* DMIC */
static const struct sof_topology_token dmic_tokens[] = { static const struct sof_topology_token dmic_tokens[] = {
{SOF_TKN_INTEL_DMIC_DRIVER_VERSION, {SOF_TKN_INTEL_DMIC_DRIVER_VERSION,
...@@ -3095,13 +3105,26 @@ static int sof_link_alh_load(struct snd_soc_component *scomp, int index, ...@@ -3095,13 +3105,26 @@ static int sof_link_alh_load(struct snd_soc_component *scomp, int index,
struct sof_ipc_dai_config *config) struct sof_ipc_dai_config *config)
{ {
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp); struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
struct snd_soc_tplg_private *private = &cfg->priv;
struct sof_ipc_reply reply; struct sof_ipc_reply reply;
u32 size = sizeof(*config); u32 size = sizeof(*config);
int ret; int ret;
ret = sof_parse_tokens(scomp, &config->alh, alh_tokens,
ARRAY_SIZE(alh_tokens), private->array,
le32_to_cpu(private->size));
if (ret != 0) {
dev_err(scomp->dev, "error: parse alh tokens failed %d\n",
le32_to_cpu(private->size));
return ret;
}
/* init IPC */ /* init IPC */
config->hdr.size = size; config->hdr.size = size;
dev_dbg(scomp->dev, "ALH config rate %d channels %d\n",
config->alh.rate, config->alh.channels);
/* send message to DSP */ /* send message to DSP */
ret = sof_ipc_tx_message(sdev->ipc, ret = sof_ipc_tx_message(sdev->ipc,
config->hdr.cmd, config, size, &reply, config->hdr.cmd, config, size, &reply,
......
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