DO NOT MERGE ANYWHERE hal: Implement Tx mute in ASM loopback
Add TX mute functionality in ASM loopback
for HFP.
BUG: 30169034
Change-Id: Id5873f37adf3479031234cbfb2d900c0b70ba1fc
diff --git a/msm8909/hal/audio_extn/audio_extn.h b/msm8909/hal/audio_extn/audio_extn.h
index 51bb54b..878071e 100644
--- a/msm8909/hal/audio_extn/audio_extn.h
+++ b/msm8909/hal/audio_extn/audio_extn.h
@@ -319,9 +319,11 @@
#ifndef HFP_ENABLED
#define audio_extn_hfp_is_active(adev) (0)
#define audio_extn_hfp_get_usecase() (-1)
+#define hfp_set_mic_mute(dev, state) (0)
#else
bool audio_extn_hfp_is_active(struct audio_device *adev);
audio_usecase_t audio_extn_hfp_get_usecase();
+int hfp_set_mic_mute(struct audio_device *dev, bool state);
#endif
#ifndef DEV_ARBI_ENABLED
diff --git a/msm8909/hal/audio_extn/hfp.c b/msm8909/hal/audio_extn/hfp.c
index 30f64d6..e27ec98 100644
--- a/msm8909/hal/audio_extn/hfp.c
+++ b/msm8909/hal/audio_extn/hfp.c
@@ -302,6 +302,29 @@
return false;
}
+int hfp_set_mic_mute(struct audio_device *adev, bool state)
+{
+ struct mixer_ctl *ctl;
+ const char *mixer_ctl_name = "HFP TX Mute";
+ uint32_t set_values[ ] = {0};
+
+ ALOGI("%s: enter, state=%d", __func__, state);
+
+ if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
+ set_values[0] = state;
+ ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, mixer_ctl_name);
+ return -EINVAL;
+ }
+ mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ }
+
+ ALOGV("%s: exit", __func__);
+ return 0;
+}
+
audio_usecase_t audio_extn_hfp_get_usecase()
{
return hfpmod.ucid;
diff --git a/msm8909/hal/voice.c b/msm8909/hal/voice.c
index 41a0699..7f59980 100644
--- a/msm8909/hal/voice.c
+++ b/msm8909/hal/voice.c
@@ -331,8 +331,11 @@
adev->voice.mic_mute = state;
if (adev->mode == AUDIO_MODE_IN_CALL)
err = platform_set_mic_mute(adev->platform, state);
- if (adev->mode == AUDIO_MODE_IN_COMMUNICATION)
+ if (adev->mode == AUDIO_MODE_IN_COMMUNICATION && audio_extn_hfp_is_active(adev)) {
+ err = hfp_set_mic_mute(adev, state);
+ } else if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
err = voice_extn_compress_voip_set_mic_mute(adev, state);
+ }
return err;
}