ASoC: SOF: Intel: hda: free DAI widget during stop and suspend
To keep the widget use_counts balanced, free the DAI widget during suspend and also during the stop trigger. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20211119192621.4096077-11-kai.vehmanen@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
9ea807488c
commit
05827a1537
|
@ -182,24 +182,6 @@ static struct sof_ipc_dai_config *hda_dai_update_config(struct snd_soc_dapm_widg
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hda_link_config_ipc(struct sof_intel_hda_stream *hda_stream,
|
|
||||||
struct snd_soc_dapm_widget *w, int channel)
|
|
||||||
{
|
|
||||||
struct snd_sof_dev *sdev = hda_stream->sdev;
|
|
||||||
struct sof_ipc_dai_config *config;
|
|
||||||
struct sof_ipc_reply reply;
|
|
||||||
|
|
||||||
config = hda_dai_update_config(w, channel);
|
|
||||||
if (!config) {
|
|
||||||
dev_err(sdev->dev, "error: no config for DAI %s\n", w->name);
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* send DAI_CONFIG IPC */
|
|
||||||
return sof_ipc_tx_message(sdev->ipc, config->hdr.cmd, config, config->hdr.size,
|
|
||||||
&reply, sizeof(reply));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int hda_link_dai_widget_update(struct sof_intel_hda_stream *hda_stream,
|
static int hda_link_dai_widget_update(struct sof_intel_hda_stream *hda_stream,
|
||||||
struct snd_soc_dapm_widget *w,
|
struct snd_soc_dapm_widget *w,
|
||||||
int channel, bool widget_setup)
|
int channel, bool widget_setup)
|
||||||
|
@ -353,10 +335,9 @@ static int hda_link_pcm_trigger(struct snd_pcm_substream *substream,
|
||||||
w = dai->capture_widget;
|
w = dai->capture_widget;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* clear link DMA channel. It will be assigned when
|
* free DAI widget during stop/suspend to keep widget use_count's balanced.
|
||||||
* hw_params is set up again after resume.
|
|
||||||
*/
|
*/
|
||||||
ret = hda_link_config_ipc(hda_stream, w, DMA_CHAN_INVALID);
|
ret = hda_link_dai_widget_update(hda_stream, w, DMA_CHAN_INVALID, false);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue