| From c3e620770d1e24654f93dfc82dda953fd3ffd3b5 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?=EC=9D=B4=EA=B2=BD=ED=83=9D?= <gt82.lee@samsung.com> |
| Date: Wed, 1 Apr 2020 10:04:21 +0900 |
| Subject: [PATCH] ASoC: dpcm: allow start or stop during pause for backend |
| |
| commit 21fca8bdbb64df1297e8c65a746c4c9f4a689751 upstream. |
| |
| 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. |
| So, start or stop after pause in compress offload is always |
| returned as error if the compress offload is used with dpcm. |
| To fix the problem, SND_SOC_DPCM_STATE_PAUSED should be allowed |
| for start or stop command. |
| |
| Signed-off-by: Gyeongtaek Lee <gt82.lee@samsung.com> |
| Reviewed-by: Vinod Koul <vkoul@kernel.org> |
| Link: https://lore.kernel.org/r/004d01d607c1$7a3d5250$6eb7f6f0$@samsung.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c |
| index 34f832e1e4c3..67eede91c695 100644 |
| --- a/sound/soc/soc-pcm.c |
| +++ b/sound/soc/soc-pcm.c |
| @@ -2300,7 +2300,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); |
| @@ -2330,7 +2331,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.7.4 |
| |