diff options
-rw-r--r-- | hal/Android.mk | 4 | ||||
-rw-r--r-- | hal/audio_extn/hfp.c | 6 | ||||
-rw-r--r-- | hal/audio_hw.h | 1 | ||||
-rw-r--r-- | hal/msm8974/platform.c | 30 | ||||
-rw-r--r-- | hal/msm8974/platform.h | 22 |
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 |