summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUday Kishore Pasupuleti <upasupul@codeaurora.org>2015-09-18 08:39:43 -0700
committerSharvil Nanavati <sharvil@google.com>2015-09-19 23:12:36 -0700
commit7629719778eab7ca3729f26f2e5ad5120faa9c71 (patch)
tree5f442f9d6d6b90a473cc3dfa505790ef2254c5fa
parent6ba38ab0b95000c259f1e109b75b988e5ef5ca08 (diff)
downloadandroid_hardware_qcom_audio-7629719778eab7ca3729f26f2e5ad5120faa9c71.tar.gz
android_hardware_qcom_audio-7629719778eab7ca3729f26f2e5ad5120faa9c71.tar.bz2
android_hardware_qcom_audio-7629719778eab7ca3729f26f2e5ad5120faa9c71.zip
hal: Add support for HFP feature
- add support for audio tuning of HFP - add TX reference for TX Echo Cancellation Change-Id: I5d7ffe1481a5093262b4b94ae0325fa81111feac Signed-off-by: Uday Kishore Pasupuleti <upasupul@codeaurora.org>
-rw-r--r--hal/audio_extn/hfp.c2
-rw-r--r--hal/audio_hw.h1
-rw-r--r--hal/msm8974/platform.c17
-rw-r--r--hal/msm8974/platform.h2
4 files changed, 20 insertions, 2 deletions
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index bfeb6e74..66d1f9b0 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -119,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;
@@ -208,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 39e5263d..e6ce5dcb 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -232,6 +232,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 011a6b8d..061aa811 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -202,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",
@@ -238,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",
@@ -286,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] = 92,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 106,
@@ -320,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] = 91,
[SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 43,
[SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
[SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
@@ -1776,7 +1780,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;
@@ -1902,7 +1910,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 6368af70..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,