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: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
19a2557b76
Коммит
9b8ef9f6b3
|
@ -3478,11 +3478,29 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
|
|||
switch (event) {
|
||||
case SND_SOC_DAPM_PRE_PMU:
|
||||
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);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
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);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
@ -3502,6 +3520,18 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
|
|||
if (ret != 0 && ret != -ENOTSUPP)
|
||||
dev_warn(sink->dev, "ASoC: Failed to mute: %d\n", ret);
|
||||
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;
|
||||
|
||||
default:
|
||||
|
|
Загрузка…
Ссылка в новой задаче