hal: add API to pass FNN usecase status to acdb-loader
Add API to allow FNN usecase status to be passed to
acdb-loader allowing persist cal block to be set
based on the FNN usecase status.
Change-Id: Ib9ce1c627eff26e873e1fd88fa2e19e6635a38e1
diff --git a/hal/acdb.h b/hal/acdb.h
index e1ab942..4db8c60 100644
--- a/hal/acdb.h
+++ b/hal/acdb.h
@@ -66,6 +66,8 @@
typedef int (*acdb_reload_t) (char *, char *, char *, int);
typedef int (*acdb_reload_v2_t) (char *, char *, char *, struct listnode *);
typedef int (*acdb_send_gain_dep_cal_t)(int, int, int, int, int);
+typedef void (*acdb_set_fluence_nn_state_t)(bool);
+typedef bool (*acdb_get_fluence_nn_state_t)();
struct meta_key_list {
struct listnode list;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index a88fd5a..8efa53c 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1274,6 +1274,13 @@
snd_device = usecase->out_snd_device;
}
+ if (usecase->type == PCM_CAPTURE) {
+ if (platform_get_fluence_nn_state(adev->platform) == 0) {
+ platform_set_fluence_nn_state(adev->platform, true);
+ ALOGD("%s: set fluence nn capture state", __func__);
+ }
+ }
+
#ifdef DS1_DOLBY_DAP_ENABLED
audio_extn_dolby_set_dmid(adev);
audio_extn_dolby_set_endpoint(adev);
@@ -1292,6 +1299,14 @@
}
if (usecase->type == PCM_CAPTURE) {
+ if (platform_get_fluence_nn_state(adev->platform) == 1 &&
+ adev->fluence_nn_usecase_id == USECASE_INVALID ) {
+ adev->fluence_nn_usecase_id = usecase->id;
+ ALOGD("%s: assign fluence nn usecase %d", __func__, usecase->id);
+ }
+ }
+
+ if (usecase->type == PCM_CAPTURE) {
in = usecase->stream.in;
if (in && is_loopback_input_device(get_device_types(&in->device_list))) {
ALOGD("%s: set custom mtmx params v1", __func__);
@@ -1377,6 +1392,11 @@
in->ec_opened = false;
}
}
+ if (usecase->id == adev->fluence_nn_usecase_id) {
+ platform_set_fluence_nn_state(adev->platform, false);
+ adev->fluence_nn_usecase_id = USECASE_INVALID;
+ ALOGD("%s: reset fluence nn capture state", __func__);
+ }
audio_extn_sound_trigger_update_stream_status(usecase, ST_EVENT_STREAM_FREE);
audio_extn_listen_update_stream_status(usecase, LISTEN_EVENT_STREAM_FREE);
@@ -10736,6 +10756,7 @@
adev->enable_voicerx = false;
adev->bt_wb_speech_enabled = false;
adev->swb_speech_mode = SPEECH_MODE_INVALID;
+ adev->fluence_nn_usecase_id = USECASE_INVALID;
//initialize this to false for now,
//this will be set to true through set param
adev->vr_audio_mode_enabled = false;
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 18f081b..403f69e 100755
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -748,6 +748,7 @@
int haptic_pcm_device_id;
uint8_t *haptic_buffer;
size_t haptic_buffer_size;
+ int fluence_nn_usecase_id;
/* logging */
snd_device_t last_logged_snd_device[AUDIO_USECASE_MAX][2]; /* [out, in] */
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index d30e777..0a68567 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -359,6 +359,8 @@
acdb_set_codec_data_t acdb_set_codec_data;
acdb_reload_t acdb_reload;
acdb_reload_v2_t acdb_reload_v2;
+ acdb_get_fluence_nn_state_t acdb_get_fluence_nn_state;
+ acdb_set_fluence_nn_state_t acdb_set_fluence_nn_state;
void *hw_info;
acdb_send_gain_dep_cal_t acdb_send_gain_dep_cal;
struct csd_data *csd;
@@ -3730,6 +3732,18 @@
ALOGE("%s: dlsym error %s for acdb_loader_reload_acdb_files_v2", __func__, dlerror());
}
+ my_data->acdb_set_fluence_nn_state = (acdb_set_fluence_nn_state_t)dlsym(
+ my_data->acdb_handle,
+ "acdb_set_fluence_nn_state");
+ if (!my_data->acdb_set_fluence_nn_state)
+ ALOGE("%s: dlsym error %s for acdb_set_fluence_nn_state", __func__, dlerror());
+
+ my_data->acdb_get_fluence_nn_state = (acdb_get_fluence_nn_state_t)dlsym(
+ my_data->acdb_handle,
+ "acdb_get_fluence_nn_state");
+ if (!my_data->acdb_get_fluence_nn_state)
+ ALOGE("%s: dlsym error %s for acdb_get_fluence_nn_state", __func__, dlerror());
+
my_data->acdb_reload = (acdb_reload_t)dlsym(my_data->acdb_handle,
"acdb_loader_reload_acdb_files");
if (my_data->acdb_reload == NULL) {
@@ -12591,3 +12605,37 @@
return true;
return false;
}
+
+bool platform_set_fluence_nn_state(void *platform, bool state) {
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if (my_data->acdb_set_fluence_nn_state == NULL) {
+ ALOGE("%s: dlsym error for acdb_set_fluence_nn_state", __func__);
+ return false;
+ }
+
+ if (my_data->fluence_nn_enabled) {
+ my_data->acdb_set_fluence_nn_state(state);
+ ALOGD("%s: set fluence nn state %d", __func__, state);
+ return true;
+ }
+
+ return false;
+}
+
+int platform_get_fluence_nn_state(void *platform) {
+ struct platform_data *my_data = (struct platform_data *)platform;
+ int ret = -1;
+
+ if (my_data->acdb_get_fluence_nn_state == NULL) {
+ ALOGE("%s: dlsym error for acdb_get_fluence_nn_state", __func__);
+ return ret;
+ }
+
+ if (my_data->fluence_nn_enabled)
+ ret = my_data->acdb_get_fluence_nn_state();
+ else
+ ALOGD("fluence nn disabled");
+
+ return ret;
+}
diff --git a/hal/platform_api.h b/hal/platform_api.h
index f0b10f5..bea9675 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -424,6 +424,8 @@
int platform_get_display_port_ctl_index(int controller, int stream);
bool platform_is_call_proxy_snd_device(snd_device_t snd_device);
void platform_set_audio_source_delay(audio_source_t audio_source, int delay_ms);
+bool platform_set_fluence_nn_state(void *platform, bool start);
+int platform_get_fluence_nn_state(void *platform);
int platform_get_audio_source_index(const char *audio_source_name);
bool platform_check_and_update_island_power_status(void *platform,