mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
asoc: msm-lsm-client: deregister SM even if SVA is not started
To prevent potential memory leaks in kernel and ADSP, always try to deregister sound model in msm_lsm_close so that sound model and calibration buffer can be freed. Change-Id: If665fcb00f67fa268a4c543649fee12627fccedd Signed-off-by: Xiaoyu Ye <benyxy@codeaurora.org>
This commit is contained in:
parent
c285d08046
commit
73d788af1c
2 changed files with 29 additions and 26 deletions
|
|
@ -3117,22 +3117,22 @@ static int msm_lsm_close(struct snd_pcm_substream *substream)
|
|||
"%s: LSM client session stopped %d\n",
|
||||
__func__, ret);
|
||||
|
||||
/*
|
||||
* Go Ahead and try de-register sound model,
|
||||
* even if stop failed
|
||||
*/
|
||||
prtd->lsm_client->started = false;
|
||||
|
||||
ret = q6lsm_deregister_sound_model(prtd->lsm_client);
|
||||
if (ret)
|
||||
dev_err(rtd->dev,
|
||||
"%s: dereg_snd_model failed, err = %d\n",
|
||||
__func__, ret);
|
||||
else
|
||||
dev_dbg(rtd->dev, "%s: dereg_snd_model successful\n",
|
||||
__func__);
|
||||
}
|
||||
|
||||
/*
|
||||
* De-register existing sound models
|
||||
* to free SM and CAL buffer, even if
|
||||
* lsm client is not started.
|
||||
*/
|
||||
ret = q6lsm_deregister_sound_model(prtd->lsm_client);
|
||||
if (ret)
|
||||
dev_err(rtd->dev, "%s: dereg_snd_model failed, err = %d\n",
|
||||
__func__, ret);
|
||||
else
|
||||
dev_dbg(rtd->dev, "%s: dereg_snd_model successful\n",
|
||||
__func__);
|
||||
|
||||
msm_pcm_routing_dereg_phy_stream(rtd->dai_link->id,
|
||||
SNDRV_PCM_STREAM_CAPTURE);
|
||||
|
||||
|
|
|
|||
31
dsp/q6lsm.c
31
dsp/q6lsm.c
|
|
@ -1735,21 +1735,24 @@ int q6lsm_deregister_sound_model(struct lsm_client *client)
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd.hdr), false);
|
||||
cmd.hdr.opcode = LSM_SESSION_CMD_DEREGISTER_SOUND_MODEL;
|
||||
|
||||
rc = q6lsm_apr_send_pkt(client, client->apr, &cmd.hdr, true, NULL);
|
||||
if (rc) {
|
||||
pr_err("%s: Failed cmd opcode 0x%x, rc %d\n", __func__,
|
||||
cmd.hdr.opcode, rc);
|
||||
} else {
|
||||
pr_debug("%s: Deregister sound model succeeded\n", __func__);
|
||||
}
|
||||
|
||||
p_info.param_type = LSM_DEREG_SND_MODEL;
|
||||
sm = &client->stage_cfg[p_info.stage_idx].sound_model;
|
||||
q6lsm_snd_model_buf_free(client, &p_info, sm);
|
||||
|
||||
if (sm && sm->data) {
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
q6lsm_add_hdr(client, &cmd.hdr, sizeof(cmd.hdr), false);
|
||||
cmd.hdr.opcode = LSM_SESSION_CMD_DEREGISTER_SOUND_MODEL;
|
||||
p_info.param_type = LSM_DEREG_SND_MODEL;
|
||||
|
||||
rc = q6lsm_apr_send_pkt(client, client->apr, &cmd.hdr, true, NULL);
|
||||
if (rc) {
|
||||
pr_err("%s: Failed cmd opcode 0x%x, rc %d\n", __func__,
|
||||
cmd.hdr.opcode, rc);
|
||||
} else {
|
||||
pr_debug("%s: Deregister sound model succeeded\n", __func__);
|
||||
}
|
||||
|
||||
q6lsm_snd_model_buf_free(client, &p_info, sm);
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue