Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cfda43f authored by Bhalchandra Gajare's avatar Bhalchandra Gajare
Browse files

ASoC: msm-lsm-client: Handle close gracefully



The listen pcm device could get closed abruptly due to userspace
application crash. In such cases, the device close will be invoked
abruptly. Handle this scenario gracefully by properly cleaning up the
driver before close.

Change-Id: Ie841f300400d547260da92383712a9aa0689d7a7
Signed-off-by: default avatarBhalchandra Gajare <gajare@codeaurora.org>
parent acdce027
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -640,8 +640,32 @@ static int msm_lsm_close(struct snd_pcm_substream *substream)
	unsigned long flags;
	struct snd_pcm_runtime *runtime = substream->runtime;
	struct lsm_priv *prtd = runtime->private_data;
	int ret = 0;

	pr_debug("%s\n", __func__);
	if (prtd->lsm_client->started) {
		ret = q6lsm_stop(prtd->lsm_client, true);
		if (ret)
			pr_err("%s: session stop failed, err = %d\n",
				__func__, ret);
		else
			pr_debug("%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)
			pr_err("%s: dereg_snd_model failed, err = %d\n",
				__func__, ret);
		else
			pr_debug("%s: dereg_snd_model succesful\n",
				 __func__);
	}

	q6lsm_close(prtd->lsm_client);
	q6lsm_client_free(prtd->lsm_client);