hal: Implement tx mute in HFP usecase
Add support for tx mute in HFP use case
CRs-Fixed: 1068669
Change-Id: I28602fcb8e061b3ca196db0e82908bbdf9266f98
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 069feda..b57bb81 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -459,9 +459,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/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index 5a45b80..243d48d 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -302,6 +302,26 @@
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);
+
+ 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/hal/voice.c b/hal/voice.c
index f86483e..b84c7b7 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -417,11 +417,13 @@
int err = 0;
adev->voice.mic_mute = state;
- if (adev->mode == AUDIO_MODE_IN_CALL)
+ if (audio_extn_hfp_is_active(adev)) {
+ err = hfp_set_mic_mute(adev, state);
+ } else if (adev->mode == AUDIO_MODE_IN_CALL) {
err = platform_set_mic_mute(adev->platform, state);
- if (adev->mode == AUDIO_MODE_IN_COMMUNICATION)
+ } else if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
err = voice_extn_compress_voip_set_mic_mute(adev, state);
-
+ }
return err;
}