summaryrefslogtreecommitdiff
path: root/sound/soc
diff options
context:
space:
mode:
authorZhang Peng <peng.zhang_8@nxp.com>2020-09-18 13:28:02 +0800
committerZhang Peng <peng.zhang_8@nxp.com>2020-09-18 18:56:17 +0800
commit06491aba0cc5b81ac1340c91661cd34399b8ab86 (patch)
treef328386298202f1ed8a40d34d394b3adb574653a /sound/soc
parentf3981967d671a2e0fd284bd29573ad762429ef15 (diff)
MLK-24816-1 ASoc: fsl_dsp: Support seek for compress pipeline
For supporting seek for compress pipeline, remove delate comp operation in dsp_platform_compr_trigger_stop. Remove connect comp operation in dsp_platform_compr_trigger_start. Only connect component once. Signed-off-by: Zhang Peng <peng.zhang_8@nxp.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/fsl/fsl_dsp_platform_compress.c58
1 files changed, 11 insertions, 47 deletions
diff --git a/sound/soc/fsl/fsl_dsp_platform_compress.c b/sound/soc/fsl/fsl_dsp_platform_compress.c
index 9ba8f2556bfd..b60dd776cfe7 100644
--- a/sound/soc/fsl/fsl_dsp_platform_compress.c
+++ b/sound/soc/fsl/fsl_dsp_platform_compress.c
@@ -214,6 +214,16 @@ static int dsp_platform_compr_set_params(struct snd_compr_stream *cstream,
goto err_comp1_create;
}
+ ret = xaf_connect(drv->client,
+ &drv->component[0],
+ &drv->component[1],
+ 1,
+ OUTBUF_SIZE);
+ if (ret) {
+ dev_err(component->dev, "Failed to connect component, err = %d\n", ret);
+ goto err_comp1_create;
+ }
+
drv->client->input_bytes = 0;
drv->client->consume_bytes = 0;
drv->client->offset = 0;
@@ -291,16 +301,6 @@ static int dsp_platform_compr_trigger_start(struct snd_compr_stream *cstream)
drv->client->input_bytes,
XF_EMPTY_THIS_BUFFER);
- ret = xaf_connect(drv->client,
- &drv->component[0],
- &drv->component[1],
- 1,
- OUTBUF_SIZE);
- if (ret) {
- dev_err(component->dev, "Failed to connect component, err = %d\n", ret);
- return ret;
- }
-
schedule_work(&drv->client->work);
}
@@ -331,20 +331,6 @@ static int dsp_platform_compr_trigger_stop(struct snd_compr_stream *cstream)
drv->client->offset = 0;
drv->client->ping_pong_offset = 0;
- if (!dsp_priv->dsp_is_lpa) {
- ret = xaf_comp_delete(drv->client, &drv->component[0]);
- if (ret) {
- dev_err(component->dev, "Fail to delete component, err = %d\n", ret);
- return ret;
- }
-
- ret = xaf_comp_delete(drv->client, &drv->component[1]);
- if (ret) {
- dev_err(component->dev, "Fail to delete component, err = %d\n", ret);
- return ret;
- }
- }
-
return 0;
}
@@ -489,7 +475,7 @@ static int dsp_platform_compr_copy(struct snd_compr_stream *cstream,
}
drv->client->input_bytes += copied;
- if (cstream->runtime->state == SNDRV_PCM_STATE_RUNNING) {
+ if (cstream->runtime->state == SNDRV_PCM_STATE_RUNNING && copied) {
ret = xaf_comp_process(drv->client, p_comp,
p_comp->inptr, copied,
XF_EMPTY_THIS_BUFFER);
@@ -531,17 +517,6 @@ static int dsp_platform_compr_lpa_pcm_copy(struct snd_compr_stream *cstream,
ret = xaf_comp_process(drv->client, p_comp,
p_comp->inptr+drv->client->ping_pong_offset, drv->client->offset+copied,
XF_EMPTY_THIS_BUFFER);
- if (!drv->client->input_bytes) {
- ret = xaf_connect(drv->client,
- &drv->component[0],
- &drv->component[1],
- 1,
- OUTBUF_SIZE);
- if (ret) {
- dev_err(component->dev, "Failed to connect component, err = %d\n", ret);
- return ret;
- }
- }
schedule_work(&drv->client->work);
drv->client->input_bytes += drv->client->offset+copied;
@@ -602,17 +577,6 @@ static int dsp_platform_compr_lpa_copy(struct snd_compr_stream *cstream,
ret = xaf_comp_process(drv->client, p_comp,
p_comp->inptr, drv->client->offset+copied,
XF_EMPTY_THIS_BUFFER);
- if (!drv->client->input_bytes) {
- ret = xaf_connect(drv->client,
- &drv->component[0],
- &drv->component[1],
- 1,
- OUTBUF_SIZE);
- if (ret) {
- dev_err(component->dev, "Failed to connect component, err = %d\n", ret);
- return ret;
- }
- }
schedule_work(&drv->client->work);
drv->client->input_bytes += drv->client->offset+copied;