hal: add changes to support Fluence V8 feature
Add new sound devices and acdb device ids to
support Fluence V8 feature. Enable the sound
devices based on the tri mic fluence support
property.
CRs-Fixed: 2155314
Change-Id: Ibfcd022d69bdd11a280caee6d0f03e5909ed2961
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index f2625bc..ce12dba 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -525,7 +525,11 @@
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = "quad-mic",
[SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE] = "quad-mic",
[SND_DEVICE_IN_THREE_MIC] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO] = "three-mic",
[SND_DEVICE_IN_HANDSET_TMIC] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC_AEC] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC_NS] = "three-mic",
+ [SND_DEVICE_IN_HANDSET_TMIC_AEC_NS] = "three-mic",
[SND_DEVICE_IN_VOICE_REC_TMIC] = "three-mic",
[SND_DEVICE_IN_UNPROCESSED_MIC] = "unprocessed-mic",
[SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = "unprocessed-stereo-mic",
@@ -684,7 +688,11 @@
[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = 129,
[SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE] = 125,
[SND_DEVICE_IN_THREE_MIC] = 46, /* for APSS Surround Sound Recording */
- [SND_DEVICE_IN_HANDSET_TMIC] = 125, /* for 3mic recording with fluence */
+ [SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO] = 125,
+ [SND_DEVICE_IN_HANDSET_TMIC] = 153,
+ [SND_DEVICE_IN_HANDSET_TMIC_AEC] = 154,
+ [SND_DEVICE_IN_HANDSET_TMIC_NS] = 155,
+ [SND_DEVICE_IN_HANDSET_TMIC_AEC_NS] = 156,
[SND_DEVICE_IN_VOICE_REC_TMIC] = 125,
[SND_DEVICE_IN_UNPROCESSED_MIC] = 143,
[SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = 144,
@@ -827,7 +835,11 @@
{TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE)},
{TO_NAME_INDEX(SND_DEVICE_IN_THREE_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC_AEC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC_NS)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_TMIC_AEC_NS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_REC_TMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_STEREO_MIC)},
@@ -1507,7 +1519,11 @@
hw_interface_table[SND_DEVICE_IN_SPEAKER_QMIC_AEC_NS] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_REC_QMIC_FLUENCE] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_THREE_MIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_TMIC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_TMIC_AEC] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_TMIC_NS] = strdup("SLIMBUS_0_TX");
+ hw_interface_table[SND_DEVICE_IN_HANDSET_TMIC_AEC_NS] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_REC_TMIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_UNPROCESSED_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_UNPROCESSED_STEREO_MIC] = strdup("SLIMBUS_0_TX");
@@ -2051,8 +2067,16 @@
property_get("ro.vendor.audio.sdk.fluencetype", my_data->fluence_cap, "");
if (!strncmp("fluencepro", my_data->fluence_cap, sizeof("fluencepro"))) {
my_data->fluence_type = FLUENCE_QUAD_MIC | FLUENCE_DUAL_MIC;
+
+ if (property_get_bool("persist.vendor.audio.fluence.tmic.enabled",false)) {
+ my_data->fluence_type |= FLUENCE_TRI_MIC;
+ }
} else if (!strncmp("fluence", my_data->fluence_cap, sizeof("fluence"))) {
my_data->fluence_type = FLUENCE_DUAL_MIC;
+
+ if (property_get_bool("persist.vendor.audio.fluence.tmic.enabled",false)) {
+ my_data->fluence_type |= FLUENCE_TRI_MIC;
+ }
} else {
my_data->fluence_type = FLUENCE_NONE;
}
@@ -3927,7 +3951,11 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC_AEC_NS;
+ adev->acdb_settings |= TMIC_FLAG;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
adev->acdb_settings |= DMIC_FLAG;
@@ -3967,7 +3995,11 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC_AEC_NS;
+ adev->acdb_settings |= TMIC_FLAG;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC_NS;
adev->acdb_settings |= DMIC_FLAG;
@@ -3997,7 +4029,11 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC_AEC;
+ adev->acdb_settings |= TMIC_FLAG;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC;
adev->acdb_settings |= DMIC_FLAG;
@@ -4027,7 +4063,11 @@
} else
snd_device = SND_DEVICE_IN_SPEAKER_MIC_NS;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
+ if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC_NS;
+ adev->acdb_settings |= TMIC_FLAG;
+ } else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_DMIC_NS;
adev->acdb_settings |= DMIC_FLAG;
@@ -4143,8 +4183,14 @@
if (audio_extn_hfp_is_active(adev))
platform_set_echo_reference(adev, true, out_device);
} else {
- snd_device = SND_DEVICE_IN_VOICE_DMIC;
- adev->acdb_settings |= DMIC_FLAG;
+ if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC;
+ adev->acdb_settings |= TMIC_FLAG;
+ } else { /* for FLUENCE_DUAL_MIC and SOURCE_DUAL_MIC */
+ snd_device = SND_DEVICE_IN_VOICE_DMIC;
+ adev->acdb_settings |= DMIC_FLAG;
+ }
}
} else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC;
@@ -4315,6 +4361,9 @@
platform_set_echo_reference(adev, true, out_device);
} else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
(my_data->source_mic_type & SOURCE_THREE_MIC)) {
+ snd_device = SND_DEVICE_IN_HANDSET_TMIC_FLUENCE_PRO;
+ } else if ((my_data->fluence_type & FLUENCE_TRI_MIC) &&
+ (my_data->source_mic_type & SOURCE_THREE_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_TMIC;
} else if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC)) {