am 533bb726: hal: Add support for perf lock management
* commit '533bb72620933eddd232d41e171ab70ea0807e34':
hal: Add support for perf lock management
diff --git a/hal/Android.mk b/hal/Android.mk
index 45b2cd9..c0fbc8d 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -67,6 +67,10 @@
LOCAL_SRC_FILES += audio_extn/hfp.c
endif
+ifeq ($(strip $(AUDIO_FEATURE_SUPPORTED_EXTERNAL_BT)),true)
+ LOCAL_CFLAGS += -DEXTERNAL_BT_SUPPORTED
+endif
+
ifeq ($(strip $(AUDIO_FEATURE_NO_AUDIO_OUT)),true)
LOCAL_CFLAGS += -DNO_AUDIO_OUT
endif
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index a108730..66d1f9b 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -71,7 +71,11 @@
{
int32_t vol, ret = 0;
struct mixer_ctl *ctl;
+#ifdef EXTERNAL_BT_SUPPORTED
+ const char *mixer_ctl_name = "PRI AUXPCM LOOPBACK Volume";
+#else
const char *mixer_ctl_name = "Internal HFP RX Volume";
+#endif
ALOGV("%s: entry", __func__);
ALOGD("%s: (%f)\n", __func__, value);
@@ -115,6 +119,7 @@
int32_t pcm_dev_rx_id, pcm_dev_tx_id, pcm_dev_asm_rx_id, pcm_dev_asm_tx_id;
ALOGD("%s: enter", __func__);
+ adev->enable_hfp = true;
uc_info = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase));
uc_info->id = hfpmod.ucid;
@@ -204,6 +209,7 @@
struct audio_usecase *uc_info;
ALOGD("%s: enter", __func__);
+ adev->enable_hfp = false;
hfpmod.is_hfp_running = false;
/* 1. Close the PCM devices */
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index b82ee8b..8c07b6d 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -234,6 +234,7 @@
bool bt_wb_speech_enabled;
bool mic_muted;
bool enable_voicerx;
+ bool enable_hfp;
int snd_card;
void *platform;
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index a753c0f..7078a1d 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -29,6 +29,7 @@
#include <linux/msm_audio.h>
#define MIXER_XML_PATH "/system/etc/mixer_paths.xml"
+#define MIXER_XML_PATH_WCD9330 "/system/etc/mixer_paths_wcd9330.xml"
#define LIB_ACDB_LOADER "libacdbloader.so"
#define AUDIO_DATA_BLOCK_MIXER_CTL "HDMI EDID"
#define CVD_VERSION_MIXER_CTL "CVD Version"
@@ -201,6 +202,7 @@
[SND_DEVICE_OUT_VOICE_TX] = "voice-tx",
[SND_DEVICE_OUT_SPEAKER_PROTECTED] = "speaker-protected",
[SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED] = "voice-speaker-protected",
+ [SND_DEVICE_OUT_VOICE_SPEAKER_HFP] = "voice-speaker-hfp",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -237,6 +239,7 @@
[SND_DEVICE_IN_VOICE_DMIC_TMUS] = "voice-dmic-ef-tmus",
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = "voice-speaker-mic",
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef",
+ [SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP] = "voice-speaker-mic-hfp",
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = "voice-headset-mic",
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic",
[SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
@@ -285,6 +288,7 @@
[SND_DEVICE_OUT_VOICE_TX] = 45,
[SND_DEVICE_OUT_SPEAKER_PROTECTED] = 124,
[SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED] = 101,
+ [SND_DEVICE_OUT_VOICE_SPEAKER_HFP] = ACDB_ID_VOICE_SPEAKER,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 106,
@@ -319,6 +323,7 @@
[SND_DEVICE_IN_VOICE_DMIC] = 41,
[SND_DEVICE_IN_VOICE_DMIC_TMUS] = ACDB_ID_VOICE_DMIC_EF_TMUS,
[SND_DEVICE_IN_VOICE_SPEAKER_MIC] = 11,
+ [SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP] = 11,
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 43,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
@@ -361,6 +366,7 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HANDSET)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_HFP)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEADPHONES)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_LINE)},
{TO_NAME_INDEX(SND_DEVICE_OUT_HDMI)},
@@ -409,6 +415,7 @@
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_DMIC_TMUS)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC)},
+ {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_DMIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_HEADSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC)},
@@ -945,7 +952,15 @@
ALOGD("%s: snd_card_name: %s", __func__, snd_card_name);
- adev->audio_route = audio_route_init(snd_card_num, MIXER_XML_PATH);
+ if (!strncmp(snd_card_name, "msm8226-tomtom-snd-card",
+ sizeof("msm8226-tomtom-snd-card"))) {
+ ALOGD("%s: Call MIXER_XML_PATH_WCD9330", __func__);
+ adev->audio_route = audio_route_init(snd_card_num,
+ MIXER_XML_PATH_WCD9330);
+ } else {
+ adev->audio_route = audio_route_init(snd_card_num, MIXER_XML_PATH);
+ }
+
if (!adev->audio_route) {
ALOGE("%s: Failed to init audio route controls, aborting.", __func__);
goto init_failed;
@@ -1767,7 +1782,11 @@
snd_device = SND_DEVICE_OUT_BT_SCO;
}
} else if (devices & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_SPEAKER_SAFE)) {
- snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
+ if (!adev->enable_hfp) {
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
+ } else {
+ snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_HFP;
+ }
} else if (devices & AUDIO_DEVICE_OUT_EARPIECE) {
if(adev->voice.hac)
snd_device = SND_DEVICE_OUT_VOICE_HAC_HANDSET;
@@ -1893,7 +1912,12 @@
//select default
if (snd_device == SND_DEVICE_NONE) {
- snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
+ if (!adev->enable_hfp) {
+ snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
+ } else {
+ snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP;
+ platform_set_echo_reference(adev, true, out_device);
+ }
}
} else if (out_device & AUDIO_DEVICE_OUT_TELEPHONY_TX) {
snd_device = SND_DEVICE_IN_VOICE_RX;
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index c1f901c..fa43b1d 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -77,6 +77,7 @@
SND_DEVICE_OUT_VOICE_TX,
SND_DEVICE_OUT_SPEAKER_PROTECTED,
SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED,
+ SND_DEVICE_OUT_VOICE_SPEAKER_HFP,
SND_DEVICE_OUT_END,
/*
@@ -118,6 +119,7 @@
SND_DEVICE_IN_VOICE_DMIC,
SND_DEVICE_IN_VOICE_DMIC_TMUS,
SND_DEVICE_IN_VOICE_SPEAKER_MIC,
+ SND_DEVICE_IN_VOICE_SPEAKER_MIC_HFP,
SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
SND_DEVICE_IN_VOICE_HEADSET_MIC,
SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
@@ -203,18 +205,36 @@
#define LOWLATENCY_PCM_DEVICE 15
#define VOICE_VSID 0x10C01000
+#ifdef PLATFORM_MSM8x26
+#define VOICE_CALL_PCM_DEVICE 2
+#define VOICE2_CALL_PCM_DEVICE 14
+#define VOLTE_CALL_PCM_DEVICE 17
+#define QCHAT_CALL_PCM_DEVICE 18
+#define VOWLAN_CALL_PCM_DEVICE 30
+#elif PLATFORM_MSM8084
+#define VOICE_CALL_PCM_DEVICE 20
+#define VOICE2_CALL_PCM_DEVICE 25
+#define VOLTE_CALL_PCM_DEVICE 21
+#define QCHAT_CALL_PCM_DEVICE 33
+#define VOWLAN_CALL_PCM_DEVICE -1
+#else
#define VOICE_CALL_PCM_DEVICE 2
#define VOICE2_CALL_PCM_DEVICE 22
#define VOLTE_CALL_PCM_DEVICE 14
#define QCHAT_CALL_PCM_DEVICE 20
#define VOWLAN_CALL_PCM_DEVICE 36
+#endif
#define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
#define AFE_PROXY_RECORD_PCM_DEVICE 8
#define HFP_PCM_RX 5
#ifdef PLATFORM_MSM8x26
-#define HFP_SCO_RX 28
+#ifdef EXTERNAL_BT_SUPPORTED
+#define HFP_SCO_RX 10 // AUXPCM Hostless
+#else
+#define HFP_SCO_RX 28 // INT_HFP_BT Hostless
+#endif
#define HFP_ASM_RX_TX 29
#else
#define HFP_SCO_RX 23