hal: Changes to enable multi-turn
Port recording with FFV changes from 8916 platform to 8974 platform
file to enable multi-turn.
CRs-Fixed: 2374604
Change-Id: I2400309d19502be9f94336ff0b6a8328a2d533e1
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index e48cf47..a900ecd 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -7707,15 +7707,19 @@
int platform_get_ec_ref_loopback_snd_device(int channel_count)
{
- snd_device_t snd_device;
+ snd_device_t snd_device = SND_DEVICE_NONE;
- if (channel_count == 1)
- snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_MONO;
- else if (channel_count == 2)
- snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO;
- else
- snd_device = SND_DEVICE_NONE;
-
+ switch(channel_count) {
+ case 1:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_MONO;
+ break;
+ case 2:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO;
+ break;
+ default:
+ snd_device = SND_DEVICE_NONE;
+ break;
+ }
return snd_device;
}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 913ddb6..229b385 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -397,7 +397,7 @@
{PLAYBACK_INTERACTIVE_STRM_DEVICE7, PLAYBACK_INTERACTIVE_STRM_DEVICE7},
[USECASE_AUDIO_PLAYBACK_INTERACTIVE_STREAM8] =
{PLAYBACK_INTERACTIVE_STRM_DEVICE8, PLAYBACK_INTERACTIVE_STRM_DEVICE8},
-
+ [USECASE_AUDIO_EC_REF_LOOPBACK] = {-1, -1}, /* pcm id updated from platform info file */
};
/* Array to store sound devices */
@@ -558,6 +558,10 @@
[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = "unprocessed-three-mic",
[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = "unprocessed-quad-mic",
[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = "unprocessed-headset-mic",
+ [SND_DEVICE_IN_HANDSET_6MIC] = "handset-6mic",
+ [SND_DEVICE_IN_HANDSET_8MIC] = "handset-8mic",
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = "ec-ref-loopback-mono",
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = "ec-ref-loopback-stereo",
[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = "quad-mic",
[SND_DEVICE_IN_INCALL_REC_RX] = "incall-rec-rx",
[SND_DEVICE_IN_INCALL_REC_TX] = "incall-rec-tx",
@@ -741,6 +745,10 @@
[SND_DEVICE_IN_UNPROCESSED_THREE_MIC] = 145,
[SND_DEVICE_IN_UNPROCESSED_QUAD_MIC] = 146,
[SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC] = 147,
+ [SND_DEVICE_IN_HANDSET_6MIC] = 4,
+ [SND_DEVICE_IN_HANDSET_8MIC] = 4,
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = 4,
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = 4,
[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
};
@@ -897,6 +905,10 @@
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_THREE_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_QUAD_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_UNPROCESSED_HEADSET_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_6MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_8MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_MONO)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_GENERIC_QMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
@@ -948,6 +960,7 @@
{TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_TX)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_AFE_PROXY)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_AFE_PROXY)},
+ {TO_NAME_INDEX(USECASE_AUDIO_EC_REF_LOOPBACK)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SILENCE)},
{TO_NAME_INDEX(USECASE_INCALL_MUSIC_UPLINK)},
{TO_NAME_INDEX(USECASE_INCALL_MUSIC_UPLINK2)},
@@ -1928,6 +1941,8 @@
{
// support max to mono, example if max count is 3, usecase supports Three, dual and mono mic
switch (my_data->max_mic_count) {
+ case 6:
+ my_data->source_mic_type |= SOURCE_HEX_MIC;
case 4:
my_data->source_mic_type |= SOURCE_QUAD_MIC;
case 3:
@@ -2189,7 +2204,9 @@
be_dai_name_table = NULL;
property_get("ro.vendor.audio.sdk.fluencetype", my_data->fluence_cap, "");
- if (!strncmp("fluencepro", my_data->fluence_cap, sizeof("fluencepro"))) {
+ if (!strncmp("fluenceffv", my_data->fluence_cap, sizeof("fluenceffv"))) {
+ my_data->fluence_type = FLUENCE_HEX_MIC | FLUENCE_QUAD_MIC | FLUENCE_DUAL_MIC;
+ } else 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)) {
@@ -2459,6 +2476,7 @@
/* Read one time ssr property */
audio_extn_ssr_update_enabled();
+ audio_extn_ffv_update_enabled();
audio_extn_spkr_prot_init(adev);
@@ -2768,6 +2786,10 @@
if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX) {
strlcpy(device_name, device_table[snd_device], DEVICE_NAME_MAX_SIZE);
hw_info_append_hw_type(my_data->hw_info, snd_device, device_name);
+
+ if ((snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_MONO) ||
+ (snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO))
+ audio_extn_ffv_append_ec_ref_dev_name(device_name);
} else {
strlcpy(device_name, "", DEVICE_NAME_MAX_SIZE);
return -EINVAL;
@@ -2935,7 +2957,9 @@
int ret = 0;
struct platform_data *my_data = (struct platform_data *)platform;
- if (my_data->fluence_type == FLUENCE_QUAD_MIC) {
+ if (my_data->fluence_type == FLUENCE_HEX_MIC) {
+ strlcpy(value, "hexmic", len);
+ } else if (my_data->fluence_type == FLUENCE_QUAD_MIC) {
strlcpy(value, "quadmic", len);
} else if (my_data->fluence_type == FLUENCE_TRI_MIC) {
strlcpy(value, "trimic", len);
@@ -4648,7 +4672,11 @@
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC &&
channel_count == 1 ) {
if(my_data->fluence_in_audio_rec) {
- if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
+ if ((my_data->fluence_type & FLUENCE_HEX_MIC) &&
+ (my_data->source_mic_type & SOURCE_HEX_MIC) &&
+ (audio_extn_ffv_get_stream() == adev->active_input)) {
+ snd_device = audio_extn_ffv_get_capture_snd_device();
+ } else if ((my_data->fluence_type & FLUENCE_QUAD_MIC) &&
(my_data->source_mic_type & SOURCE_QUAD_MIC)) {
snd_device = SND_DEVICE_IN_HANDSET_QMIC;
platform_set_echo_reference(adev, true, out_device);
@@ -5270,6 +5298,7 @@
audio_extn_hfp_set_parameters(adev, parms);
perf_lock_set_params(platform, parms, value, len);
true_32_bit_set_params(parms, value, len);
+ audio_extn_ffv_set_parameters(my_data->adev, parms);
done:
ALOGV("%s: exit with code(%d)", __func__, ret);
if(kv_pairs != NULL)
@@ -7690,6 +7719,24 @@
return ret;
}
+int platform_get_ec_ref_loopback_snd_device(int channel_count)
+{
+ snd_device_t snd_device = SND_DEVICE_NONE;
+
+ switch(channel_count) {
+ case 1:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_MONO;
+ break;
+ case 2:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO;
+ break;
+ default:
+ snd_device = SND_DEVICE_NONE;
+ break;
+ }
+ return snd_device;
+}
+
int platform_set_sidetone(struct audio_device *adev,
snd_device_t out_snd_device,
bool enable,