diff options
author | Mark Brown <broonie@kernel.org> | 2020-12-09 17:45:06 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-12-09 17:45:06 +0300 |
commit | 52feed4c1b152fe2caee9a8f916fd5573e999b7e (patch) | |
tree | d244659a792ba4ac61968758a1e00c6a4dc8d18e /sound/soc/soc-link.c | |
parent | 397e089bda327a350c1cb29133cb66795339a5d9 (diff) | |
parent | 6374f493d93b2232444b94989c380d5aada5b810 (diff) | |
download | linux-52feed4c1b152fe2caee9a8f916fd5573e999b7e.tar.xz |
Merge series "ASoC: soc-pcm: trigger cleanup" from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>:
Hi Mark
These are focusing to trigger function,
which can be cleanup, tidyup.
Kuninori Morimoto (2):
ASoC: soc-pcm: remove dpcm_do_trigger()
ASoC: soc-pcm: care trigger rollback
include/sound/soc-component.h | 3 +-
include/sound/soc-dai.h | 4 +-
include/sound/soc-link.h | 3 +-
include/sound/soc.h | 1 +
sound/soc/soc-component.c | 45 ++++++++++++++++++----
sound/soc/soc-dai.c | 44 +++++++++++++++++----
sound/soc/soc-link.c | 30 ++++++++++++++-
sound/soc/soc-pcm.c | 72 ++++++++++++++++++++---------------
8 files changed, 152 insertions(+), 50 deletions(-)
--
2.25.1
Diffstat (limited to 'sound/soc/soc-link.c')
-rw-r--r-- | sound/soc/soc-link.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/sound/soc/soc-link.c b/sound/soc/soc-link.c index 26cc60f8dcfb..619664cc9ab9 100644 --- a/sound/soc/soc-link.c +++ b/sound/soc/soc-link.c @@ -141,7 +141,7 @@ void snd_soc_link_hw_free(struct snd_pcm_substream *substream, int rollback) soc_link_mark_pop(rtd, substream, hw_params); } -int snd_soc_link_trigger(struct snd_pcm_substream *substream, int cmd) +static int soc_link_trigger(struct snd_pcm_substream *substream, int cmd) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); int ret = 0; @@ -153,6 +153,34 @@ int snd_soc_link_trigger(struct snd_pcm_substream *substream, int cmd) return soc_link_ret(rtd, ret); } +int snd_soc_link_trigger(struct snd_pcm_substream *substream, int cmd, + int rollback) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + int ret = 0; + + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_RESUME: + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + ret = soc_link_trigger(substream, cmd); + if (ret < 0) + break; + soc_link_mark_push(rtd, substream, trigger); + break; + case SNDRV_PCM_TRIGGER_STOP: + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + if (rollback && !soc_link_mark_match(rtd, substream, trigger)) + break; + + ret = soc_link_trigger(substream, cmd); + soc_link_mark_pop(rtd, substream, startup); + } + + return ret; +} + int snd_soc_link_compr_startup(struct snd_compr_stream *cstream) { struct snd_soc_pcm_runtime *rtd = cstream->private_data; |