Promotion of audio-userspace.lnx.2.1-00027.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
1061944 Iba61d3012e1f257ba9ee48fd3270c9ccf0d620d5 configs: msmcobalt: update decimator default volume
1058022 Ie5290a63557bee65851c9bd50a97006219b0b476 configs: Update wcd9340 sound trigger mixer paths for ms
1058022 I701feb8331f2389089d4a63970ce48bab8865a85 configs: add support for second SVA session with wcd9340
1054412 I993a15a2eb887aca9feb8992d5d9451f7fc331d6 msmcobalt: configs: Update config to enable HDMI passthr
1058022 I4d27f8f4eec4a5c4ec381ef3309e511cffc250f5 configs: add wcd9340 sound trigger mixer path file for m
1053090 Iffc34de62662b662387989af437dd11f94ec495f hal: Add independent backend support for a2dp
1061944 I38e47a87f9d7bced2fd3dca48265f9d55bab20af configs: msmcobalt: add analog mic mixer controls for Ta
Change-Id: I011b71c7921d408bc2da00761ae225ba992972e5
CRs-Fixed: 1061944, 1054412, 1053090, 1058022
diff --git a/configs/msmcobalt/audio_policy_configuration.xml b/configs/msmcobalt/audio_policy_configuration.xml
index 4bde15c..451c85e 100644
--- a/configs/msmcobalt/audio_policy_configuration.xml
+++ b/configs/msmcobalt/audio_policy_configuration.xml
@@ -116,6 +116,21 @@
<profile name="" format="AUDIO_FORMAT_AAC_HE_V2"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000,64000,88200,96000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_MONO"/>
+ <profile name="" format="AUDIO_FORMAT_AC3"
+ samplingRates="32000,44100,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
+ <profile name="" format="AUDIO_FORMAT_E_AC3"
+ samplingRates="32000,44100,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
+ <profile name="" format="AUDIO_FORMAT_E_AC3_JOC"
+ samplingRates="32000,44100,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
+ <profile name="" format="AUDIO_FORMAT_DTS"
+ samplingRates="32000,44100,48000"
+ channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1"/>
+ <profile name="" format="AUDIO_FORMAT_DTS_HD"
+ samplingRates="32000,44100,48000,64000,88200,96000,128000,176400,192000"
+ channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_WMA"
samplingRates="8000,11025,12000,16000,22050,24000,32000,44100,48000"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
diff --git a/configs/msmcobalt/mixer_paths_tavil.xml b/configs/msmcobalt/mixer_paths_tavil.xml
index dab6cac..b9b0b03 100644
--- a/configs/msmcobalt/mixer_paths_tavil.xml
+++ b/configs/msmcobalt/mixer_paths_tavil.xml
@@ -45,10 +45,14 @@
<ctl name="Voip Evrc Min Max Rate Config" id="1" value="4" />
<ctl name="Voip Dtx Mode" value="0" />
<ctl name="TTY Mode" value="OFF" />
+ <ctl name="DEC0 Volume" value="84" />
+ <ctl name="DEC2 Volume" value="84" />
<ctl name="DEC5 Volume" value="84" />
<ctl name="DEC6 Volume" value="84" />
<ctl name="DEC7 Volume" value="84" />
<ctl name="DEC8 Volume" value="84" />
+ <ctl name="ADC1 Volume" value="12" />
+ <ctl name="ADC2 Volume" value="12" />
<ctl name="CDC_IF TX5 MUX" value="ZERO" />
<ctl name="CDC_IF TX6 MUX" value="ZERO" />
<ctl name="CDC_IF TX7 MUX" value="ZERO" />
@@ -61,6 +65,8 @@
<ctl name="DMIC MUX6" value="ZERO" />
<ctl name="DMIC MUX7" value="ZERO" />
<ctl name="DMIC MUX8" value="ZERO" />
+ <ctl name="AMIC MUX0" value="ZERO" />
+ <ctl name="AMIC MUX6" value="ZERO" />
<ctl name="SLIMBUS_0_RX Port Mixer SLIM_0_TX" value="0" />
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia1" value="0" />
<ctl name="SLIMBUS_7_RX Audio Mixer MultiMedia4" value="0" />
@@ -372,8 +378,6 @@
<ctl name="RX INT2 MIX3 DSD HPHR Switch" value="0" />
<ctl name="RX INT1 DEM MUX" value="CLSH_DSM_OUT" />
<ctl name="RX INT2 DEM MUX" value="CLSH_DSM_OUT" />
- <ctl name="AIF1_CAP Mixer SLIM TX0" value="0" />
- <ctl name="AIF1_CAP Mixer SLIM TX2" value="0" />
<ctl name="CDC_IF TX0 MUX" value="ZERO" />
<ctl name="CDC_IF TX2 MUX" value="ZERO" />
<ctl name="ADC MUX0" value="ZERO" />
@@ -381,8 +385,6 @@
<ctl name="DMIC MUX0" value="ZERO" />
<ctl name="DMIC MUX2" value="ZERO" />
- <ctl name="DEC0 Volume" value="0" />
- <ctl name="DEC2 Volume" value="0" />
<ctl name="RX7 Digital Volume" value="84" />
<ctl name="RX8 Digital Volume" value="84" />
@@ -1380,9 +1382,19 @@
<!-- These are actual sound device specific mixer settings -->
<path name="amic1">
+ <ctl name="AIF1_CAP Mixer SLIM TX6" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="CDC_IF TX6 MUX" value="DEC6" />
+ <ctl name="ADC MUX6" value="AMIC" />
+ <ctl name="AMIC MUX6" value="ADC1" />
</path>
<path name="amic2">
+ <ctl name="AIF1_CAP Mixer SLIM TX0" value="1"/>
+ <ctl name="SLIM_0_TX Channels" value="One" />
+ <ctl name="CDC_IF TX0 MUX" value="DEC0" />
+ <ctl name="ADC MUX0" value="AMIC" />
+ <ctl name="AMIC MUX0" value="ADC2" />
</path>
<!-- For Tavil, DMIC numbered from 0 to 5 -->
diff --git a/configs/msmcobalt/msmcobalt.mk b/configs/msmcobalt/msmcobalt.mk
index 9b74162..bb6ee95 100644
--- a/configs/msmcobalt/msmcobalt.mk
+++ b/configs/msmcobalt/msmcobalt.mk
@@ -19,7 +19,7 @@
AUDIO_FEATURE_ENABLED_FLUENCE := true
AUDIO_FEATURE_ENABLED_HDMI_SPK := true
AUDIO_FEATURE_ENABLED_HDMI_EDID := true
-#AUDIO_FEATURE_ENABLED_HDMI_PASSTHROUGH := true
+AUDIO_FEATURE_ENABLED_HDMI_PASSTHROUGH := true
#AUDIO_FEATURE_ENABLED_KEEP_ALIVE := true
#AUDIO_FEATURE_ENABLED_DS2_DOLBY_DAP := true
#DOLBY_DDP := true
@@ -79,6 +79,7 @@
hardware/qcom/audio/configs/msmcobalt/audio_platform_info_i2s.xml:system/etc/audio_platform_info_i2s.xml \
hardware/qcom/audio/configs/msmcobalt/sound_trigger_mixer_paths.xml:system/etc/sound_trigger_mixer_paths.xml \
hardware/qcom/audio/configs/msmcobalt/sound_trigger_mixer_paths_wcd9330.xml:system/etc/sound_trigger_mixer_paths_wcd9330.xml \
+ hardware/qcom/audio/configs/msmcobalt/sound_trigger_mixer_paths_wcd9340.xml:system/etc/sound_trigger_mixer_paths_wcd9340.xml \
hardware/qcom/audio/configs/msmcobalt/sound_trigger_platform_info.xml:system/etc/sound_trigger_platform_info.xml \
hardware/qcom/audio/configs/msmcobalt/graphite_ipc_platform_info.xml:system/etc/graphite_ipc_platform_info.xml \
hardware/qcom/audio/configs/msmcobalt/audio_platform_info.xml:system/etc/audio_platform_info.xml
@@ -168,9 +169,9 @@
PRODUCT_PROPERTY_OVERRIDES += \
audio.offload.multiple.enabled=false
-#Disable Compress passthrough playback
+#Enable Compress passthrough playback
PRODUCT_PROPERTY_OVERRIDES += \
-audio.offload.passthrough=false
+audio.offload.passthrough=true
#Disable surround sound recording
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/configs/msmcobalt/sound_trigger_mixer_paths_wcd9340.xml b/configs/msmcobalt/sound_trigger_mixer_paths_wcd9340.xml
index 3c75b8e..d12b62f 100755
--- a/configs/msmcobalt/sound_trigger_mixer_paths_wcd9340.xml
+++ b/configs/msmcobalt/sound_trigger_mixer_paths_wcd9340.xml
@@ -84,10 +84,10 @@
</path>
<path name="listen-cpe-handset-mic">
- <ctl name="MAD Input" "DMIC0" />
- <ctl name="MAD_SEL MUX" "SPE" />
- <ctl name="MAD_INP MUX" "MAD" />
- <ctl name="MAD_CPE1 Switch" 1 />
+ <ctl name="MAD Input" value="DMIC0" />
+ <ctl name="MAD_SEL MUX" value="SPE" />
+ <ctl name="MAD_INP MUX" value="MAD" />
+ <ctl name="MAD_CPE1 Switch" value="1" />
</path>
<path name="listen-cpe-handset-mic-ecpp">
diff --git a/configs/msmcobalt/sound_trigger_platform_info.xml b/configs/msmcobalt/sound_trigger_platform_info.xml
index 1f90bd5..7ce74aa 100644
--- a/configs/msmcobalt/sound_trigger_platform_info.xml
+++ b/configs/msmcobalt/sound_trigger_platform_info.xml
@@ -63,6 +63,15 @@
<param detection_event_ids="0x00012C0D, 0x0, 0x00012C29" />
<param capture_event_ids="0x00020013, 0x0,0x00020015" />
</gcs_uid>
+ <gcs_uid>
+ <param uid="0x2" />
+ <param did="0x4" />
+ <param load_sound_model_ids="0x00012C0D, 0x1, 0x00012C14" />
+ <param confidence_levels_ids="0x00012C0D, 0x1, 0x00012C28" />
+ <param operation_mode_ids="0x00012C0D, 0x1 0x00012C28" />
+ <param detection_event_ids="0x00012C0D, 0x1, 0x00012C29" />
+ <param capture_event_ids="0x00020013, 0x1,0x00020015" />
+ </gcs_uid>
<!-- Module and param ids with which the algorithm is integrated
in non-graphite firmware (note these must come after gcs params) -->
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 414fc79..7293ded 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -176,9 +176,9 @@
/* API to identify DSP encoder captabilities */
static void a2dp_offload_codec_cap_parser(char *value)
{
- char *tok = NULL;
+ char *tok = NULL,*saveptr;
- tok = strtok(value, "-");
+ tok = strtok_r(value, "-", &saveptr);
while (tok != NULL) {
if (strcmp(tok, "sbc") == 0) {
ALOGD("%s: SBC offload supported\n",__func__);
@@ -189,7 +189,7 @@
a2dp.is_a2dp_offload_supported = true;
break;
}
- tok = strtok(NULL,"-");
+ tok = strtok_r(NULL, "-", &saveptr);
};
}
@@ -549,8 +549,7 @@
if(a2dp.a2dp_suspended == true) {
//session will be restarted after suspend completion
ALOGD("a2dp start requested during suspend state");
- a2dp.a2dp_total_active_session_request++;
- return 0;
+ return -ENOSYS;
}
if (!a2dp.a2dp_started && !a2dp.a2dp_total_active_session_request) {
@@ -593,14 +592,6 @@
return -ENOSYS;
}
- if(a2dp.a2dp_suspended == true) {
- ALOGD("STOP playback is called during suspend state");
-
- // sessions are already closed during suspend, just update active sessions counts
- if(a2dp.a2dp_total_active_session_request > 0)
- a2dp.a2dp_total_active_session_request--;
- return 0;
- }
if (a2dp.a2dp_started && (a2dp.a2dp_total_active_session_request > 0))
a2dp.a2dp_total_active_session_request--;
@@ -614,8 +605,6 @@
ALOGE("stop stream to BT IPC lib failed");
else
ALOGV("stop steam to BT IPC lib successful");
- a2dp.is_handoff_in_progress = false;
-
memset(&dummy_reset_config, 0x0, sizeof(struct sbc_enc_cfg_t));
ctl_enc_config = mixer_get_ctl_by_name(a2dp.adev->mixer,
MIXER_ENC_CONFIG_BLOCK);
@@ -672,44 +661,27 @@
if (a2dp.bt_lib_handle && (a2dp.bt_state != A2DP_STATE_DISCONNECTED) ) {
if ((!strncmp(value,"true",sizeof(value)))) {
ALOGD("Setting a2dp to suspend state");
- int active_sessions = a2dp.a2dp_total_active_session_request, count = 0;
- //Force close all active sessions on suspend (if any)
- for(count = 0; count< active_sessions; count ++)
- audio_extn_a2dp_stop_playback();
- a2dp.a2dp_total_active_session_request = active_sessions;
a2dp.a2dp_suspended = true;
-
if(a2dp.audio_suspend_stream)
a2dp.audio_suspend_stream();
} else if (a2dp.a2dp_suspended == true) {
ALOGD("Resetting a2dp suspend state");
if(a2dp.clear_a2dpsuspend_flag)
a2dp.clear_a2dpsuspend_flag();
-
a2dp.a2dp_suspended = false;
- //Force restart all active sessions post suspend (if any)
- if(a2dp.a2dp_total_active_session_request > 0){
- int active_sessions = a2dp.a2dp_total_active_session_request;
- a2dp.a2dp_total_active_session_request = 0;
- audio_extn_a2dp_start_playback();
- a2dp.a2dp_total_active_session_request = active_sessions;
- }
}
}
goto param_handled;
}
- ret = str_parms_get_str(parms,"reconfigA2dp", value, sizeof(value));
- if (ret >= 0) {
- if (a2dp.bt_lib_handle && (a2dp.bt_state != A2DP_STATE_DISCONNECTED)) {
- if (!strncmp(value,"true",sizeof(value)))
- a2dp.is_handoff_in_progress = true;
- }
- goto param_handled;
- }
param_handled:
ALOGV("end of a2dp setparam");
}
+void audio_extn_a2dp_set_handoff_mode(bool is_on)
+{
+ a2dp.is_handoff_in_progress = is_on;
+}
+
bool audio_extn_a2dp_is_force_device_switch()
{
//During encoder reconfiguration mode, force a2dp device switch
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 0fd7d3a..e8caeee 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -177,12 +177,14 @@
#define audio_extn_a2dp_stop_playback() (0)
#define audio_extn_a2dp_set_parameters(parms) (0)
#define audio_extn_a2dp_is_force_device_switch() (0)
+#define audio_extn_a2dp_set_handoff_mode(is_on) (0)
#else
void audio_extn_a2dp_init(void *adev);
int audio_extn_a2dp_start_playback();
void audio_extn_a2dp_stop_playback();
void audio_extn_a2dp_set_parameters(struct str_parms *parms);
bool audio_extn_a2dp_is_force_device_switch();
+void audio_extn_a2dp_set_handoff_mode(bool is_on);
#endif
#ifndef SSR_ENABLED
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 9894446..7d3c824 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -750,14 +750,6 @@
if (audio_extn_spkr_prot_is_enabled())
audio_extn_spkr_prot_calib_cancel(adev);
-
- if (((SND_DEVICE_OUT_BT_A2DP == snd_device) ||
- (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device))
- && (audio_extn_a2dp_start_playback() < 0)) {
- ALOGE(" fail to configure A2dp control path ");
- return -EINVAL;
- }
-
if (platform_can_enable_spkr_prot_on_device(snd_device) &&
audio_extn_spkr_prot_is_enabled()) {
if (platform_get_spkr_prot_acdb_id(snd_device) < 0) {
@@ -777,6 +769,13 @@
}
} else {
ALOGD("%s: snd_device(%d: %s)", __func__, snd_device, device_name);
+
+ if ((SND_DEVICE_OUT_BT_A2DP == snd_device) &&
+ (audio_extn_a2dp_start_playback() < 0)) {
+ ALOGE(" fail to configure A2dp control path ");
+ return -EINVAL;
+ }
+
/* due to the possibility of calibration overwrite between listen
and audio, notify listen hal before audio calibration is sent */
audio_extn_sound_trigger_update_device_status(snd_device,
@@ -835,10 +834,6 @@
if (adev->snd_dev_ref_cnt[snd_device] == 0) {
ALOGD("%s: snd_device(%d: %s)", __func__, snd_device, device_name);
- if ((SND_DEVICE_OUT_BT_A2DP == snd_device) ||
- (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device))
- audio_extn_a2dp_stop_playback();
-
if (platform_can_enable_spkr_prot_on_device(snd_device) &&
audio_extn_spkr_prot_is_enabled()) {
audio_extn_spkr_prot_stop_processing(snd_device);
@@ -851,6 +846,9 @@
audio_route_reset_and_update_path(adev->audio_route, device_name);
}
+ if (SND_DEVICE_OUT_BT_A2DP == snd_device)
+ audio_extn_a2dp_stop_playback();
+
if (snd_device == SND_DEVICE_OUT_HDMI)
adev->is_channel_status_set = false;
else if (SND_DEVICE_OUT_HEADPHONES == snd_device &&
@@ -4145,8 +4143,6 @@
}
}
- audio_extn_set_parameters(adev, parms);
- // reconfigure should be done only after updating a2dpstate in audio extn
ret = str_parms_get_str(parms,"reconfigA2dp", value, sizeof(value));
if (ret >= 0) {
struct audio_usecase *usecase;
@@ -4156,13 +4152,17 @@
if ((usecase->type == PCM_PLAYBACK) &&
(usecase->devices & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP)){
ALOGD("reconfigure a2dp... forcing device switch");
+ lock_output_stream(usecase->stream.out);
+ audio_extn_a2dp_set_handoff_mode(true);
//force device switch to re configure encoder
select_devices(adev, usecase->id);
+ audio_extn_a2dp_set_handoff_mode(false);
+ pthread_mutex_unlock(&usecase->stream.out->lock);
break;
}
}
}
-
+ audio_extn_set_parameters(adev, parms);
done:
str_parms_destroy(parms);
pthread_mutex_unlock(&adev->lock);
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 9c6cc6f..b41e040 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -2830,6 +2830,10 @@
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
new_snd_devices[1] = SND_DEVICE_OUT_USB_HEADSET;
status = true;
+ } else if (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_A2DP;
}
ALOGD("%s: snd_device(%d) num devices(%d) new_snd_devices(%d)", __func__,
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 7d6f02b..24bee89 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -2678,8 +2678,13 @@
new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
new_snd_devices[1] = SND_DEVICE_OUT_USB_HEADSET;
status = true;
+ } else if (SND_DEVICE_OUT_SPEAKER_AND_BT_A2DP == snd_device) {
+ *num_devices = 2;
+ new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER;
+ new_snd_devices[1] = SND_DEVICE_OUT_BT_A2DP;
}
+
ALOGD("%s: snd_device(%d) num devices(%d) new_snd_devices(%d)", __func__,
snd_device, *num_devices, *new_snd_devices);