diff options
Diffstat (limited to 'drivers/staging/intel_sst/intel_sst_stream.c')
-rw-r--r-- | drivers/staging/intel_sst/intel_sst_stream.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/staging/intel_sst/intel_sst_stream.c b/drivers/staging/intel_sst/intel_sst_stream.c index dd58be5..55a561c 100644 --- a/drivers/staging/intel_sst/intel_sst_stream.c +++ b/drivers/staging/intel_sst/intel_sst_stream.c @@ -31,6 +31,7 @@ #include <linux/pci.h> #include <linux/firmware.h> #include <linux/sched.h> +#include <linux/delay.h> #include "intel_sst_ioctl.h" #include "intel_sst.h" #include "intel_sst_fw_ipc.h" @@ -519,10 +520,6 @@ int sst_drain_stream(int str_id) str_info->data_blk.on = true; retval = sst_wait_interruptible(sst_drv_ctx, &str_info->data_blk); str_info->need_draining = false; - if (retval == -SST_ERR_INVALID_STREAM_ID) { - retval = -EINVAL; - sst_clean_stream(str_info); - } return retval; } @@ -563,6 +560,12 @@ int sst_free_stream(int str_id) str_info->data_blk.ret_code = 0; wake_up(&sst_drv_ctx->wait_queue); } + str_info->data_blk.on = true; + str_info->data_blk.condition = false; + retval = sst_wait_interruptible_timeout(sst_drv_ctx, + &str_info->ctrl_blk, SST_BLOCK_TIMEOUT); + pr_debug("wait for free returned %d\n", retval); + msleep(100); mutex_lock(&sst_drv_ctx->stream_lock); sst_clean_stream(str_info); mutex_unlock(&sst_drv_ctx->stream_lock); |