diff options
author | Uday Kishore Pasupuleti <upasupul@codeaurora.org> | 2015-09-18 08:39:43 -0700 |
---|---|---|
committer | Sharvil Nanavati <sharvil@google.com> | 2015-09-19 23:12:36 -0700 |
commit | 7629719778eab7ca3729f26f2e5ad5120faa9c71 (patch) | |
tree | 5f442f9d6d6b90a473cc3dfa505790ef2254c5fa | |
parent | 6ba38ab0b95000c259f1e109b75b988e5ef5ca08 (diff) | |
download | android_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.c | 2 | ||||
-rw-r--r-- | hal/audio_hw.h | 1 | ||||
-rw-r--r-- | hal/msm8974/platform.c | 17 | ||||
-rw-r--r-- | hal/msm8974/platform.h | 2 |
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, |