summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hal/Android.mk4
-rw-r--r--hal/audio_extn/hfp.c6
-rw-r--r--hal/audio_hw.h1
-rw-r--r--hal/msm8974/platform.c30
-rw-r--r--hal/msm8974/platform.h22
5 files changed, 59 insertions, 4 deletions
diff --git a/hal/Android.mk b/hal/Android.mk
index 45b2cd96..c0fbc8d6 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -67,6 +67,10 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_HFP)),true)
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 a1087309..66d1f9b0 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -71,7 +71,11 @@ static int32_t hfp_set_volume(struct audio_device *adev, float value)
{
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 @@ static int32_t start_hfp(struct audio_device *adev,
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 @@ static int32_t stop_hfp(struct audio_device *adev)
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 b82ee8b1..8c07b6d5 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -234,6 +234,7 @@ struct audio_device {
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 a753c0f1..7078a1dd 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 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[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 @@ static const char * const device_table[SND_DEVICE_MAX] = {
[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 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[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 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
[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 @@ static const struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{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 @@ static const struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = {
{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 @@ void *platform_init(struct audio_device *adev)
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_t platform_get_output_snd_device(void *platform, audio_devices_t devi
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 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
//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 c1f901ca..fa43b1df 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -77,6 +77,7 @@ enum {
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 @@ enum {
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 @@ enum {
#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