diff --git a/asoc/msm-lsm-client.c b/asoc/msm-lsm-client.c index 379b5e5f6eb3..b101b377326d 100644 --- a/asoc/msm-lsm-client.c +++ b/asoc/msm-lsm-client.c @@ -1390,8 +1390,8 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, dev_dbg(rtd->dev, "%s: Starting LSM client session\n", __func__); if (!prtd->lsm_client->started) { - ret = q6lsm_start(prtd->lsm_client, true); - if (!ret) { + rc = q6lsm_start(prtd->lsm_client, true); + if (!rc) { prtd->lsm_client->started = true; dev_dbg(rtd->dev, "%s: LSM client session started\n", __func__); @@ -1407,19 +1407,19 @@ static int msm_lsm_ioctl_shared(struct snd_pcm_substream *substream, if (prtd->lsm_client->lab_enable) { atomic_set(&prtd->read_abort, 1); if (prtd->lsm_client->lab_started) { - ret = q6lsm_stop_lab(prtd->lsm_client); - if (ret) + rc = q6lsm_stop_lab(prtd->lsm_client); + if (rc) dev_err(rtd->dev, - "%s: stop lab failed ret %d\n", - __func__, ret); + "%s: stop lab failed rc %d\n", + __func__, rc); prtd->lsm_client->lab_started = false; } } - ret = q6lsm_stop(prtd->lsm_client, true); - if (!ret) + rc = q6lsm_stop(prtd->lsm_client, true); + if (!rc) dev_dbg(rtd->dev, "%s: LSM client session stopped %d\n", - __func__, ret); + __func__, rc); prtd->lsm_client->started = false; } break; @@ -2593,6 +2593,25 @@ static int msm_lsm_close(struct snd_pcm_substream *substream) dev_dbg(rtd->dev, "%s\n", __func__); if (prtd->lsm_client->started) { + if (prtd->lsm_client->lab_enable) { + atomic_set(&prtd->read_abort, 1); + if (prtd->lsm_client->lab_started) { + ret = q6lsm_stop_lab(prtd->lsm_client); + if (ret) + dev_err(rtd->dev, + "%s: stop lab failed ret %d\n", + __func__, ret); + prtd->lsm_client->lab_started = false; + } + if (prtd->lsm_client->lab_buffer) { + ret = msm_lsm_lab_buffer_alloc(prtd, + LAB_BUFFER_DEALLOC); + if (ret) + dev_err(rtd->dev, + "%s: lab buffer dealloc failed ret %d\n", + __func__, ret); + } + } ret = q6lsm_stop(prtd->lsm_client, true); if (ret) dev_err(rtd->dev,