audio: Add support for quad EC capture
Define quad EC reference device for FFV and also
define acdb and pcm id for quad EC capture in platform xml.
CRs-Fixed: 2379310
Change-Id: I80c447d4a2161f9c4ee82935a01878f6578281d1
diff --git a/hal/audio_extn/ffv.c b/hal/audio_extn/ffv.c
index e86f434..2e99c40 100644
--- a/hal/audio_extn/ffv.c
+++ b/hal/audio_extn/ffv.c
@@ -59,6 +59,7 @@
#define AUDIO_PARAMETER_FFV_EC_REF_CHANNEL_COUNT "ffv_ec_ref_channel_count"
#define AUDIO_PARAMETER_FFV_EC_REF_DEVICE "ffv_ec_ref_dev"
#define AUDIO_PARAMETER_FFV_CHANNEL_INDEX "ffv_channel_index"
+#define AUDIO_PARAMETER_FFV_CHANNEL_COUNT "ffv_channel_count"
#if LINUX_ENABLED
#define FFV_CONFIG_FILE_PATH "/etc/BF_1out.cfg"
@@ -158,6 +159,7 @@
pthread_mutex_t init_lock;
bool capture_started;
int target_ch_idx;
+ int ch_count;
#ifdef FFV_PCM_DUMP
FILE *fp_input;
@@ -188,6 +190,7 @@
.handle = NULL,
.capture_started = false,
.target_ch_idx = -1,
+ .ch_count = 6,
};
static struct pcm_config ffv_pcm_config = {
@@ -458,9 +461,9 @@
ffvmod.capture_config = ffv_pcm_config;
ffvmod.ec_ref_config = ffv_pcm_config;
ffvmod.out_config = ffv_pcm_config;
- /* configure capture session with 6/8 channels */
+ /* configure capture session with 6/8/4 channels */
ffvmod.capture_config.channels = ffvmod.split_ec_ref_data ?
- FFV_CHANNEL_MODE_OCT : FFV_CHANNEL_MODE_HEX;
+ FFV_CHANNEL_MODE_OCT : ffvmod.ch_count;
ffvmod.capture_config.period_size =
CALCULATE_PERIOD_SIZE(FFV_PCM_BUFFER_DURATION_MS,
ffvmod.capture_config.rate,
@@ -889,6 +892,9 @@
} else if (val == 2) {
ALOGD("%s: stereo ec ref", __func__);
ffvmod.ec_ref_ch_cnt = FFV_CHANNEL_MODE_STEREO;
+ } else if (val == 4) {
+ ALOGD("%s: quad ec ref", __func__);
+ ffvmod.ec_ref_ch_cnt = FFV_CHANNEL_MODE_QUAD;
} else {
ALOGE("%s: Invalid ec ref", __func__);
}
@@ -928,5 +934,12 @@
ALOGD("%s: set target chan index %d", __func__, val);
ffvmod.target_ch_idx = val;
}
+
+ ret = str_parms_get_int(parms, AUDIO_PARAMETER_FFV_CHANNEL_COUNT, &val);
+ if (ret >= 0) {
+ str_parms_del(parms, AUDIO_PARAMETER_FFV_CHANNEL_COUNT);
+ ALOGD("%s: set ffv channel count %d", __func__, val);
+ ffvmod.ch_count = val;
+ }
}
}
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 263fe9f..00d91ba 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -571,6 +571,7 @@
[SND_DEVICE_IN_INCALL_REC_RX] = "incall-rec-rx",
[SND_DEVICE_IN_INCALL_REC_TX] = "incall-rec-tx",
[SND_DEVICE_IN_INCALL_REC_RX_TX] = "incall-rec-rx-tx",
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD] = "ec-ref-loopback-quad",
};
// Platform specific backend bit width table
@@ -745,7 +746,8 @@
[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
+ [SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD] = 4,
};
struct name_to_index {
@@ -906,6 +908,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX_TX)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -2987,7 +2990,8 @@
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))
+ (snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO) ||
+ (snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD))
audio_extn_ffv_append_ec_ref_dev_name(device_name);
} else {
strlcpy(device_name, "", DEVICE_NAME_MAX_SIZE);
@@ -7819,6 +7823,9 @@
case 2:
snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO;
break;
+ case 4:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD;
+ break;
default:
snd_device = SND_DEVICE_NONE;
break;
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index 6236746..f37819d 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -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
@@ -244,6 +244,7 @@
SND_DEVICE_IN_INCALL_REC_RX,
SND_DEVICE_IN_INCALL_REC_TX,
SND_DEVICE_IN_INCALL_REC_RX_TX,
+ SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 03dd0c7..b0068e0 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -567,6 +567,7 @@
[SND_DEVICE_IN_INCALL_REC_RX] = "incall-rec-rx",
[SND_DEVICE_IN_INCALL_REC_TX] = "incall-rec-tx",
[SND_DEVICE_IN_INCALL_REC_RX_TX] = "incall-rec-rx-tx",
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD] = "ec-ref-loopback-quad",
};
// Platform specific backend bit width table
@@ -751,6 +752,7 @@
[SND_DEVICE_IN_EC_REF_LOOPBACK_MONO] = 4,
[SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO] = 4,
[SND_DEVICE_IN_HANDSET_GENERIC_QMIC] = 150,
+ [SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD] = 4,
};
struct name_to_index {
@@ -914,6 +916,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_TX)},
{TO_NAME_INDEX(SND_DEVICE_IN_INCALL_REC_RX_TX)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -2894,7 +2897,8 @@
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))
+ (snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO) ||
+ (snd_device == SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD))
audio_extn_ffv_append_ec_ref_dev_name(device_name);
} else {
strlcpy(device_name, "", DEVICE_NAME_MAX_SIZE);
@@ -7836,6 +7840,9 @@
case 2:
snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_STEREO;
break;
+ case 4:
+ snd_device = SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD;
+ break;
default:
snd_device = SND_DEVICE_NONE;
break;
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 06b6b27..d15f6eb 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -250,6 +250,7 @@
SND_DEVICE_IN_INCALL_REC_RX,
SND_DEVICE_IN_INCALL_REC_TX,
SND_DEVICE_IN_INCALL_REC_RX_TX,
+ SND_DEVICE_IN_EC_REF_LOOPBACK_QUAD,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,