Merge "hal: Invoke acdb deallocate api"
diff --git a/configs/msmnile/audio_io_policy.conf b/configs/msmnile/audio_io_policy.conf
index bac3ec1..3fc62eb 100644
--- a/configs/msmnile/audio_io_policy.conf
+++ b/configs/msmnile/audio_io_policy.conf
@@ -84,16 +84,22 @@
}
inputs {
+ record_16bit {
+ formats AUDIO_FORMAT_PCM_16_BIT
+ sampling_rates 8000|16000|32000|44100|48000|88200|96000|176400|192000
+ bit_width 16
+ app_type 69938
+ }
record_24bit {
formats AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_24_BIT
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 24
- app_type 69938
+ app_type 69948
}
record_32bit {
formats AUDIO_FORMAT_PCM_32_BIT|AUDIO_FORMAT_PCM_FLOAT
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 32
- app_type 69938
+ app_type 69949
}
}
diff --git a/configs/msmnile/sound_trigger_platform_info.xml b/configs/msmnile/sound_trigger_platform_info.xml
index 91fcb35..799f9db 100644
--- a/configs/msmnile/sound_trigger_platform_info.xml
+++ b/configs/msmnile/sound_trigger_platform_info.xml
@@ -262,7 +262,7 @@
<param wdsp_fluence_type="NONE" />
<gcs_usecase>
<param uid="0x3" />
- <param acdb_devices="DEVICE_HANDSET_MIC_CPE" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<param load_sound_model_ids="0x18000001, 0x4, 0x18000100" />
<param start_engine_ids="0x18000001, 0x4, 0x18000101" />
<param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
diff --git a/configs/msmsteppe/mixer_paths_idp.xml b/configs/msmsteppe/mixer_paths_idp.xml
index 6f0ea02..85de3eb 100644
--- a/configs/msmsteppe/mixer_paths_idp.xml
+++ b/configs/msmsteppe/mixer_paths_idp.xml
@@ -146,6 +146,7 @@
<!-- HFP end -->
<!-- echo reference -->
<ctl name="AUDIO_REF_EC_UL1 MUX" value="None" />
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="None" />
<!-- usb headset -->
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="0" />
@@ -446,6 +447,22 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip display-port">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="DISPLAY_PORT" />
+ </path>
+
+ <path name="echo-reference-voip headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
diff --git a/configs/msmsteppe/mixer_paths_qrd.xml b/configs/msmsteppe/mixer_paths_qrd.xml
index f6e1f06..a21d478 100644
--- a/configs/msmsteppe/mixer_paths_qrd.xml
+++ b/configs/msmsteppe/mixer_paths_qrd.xml
@@ -145,6 +145,7 @@
<!-- HFP end -->
<!-- echo reference -->
<ctl name="AUDIO_REF_EC_UL1 MUX" value="None" />
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="None" />
<!-- usb headset -->
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="0" />
@@ -433,6 +434,26 @@
<ctl name="AUDIO_REF_EC_UL1 MUX" value="RX_CDC_DMA_RX_0" />
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="WSA_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip handset">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
+ <path name="echo-reference-voip display-port">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="DISPLAY_PORT" />
+ </path>
+
+ <path name="echo-reference-voip headphones-44.1">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="RX_CDC_DMA_RX_0" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="WSA_CDC_DMA_RX_0 Audio Mixer MultiMedia1" value="1" />
</path>
diff --git a/configs/msmsteppe/mixer_paths_tavil.xml b/configs/msmsteppe/mixer_paths_tavil.xml
index cc444bc..a476df4 100644
--- a/configs/msmsteppe/mixer_paths_tavil.xml
+++ b/configs/msmsteppe/mixer_paths_tavil.xml
@@ -192,6 +192,7 @@
<!-- HFP end -->
<!-- echo reference -->
<ctl name="AUDIO_REF_EC_UL1 MUX" value="None" />
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="None" />
<!-- usb headset -->
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="AFE_PCM_RX Audio Mixer MultiMedia2" value="0" />
@@ -553,6 +554,18 @@
<path name="echo-reference headphones-44.1">
</path>
+ <path name="echo-reference-voip">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="SLIM_RX" />
+ </path>
+
+ <path name="echo-reference-voip headphones">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="SLIM_6_RX" />
+ </path>
+
+ <path name="echo-reference-voip display-port">
+ <ctl name="AUDIO_REF_EC_UL10 MUX" value="DISPLAY_PORT" />
+ </path>
+
<path name="deep-buffer-playback">
<ctl name="SLIMBUS_0_RX Audio Mixer MultiMedia1" value="1" />
</path>
diff --git a/configs/sdm845/sound_trigger_platform_info.xml b/configs/sdm845/sound_trigger_platform_info.xml
index 0942fab..328d101 100644
--- a/configs/sdm845/sound_trigger_platform_info.xml
+++ b/configs/sdm845/sound_trigger_platform_info.xml
@@ -175,7 +175,7 @@
<param wdsp_fluence_type="NONE" />
<gcs_usecase>
<param uid="0x3" />
- <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE" />
+ <param acdb_devices="DEVICE_HANDSET_MIC_CPE, DEVICE_HANDSET_TMIC_CPE, DEVICE_HEADSET_MIC_CPE" />
<param load_sound_model_ids="0x18000001, 0x4, 0x00012C14" />
<param confidence_levels_ids="0x18000001, 0x4, 0x00012C28" />
<param detection_event_ids="0x18000001, 0x4, 0x00012C29" />
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 1a72bf8..41ea408 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -418,6 +418,7 @@
uint32_t max_sink_modeB;
uint32_t min_sink_modeC;
uint32_t max_sink_modeC;
+ uint32_t mode;
} __attribute__ ((packed));
struct aptx_ad_enc_cfg_t
@@ -491,6 +492,7 @@
uint8_t TTP_modeB_low;
uint8_t TTP_modeB_high;
uint32_t bits_per_sample;
+ uint16_t encoder_mode;
} audio_aptx_ad_config;
typedef struct {
@@ -877,20 +879,21 @@
}
/* Set Tx backend sample rate */
- if (a2dp.abr_config.is_abr_enabled)
- rate_str = ABR_TX_SAMPLE_RATE;
+ if (a2dp.abr_config.is_abr_enabled) {
+ rate_str = ABR_TX_SAMPLE_RATE;
- ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
- ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_TX);
- if (!ctl_sample_rate) {
+ ALOGD("%s: set backend tx sample rate = %s", __func__, rate_str);
+ ctl_sample_rate = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SAMPLE_RATE_TX);
+ if (!ctl_sample_rate) {
ALOGE("%s: ERROR backend sample rate mixer control not identifed", __func__);
return -ENOSYS;
- }
+ }
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
- ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate, rate_str) != 0) {
+ ALOGE("%s: Failed to set backend sample rate = %s", __func__, rate_str);
+ return -ENOSYS;
+ }
}
} else {
/* Fallback to legacy approch if MIXER_SAMPLE_RATE_RX and
@@ -984,16 +987,18 @@
return -ENOSYS;
}
- ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
- MIXER_SAMPLE_RATE_TX);
- if (!ctl_sample_rate_tx) {
+ if (a2dp.abr_config.is_abr_enabled) {
+ ctl_sample_rate_tx = mixer_get_ctl_by_name(a2dp.adev->mixer,
+ MIXER_SAMPLE_RATE_TX);
+ if (!ctl_sample_rate_tx) {
ALOGE("%s: ERROR Tx backend sample rate mixer control not identifed", __func__);
return -ENOSYS;
- }
+ }
- if (mixer_ctl_set_enum_by_string(ctl_sample_rate_tx, rate_str) != 0) {
- ALOGE("%s: Failed to reset Tx backend sample rate = %s", __func__, rate_str);
- return -ENOSYS;
+ if (mixer_ctl_set_enum_by_string(ctl_sample_rate_tx, rate_str) != 0) {
+ ALOGE("%s: Failed to reset Tx backend sample rate = %s", __func__, rate_str);
+ return -ENOSYS;
+ }
}
} else {
@@ -1151,6 +1156,7 @@
aptx_dsp_cfg->aptx_ad_cfg.max_sink_modeB = aptx_bt_cfg->ad_cfg->max_sink_modeB;
aptx_dsp_cfg->aptx_ad_cfg.min_sink_modeC = aptx_bt_cfg->ad_cfg->min_sink_modeC;
aptx_dsp_cfg->aptx_ad_cfg.max_sink_modeC = aptx_bt_cfg->ad_cfg->max_sink_modeC;
+ aptx_dsp_cfg->aptx_ad_cfg.mode = aptx_bt_cfg->ad_cfg->encoder_mode;
aptx_dsp_cfg->abr_cfg.imc_info.direction = IMC_RECEIVE;
aptx_dsp_cfg->abr_cfg.imc_info.enable = IMC_ENABLE;
aptx_dsp_cfg->abr_cfg.imc_info.purpose = IMC_PURPOSE_ID_BT_INFO;
@@ -1802,6 +1808,15 @@
return ret;
}
+static void reset_a2dp_config() {
+ reset_a2dp_enc_config_params();
+ reset_a2dp_dec_config_params();
+ a2dp_reset_backend_cfg();
+ if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
+ stop_abr();
+ a2dp.abr_config.is_abr_enabled = false;
+}
+
int audio_extn_a2dp_stop_playback()
{
int ret =0;
@@ -1821,13 +1836,9 @@
if (ret < 0)
ALOGE("stop stream to BT IPC lib failed");
else
- ALOGV("stop steam to BT IPC lib successful");
- reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
- a2dp_reset_backend_cfg();
- if (a2dp.abr_config.is_abr_enabled && a2dp.abr_config.abr_started)
- stop_abr();
- a2dp.abr_config.is_abr_enabled = false;
+ ALOGV("stop stream to BT IPC lib successful");
+ if (!a2dp.a2dp_suspended)
+ reset_a2dp_config();
a2dp.a2dp_started = false;
}
if(!a2dp.a2dp_total_active_session_request)
@@ -1892,15 +1903,14 @@
pthread_mutex_lock(&a2dp.adev->lock);
}
}
- reset_a2dp_enc_config_params();
- reset_a2dp_dec_config_params();
- if(a2dp.audio_suspend_stream)
+ reset_a2dp_config();
+ if (a2dp.audio_suspend_stream)
a2dp.audio_suspend_stream();
} else if (a2dp.a2dp_suspended == true) {
ALOGD("Resetting a2dp suspend state");
struct audio_usecase *uc_info;
struct listnode *node;
- if(a2dp.clear_a2dpsuspend_flag)
+ if (a2dp.clear_a2dpsuspend_flag)
a2dp.clear_a2dpsuspend_flag();
a2dp.a2dp_suspended = false;
/*
@@ -1921,8 +1931,19 @@
if (ret != 0) {
ALOGE("BT controller start failed");
a2dp.a2dp_started = false;
+ } else {
+ if (!configure_a2dp_encoder_format()) {
+ ALOGE("%s: Encoder params configuration failed post suspend", __func__);
+ a2dp.a2dp_started = false;
+ ret = -ETIMEDOUT;
+ }
}
}
+ if (a2dp.a2dp_started) {
+ a2dp_set_backend_cfg();
+ if (a2dp.abr_config.is_abr_enabled)
+ start_abr();
+ }
}
list_for_each(node, &a2dp.adev->usecase_list) {
uc_info = node_to_item(node, struct audio_usecase, list);
@@ -2049,6 +2070,8 @@
latency = (avsync_runtime_prop > 0) ? ldac_offset : ENCODER_LATENCY_LDAC;
latency += (slatency <= 0) ? DEFAULT_SINK_LATENCY_LDAC : slatency;
break;
+ case ENC_CODEC_TYPE_APTX_AD: // for aptx adaptive the latency depends on the mode (HQ/LL) and
+ latency = slatency; // BT IPC will take care of accomodating the mode factor and return latency
default:
latency = 200;
break;
diff --git a/hal/voice_extn/voice_extn.h b/hal/voice_extn/voice_extn.h
index 5d1cac3..0bed80f 100644
--- a/hal/voice_extn/voice_extn.h
+++ b/hal/voice_extn/voice_extn.h
@@ -42,6 +42,8 @@
void voice_extn_out_get_parameters(struct stream_out *out,
struct str_parms *query,
struct str_parms *reply);
+int voice_extn_check_and_set_incall_music_usecase(struct audio_device *adev,
+ struct stream_out *out);
#else
static int __unused voice_extn_start_call(struct audio_device *adev __unused)
{
@@ -99,10 +101,15 @@
struct str_parms *reply __unused)
{
}
+
+static int __unused voice_extn_check_and_set_incall_music_usecase(
+ struct audio_device *adev __unused,
+ struct stream_out *out __unused)
+{
+ return -ENOSYS;
+}
#endif
-int voice_extn_check_and_set_incall_music_usecase(struct audio_device *adev,
- struct stream_out *out);
#ifdef COMPRESS_VOIP_ENABLED
int voice_extn_compress_voip_close_output_stream(struct audio_stream *stream);
int voice_extn_compress_voip_open_output_stream(struct stream_out *out);