hal: Add support for fluence in regular audio recording
- Add support to enable dualmic fluence on regular audio capture
- Correct the ACDB ids for camcorder and voice recognition devices
CRs-Fixed: 568507
Change-Id: I5d24907db0bd8222a65827659bf5425015c7bd50
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 0c87b84..c9c59d7 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -81,6 +81,7 @@
bool fluence_in_spkr_mode;
bool fluence_in_voice_call;
bool fluence_in_voice_rec;
+ bool fluence_in_audio_rec;
int fluence_type;
int btsco_sample_rate;
bool slowtalk;
@@ -160,10 +161,14 @@
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
+ [SND_DEVICE_IN_HANDSET_DMIC] = "dmic-endfire",
[SND_DEVICE_IN_SPEAKER_MIC] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_DMIC] = "speaker-dmic-endfire",
[SND_DEVICE_IN_HEADSET_MIC] = "headset-mic",
[SND_DEVICE_IN_HANDSET_MIC_AEC] = "handset-mic",
- [SND_DEVICE_IN_SPEAKER_MIC_AEC] = "voice-speaker-mic",
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC] = "dmic-endfire",
+ [SND_DEVICE_IN_SPEAKER_MIC_AEC] = "speaker-mic",
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC] = "speaker-dmic-endfire",
[SND_DEVICE_IN_HEADSET_MIC_AEC] = "headset-mic",
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = "voice-speaker-mic",
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = "voice-headset-mic",
@@ -177,7 +182,7 @@
[SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
[SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic",
[SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic",
- [SND_DEVICE_IN_VOICE_REC_DMIC] = "voice-rec-dmic-ef",
+ [SND_DEVICE_IN_VOICE_REC_DMIC_STEREO] = "voice-rec-dmic-ef",
[SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = "voice-rec-dmic-ef-fluence",
[SND_DEVICE_IN_USB_HEADSET_MIC] = "usb-headset-mic",
[SND_DEVICE_IN_CAPTURE_FM] = "capture-fm",
@@ -219,32 +224,35 @@
[SND_DEVICE_OUT_SPEAKER_PROTECTED] = 101,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
- [SND_DEVICE_IN_SPEAKER_MIC] = 4, /* ToDo: Check if this needs to changed to 11 */
+ [SND_DEVICE_IN_HANDSET_DMIC] = 41,
+ [SND_DEVICE_IN_SPEAKER_MIC] = 11,
+ [SND_DEVICE_IN_SPEAKER_DMIC] = 43,
[SND_DEVICE_IN_HEADSET_MIC] = 8,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 40,
+ [SND_DEVICE_IN_HANDSET_DMIC_AEC] = 41,
[SND_DEVICE_IN_SPEAKER_MIC_AEC] = 42,
+ [SND_DEVICE_IN_SPEAKER_DMIC_AEC] = 43,
[SND_DEVICE_IN_HEADSET_MIC_AEC] = 47,
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = 11,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
[SND_DEVICE_IN_HDMI_MIC] = 4,
[SND_DEVICE_IN_BT_SCO_MIC] = 21,
[SND_DEVICE_IN_BT_SCO_MIC_WB] = 38,
- [SND_DEVICE_IN_CAMCORDER_MIC] = 61,
+ [SND_DEVICE_IN_CAMCORDER_MIC] = 4,
[SND_DEVICE_IN_VOICE_DMIC] = 41,
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 43,
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
[SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36,
[SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16,
- [SND_DEVICE_IN_VOICE_REC_MIC] = 62,
+ [SND_DEVICE_IN_VOICE_REC_MIC] = 4,
+ [SND_DEVICE_IN_VOICE_REC_DMIC_STEREO] = 34,
+ [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 41,
[SND_DEVICE_IN_USB_HEADSET_MIC] = 44,
[SND_DEVICE_IN_CAPTURE_FM] = 0,
[SND_DEVICE_IN_AANC_HANDSET_MIC] = 104,
[SND_DEVICE_IN_QUAD_MIC] = 46,
[SND_DEVICE_IN_HANDSET_STEREO_DMIC] = 34,
[SND_DEVICE_IN_SPEAKER_STEREO_DMIC] = 35,
- /* TODO: Update with proper acdb ids */
- [SND_DEVICE_IN_VOICE_REC_DMIC] = 62,
- [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 6,
[SND_DEVICE_IN_CAPTURE_VI_FEEDBACK] = 102,
};
@@ -309,11 +317,12 @@
my_data->fluence_in_spkr_mode = false;
my_data->fluence_in_voice_call = false;
my_data->fluence_in_voice_rec = false;
+ my_data->fluence_in_audio_rec = false;
my_data->fluence_type = FLUENCE_NONE;
property_get("ro.qc.sdk.audio.fluencetype", value, "");
if (!strncmp("fluencepro", value, sizeof("fluencepro"))) {
- my_data->fluence_type = FLUENCE_QUAD_MIC;
+ my_data->fluence_type = FLUENCE_QUAD_MIC | FLUENCE_DUAL_MIC;
} else if (!strncmp("fluence", value, sizeof("fluence"))) {
my_data->fluence_type = FLUENCE_DUAL_MIC;
} else {
@@ -331,6 +340,11 @@
my_data->fluence_in_voice_rec = true;
}
+ property_get("persist.audio.fluence.audiorec",value,"");
+ if (!strncmp("true", value, sizeof("true"))) {
+ my_data->fluence_in_audio_rec = true;
+ }
+
property_get("persist.audio.fluence.speaker",value,"");
if (!strncmp("true", value, sizeof("true"))) {
my_data->fluence_in_spkr_mode = true;
@@ -753,12 +767,12 @@
if (my_data->fluence_type != FLUENCE_NONE &&
my_data->fluence_in_voice_call &&
my_data->fluence_in_spkr_mode) {
- if(my_data->fluence_type == FLUENCE_DUAL_MIC) {
- adev->acdb_settings |= DMIC_FLAG;
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
- } else {
+ if(my_data->fluence_type & FLUENCE_QUAD_MIC) {
adev->acdb_settings |= QMIC_FLAG;
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
+ } else {
+ adev->acdb_settings |= DMIC_FLAG;
+ snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
}
} else {
snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
@@ -772,7 +786,7 @@
} else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK)
- snd_device = SND_DEVICE_IN_VOICE_REC_DMIC;
+ snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_STEREO;
else if (my_data->fluence_in_voice_rec)
snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
@@ -787,9 +801,15 @@
if (adev->active_input) {
if (adev->active_input->enable_aec) {
if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
- snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
+ if(my_data->fluence_type & FLUENCE_DUAL_MIC)
+ snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC;
+ else
+ snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
- snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
+ if(my_data->fluence_type & FLUENCE_DUAL_MIC)
+ snd_device = SND_DEVICE_IN_HANDSET_DMIC_AEC;
+ else
+ snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
} else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
snd_device = SND_DEVICE_IN_HEADSET_MIC_AEC;
}
@@ -797,6 +817,20 @@
} else
set_echo_reference(adev->mixer, "NONE");
}
+ } else if (source == AUDIO_SOURCE_MIC) {
+ if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
+ if(my_data->fluence_type & FLUENCE_DUAL_MIC &&
+ my_data->fluence_in_audio_rec)
+ snd_device = SND_DEVICE_IN_SPEAKER_DMIC;
+ else
+ snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+ } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
+ if(my_data->fluence_type & FLUENCE_DUAL_MIC &&
+ my_data->fluence_in_audio_rec)
+ snd_device = SND_DEVICE_IN_HANDSET_DMIC;
+ else
+ snd_device = SND_DEVICE_IN_HANDSET_MIC;
+ }
} else if (source == AUDIO_SOURCE_FM_RX ||
source == AUDIO_SOURCE_FM_RX_A2DP) {
snd_device = SND_DEVICE_IN_CAPTURE_FM;
@@ -1062,9 +1096,9 @@
value, sizeof(value));
if (ret >= 0) {
pthread_mutex_lock(&my_data->adev->lock);
- if (my_data->fluence_type == FLUENCE_QUAD_MIC) {
+ if (my_data->fluence_type & FLUENCE_QUAD_MIC) {
strlcpy(value, "fluencepro", sizeof(value));
- } else if (my_data->fluence_type == FLUENCE_DUAL_MIC) {
+ } else if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
strlcpy(value, "fluence", sizeof(value));
} else {
strlcpy(value, "none", sizeof(value));
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 43d796a..795c9f9 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -22,8 +22,8 @@
enum {
FLUENCE_NONE,
- FLUENCE_DUAL_MIC,
- FLUENCE_QUAD_MIC
+ FLUENCE_DUAL_MIC = 0x1,
+ FLUENCE_QUAD_MIC = 0x2,
};
/*
@@ -80,10 +80,14 @@
/* Capture devices */
SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END,
SND_DEVICE_IN_HANDSET_MIC = SND_DEVICE_IN_BEGIN,
+ SND_DEVICE_IN_HANDSET_DMIC,
SND_DEVICE_IN_SPEAKER_MIC,
+ SND_DEVICE_IN_SPEAKER_DMIC,
SND_DEVICE_IN_HEADSET_MIC,
SND_DEVICE_IN_HANDSET_MIC_AEC,
+ SND_DEVICE_IN_HANDSET_DMIC_AEC,
SND_DEVICE_IN_SPEAKER_MIC_AEC,
+ SND_DEVICE_IN_SPEAKER_DMIC_AEC,
SND_DEVICE_IN_HEADSET_MIC_AEC,
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
@@ -98,7 +102,7 @@
SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
SND_DEVICE_IN_VOICE_REC_MIC,
- SND_DEVICE_IN_VOICE_REC_DMIC,
+ SND_DEVICE_IN_VOICE_REC_DMIC_STEREO,
SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
SND_DEVICE_IN_USB_HEADSET_MIC,
SND_DEVICE_IN_CAPTURE_FM,