diff options
author | Shengjiu Wang <shengjiu.wang@nxp.com> | 2019-11-29 12:03:04 +0800 |
---|---|---|
committer | Shengjiu Wang <shengjiu.wang@nxp.com> | 2019-12-09 18:33:21 +0800 |
commit | 5b07f684deb1b5519ac641baf7df953e80113e93 (patch) | |
tree | 7ce051476645661bbdde519e91030af2cb15568a /sound | |
parent | 5a257681ebaf36c4dfa83ae84ccb80699b62db01 (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')
-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; |