[PATCH 1/1] ASoC: dpcm: allow start or stop during pause for backend

이경택 gt82.lee at samsung.com
Mon Mar 30 09:06:38 CEST 2020


soc_compr_trigger_fe() allows start or stop after pause_push.
In dpcm_be_dai_trigger(), however, only pause_release is allowed
command after pause_push.
To fix this problem, SND_SOC_DPCM_STATE_PAUSED should be allowed
also for start or stop command.

Signed-off-by: Gyeongtaek Lee <gt82.lee at samsung.com>
---
 sound/soc/soc-pcm.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 2c59b3688ca0..8f6f0ad50288 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -2236,7 +2236,8 @@ int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime
*fe, int stream,
 		switch (cmd) {
 		case SNDRV_PCM_TRIGGER_START:
 			if ((be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_PREPARE) &&
-			    (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_STOP))
+			    (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_STOP) &&
+			    (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_PAUSED))
 				continue;
 
 			ret = dpcm_do_trigger(dpcm, be_substream, cmd);
@@ -2266,7 +2267,8 @@ int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime
*fe, int stream,
 			be->dpcm[stream].state = SND_SOC_DPCM_STATE_START;
 			break;
 		case SNDRV_PCM_TRIGGER_STOP:
-			if (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_START)
+			if ((be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_START) &&
+			    (be->dpcm[stream].state !=
SND_SOC_DPCM_STATE_PAUSED))
 				continue;
 
 			if (!snd_soc_dpcm_can_be_free_stop(fe, be, stream))
-- 
2.21.0




More information about the Alsa-devel mailing list