Merge "pal: initialize curBtDevId to avoid unitialized use error"
diff --git a/configs/crow/mixer_paths_crow_qrd.xml b/configs/crow/mixer_paths_crow_qrd.xml
index 587416c..44bc7ba 100644
--- a/configs/crow/mixer_paths_crow_qrd.xml
+++ b/configs/crow/mixer_paths_crow_qrd.xml
@@ -822,11 +822,12 @@
</path>
<path name="va-mic-mono">
- <ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="VA DEC1 MUX" value="SWR_MIC" />
- <ctl name="VA SMIC MUX1" value="SWR_MIC0" />
- <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
+ <ctl name="VA_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="VA DEC2 MUX" value="SWR_MIC" />
+ <ctl name="VA SMIC MUX2" value="SWR_MIC6" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
</path>
<path name="va-mic-dmic">
@@ -839,8 +840,8 @@
<ctl name="ADC2_BCS Disable" value="1" />
<ctl name="ADC2 MUX" value="INP3" />
<ctl name="VA SMIC MUX0" value="SWR_MIC0" />
- <ctl name="VA SMIC MUX1" value="SWR_MIC5" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="VA SMIC MUX1" value="SWR_MIC6" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
<ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
<ctl name="ADC2_MIXER Switch" value="1" />
<ctl name="ADC1_MIXER Switch" value="1" />
@@ -929,37 +930,13 @@
</path>
<path name="va-mic-mono-lpi">
- <ctl name="VA_DEC0 Volume" value="96" />
- <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="VA DEC0 MUX" value="SWR_MIC" />
- <ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="VA_AMIC1_MIXER Switch" value="1" />
+ <ctl name="LPI Enable" value="1" />
+ <path name="va-mic-mono" />
</path>
<path name="va-mic-dmic-lpi">
- <ctl name="VA_DEC0 Volume" value="96" />
- <ctl name="VA_DEC1 Volume" value="96" />
- <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="VA DEC0 MUX" value="SWR_MIC" />
- <ctl name="VA DEC1 MUX" value="SWR_MIC" />
- <ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
- <ctl name="VA_DEC1 MODE" value="ADC_LOW_PWR" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
- <ctl name="VA SMIC MUX1" value="SWR_MIC9" />
- <ctl name="ADC4 MUX" value="INP5" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="ADC4_MIXER Switch" value="1" />
- <ctl name="VA_AMIC1_MIXER Switch" value="1" />
- <ctl name="VA_AMIC5_MIXER Switch" value="1" />
+ <ctl name="LPI Enable" value="1" />
+ <path name="va-mic-dmic" />
</path>
<path name="va-mic-tmic-lpi">
@@ -1044,31 +1021,26 @@
</path>
<path name="headset-va-mic-lpi">
+ <ctl name="LPI Enable" value="1" />
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA DEC0 MUX" value="SWR_MIC" />
<ctl name="VA SMIC MUX0" value="SWR_MIC5" />
- <ctl name="TX1 MODE" value="ADC_LP" />
<ctl name="ADC2 MUX" value="INP2" />
<ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
<ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="HDR12 MUX" value="NO_HDR12" />
<ctl name="ADC2_BCS Disable" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="VA_AMIC2_MIXER Switch" value="1" />
</path>
<path name="headset-va-mic">
<ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="VA DEC0 MUX" value="SWR_MIC" />
<ctl name="VA SMIC MUX0" value="SWR_MIC5" />
- <ctl name="TX1 MODE" value="ADC_LP" />
<ctl name="ADC2 MUX" value="INP2" />
<ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
<ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="HDR12 MUX" value="NO_HDR12" />
<ctl name="ADC2_BCS Disable" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="VA_AMIC2_MIXER Switch" value="1" />
</path>
<path name="lpi-pcm-logging">
@@ -1077,40 +1049,33 @@
<!-- Dual MIC devices -->
<path name="handset-dmic-endfire">
- <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DEC1 MUX" value="SWR_MIC" />
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <ctl name="TX DEC3 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC4" />
- <ctl name="TX SMIC MUX3" value="SWR_MIC5" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX3 MODE" value="ADC_LP" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC0" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC6" />
<ctl name="ADC2 MUX" value="INP3" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="ADC2_BCS Disable" value="1" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="ADC1_MIXER Switch" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="AMIC1_MIXER Switch" value="1" />
- <ctl name="AMIC3_MIXER Switch" value="1" />
</path>
<path name="speaker-dmic-endfire">
- <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="TX_AIF1_CAP Mixer DEC3" value="1" />
+ <ctl name="TX DEC1 MUX" value="SWR_MIC" />
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <ctl name="TX DEC3 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC9" />
- <ctl name="TX SMIC MUX3" value="SWR_MIC4" />
- <ctl name="ADC4 MUX" value="INP5" />
- <ctl name="HDR34 MUX" value="NO_HDR34" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC4_MIXER Switch" value="1" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC0" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC6" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="ADC2_BCS Disable" value="1" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
<ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="AMIC5_MIXER Switch" value="1" />
- <ctl name="AMIC1_MIXER Switch" value="1" />
+ <ctl name="ADC2_MIXER Switch" value="1" />
</path>
<path name="dmic-endfire">
diff --git a/device/src/Bluetooth.cpp b/device/src/Bluetooth.cpp
index 505c6fa..a448e47 100644
--- a/device/src/Bluetooth.cpp
+++ b/device/src/Bluetooth.cpp
@@ -1738,6 +1738,7 @@
if (a2dpState != A2DP_STATE_STARTED && !totalActiveSessionRequests) {
codecFormat = CODEC_TYPE_INVALID;
+ isAbrEnabled = false;
PAL_DBG(LOG_TAG, "calling BT module stream start");
/* This call indicates BT IPC lib to start playback */
if (audio_source_start_api) {
diff --git a/device/src/USBAudio.cpp b/device/src/USBAudio.cpp
index 072ebd2..5c40793 100644
--- a/device/src/USBAudio.cpp
+++ b/device/src/USBAudio.cpp
@@ -774,16 +774,12 @@
channels = MAX_HIFI_CHANNEL_COUNT;
if (is_playback) {
- // start from 2 channels as framework currently doesn't support mono.
- if (channels >= 2) {
- channel[num_masks++] = audio_channel_out_mask_from_count(2);
- }
- for (channel_count = 2;
- channel_count <= channels && num_masks < MAX_SUPPORTED_CHANNEL_MASKS;
- ++channel_count) {
- channel[num_masks++] =
- audio_channel_mask_for_index_assignment_from_count(channel_count);
- }
+ channel[num_masks++] = channels <= 2
+ /* position mask for mono and stereo*/
+ ? audio_channel_out_mask_from_count(channels)
+ /* otherwise indexed */
+ : audio_channel_mask_for_index_assignment_from_count(channels);
+ // TODO: needs to figure out the accurate match of channel mask
} else {
// For capture we report all supported channel masks from 1 channel up.
channel_count = MIN_CHANNEL_COUNT;
diff --git a/resource_manager/src/ResourceManager.cpp b/resource_manager/src/ResourceManager.cpp
index 133e387..8007e33 100644
--- a/resource_manager/src/ResourceManager.cpp
+++ b/resource_manager/src/ResourceManager.cpp
@@ -7224,6 +7224,7 @@
PAL_DBG(LOG_TAG,"connected stream %pK from device %d",
std::get<0>(*sIter), (std::get<1>(*sIter))->id);
}
+ std::get<0>(*sIter)->unlockStreamMutex();
}
}
@@ -7337,6 +7338,18 @@
PAL_ERR(LOG_TAG, "Connect failed");
}
+ for (sIter2 = streamDevConnectList.begin(); sIter2 != streamDevConnectList.end(); sIter2++) {
+ if ((std::get<0>(*sIter2) != NULL) && isStreamActive(std::get<0>(*sIter2), mActiveStreams)) {
+ for (sIter = uniqueStreamsList.begin(); sIter != uniqueStreamsList.end(); sIter++) {
+ if (*sIter == std::get<0>(*sIter2)) {
+ uniqueStreamsList.erase(sIter);
+ PAL_VERBOSE(LOG_TAG, "already unlocked, remove stream %pK from list",
+ std::get<0>(*sIter2));
+ break;
+ }
+ }
+ }
+ }
exit:
// unlock all stream mutexes
for (sIter = uniqueStreamsList.begin(); sIter != uniqueStreamsList.end(); sIter++) {
diff --git a/session/src/Session.cpp b/session/src/Session.cpp
index 7235640..848e6d2 100644
--- a/session/src/Session.cpp
+++ b/session/src/Session.cpp
@@ -829,7 +829,7 @@
return status;
}
-/* This is to set devicePP MFC(if exists) and PSPD MFC */
+/* This is to set devicePP MFC(if exists) and PSPD MFC and stream MFC*/
int Session::configureMFC(const std::shared_ptr<ResourceManager>& rm, struct pal_stream_attributes &sAttr,
struct pal_device &dAttr, const std::vector<int> &pcmDevIds, const char* intf)
{
@@ -896,6 +896,32 @@
setSlotMask(rm, sAttr, dAttr, pcmDevIds);
}
+ /* Prepare stream MFC payload */
+ if (sAttr.direction == PAL_AUDIO_INPUT) {
+ status = SessionAlsaUtils::getModuleInstanceId(mixer, pcmDevIds.at(0), intf,
+ TAG_STREAM_MFC_SR, &miid);
+ if (status == 0) {
+ PAL_DBG(LOG_TAG, "miid : %x id = %d, data %s, dev id = %d\n", miid,
+ pcmDevIds.at(0), intf, dAttr.id);
+ if (isPalPCMFormat(sAttr.in_media_config.aud_fmt_id))
+ mfcData.bitWidth = ResourceManager::palFormatToBitwidthLookup(
+ sAttr.in_media_config.aud_fmt_id);
+ else
+ mfcData.bitWidth = sAttr.in_media_config.bit_width;
+ mfcData.sampleRate = sAttr.in_media_config.sample_rate;
+ mfcData.numChannel = sAttr.in_media_config.ch_info.channels;
+ mfcData.ch_info = nullptr;
+ builder->payloadMFCConfig((uint8_t **)&payload, &payloadSize, miid, &mfcData);
+ if (payloadSize && payload) {
+ status = updateCustomPayload(payload, payloadSize);
+ freeCustomPayload(&payload, &payloadSize);
+ if (0 != status) {
+ PAL_ERR(LOG_TAG, "updateCustomPayload failed\n");
+ goto exit;
+ }
+ }
+ }
+ }
/* Prepare PSPD MFC payload */
/* Get PSPD MFC MIID and configure to match to device config */
/* This has to be done after sending all mixer controls and before connect */
diff --git a/session/src/SessionAlsaUtils.cpp b/session/src/SessionAlsaUtils.cpp
index f1e1ab8..024117c 100644
--- a/session/src/SessionAlsaUtils.cpp
+++ b/session/src/SessionAlsaUtils.cpp
@@ -2326,6 +2326,28 @@
status = -EINVAL;
goto exit;
}
+ } else if (sAttr.direction == PAL_AUDIO_INPUT &&
+ streamType == PAL_STREAM_ULTRA_LOW_LATENCY) {
+ if (sess) {
+ sess->configureMFC(rmHandle, sAttr, dAttr, pcmDevIds,
+ aifBackEndsToConnect[0].second.data());
+ sess->getCustomPayload(&payload, &payloadSize);
+ if (payload) {
+ status = SessionAlsaUtils::setMixerParameter(mixerHandle, pcmDevIds.at(0),
+ payload, payloadSize);
+ }
+ sess->freeCustomPayload();
+ payload = NULL;
+ payloadSize = 0;
+ if (status != 0) {
+ PAL_ERR(LOG_TAG, "setMixerParameter failed");
+ goto exit;
+ }
+ } else {
+ PAL_ERR(LOG_TAG, "invalid session audio object");
+ status = -EINVAL;
+ goto exit;
+ }
}
} else if (!(SessionAlsaUtils::isMmapUsecase(sAttr))) {
if (sess) {
@@ -2346,35 +2368,6 @@
goto exit;
}
}
- if (sAttr.direction == PAL_AUDIO_INPUT && streamType == PAL_STREAM_ULTRA_LOW_LATENCY) {
- status = SessionAlsaUtils::getModuleInstanceId(mixerHandle, pcmDevIds.at(0),
- aifBackEndsToConnect[0].second.data(),
- TAG_STREAM_MFC_SR, &miid);
- if (status != 0) {
- PAL_ERR(LOG_TAG, "getModuleInstanceId failed\n");
- goto exit;
- }
- PAL_DBG(LOG_TAG, "ULL record, miid : %x id = %d\n", miid, pcmDevIds.at(0));
- if (isPalPCMFormat(sAttr.in_media_config.aud_fmt_id))
- streamData.bitWidth = ResourceManager::palFormatToBitwidthLookup(
- sAttr.in_media_config.aud_fmt_id);
- else
- streamData.bitWidth = sAttr.in_media_config.bit_width;
- streamData.sampleRate = sAttr.in_media_config.sample_rate;
- streamData.numChannel = sAttr.in_media_config.ch_info.channels;
- streamData.ch_info = nullptr;
- builder->payloadMFCConfig(&payload, &payloadSize, miid, &streamData);
- if (payloadSize && payload) {
- sess->getCustomPayload(&payload, &payloadSize);
- }
- status = SessionAlsaUtils::setMixerParameter(mixerHandle, pcmDevIds.at(0),
- payload, payloadSize);
- sess->freeCustomPayload();
- if (status != 0) {
- PAL_ERR(LOG_TAG, "setMixerParameter failed");
- goto exit;
- }
- }
connectCtrl = mixer_get_ctl_by_name(mixerHandle, connectCtrlName.str().data());
if (!connectCtrl) {