hal: Update ACDB device id retrieval for speaker protection
Modify audio HAL to retrieve acdb device ids in
a uniform manner. Remove duplicate function for
fetching acdb device.
Bug: 77292011
Test: manual audio regression tests on B1
Change-Id: I1a26c0095c7a9a38497a8807b7308961ede25b8e
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index f2189a9..eb7ddde 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -41,14 +41,12 @@
#define audio_extn_spkr_prot_calib_cancel(adev) (0)
#define audio_extn_spkr_prot_stop_processing(snd_device) (0)
#define audio_extn_spkr_prot_is_enabled() (false)
-#define audio_extn_spkr_prot_get_acdb_id(snd_device) (-EINVAL)
#define audio_extn_get_spkr_prot_snd_device(snd_device) (snd_device)
#else
void audio_extn_spkr_prot_init(void *adev);
int audio_extn_spkr_prot_start_processing(snd_device_t snd_device);
void audio_extn_spkr_prot_stop_processing(snd_device_t snd_device);
bool audio_extn_spkr_prot_is_enabled();
-int audio_extn_spkr_prot_get_acdb_id(snd_device_t snd_device);
int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device);
void audio_extn_spkr_prot_calib_cancel(void *adev);
#endif
diff --git a/hal/audio_extn/cirrus_playback.c b/hal/audio_extn/cirrus_playback.c
index 595ac85..e6d3023 100644
--- a/hal/audio_extn/cirrus_playback.c
+++ b/hal/audio_extn/cirrus_playback.c
@@ -548,26 +548,6 @@
return true;
}
-int audio_extn_spkr_prot_get_acdb_id(snd_device_t snd_device) {
- int acdb_id;
-
- switch (snd_device) {
- case SND_DEVICE_OUT_SPEAKER:
- acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED);
- break;
- case SND_DEVICE_OUT_SPEAKER_SAFE:
- acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_SAFE);
- break;
- case SND_DEVICE_OUT_VOICE_SPEAKER:
- acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED);
- break;
- default:
- acdb_id = -EINVAL;
- break;
- }
- return acdb_id;
-}
-
int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device) {
switch(snd_device) {
case SND_DEVICE_OUT_SPEAKER:
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index 3f97d01..8c09a29 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -780,24 +780,6 @@
}
}
-int audio_extn_spkr_prot_get_acdb_id(snd_device_t snd_device)
-{
- int acdb_id;
-
- switch(snd_device) {
- case SND_DEVICE_OUT_SPEAKER:
- acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED);
- break;
- case SND_DEVICE_OUT_VOICE_SPEAKER:
- acdb_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED);
- break;
- default:
- acdb_id = -EINVAL;
- break;
- }
- return acdb_id;
-}
-
int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device)
{
if (!handle.spkr_prot_enable)
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 7bf274e..1751a30 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -141,8 +141,6 @@
snd_device = usecase->out_snd_device;
pcm_device_id = platform_get_pcm_device_id(usecase->id, PCM_PLAYBACK);
- snd_device = (snd_device == SND_DEVICE_OUT_SPEAKER) ?
- audio_extn_get_spkr_prot_snd_device(snd_device) : snd_device;
acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
if (acdb_dev_id < 0) {
ALOGE("%s: Couldn't get the acdb dev id", __func__);
@@ -333,8 +331,7 @@
struct stream_in *in;
if (usecase->type == PCM_PLAYBACK) {
- return platform_get_snd_device_acdb_id(
- audio_extn_get_spkr_prot_snd_device(usecase->out_snd_device));
+ return platform_get_snd_device_acdb_id(usecase->out_snd_device);
} else if(usecase->type == PCM_CAPTURE) {
return platform_get_snd_device_acdb_id(usecase->in_snd_device);
}
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 99e638b..74c49c6 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -664,7 +664,7 @@
snd_device == SND_DEVICE_OUT_SPEAKER_SAFE ||
snd_device == SND_DEVICE_OUT_VOICE_SPEAKER) &&
audio_extn_spkr_prot_is_enabled()) {
- if (audio_extn_spkr_prot_get_acdb_id(snd_device) < 0) {
+ if (platform_get_snd_device_acdb_id(snd_device) < 0) {
goto on_error;
}
if (audio_extn_spkr_prot_start_processing(snd_device)) {
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 1f8da65..170dbd8 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1350,6 +1350,12 @@
return -EINVAL;
}
+ /*
+ * If speaker protection is enabled, function returns supported
+ * sound device for speaker. Else same sound device is returned.
+ */
+ snd_device = audio_extn_get_spkr_prot_snd_device(snd_device);
+
if (operator_specific_device_table[snd_device] != NULL)
return get_operator_specific_device_acdb_id(snd_device);
else
@@ -1362,7 +1368,7 @@
int acdb_dev_id, acdb_dev_type;
int sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
- acdb_dev_id = acdb_device_table[audio_extn_get_spkr_prot_snd_device(snd_device)];
+ acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
if (acdb_dev_id < 0) {
ALOGE("%s: Could not find acdb id for device(%d)",
__func__, snd_device);
@@ -1421,10 +1427,6 @@
if (my_data->acdb_send_voice_cal == NULL) {
ALOGE("%s: dlsym error for acdb_send_voice_call", __func__);
} else {
- if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
- audio_extn_spkr_prot_is_enabled())
- out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED;
-
acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
acdb_tx_id = platform_get_snd_device_acdb_id(in_snd_device);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index c07dd90..d39e043 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -784,8 +784,7 @@
else
app_type = DEFAULT_APP_TYPE_RX_PATH;
- acdb_dev_id =
- acdb_device_table[audio_extn_get_spkr_prot_snd_device(usecase->out_snd_device)];
+ acdb_dev_id = platform_get_snd_device_acdb_id(usecase->out_snd_device);
if (!my_data->acdb_send_gain_dep_cal(acdb_dev_id, app_type,
acdb_dev_type, mode, level)) {
@@ -1886,6 +1885,12 @@
return -EINVAL;
}
+ /*
+ * If speaker protection is enabled, function returns supported
+ * sound device for speaker. Else same sound device is returned.
+ */
+ snd_device = audio_extn_get_spkr_prot_snd_device(snd_device);
+
if (operator_specific_device_table[snd_device] != NULL)
return get_operator_specific_device_acdb_id(snd_device);
else
@@ -1932,7 +1937,7 @@
if (platform_supports_app_type_cfg()) // use v2 instead
return -ENOSYS;
- acdb_dev_id = acdb_device_table[audio_extn_get_spkr_prot_snd_device(snd_device)];
+ acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
if (acdb_dev_id < 0) {
ALOGE("%s: Could not find acdb id for device(%d)",
__func__, snd_device);
@@ -1967,7 +1972,7 @@
snd_device = usecase->in_snd_device;
// skipped over get_spkr_prot_device
- acdb_dev_id = acdb_device_table[audio_extn_get_spkr_prot_snd_device(snd_device)];
+ acdb_dev_id = platform_get_snd_device_acdb_id(snd_device);
if (acdb_dev_id < 0) {
ALOGE("%s: Could not find acdb id for device(%d)",
__func__, snd_device);
@@ -1980,7 +1985,7 @@
}
for (i = 0; i < num_devices; i++) {
- acdb_dev_id = acdb_device_table[audio_extn_get_spkr_prot_snd_device(new_snd_device[i])];
+ acdb_dev_id = platform_get_snd_device_acdb_id(new_snd_device[i]);
if (acdb_dev_id < 0) {
ALOGE("%s: Could not find acdb id for device(%d)",
__func__, new_snd_device[i]);
@@ -2034,12 +2039,7 @@
if (my_data->csd == NULL)
return ret;
- if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
- audio_extn_spkr_prot_is_enabled())
- acdb_rx_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED);
- else
- acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
-
+ acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
acdb_tx_id = platform_get_snd_device_acdb_id(in_snd_device);
if (acdb_rx_id > 0 && acdb_tx_id > 0) {
@@ -2066,10 +2066,6 @@
if (my_data->acdb_send_voice_cal == NULL) {
ALOGE("%s: dlsym error for acdb_send_voice_call", __func__);
} else {
- if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
- audio_extn_spkr_prot_is_enabled())
- out_snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED;
-
acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
acdb_tx_id = platform_get_snd_device_acdb_id(in_snd_device);
@@ -2094,12 +2090,7 @@
if (my_data->csd == NULL)
return ret;
- if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
- audio_extn_spkr_prot_is_enabled())
- acdb_rx_id = platform_get_snd_device_acdb_id(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED);
- else
- acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
-
+ acdb_rx_id = platform_get_snd_device_acdb_id(out_snd_device);
acdb_tx_id = platform_get_snd_device_acdb_id(in_snd_device);
if (acdb_rx_id > 0 && acdb_tx_id > 0) {