Commit 40bdb2fd authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown

ASoC: SOF: change comp_dai to a pointer in struct snd_sof_dai

This will avoid having to add the extended data for DAI components during
sof_widget_setup() as an extra step.
Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarPéter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220307181111.49392-11-ranjani.sridharan@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent ea7e5ee6
...@@ -717,7 +717,7 @@ int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_pa ...@@ -717,7 +717,7 @@ int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_pa
/* read format from topology */ /* read format from topology */
snd_mask_none(fmt); snd_mask_none(fmt);
switch (dai->comp_dai.config.frame_fmt) { switch (dai->comp_dai->config.frame_fmt) {
case SOF_IPC_FRAME_S16_LE: case SOF_IPC_FRAME_S16_LE:
snd_mask_set_format(fmt, SNDRV_PCM_FORMAT_S16_LE); snd_mask_set_format(fmt, SNDRV_PCM_FORMAT_S16_LE);
break; break;
...@@ -752,10 +752,10 @@ int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_pa ...@@ -752,10 +752,10 @@ int sof_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hw_pa
break; break;
case SOF_DAI_INTEL_DMIC: case SOF_DAI_INTEL_DMIC:
/* DMIC only supports 16 or 32 bit formats */ /* DMIC only supports 16 or 32 bit formats */
if (dai->comp_dai.config.frame_fmt == SOF_IPC_FRAME_S24_4LE) { if (dai->comp_dai->config.frame_fmt == SOF_IPC_FRAME_S24_4LE) {
dev_err(component->dev, dev_err(component->dev,
"error: invalid fmt %d for DAI type %d\n", "error: invalid fmt %d for DAI type %d\n",
dai->comp_dai.config.frame_fmt, dai->comp_dai->config.frame_fmt,
dai->dai_config->type); dai->dai_config->type);
} }
break; break;
......
...@@ -170,7 +170,6 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) ...@@ -170,7 +170,6 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
struct sof_ipc_cmd_hdr *hdr; struct sof_ipc_cmd_hdr *hdr;
struct sof_ipc_comp *comp; struct sof_ipc_comp *comp;
struct snd_sof_dai *dai; struct snd_sof_dai *dai;
size_t ipc_size;
int ret; int ret;
/* skip if there is no private data */ /* skip if there is no private data */
...@@ -192,23 +191,12 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget) ...@@ -192,23 +191,12 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
switch (swidget->id) { switch (swidget->id) {
case snd_soc_dapm_dai_in: case snd_soc_dapm_dai_in:
case snd_soc_dapm_dai_out: case snd_soc_dapm_dai_out:
ipc_size = sizeof(struct sof_ipc_comp_dai) + sizeof(struct sof_ipc_comp_ext);
comp = kzalloc(ipc_size, GFP_KERNEL);
if (!comp) {
ret = -ENOMEM;
goto core_put;
}
dai = swidget->private; dai = swidget->private;
comp = &dai->comp_dai->comp;
dai->configured = false; dai->configured = false;
memcpy(comp, &dai->comp_dai, sizeof(struct sof_ipc_comp_dai));
/* append extended data to the end of the component */ ret = sof_ipc_tx_message(sdev->ipc, comp->hdr.cmd, dai->comp_dai, comp->hdr.size,
memcpy((u8 *)comp + sizeof(struct sof_ipc_comp_dai), &swidget->comp_ext, &r, sizeof(r));
sizeof(swidget->comp_ext));
ret = sof_ipc_tx_message(sdev->ipc, comp->hdr.cmd, comp, ipc_size, &r, sizeof(r));
kfree(comp);
if (ret < 0) { if (ret < 0) {
dev_err(sdev->dev, "error: failed to load widget %s\n", dev_err(sdev->dev, "error: failed to load widget %s\n",
swidget->widget->name); swidget->widget->name);
......
...@@ -134,7 +134,7 @@ struct snd_sof_dai { ...@@ -134,7 +134,7 @@ struct snd_sof_dai {
struct snd_soc_component *scomp; struct snd_soc_component *scomp;
const char *name; const char *name;
struct sof_ipc_comp_dai comp_dai; struct sof_ipc_comp_dai *comp_dai;
int number_configs; int number_configs;
int current_config; int current_config;
bool configured; /* DAI configured during BE hw_params */ bool configured; /* DAI configured during BE hw_params */
......
...@@ -1478,7 +1478,7 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index, ...@@ -1478,7 +1478,7 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index,
if (ret != 0) { if (ret != 0) {
dev_err(scomp->dev, "error: parse dai tokens failed %d\n", dev_err(scomp->dev, "error: parse dai tokens failed %d\n",
le32_to_cpu(private->size)); le32_to_cpu(private->size));
goto finish; return ret;
} }
ret = sof_parse_tokens(scomp, &comp_dai->config, comp_tokens, ret = sof_parse_tokens(scomp, &comp_dai->config, comp_tokens,
...@@ -1487,7 +1487,7 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index, ...@@ -1487,7 +1487,7 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index,
if (ret != 0) { if (ret != 0) {
dev_err(scomp->dev, "error: parse dai.cfg tokens failed %d\n", dev_err(scomp->dev, "error: parse dai.cfg tokens failed %d\n",
private->size); private->size);
goto finish; return ret;
} }
dev_dbg(scomp->dev, "dai %s: type %d index %d\n", dev_dbg(scomp->dev, "dai %s: type %d index %d\n",
...@@ -1496,17 +1496,9 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index, ...@@ -1496,17 +1496,9 @@ static int sof_widget_load_dai(struct snd_soc_component *scomp, int index,
if (dai) { if (dai) {
dai->scomp = scomp; dai->scomp = scomp;
dai->comp_dai = comp_dai;
/*
* copy only the sof_ipc_comp_dai to avoid collapsing
* the snd_sof_dai, the extended data is kept in the
* snd_sof_widget.
*/
memcpy(&dai->comp_dai, comp_dai, sizeof(*comp_dai));
} }
finish:
kfree(comp_dai);
return ret; return ret;
} }
...@@ -2429,6 +2421,7 @@ static int sof_widget_unload(struct snd_soc_component *scomp, ...@@ -2429,6 +2421,7 @@ static int sof_widget_unload(struct snd_soc_component *scomp,
dai = swidget->private; dai = swidget->private;
if (dai) { if (dai) {
kfree(dai->comp_dai);
/* free dai config */ /* free dai config */
kfree(dai->dai_config); kfree(dai->dai_config);
list_del(&dai->list); list_del(&dai->list);
...@@ -2668,7 +2661,7 @@ static int sof_set_dai_config_multi(struct snd_sof_dev *sdev, u32 size, ...@@ -2668,7 +2661,7 @@ static int sof_set_dai_config_multi(struct snd_sof_dev *sdev, u32 size,
* dai_index. * dai_index.
*/ */
for (i = 0; i < num_conf; i++) for (i = 0; i < num_conf; i++)
config[i].dai_index = dai->comp_dai.dai_index; config[i].dai_index = dai->comp_dai->dai_index;
dev_dbg(sdev->dev, "set DAI config for %s index %d\n", dev_dbg(sdev->dev, "set DAI config for %s index %d\n",
dai->name, config[curr_conf].dai_index); dai->name, config[curr_conf].dai_index);
......
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