diff options
author | Shengjiu Wang <shengjiu.wang@nxp.com> | 2019-11-29 12:03:04 +0800 |
---|---|---|
committer | Shengjiu Wang <shengjiu.wang@nxp.com> | 2019-11-29 16:15:08 +0800 |
commit | dfb874e95e3aa46b43b8940b6e921cf753eda947 (patch) | |
tree | eea197c4ee74a5f3d0060e3a5472e4e9e31d4a6e /sound/soc/fsl/fsl_rpmsg_i2s.c | |
parent | 50b229c2d5a4ce5adcaa204442734d64575f9316 (diff) |
LF-215: ASoC: fsl_rpmsg_i2s: Enable WQ_FREEZABLE for workqueue
In the end of playback, when the suspend happen, there will be error
in m4 side.
RTM_SaiSdmaAdapter_SetParam: Tx in wrong state 2!
SRTM_SaiSdmaAdapter_SetBuf: Tx in wrong state 2!
SRTM_SaiSdmaAdapter_Start: Tx in wrong state 2!
The reason is that the I2S_TX_TERMINATE happen in the middle of
I2S_TX_SUSPEND and I2S_TX_RESUME, this sequence is not allowed.
So we make the rpmsg message workqueue enter freeze in suspend
to avoid such issue. that the command sequence will be
I2S_TX_SUSPEND->I2S_TX_RESUME->I2S_TX_TERMINATE
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Diffstat (limited to 'sound/soc/fsl/fsl_rpmsg_i2s.c')
-rw-r--r-- | sound/soc/fsl/fsl_rpmsg_i2s.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sound/soc/fsl/fsl_rpmsg_i2s.c b/sound/soc/fsl/fsl_rpmsg_i2s.c index 4ba151186681..f392817dd3fc 100644 --- a/sound/soc/fsl/fsl_rpmsg_i2s.c +++ b/sound/soc/fsl/fsl_rpmsg_i2s.c @@ -222,7 +222,7 @@ static int fsl_rpmsg_i2s_probe(struct platform_device *pdev) audioindex = 0; /* Setup work queue */ - i2s_info->rpmsg_wq = create_singlethread_workqueue("rpmsg_i2s"); + i2s_info->rpmsg_wq = alloc_ordered_workqueue("rpmsg_i2s", WQ_HIGHPRI | WQ_UNBOUND | WQ_FREEZABLE); if (i2s_info->rpmsg_wq == NULL) { dev_err(&pdev->dev, "workqueue create failed\n"); return -ENOMEM; |