Merge "audio: Re-initialize ACDB after SSR"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 4cf1d06..f7da807 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3164,6 +3164,12 @@
set_snd_card_state(adev,SND_CARD_STATE_ONLINE);
//send dts hpx license if enabled
audio_extn_dts_eagle_send_lic();
+ if (!platform_is_acdb_initialized(adev->platform)) {
+ ret = platform_acdb_init(adev->platform);
+ if(ret)
+ ALOGE("acdb initialization is failed");
+
+ }
}
}
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index ed293e1..c71f001 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -203,6 +203,7 @@
bool hd_voice;
bool ec_ref_enabled;
bool is_wsa_speaker;
+ bool is_acdb_initialized;
/* Audio calibration related functions */
void *acdb_handle;
int voice_feature_set;
@@ -1193,6 +1194,37 @@
ALOGE("%s: Could not send anc cal", __FUNCTION__);
}
+int platform_acdb_init(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ char *cvd_version = NULL;
+ int key = 0;
+ const char *snd_card_name;
+ int result;
+ char value[PROPERTY_VALUE_MAX];
+ cvd_version = calloc(1, MAX_CVD_VERSION_STRING_SIZE);
+ if (!cvd_version)
+ ALOGE("Failed to allocate cvd version");
+ else
+ get_cvd_version(cvd_version, my_data->adev);
+
+ property_get("audio.ds1.metainfo.key",value,"0");
+ key = atoi(value);
+ snd_card_name = mixer_get_name(my_data->adev->mixer);
+ result = my_data->acdb_init(snd_card_name, cvd_version, key);
+ if (cvd_version)
+ free(cvd_version);
+ if (!result) {
+ my_data->is_acdb_initialized = true;
+ ALOGD("ACDB initialized");
+ audio_hwdep_send_cal(my_data);
+ } else {
+ my_data->is_acdb_initialized = false;
+ ALOGD("ACDB initialization failed");
+ }
+ return result;
+}
+
void *platform_init(struct audio_device *adev)
{
char platform[PROPERTY_VALUE_MAX];
@@ -1319,8 +1351,6 @@
acdb_device_table[SND_DEVICE_OUT_SPEAKER_AND_HDMI] = 131;
acdb_device_table[SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = 131;
}
- property_get("audio.ds1.metainfo.key",value,"0");
- key = atoi(value);
my_data->voice_feature_set = VOICE_FEATURE_SET_DEFAULT;
my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
@@ -1377,15 +1407,7 @@
ALOGE("%s: dlsym error %s for acdb_loader_init_v2", __func__, dlerror());
goto acdb_init_fail;
}
-
- cvd_version = calloc(1, MAX_CVD_VERSION_STRING_SIZE);
- if (!cvd_version)
- ALOGE("Failed to allocate cvd version");
- else
- get_cvd_version(cvd_version, adev);
- my_data->acdb_init(snd_card_name, cvd_version, key);
- if (cvd_version)
- free(cvd_version);
+ platform_acdb_init(my_data);
}
audio_extn_pm_vote();
@@ -1494,6 +1516,13 @@
audio_extn_dap_hal_deinit();
}
+int platform_is_acdb_initialized(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ ALOGD("%s: acdb initialized %d\n", __func__, my_data->is_acdb_initialized);
+ return my_data->is_acdb_initialized;
+}
+
const char *platform_get_snd_device_name(snd_device_t snd_device)
{
if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 3c90a8e..5a1af98 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -204,6 +204,7 @@
bool hd_voice;
bool ec_ref_enabled;
bool is_i2s_ext_modem;
+ bool is_acdb_initialized;
/* Audio calibration related functions */
void *acdb_handle;
int voice_feature_set;
@@ -1095,6 +1096,37 @@
ALOGE("%s: Could not send anc cal", __FUNCTION__);
}
+int platform_acdb_init(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ char *cvd_version = NULL;
+ int key = 0;
+ const char *snd_card_name;
+ int result;
+ char value[PROPERTY_VALUE_MAX];
+ cvd_version = calloc(1, MAX_CVD_VERSION_STRING_SIZE);
+ if (!cvd_version)
+ ALOGE("Failed to allocate cvd version");
+ else
+ get_cvd_version(cvd_version, my_data->adev);
+
+ property_get("audio.ds1.metainfo.key",value,"0");
+ key = atoi(value);
+ snd_card_name = mixer_get_name(my_data->adev->mixer);
+ result = my_data->acdb_init(snd_card_name, cvd_version, key);
+ if (cvd_version)
+ free(cvd_version);
+ if (!result) {
+ my_data->is_acdb_initialized = true;
+ ALOGD("ACDB initialized");
+ audio_hwdep_send_cal(my_data);
+ } else {
+ my_data->is_acdb_initialized = false;
+ ALOGD("ACDB initialization failed");
+ }
+ return result;
+}
+
void *platform_init(struct audio_device *adev)
{
char platform[PROPERTY_VALUE_MAX];
@@ -1260,8 +1292,6 @@
my_data->fluence_mode = FLUENCE_BROADSIDE;
}
}
- property_get("audio.ds1.metainfo.key",value,"0");
- key = atoi(value);
my_data->voice_feature_set = VOICE_FEATURE_SET_DEFAULT;
my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
@@ -1325,15 +1355,7 @@
goto acdb_init_fail;
}
- cvd_version = calloc(1, MAX_CVD_VERSION_STRING_SIZE);
- if (!cvd_version)
- ALOGE("failed to allocate cvd_version");
- else
- get_cvd_version(cvd_version, adev);
-
- my_data->acdb_init(snd_card_name, cvd_version, key);
- if (cvd_version)
- free(cvd_version);
+ platform_acdb_init(my_data);
}
acdb_init_fail:
@@ -1433,6 +1455,13 @@
audio_extn_dap_hal_deinit();
}
+int platform_is_acdb_initialized(void *platform)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+ ALOGD("%s: acdb initialized %d\n", __func__, my_data->is_acdb_initialized);
+ return my_data->is_acdb_initialized;
+}
+
const char *platform_get_snd_device_name(snd_device_t snd_device)
{
if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
diff --git a/hal/platform_api.h b/hal/platform_api.h
index f8749e7..9e75c9e 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -26,6 +26,8 @@
void *platform_init(struct audio_device *adev);
void platform_deinit(void *platform);
+int platform_is_acdb_initialized(void *platform);
+int platform_acdb_init(void *platform);
const char *platform_get_snd_device_name(snd_device_t snd_device);
int platform_get_snd_device_name_extn(void *platform, snd_device_t snd_device,
char *device_name);