hal: Add support for enabling HD Voice
Add HD voice in setParameters() and getParameters()
to enable/disable HD voice.
Change-Id: I08625aa507775b9f04956391870813db580f67f5
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a28ddc3..0a7f879 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -90,6 +90,7 @@
#define AUDIO_PARAMETER_KEY_FLUENCE_TYPE "fluence"
#define AUDIO_PARAMETER_KEY_SLOWTALK "st_enable"
+#define AUDIO_PARAMETER_KEY_HD_VOICE "hd_voice"
#define AUDIO_PARAMETER_KEY_VOLUME_BOOST "volume_boost"
/* Query external audio device connection status */
#define AUDIO_PARAMETER_KEY_EXT_AUDIO_DEVICE "ext_audio_device"
@@ -130,6 +131,7 @@
int fluence_mode;
char fluence_cap[PROPERTY_VALUE_MAX];
bool slowtalk;
+ bool hd_voice;
bool is_i2s_ext_modem;
/* Audio calibration related functions */
void *acdb_handle;
@@ -805,6 +807,8 @@
my_data->external_mic = false;
my_data->fluence_type = FLUENCE_NONE;
my_data->fluence_mode = FLUENCE_ENDFIRE;
+ my_data->slowtalk = false;
+ my_data->hd_voice = false;
property_get("ro.qc.sdk.audio.fluencetype", my_data->fluence_cap, "");
if (!strncmp("fluencepro", my_data->fluence_cap, sizeof("fluencepro"))) {
@@ -1998,6 +2002,29 @@
return ret;
}
+static int set_hd_voice(struct platform_data *my_data, bool state)
+{
+ struct audio_device *adev = my_data->adev;
+ struct mixer_ctl *ctl;
+ char *mixer_ctl_name = "HD Voice Enable";
+ int ret = 0;
+ uint32_t set_values[ ] = {0,
+ ALL_SESSION_VSID};
+
+ 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;
+ } else {
+ ALOGV("Setting HD Voice state: %d", state);
+ ret = mixer_ctl_set_array(ctl, set_values, ARRAY_SIZE(set_values));
+ my_data->hd_voice = state;
+ }
+
+ return ret;
+}
static int update_external_device_status(struct platform_data *my_data,
char* event_name, bool status)
@@ -2051,6 +2078,23 @@
ALOGE("%s: Failed to set slow talk err: %d", __func__, ret);
}
+ err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_HD_VOICE, value, sizeof(value));
+ if (err >= 0) {
+ bool state = false;
+ if (!strncmp("true", value, sizeof("true"))) {
+ state = true;
+ }
+
+ str_parms_del(parms, AUDIO_PARAMETER_KEY_HD_VOICE);
+ if (my_data->hd_voice != state) {
+ ret = set_hd_voice(my_data, state);
+ if (ret)
+ ALOGE("%s: Failed to set HD voice err: %d", __func__, ret);
+ } else {
+ ALOGV("%s: HD Voice already set to %d", __func__, state);
+ }
+ }
+
err = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_VOLUME_BOOST,
value, sizeof(value));
if (err >= 0) {
@@ -2208,6 +2252,13 @@
my_data->slowtalk?"true":"false");
}
+ ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_HD_VOICE,
+ value, sizeof(value));
+ if (ret >= 0) {
+ str_parms_add_str(reply, AUDIO_PARAMETER_KEY_HD_VOICE,
+ my_data->hd_voice?"true":"false");
+ }
+
ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_VOLUME_BOOST,
value, sizeof(value));
if (ret >= 0) {