hal: Add support for turning fluence on/off
- To turn on/off fluence we need to change the build prop
file and changes will take effect after reboot. There is no
option to turn it on/off without rebooting the target.
- Add set_params support to turn it on and off.
An option is given to user to select the dualmic fluence
based on which set_parms is invoked.
Change-Id: I51d580af820d8e0b1bd1384c941ffba3f96813ca
CRs-Fixed: 605087
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index eea048f..4984dc8 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -113,6 +113,7 @@
bool fluence_in_audio_rec;
int fluence_type;
int fluence_mode;
+ char fluence_cap[PROPERTY_VALUE_MAX];
int btsco_sample_rate;
bool slowtalk;
bool is_i2s_ext_modem;
@@ -681,10 +682,10 @@
my_data->fluence_type = FLUENCE_NONE;
my_data->fluence_mode = FLUENCE_ENDFIRE;
- property_get("ro.qc.sdk.audio.fluencetype", value, "");
- if (!strncmp("fluencepro", value, sizeof("fluencepro"))) {
+ property_get("ro.qc.sdk.audio.fluencetype", my_data->fluence_cap, "");
+ if (!strncmp("fluencepro", my_data->fluence_cap, sizeof("fluencepro"))) {
my_data->fluence_type = FLUENCE_QUAD_MIC | FLUENCE_DUAL_MIC;
- } else if (!strncmp("fluence", value, sizeof("fluence"))) {
+ } else if (!strncmp("fluence", my_data->fluence_cap, sizeof("fluence"))) {
my_data->fluence_type = FLUENCE_DUAL_MIC;
} else {
my_data->fluence_type = FLUENCE_NONE;
@@ -874,6 +875,63 @@
return ret;
}
+int platform_set_fluence_type(void *platform, char *value)
+{
+ int ret = 0;
+ int fluence_type = FLUENCE_NONE;
+ int fluence_flag = NONE_FLAG;
+ struct platform_data *my_data = (struct platform_data *)platform;
+ struct audio_device *adev = my_data->adev;
+
+ ALOGV("%s: fluence type:%d", __func__, my_data->fluence_type);
+
+ /* only dual mic turn on and off is supported as of now through setparameters */
+ if (!strncmp(AUDIO_PARAMETER_VALUE_DUALMIC,value, sizeof(AUDIO_PARAMETER_VALUE_DUALMIC))) {
+ if (!strncmp("fluencepro", my_data->fluence_cap, sizeof("fluencepro")) ||
+ !strncmp("fluence", my_data->fluence_cap, sizeof("fluence"))) {
+ ALOGV("fluence dualmic feature enabled \n");
+ fluence_type = FLUENCE_DUAL_MIC;
+ fluence_flag = DMIC_FLAG;
+ } else {
+ ALOGE("%s: Failed to set DUALMIC", __func__);
+ ret = -1;
+ goto done;
+ }
+ } else if (!strncmp(AUDIO_PARAMETER_KEY_NO_FLUENCE, value, sizeof(AUDIO_PARAMETER_KEY_NO_FLUENCE))) {
+ ALOGV("fluence disabled");
+ fluence_type = FLUENCE_NONE;
+ } else {
+ ALOGE("Invalid fluence value : %s",value);
+ ret = -1;
+ goto done;
+ }
+
+ if (fluence_type != my_data->fluence_type) {
+ ALOGV("%s: Updating fluence_type to :%d", __func__, fluence_type);
+ my_data->fluence_type = fluence_type;
+ adev->acdb_settings = (adev->acdb_settings & FLUENCE_MODE_CLEAR) | fluence_flag;
+ }
+done:
+ return ret;
+}
+
+int platform_get_fluence_type(void *platform, char *value, uint32_t len)
+{
+ int ret = 0;
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if (my_data->fluence_type == FLUENCE_QUAD_MIC) {
+ strlcpy(value, "quadmic", len);
+ } else if (my_data->fluence_type == FLUENCE_DUAL_MIC) {
+ strlcpy(value, "dualmic", len);
+ } else if (my_data->fluence_type == FLUENCE_NONE) {
+ strlcpy(value, "none", len);
+ } else
+ ret = -1;
+
+ return ret;
+}
+
int platform_set_snd_device_acdb_id(snd_device_t snd_device, unsigned int acdb_id)
{
int ret = 0;
@@ -1824,24 +1882,8 @@
char *str = NULL;
char value[256] = {0};
int ret;
- int fluence_type;
char *kv_pairs = NULL;
- ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_FLUENCE_TYPE,
- value, sizeof(value));
- if (ret >= 0) {
- if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
- strlcpy(value, "fluencepro", sizeof(value));
- } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
- strlcpy(value, "fluence", sizeof(value));
- } else {
- strlcpy(value, "none", sizeof(value));
- }
-
- str_parms_add_str(reply, AUDIO_PARAMETER_KEY_FLUENCE_TYPE, value);
- }
-
- memset(value, 0, sizeof(value));
ret = str_parms_get_str(query, AUDIO_PARAMETER_KEY_SLOWTALK,
value, sizeof(value));
if (ret >= 0) {