Commit 9b8ef9f6 authored by Jeeja KP's avatar Jeeja KP Committed by Mark Brown

ASoC: dapm: Add startup & shutdown for dai_links

For DAI link events, DSPs would like to get notified for startup
and shutdown event as well apart for existing hw_params. This
helps managing DSP resource allocation and freeup on these events
So add support for startup and shutdown for
snd_soc_dai_link_event()
Signed-off-by: default avatarJeeja KP <jeeja.kp@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 19a2557b
...@@ -3478,11 +3478,29 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w, ...@@ -3478,11 +3478,29 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
switch (event) { switch (event) {
case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU:
substream.stream = SNDRV_PCM_STREAM_CAPTURE; substream.stream = SNDRV_PCM_STREAM_CAPTURE;
if (source->driver->ops && source->driver->ops->startup) {
ret = source->driver->ops->startup(&substream, source);
if (ret < 0) {
dev_err(source->dev,
"ASoC: startup() failed: %d\n", ret);
goto out;
}
source->active++;
}
ret = soc_dai_hw_params(&substream, params, source); ret = soc_dai_hw_params(&substream, params, source);
if (ret < 0) if (ret < 0)
goto out; goto out;
substream.stream = SNDRV_PCM_STREAM_PLAYBACK; substream.stream = SNDRV_PCM_STREAM_PLAYBACK;
if (sink->driver->ops && sink->driver->ops->startup) {
ret = sink->driver->ops->startup(&substream, sink);
if (ret < 0) {
dev_err(sink->dev,
"ASoC: startup() failed: %d\n", ret);
goto out;
}
sink->active++;
}
ret = soc_dai_hw_params(&substream, params, sink); ret = soc_dai_hw_params(&substream, params, sink);
if (ret < 0) if (ret < 0)
goto out; goto out;
...@@ -3502,6 +3520,18 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w, ...@@ -3502,6 +3520,18 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
if (ret != 0 && ret != -ENOTSUPP) if (ret != 0 && ret != -ENOTSUPP)
dev_warn(sink->dev, "ASoC: Failed to mute: %d\n", ret); dev_warn(sink->dev, "ASoC: Failed to mute: %d\n", ret);
ret = 0; ret = 0;
source->active--;
if (source->driver->ops && source->driver->ops->shutdown) {
substream.stream = SNDRV_PCM_STREAM_CAPTURE;
source->driver->ops->shutdown(&substream, source);
}
sink->active--;
if (sink->driver->ops && sink->driver->ops->shutdown) {
substream.stream = SNDRV_PCM_STREAM_PLAYBACK;
sink->driver->ops->shutdown(&substream, sink);
}
break; break;
default: default:
......
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