summaryrefslogtreecommitdiff
path: root/asoc/msm-pcm-loopback-v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'asoc/msm-pcm-loopback-v2.c')
-rw-r--r--asoc/msm-pcm-loopback-v2.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/asoc/msm-pcm-loopback-v2.c b/asoc/msm-pcm-loopback-v2.c
index 3b6b3a84..61318050 100644
--- a/asoc/msm-pcm-loopback-v2.c
+++ b/asoc/msm-pcm-loopback-v2.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -137,6 +137,7 @@ static int msm_loopback_session_mute_put(struct snd_kcontrol *kcontrol,
goto done;
}
+ mutex_lock(&loopback_session_lock);
pr_debug("%s: mute=%d\n", __func__, mute);
hfp_tx_mute = mute;
for (n = 0; n < LOOPBACK_SESSION_MAX; n++) {
@@ -149,6 +150,7 @@ static int msm_loopback_session_mute_put(struct snd_kcontrol *kcontrol,
pr_err("%s: Send mute command failed rc=%d\n",
__func__, ret);
}
+ mutex_unlock(&loopback_session_lock);
done:
return ret;
}
@@ -351,6 +353,7 @@ static void stop_pcm(struct msm_pcm_loopback *pcm)
if (pcm->audio_client == NULL)
return;
+ mutex_lock(&loopback_session_lock);
q6asm_cmd(pcm->audio_client, CMD_CLOSE);
if (pcm->playback_substream != NULL) {
@@ -365,6 +368,7 @@ static void stop_pcm(struct msm_pcm_loopback *pcm)
}
q6asm_audio_client_free(pcm->audio_client);
pcm->audio_client = NULL;
+ mutex_unlock(&loopback_session_lock);
}
static int msm_pcm_close(struct snd_pcm_substream *substream)
@@ -495,12 +499,15 @@ static int msm_pcm_volume_ctl_put(struct snd_kcontrol *kcontrol,
rc = -ENODEV;
goto exit;
}
+ mutex_lock(&loopback_session_lock);
prtd = substream->runtime->private_data;
if (!prtd) {
rc = -ENODEV;
+ mutex_unlock(&loopback_session_lock);
goto exit;
}
rc = pcm_loopback_set_volume(prtd, volume);
+ mutex_unlock(&loopback_session_lock);
exit:
return rc;
@@ -521,12 +528,15 @@ static int msm_pcm_volume_ctl_get(struct snd_kcontrol *kcontrol,
rc = -ENODEV;
goto exit;
}
+ mutex_lock(&loopback_session_lock);
prtd = substream->runtime->private_data;
if (!prtd) {
rc = -ENODEV;
+ mutex_unlock(&loopback_session_lock);
goto exit;
}
ucontrol->value.integer.value[0] = prtd->volume;
+ mutex_unlock(&loopback_session_lock);
exit:
return rc;