hal: Add support for In-Car Communication usecase
* Add ICC library functionality in icc.c
* Add support in audio_extn to open and initialize icc library
* Add platform changes for device selection in ICC usecase
* Add support for sending ICC audio calibration/app type cfg
Suggested-by: Tahir Dawson <dawson@qti.qualcomm.com>
Change-Id: I26937da282fcdd31d59a54b180dca5d7740fbfb0
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 9550f5a..4335991 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -522,6 +522,7 @@
[USECASE_AUDIO_PLAYBACK_REAR_SEAT] = {REAR_SEAT_PCM_DEVICE,
REAR_SEAT_PCM_DEVICE},
[USECASE_AUDIO_FM_TUNER_EXT] = {-1, -1},
+ [USECASE_ICC_CALL] = {ICC_PCM_DEVICE, ICC_PCM_DEVICE},
};
/* Array to store sound devices */
@@ -631,6 +632,7 @@
[SND_DEVICE_OUT_BUS_RSE] = "bus-speaker",
[SND_DEVICE_OUT_CALL_PROXY] = "call-proxy",
[SND_DEVICE_OUT_HAPTICS] = "haptics",
+ [SND_DEVICE_OUT_ICC] = "bus-speaker",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -780,6 +782,7 @@
[SND_DEVICE_IN_HANDSET_6MIC_AND_EC_REF_LOOPBACK] = "handset-6mic-and-ec-ref-loopback",
[SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK] = "handset-8mic-and-ec-ref-loopback",
[SND_DEVICE_IN_CALL_PROXY] = "call-proxy-in",
+ [SND_DEVICE_IN_ICC] = "speaker-mic",
};
// Platform specific backend bit width table
@@ -923,6 +926,7 @@
[SND_DEVICE_OUT_BUS_RSE] = 60,
[SND_DEVICE_OUT_CALL_PROXY] = 32,
[SND_DEVICE_OUT_HAPTICS] = 200,
+ [SND_DEVICE_OUT_ICC] = 16,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_SB] = 163,
[SND_DEVICE_IN_HANDSET_MIC_NN] = 183,
@@ -1062,6 +1066,7 @@
[SND_DEVICE_IN_VOICE_HEARING_AID] = 44,
[SND_DEVICE_IN_BUS] = 11,
[SND_DEVICE_IN_CALL_PROXY] = 33,
+ [SND_DEVICE_IN_ICC] = 46,
};
struct name_to_index {
@@ -1317,6 +1322,9 @@
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_6MIC_AND_EC_REF_LOOPBACK)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK)},
{TO_NAME_INDEX(SND_DEVICE_IN_CALL_PROXY)},
+ /* ICC */
+ {TO_NAME_INDEX(SND_DEVICE_IN_ICC)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_ICC)},
};
static char * backend_tag_table[SND_DEVICE_MAX] = {0};
@@ -2601,6 +2609,8 @@
hw_interface_table[SND_DEVICE_IN_VOICE_HEARING_AID] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_BUS] = strdup("TERT_TDM_TX_0");
hw_interface_table[SND_DEVICE_IN_CALL_PROXY] = strdup("CALL_PROXY_TX");
+ hw_interface_table[SND_DEVICE_IN_ICC] = strdup("TERT_TDM_TX_0");
+ hw_interface_table[SND_DEVICE_OUT_ICC] = strdup("TERT_TDM_RX_0");
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -5365,7 +5375,8 @@
snd_device = usecase->out_snd_device;
else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
snd_device = voice_get_incall_rec_snd_device(usecase->in_snd_device);
- else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
+ else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE)||
+ (usecase->type == ICC_CALL))
snd_device = usecase->in_snd_device;
else if (usecase->type == TRANSCODE_LOOPBACK_RX)
snd_device = usecase->out_snd_device;
@@ -5389,7 +5400,8 @@
new_snd_device[0] = snd_device;
}
}
- if ((usecase->type == PCM_HFP_CALL) && is_bus_dev_usecase) {
+ if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL)) &&
+ is_bus_dev_usecase) {
num_devices = 2;
new_snd_device[0] = usecase->in_snd_device;
new_snd_device[1] = usecase->out_snd_device;
@@ -5413,7 +5425,8 @@
if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) {
ALOGD("Resetting app type for Tx path to default");
app_type = DEFAULT_APP_TYPE_TX_PATH;
- } else if ((usecase->type == PCM_HFP_CALL) && is_bus_dev_usecase) {
+ } else if (((usecase->type == PCM_HFP_CALL) || (usecase->type == ICC_CALL)) &&
+ is_bus_dev_usecase) {
if (new_snd_device[i] >= SND_DEVICE_OUT_BEGIN &&
new_snd_device[i] < SND_DEVICE_OUT_END) {
app_type = usecase->out_app_type_cfg.app_type;
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 8fa4591..ca091ff 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -167,6 +167,7 @@
SND_DEVICE_OUT_BUS_RSE,
SND_DEVICE_OUT_CALL_PROXY,
SND_DEVICE_OUT_HAPTICS,
+ SND_DEVICE_OUT_ICC,
SND_DEVICE_OUT_END,
/*
@@ -320,6 +321,7 @@
SND_DEVICE_IN_HANDSET_6MIC_AND_EC_REF_LOOPBACK,
SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK,
SND_DEVICE_IN_CALL_PROXY,
+ SND_DEVICE_IN_ICC,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,