audio: Add ACDB INIT extension
- Add an audio extension for ACDB
- ACDB Init from AHAL and STHAL are routed via this extension
CRs-Fixed: 2028493
Change-Id: Ib63c8fa4bf1f89d4dbfce8b6584ac1d8271e5f38
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index bdb039f..c2a9604 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -587,6 +587,8 @@
void audio_extn_utils_update_stream_app_type_cfg_for_usecase(
struct audio_device *adev,
struct audio_usecase *usecase);
+int audio_extn_utils_get_snd_card_num();
+
#ifdef DS2_DOLBY_DAP_ENABLED
#define LIB_DS2_DAP_HAL "vendor/lib/libhwdaphal.so"
#define SET_HW_INFO_FUNC "dap_hal_set_hw_info"
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index b8be7aa..13faf64 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -1936,3 +1936,66 @@
return 0;
}
#endif
+
+#define MAX_SND_CARD 8
+#define RETRY_US 500000
+#define RETRY_NUMBER 10
+
+int audio_extn_utils_get_snd_card_num()
+{
+
+ void *hw_info = NULL;
+ struct mixer *mixer = NULL;
+ int retry_num = 0;
+ int snd_card_num = 0;
+ char* snd_card_name = NULL;
+
+ while (snd_card_num < MAX_SND_CARD) {
+ mixer = mixer_open(snd_card_num);
+
+ while (!mixer && retry_num < RETRY_NUMBER) {
+ usleep(RETRY_US);
+ mixer = mixer_open(snd_card_num);
+ retry_num++;
+ }
+
+ if (!mixer) {
+ ALOGE("%s: Unable to open the mixer card: %d", __func__,
+ snd_card_num);
+ retry_num = 0;
+ snd_card_num++;
+ continue;
+ }
+
+ snd_card_name = strdup(mixer_get_name(mixer));
+ if (!snd_card_name) {
+ ALOGE("failed to allocate memory for snd_card_name\n");
+ mixer_close(mixer);
+ return -1;
+ }
+ ALOGD("%s: snd_card_name: %s", __func__, snd_card_name);
+
+ hw_info = hw_info_init(snd_card_name);
+ if (hw_info) {
+ ALOGD("%s: Opened sound card:%d", __func__, snd_card_num);
+ break;
+ }
+ ALOGE("%s: Failed to init hardware info", __func__);
+ retry_num = 0;
+ snd_card_num++;
+ free(snd_card_name);
+ mixer_close(mixer);
+ }
+
+ mixer_close(mixer);
+ hw_info_deinit(hw_info);
+ if (snd_card_name)
+ free(snd_card_name);
+
+ if (snd_card_num >= MAX_SND_CARD) {
+ ALOGE("%s: Unable to find correct sound card, aborting.", __func__);
+ return -1;
+ }
+
+ return snd_card_num;
+}