hal: Add support for voice over pcie
Add support for voice over pcie from hal.
CRs-fixed: 2642312
Change-Id: Ib047755d4f4eef8e643f348dab9f72983a960c65
diff --git a/hal/msm8974/hw_info.c b/hal/msm8974/hw_info.c
index 709c69c..d1a5cee 100644
--- a/hal/msm8974/hw_info.c
+++ b/hal/msm8974/hw_info.c
@@ -514,6 +514,9 @@
} else if (strstr(snd_card_name, "hana55")) {
strlcpy(hw_info->name, "msmnile", sizeof(hw_info->name));
hw_info->is_stereo_spkr = false;
+ } else if (strstr(snd_card_name, "pcie")) {
+ strlcpy(hw_info->name, "msmnile", sizeof(hw_info->name));
+ hw_info->is_stereo_spkr = false;
} else {
ALOGW("%s: Not a msmnile device", __func__);
}
@@ -812,6 +815,7 @@
update_hardware_info_sdx(hw_info, snd_card_name);
} else if (strstr(snd_card_name, "pahu") || strstr(snd_card_name, "tavil") ||
strstr(snd_card_name, "hana55") ||
+ strstr(snd_card_name, "pcie") ||
strstr(snd_card_name, "sa8155")) {
ALOGV("MSMNILE - variant soundcard");
update_hardware_info_msmnile(hw_info, snd_card_name);
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 5a48cf7..0c4b8d3 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -71,6 +71,7 @@
#define PLATFORM_INFO_XML_PATH_I2S "/etc/audio_platform_info_extcodec.xml"
#define PLATFORM_INFO_XML_PATH_WSA "/etc/audio_platform_info_wsa.xml"
#define PLATFORM_INFO_XML_PATH_TDM "/etc/audio_platform_info_tdm.xml"
+#define PLATFORM_INFO_XML_PATH_PCIE "/etc/audio_platform_info_pcie.xml"
#else
#define PLATFORM_INFO_XML_PATH_INTCODEC "/vendor/etc/audio_platform_info_intcodec.xml"
#define PLATFORM_INFO_XML_PATH_SKUSH "/vendor/etc/audio_platform_info_skush.xml"
@@ -82,6 +83,7 @@
#define PLATFORM_INFO_XML_PATH_I2S "/vendor/etc/audio_platform_info_i2s.xml"
#define PLATFORM_INFO_XML_PATH_WSA "/vendor/etc/audio_platform_info_wsa.xml"
#define PLATFORM_INFO_XML_PATH_TDM "/vendor/etc/audio_platform_info_tdm.xml"
+#define PLATFORM_INFO_XML_PATH_PCIE "/vendor/etc/audio_platform_info_pcie.xml"
#endif
#include <linux/msm_audio.h>
@@ -3232,6 +3234,9 @@
else if (!strncmp(snd_card_name, "qcs405-tdm-snd-card",
sizeof("qcs405-tdm-snd-card")))
platform_info_init(PLATFORM_INFO_XML_PATH_TDM, my_data, PLATFORM);
+ else if (!strncmp(snd_card_name, "sm8150-pcie-snd-card",
+ sizeof("sm8150-pcie-snd-card")))
+ platform_info_init(PLATFORM_INFO_XML_PATH_PCIE, my_data, PLATFORM);
else if (my_data->is_internal_codec)
platform_info_init(PLATFORM_INFO_XML_PATH_INTCODEC, my_data, PLATFORM);
else {
@@ -3414,6 +3419,8 @@
!strncmp("sm6150", platform, sizeof("sm6150")) ||
(!strncmp("msmnile", platform, sizeof("msmnile")) &&
!strncmp("sm8150-hana55-snd-card", snd_card_name, sizeof("sm8150-hana55-snd-card"))) ||
+ (!strncmp("msmnile", platform, sizeof("msmnile")) &&
+ !strncmp("sm8150-pcie-snd-card", snd_card_name, sizeof("sm8150-pcie-snd-card"))) ||
!strncmp("sdx", platform, sizeof("sdx")) ||
!strncmp("sdm845", platform, sizeof("sdm845"))) &&
( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index ebffc3f..da33147 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -601,6 +601,8 @@
#elif PLATFORM_AUTO
#define HOST_LESS_RX_ID 41
#define HOST_LESS_TX_ID 42
+#define PCIE_HOST_LESS_RX_ID 47
+#define PCIE_HOST_LESS_TX_ID 48
#define VOICE_CALL_PCM_DEVICE 8
#define VOICE2_CALL_PCM_DEVICE -1
#define VOLTE_CALL_PCM_DEVICE -1
@@ -609,6 +611,8 @@
#else
#define HOST_LESS_RX_ID 44
#define HOST_LESS_TX_ID 45
+#define PCIE_HOST_LESS_RX_ID 47
+#define PCIE_HOST_LESS_TX_ID 48
#define VOICE_CALL_PCM_DEVICE 2
#define VOICE2_CALL_PCM_DEVICE 22
#define VOLTE_CALL_PCM_DEVICE 14
diff --git a/hal/voice.c b/hal/voice.c
index a30b06b..f1e2c47 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -57,16 +57,43 @@
* symbols. Voice call is handled by MDM and apps processor talks to
* MDM through CSD Client
*/
- char * snd_card_name;
+ char *snd_card_name = NULL;
char baseband[100];
snd_card_name = strdup(mixer_get_name(adev->mixer));
+ if (!snd_card_name)
+ return 0;
property_get("ro.baseband", baseband, "");
- if ((!strncmp("hana55", snd_card_name, sizeof("hana55"))) &&
+ if (((!strncmp("hana55", snd_card_name, sizeof("hana55"))) &&
+ ( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
+ !strncmp("sdx", baseband, (sizeof("sdx")-1)))) ||
+ ((!strncmp("sm8150-pcie-snd-card", snd_card_name, sizeof("sm8150-pcie-snd-card"))) &&
+ ( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
+ !strncmp("sdx", baseband, (sizeof("sdx")-1))))) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static bool voice_update_pcm_config(struct audio_device *adev)
+{
+ /* If platform is apq8084 and baseband is MDM, load CSD Client specific
+ * symbols. Voice call is handled by MDM and apps processor talks to
+ * MDM through CSD Client
+ */
+ char *snd_card_name = NULL;
+ char baseband[100];
+ snd_card_name = strdup(mixer_get_name(adev->mixer));
+ if (!snd_card_name)
+ return 0;
+ property_get("ro.baseband", baseband, "");
+ if ((!strncmp("sm8150-pcie-snd-card", snd_card_name, sizeof("sm8150-pcie-snd-card"))) &&
( !strncmp("mdm", baseband, (sizeof("mdm")-1)) ||
!strncmp("sdx", baseband, (sizeof("sdx")-1)))) {
return 1;
- } else
+ } else {
return 0;
+ }
}
static struct voice_session *voice_get_session_from_use_case(struct audio_device *adev,
@@ -256,6 +283,11 @@
uc_info->stream.out = adev->current_call_output;
uc_info->devices = adev->current_call_output->devices;
+ if (voice_update_pcm_config(adev)) {
+ sample_rate = 48000;
+ voice_config.rate = 48000;
+ }
+
if (popcount(uc_info->devices) == 2) {
ALOGE("%s: Invalid combo device(%#x) for voice call", __func__,
uc_info->devices);
@@ -283,6 +315,11 @@
pcm_dev_loopback_tx_id = HOST_LESS_TX_ID;
}
+ if (voice_update_pcm_config(adev)) {
+ pcm_dev_loopback_rx_id = PCIE_HOST_LESS_RX_ID;
+ pcm_dev_loopback_tx_id = PCIE_HOST_LESS_TX_ID;
+ }
+
pcm_dev_rx_id = platform_get_pcm_device_id(uc_info->id, PCM_PLAYBACK);
pcm_dev_tx_id = platform_get_pcm_device_id(uc_info->id, PCM_CAPTURE);