hal: Add support for BCL feature in sm6150
Add a new persist node to check whether BCL is
enabled or not to differentiate from legacy VBAT
feature. Use this node to select the VBAT sound
devices. BCL does not need any calibration unlike
legacy VBAT, use BCL persist node and avoid
sending calibration.
CRs-Fixed: 2225097
Change-Id: I1ce8eb08de9bd0e49457f645730c103282f0d496
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index e8da091..cd2a816 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -238,6 +238,7 @@
bool is_acdb_initialized;
/* Vbat monitor related flags */
bool is_vbat_speaker;
+ bool is_bcl_speaker;
bool gsm_mode_enabled;
bool is_slimbus_interface;
bool is_internal_codec;
@@ -1751,6 +1752,9 @@
ret = 0;
if ((plat_data->is_vbat_speaker) && (WCD9XXX_VBAT_CAL == type)) {
+ /* VBAT BCL speaker does not need tuning data */
+ if (!plat_data->is_bcl_speaker)
+ return;
ret = send_vbat_adc_data_to_acdb(plat_data, cal_name_info[type]);
if (ret < 0)
ALOGE("%s error in sending vbat adc data to acdb", __func__);
@@ -2218,6 +2222,10 @@
if (ret)
my_data->is_vbat_speaker = true;
+ ret = audio_extn_can_use_bcl();
+ if (ret)
+ my_data->is_bcl_speaker = true;
+
list_init(&my_data->acdb_meta_key_list);
set_platform_defaults(my_data);
@@ -3392,7 +3400,7 @@
out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_VBAT ||
out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT) &&
audio_extn_spkr_prot_is_enabled()) {
- if (my_data->is_vbat_speaker)
+ if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT];
else
acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
@@ -3467,7 +3475,7 @@
out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_VBAT ||
out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT) &&
audio_extn_spkr_prot_is_enabled()) {
- if (my_data->is_vbat_speaker)
+ if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT];
else
acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
@@ -3989,7 +3997,7 @@
else
snd_device = SND_DEVICE_OUT_BT_SCO;
} else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
- if (my_data->is_vbat_speaker) {
+ if (my_data->is_vbat_speaker || my_data->is_bcl_speaker) {
if (hw_info_is_stereo_spkr(my_data->hw_info)) {
if (my_data->mono_speaker == SPKR_1)
snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_VBAT;
@@ -4073,7 +4081,7 @@
snd_device = SND_DEVICE_OUT_SPEAKER_EXTERNAL_2;
else if (adev->speaker_lr_swap)
snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
- else if (my_data->is_vbat_speaker)
+ else if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
snd_device = SND_DEVICE_OUT_SPEAKER_VBAT;
else
snd_device = SND_DEVICE_OUT_SPEAKER;