Merge "hal: Add sound card update API"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index f7da807..4bc6b59 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -377,7 +377,10 @@
return -ENOSYS;
pthread_mutex_lock(&adev->snd_card_status.lock);
- adev->snd_card_status.state = snd_scard_state;
+ if (adev->snd_card_status.state != snd_scard_state) {
+ adev->snd_card_status.state = snd_scard_state;
+ platform_snd_card_update(adev->platform, snd_scard_state);
+ }
pthread_mutex_unlock(&adev->snd_card_status.lock);
return 0;
@@ -3164,12 +3167,6 @@
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 c71f001..3a8f314 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -172,6 +172,7 @@
acdb_loader_get_calibration_t acdb_loader_get_calibration;
typedef int (*acdb_set_audio_cal_t) (void *, void *, uint32_t);
typedef int (*acdb_get_audio_cal_t) (void *, void *, uint32_t*);
+typedef int (*acdb_send_common_top_t) (void);
typedef struct codec_backend_cfg {
uint32_t sample_rate;
@@ -215,6 +216,7 @@
acdb_send_voice_cal_t acdb_send_voice_cal;
acdb_reload_vocvoltable_t acdb_reload_vocvoltable;
acdb_get_default_app_type_t acdb_get_default_app_type;
+ acdb_send_common_top_t acdb_send_common_top;
#ifdef RECORD_PLAY_CONCURRENCY
bool rec_play_conc_set;
#endif
@@ -1194,7 +1196,7 @@
ALOGE("%s: Could not send anc cal", __FUNCTION__);
}
-int platform_acdb_init(void *platform)
+static int platform_acdb_init(void *platform)
{
struct platform_data *my_data = (struct platform_data *)platform;
char *cvd_version = NULL;
@@ -1401,6 +1403,13 @@
ALOGE("%s: Could not find the symbol acdb_get_default_app_type from %s",
__func__, LIB_ACDB_LOADER);
+ my_data->acdb_send_common_top = (acdb_send_common_top_t)dlsym(
+ my_data->acdb_handle,
+ "acdb_loader_send_common_custom_topology");
+ if (!my_data->acdb_send_common_top)
+ ALOGE("%s: Could not find the symbol acdb_get_default_app_type from %s",
+ __func__, LIB_ACDB_LOADER);
+
my_data->acdb_init = (acdb_init_t)dlsym(my_data->acdb_handle,
"acdb_loader_init_v2");
if (my_data->acdb_init == NULL) {
@@ -1516,13 +1525,27 @@
audio_extn_dap_hal_deinit();
}
-int platform_is_acdb_initialized(void *platform)
+static 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;
}
+void platform_snd_card_update(void *platform, int snd_scard_state)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if (snd_scard_state == SND_CARD_STATE_ONLINE) {
+ if (!platform_is_acdb_initialized(my_data)) {
+ if(platform_acdb_init(my_data))
+ ALOGE("%s: acdb initialization is failed", __func__);
+ } else if (my_data->acdb_send_common_top() < 0) {
+ ALOGD("%s: acdb did not set common topology", __func__);
+ }
+ }
+}
+
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 5a1af98..875cc2c 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -173,6 +173,7 @@
acdb_loader_get_calibration_t acdb_loader_get_calibration;
typedef int (*acdb_set_audio_cal_t) (void *, void *, uint32_t);
typedef int (*acdb_get_audio_cal_t) (void *, void *, uint32_t*);
+typedef int (*acdb_send_common_top_t) (void);
typedef struct codec_backend_cfg {
uint32_t sample_rate;
@@ -216,6 +217,7 @@
acdb_send_voice_cal_t acdb_send_voice_cal;
acdb_reload_vocvoltable_t acdb_reload_vocvoltable;
acdb_get_default_app_type_t acdb_get_default_app_type;
+ acdb_send_common_top_t acdb_send_common_top;
void *hw_info;
acdb_send_gain_dep_cal_t acdb_send_gain_dep_cal;
@@ -1096,7 +1098,7 @@
ALOGE("%s: Could not send anc cal", __FUNCTION__);
}
-int platform_acdb_init(void *platform)
+static int platform_acdb_init(void *platform)
{
struct platform_data *my_data = (struct platform_data *)platform;
char *cvd_version = NULL;
@@ -1348,6 +1350,13 @@
ALOGV("%s: Could not find the symbol acdb_loader_send_gain_dep_cal from %s",
__func__, LIB_ACDB_LOADER);
+ my_data->acdb_send_common_top = (acdb_send_common_top_t)dlsym(
+ my_data->acdb_handle,
+ "acdb_loader_send_common_custom_topology");
+ if (!my_data->acdb_send_common_top)
+ ALOGE("%s: Could not find the symbol acdb_get_default_app_type from %s",
+ __func__, LIB_ACDB_LOADER);
+
my_data->acdb_init = (acdb_init_t)dlsym(my_data->acdb_handle,
"acdb_loader_init_v2");
if (my_data->acdb_init == NULL) {
@@ -1455,13 +1464,27 @@
audio_extn_dap_hal_deinit();
}
-int platform_is_acdb_initialized(void *platform)
+static 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;
}
+void platform_snd_card_update(void *platform, int snd_scard_state)
+{
+ struct platform_data *my_data = (struct platform_data *)platform;
+
+ if (snd_scard_state == SND_CARD_STATE_ONLINE) {
+ if (!platform_is_acdb_initialized(my_data)) {
+ if(platform_acdb_init(my_data))
+ ALOGE("%s: acdb initialization is failed", __func__);
+ } else if (my_data->acdb_send_common_top() < 0) {
+ ALOGD("%s: acdb did not set common topology", __func__);
+ }
+ }
+}
+
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 9e75c9e..921ff0b 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -26,8 +26,6 @@
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);
@@ -92,6 +90,8 @@
/* From platform_info_parser.c */
int platform_info_init(const char *filename);
+void platform_snd_card_update(void *platform, int snd_scard_state);
+
struct audio_offload_info_t;
uint32_t platform_get_compress_offload_buffer_size(audio_offload_info_t* info);
uint32_t platform_get_pcm_offload_buffer_size(audio_offload_info_t* info);