Merge 07d491a722082a6b06934e17af6529863c1e1aa9 on remote branch
Change-Id: I6a45225b5fdce7570540b8ef634bb75ae55064d3
diff --git a/Pal.cpp b/Pal.cpp
index 71d94ed..46b3b86 100644
--- a/Pal.cpp
+++ b/Pal.cpp
@@ -290,6 +290,7 @@
int32_t pal_stream_start(pal_stream_handle_t *stream_handle)
{
Stream *s = NULL;
+ struct pal_stream_attributes sAttr;
std::shared_ptr<ResourceManager> rm = NULL;
int status;
if (!stream_handle) {
@@ -313,6 +314,11 @@
goto exit;
}
+ s = reinterpret_cast<Stream *>(stream_handle);
+ s->getStreamAttributes(&sAttr);
+ if (sAttr.type == PAL_STREAM_VOICE_UI)
+ rm->handleDeferredSwitch();
+
rm->lockActiveStream();
if (!rm->isActiveStream(stream_handle)) {
rm->unlockActiveStream();
@@ -320,7 +326,6 @@
goto exit;
}
- s = reinterpret_cast<Stream *>(stream_handle);
status = rm->increaseStreamUserCounter(s);
if (0 != status) {
rm->unlockActiveStream();
@@ -399,11 +404,23 @@
{
Stream *s = NULL;
int status;
- if (!stream_handle || !buf) {
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle) || !buf) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_VERBOSE(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->write(buf);
@@ -419,11 +436,23 @@
{
Stream *s = NULL;
int status;
- if (!stream_handle || !buf) {
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle) || !buf) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_VERBOSE(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->read(buf);
@@ -440,11 +469,24 @@
{
Stream *s = NULL;
int status;
- if (!stream_handle) {
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->getParameters(param_id, (void **)param_payload);
@@ -463,11 +505,22 @@
int status;
std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle, status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK param_id %d", stream_handle,
param_id);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -480,12 +533,7 @@
PAL_ERR(LOG_TAG, "set parameters failed status %d param_id %u", status, param_id);
return status;
}
- rm = ResourceManager::getInstance();
- if (!rm) {
- status = -EINVAL;
- PAL_ERR(LOG_TAG, "Invalid resource manager");
- return status;
- }
+
if (param_id == PAL_PARAM_ID_STOP_BUFFERING) {
PAL_DBG(LOG_TAG, "Buffering stopped, handle deferred LPI<->NLPI switch");
rm->handleDeferredSwitch();
@@ -603,11 +651,24 @@
{
Stream *s = NULL;
int status;
- if (!stream_handle) {
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->pause();
@@ -623,12 +684,23 @@
{
Stream *s = NULL;
int status;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -699,12 +771,23 @@
{
Stream *s = NULL;
int status;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -723,12 +806,23 @@
{
Stream *s = NULL;
int status;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -748,12 +842,24 @@
{
Stream *s = NULL;
int status;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
status = -EINVAL;
- PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
return status;
}
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
+ return status;
+ }
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -812,12 +918,24 @@
{
Stream *s = NULL;
int status = 0;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ status = -EINVAL;
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -1017,12 +1135,24 @@
{
int status = 0;
Stream *s = NULL;
+ std::shared_ptr<ResourceManager> rm = NULL;
- if (!stream_handle) {
+ rm = ResourceManager::getInstance();
+ if (!rm) {
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
+ return status;
+ }
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
status = -EINVAL;
PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
return status;
}
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
@@ -1081,13 +1211,26 @@
int32_t pal_stream_get_mmap_position(pal_stream_handle_t *stream_handle,
struct pal_mmap_position *position)
{
- Stream *s = NULL;
- int status;
- if (!stream_handle) {
+ Stream *s = NULL;
+ int status;
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
status = -EINVAL;
- PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
return status;
}
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
+ return status;
+ }
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->GetMmapPosition(position);
@@ -1105,11 +1248,24 @@
{
Stream *s = NULL;
int status;
- if (!stream_handle) {
+ std::shared_ptr<ResourceManager> rm = NULL;
+
+ rm = ResourceManager::getInstance();
+ if (!rm) {
status = -EINVAL;
- PAL_ERR(LOG_TAG, "Invalid input parameters status %d", status);
+ PAL_ERR(LOG_TAG, "Invalid resource manager");
return status;
}
+
+ rm->lockActiveStream();
+ if (!stream_handle || !rm->isActiveStream(stream_handle)) {
+ rm->unlockActiveStream();
+ status = -EINVAL;
+ PAL_ERR(LOG_TAG, "Invalid stream handle status %d", status);
+ return status;
+ }
+ rm->unlockActiveStream();
+
PAL_DBG(LOG_TAG, "Enter. Stream handle :%pK", stream_handle);
s = reinterpret_cast<Stream *>(stream_handle);
status = s->createMmapBuffer(min_size_frames, info);
diff --git a/configs/crow/mixer_paths_crow_idp_wcd9395_aatc.xml b/configs/crow/mixer_paths_crow_idp_wcd9395_aatc.xml
index e84eb8a..94a7715 100644
--- a/configs/crow/mixer_paths_crow_idp_wcd9395_aatc.xml
+++ b/configs/crow/mixer_paths_crow_idp_wcd9395_aatc.xml
@@ -580,12 +580,12 @@
</path>
<path name="handset-wcd">
- <ctl name="RX_MACRO RX0 MUX" value="AIF1_PB" />
- <ctl name="RX INT0_1 MIX1 INP0" value="RX0" />
- <ctl name="RX INT0 DEM MUX" value="CLSH_DSM_OUT" />
+ <ctl name="RX_MACRO RX2 MUX" value="AIF2_PB" />
+ <ctl name="RX INT2_1 MIX1 INP0" value="RX2" />
<ctl name="EAR_RDAC Switch" value="1" />
- <ctl name="RDAC3_MUX" value="RX1" />
+ <ctl name="RDAC3_MUX" value="RX3" />
<ctl name="RX_EAR Mode" value="ON" />
+ <ctl name="RX_RX2 Digital Volume" value="100" />
</path>
<path name="handset-vbat">
diff --git a/configs/crow/mixer_paths_crow_qrd.xml b/configs/crow/mixer_paths_crow_qrd.xml
old mode 100644
new mode 100755
index 44bc7ba..e74e0f1
--- a/configs/crow/mixer_paths_crow_qrd.xml
+++ b/configs/crow/mixer_paths_crow_qrd.xml
@@ -276,11 +276,11 @@
<path name="amic2">
<ctl name="TX DEC0 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX0" value="SWR_MIC5" />
+ <ctl name="TX SMIC MUX0" value="SWR_MIC4" />
<ctl name="DEC0_BCS Switch" value="1" />
<ctl name="TX_AIF1_CAP Mixer DEC0" value="1" />
<ctl name="ADC2 MUX" value="INP2" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="MBHC ChMap" value="SWRM_TX1_CH3" />
<ctl name="BCS Channel" value="CH2" />
<ctl name="ADC2_MIXER Switch" value="1" />
@@ -288,18 +288,18 @@
<path name="amic3">
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC6" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC4" />
<ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="ADC2 MUX" value="INP3" />
<ctl name="ADC2_MIXER Switch" value="1" />
</path>
<path name="amic4">
<ctl name="TX DEC5 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX5" value="SWR_MIC8" />
+ <ctl name="TX SMIC MUX5" value="SWR_MIC5" />
<ctl name="TX_AIF1_CAP Mixer DEC5" value="1" />
- <ctl name="ADC3 ChMap" value="SWRM_TX3_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
<ctl name="ADC3_MIXER Switch" value="1" />
</path>
@@ -562,7 +562,7 @@
<ctl name="SpkrLeft COMP Switch" value="1" />
<ctl name="SpkrLeft VISENSE Switch" value="1" />
<ctl name="SpkrLeft SWR DAC_Port Switch" value="1" />
- <ctl name="WSA_RX0 Digital Volume" value="70" />
+ <ctl name="WSA_RX0 Digital Volume" value="60" />
</path>
<path name="handset-vbat">
@@ -822,10 +822,10 @@
</path>
<path name="va-mic-mono">
- <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="VA_AIF1_CAP Mixer DEC0" value="1" />
+ <ctl name="VA DEC0 MUX" value="SWR_MIC" />
+ <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="ADC2 MUX" value="INP3" />
<ctl name="ADC2_MIXER Switch" value="1" />
</path>
@@ -837,14 +837,13 @@
<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="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_MIC6" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH3" />
- <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
+ <ctl name="VA SMIC MUX1" value="SWR_MIC5" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
+ <ctl name="ADC3_MIXER Switch" value="1" />
</path>
<path name="va-mic-tmic">
@@ -857,27 +856,16 @@
<ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
<ctl name="VA_DEC1 MODE" value="ADC_LOW_PWR" />
<ctl name="VA_DEC2 MODE" value="ADC_LOW_PWR" />
- <ctl name="VA SMIC MUX0" value="SWR_MIC9" />
- <ctl name="VA SMIC MUX1" value="SWR_MIC4" />
- <ctl name="VA SMIC MUX2" value="SWR_MIC5" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX1 MODE" value="ADC_LP" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="ADC2_BCS Disable" value="1" />
- <ctl name="ADC4 MUX" value="INP5" />
+ <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
+ <ctl name="VA SMIC MUX1" value="SWR_MIC5" />
+ <ctl name="VA SMIC MUX2" value="SWR_MIC0" />
<ctl name="ADC2 MUX" value="INP3" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="ADC4_MIXER Switch" value="1" />
+ <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
<ctl name="ADC1_MIXER Switch" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="ADC1 Volume" value="10" />
- <ctl name="ADC2 Volume" value="10" />
- <ctl name="ADC4 Volume" value="10" />
- <ctl name="VA_AMIC5_MIXER Switch" value="1" />
- <ctl name="VA_AMIC1_MIXER Switch" value="1" />
- <ctl name="VA_AMIC3_MIXER Switch" value="1" />
+ <ctl name="ADC3_MIXER Switch" value="1" />
</path>
<path name="va-mic-qmic">
@@ -940,35 +928,8 @@
</path>
<path name="va-mic-tmic-lpi">
- <ctl name="VA_DEC0 Volume" value="96" />
- <ctl name="VA_DEC1 Volume" value="96" />
- <ctl name="VA_DEC2 Volume" value="96" />
- <ctl name="VA_AIF1_CAP Mixer DEC0" value="1" />
- <ctl name="VA_AIF1_CAP Mixer DEC1" value="1" />
- <ctl name="VA_AIF1_CAP Mixer DEC2" value="1" />
- <ctl name="VA DEC0 MUX" value="SWR_MIC" />
- <ctl name="VA DEC1 MUX" value="SWR_MIC" />
- <ctl name="VA DEC2 MUX" value="SWR_MIC" />
- <ctl name="VA_DEC0 MODE" value="ADC_LOW_PWR" />
- <ctl name="VA_DEC1 MODE" value="ADC_LOW_PWR" />
- <ctl name="VA_DEC2 MODE" value="ADC_LOW_PWR" />
- <ctl name="VA SMIC MUX0" value="SWR_MIC4" />
- <ctl name="VA SMIC MUX1" value="SWR_MIC9" />
- <ctl name="VA SMIC MUX2" value="SWR_MIC8" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX1 MODE" value="ADC_LP" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="ADC4 MUX" value="INP5" />
- <ctl name="ADC3 MUX" value="INP4" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC3 ChMap" value="SWRM_TX3_CH1" />
- <ctl name="ADC1_MIXER Switch" value="1" />
- <ctl name="ADC4_MIXER Switch" value="1" />
- <ctl name="ADC3_MIXER Switch" value="1" />
- <ctl name="VA_AMIC1_MIXER Switch" value="1" />
- <ctl name="VA_AMIC5_MIXER Switch" value="1" />
- <ctl name="VA_AMIC4_MIXER Switch" value="1" />
+ <ctl name="LPI Enable" value="1" />
+ <path name="va-mic-tmic" />
</path>
<path name="va-mic-qmic-lpi">
@@ -1024,10 +985,10 @@
<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="VA SMIC MUX0" value="SWR_MIC4" />
<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="ADC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="ADC2_BCS Disable" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
</path>
@@ -1035,10 +996,10 @@
<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="VA SMIC MUX0" value="SWR_MIC4" />
<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="ADC2 ChMap" value="SWRM_TX2_CH1" />
<ctl name="ADC2_BCS Disable" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
</path>
@@ -1051,12 +1012,11 @@
<path name="handset-dmic-endfire">
<ctl name="TX DEC1 MUX" value="SWR_MIC" />
<ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <ctl name="TX SMIC MUX1" value="SWR_MIC0" />
- <ctl name="TX SMIC MUX2" value="SWR_MIC6" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC0" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC4" />
<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="ADC2 ChMap" value="SWRM_TX2_CH1" />
<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" />
@@ -1064,18 +1024,17 @@
</path>
<path name="speaker-dmic-endfire">
- <ctl name="TX DEC1 MUX" value="SWR_MIC" />
- <ctl name="TX DEC2 MUX" value="SWR_MIC" />
- <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="TX DEC1 MUX" value="SWR_MIC" />
+ <ctl name="TX DEC2 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC5" />
+ <ctl name="TX SMIC MUX2" value="SWR_MIC4" />
+ <ctl name="ADC2 MUX" value="INP3" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
<ctl name="ADC2_MIXER Switch" value="1" />
+ <ctl name="ADC3_MIXER Switch" value="1" />
</path>
<path name="dmic-endfire">
@@ -1174,57 +1133,41 @@
<!-- Tri MIC devices -->
<path name="three-mic">
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <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 MUX1" value="SWR_MIC9" />
+ <ctl name="TX DEC5 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC0" />
<ctl name="TX SMIC MUX2" value="SWR_MIC4" />
- <ctl name="TX SMIC MUX3" value="SWR_MIC5" />
- <ctl name="ADC4 MUX" value="INP5" />
+ <ctl name="TX SMIC MUX5" value="SWR_MIC5" />
<ctl name="ADC2 MUX" value="INP3" />
- <ctl name="HDR34 MUX" value="NO_HDR34" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX3 MODE" value="ADC_LP" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="ADC4_MIXER Switch" value="1" />
+ <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC5" value="1" />
<ctl name="ADC1_MIXER Switch" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="AMIC5_MIXER Switch" value="1" />
- <ctl name="AMIC1_MIXER Switch" value="1" />
- <ctl name="AMIC3_MIXER Switch" value="1" />
+ <ctl name="ADC3_MIXER Switch" value="1" />
</path>
<path name="speaker-tmic">
- <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
- <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 MUX1" value="SWR_MIC9" />
+ <ctl name="TX DEC5 MUX" value="SWR_MIC" />
+ <ctl name="TX SMIC MUX1" value="SWR_MIC0" />
<ctl name="TX SMIC MUX2" value="SWR_MIC4" />
- <ctl name="TX SMIC MUX3" value="SWR_MIC5" />
- <ctl name="ADC4 MUX" value="INP5" />
+ <ctl name="TX SMIC MUX5" value="SWR_MIC5" />
<ctl name="ADC2 MUX" value="INP3" />
- <ctl name="HDR34 MUX" value="NO_HDR34" />
- <ctl name="TX2 MODE" value="ADC_LP" />
- <ctl name="TX0 MODE" value="ADC_LP" />
- <ctl name="TX3 MODE" value="ADC_LP" />
- <ctl name="ADC4 ChMap" value="SWRM_TX3_CH2" />
- <ctl name="ADC1 ChMap" value="SWRM_TX2_CH1" />
- <ctl name="ADC2 ChMap" value="SWRM_TX2_CH2" />
- <ctl name="ADC4_MIXER Switch" value="1" />
+ <ctl name="ADC1 ChMap" value="SWRM_TX1_CH1" />
+ <ctl name="ADC2 ChMap" value="SWRM_TX2_CH1" />
+ <ctl name="ADC3 ChMap" value="SWRM_TX2_CH2" />
+ <ctl name="TX_AIF1_CAP Mixer DEC1" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC2" value="1" />
+ <ctl name="TX_AIF1_CAP Mixer DEC5" value="1" />
<ctl name="ADC1_MIXER Switch" value="1" />
<ctl name="ADC2_MIXER Switch" value="1" />
- <ctl name="AMIC5_MIXER Switch" value="1" />
- <ctl name="AMIC1_MIXER Switch" value="1" />
- <ctl name="AMIC3_MIXER Switch" value="1" />
+ <ctl name="ADC3_MIXER Switch" value="1" />
</path>
<path name="voice-speaker-tmic">
diff --git a/configs/crow/resourcemanager_crow_idp.xml b/configs/crow/resourcemanager_crow_idp.xml
index 87c99db..23c336b 100644
--- a/configs/crow/resourcemanager_crow_idp.xml
+++ b/configs/crow/resourcemanager_crow_idp.xml
@@ -1474,6 +1474,7 @@
<sound_model_info>
<first_stage_module_params>
<param module_type="GMM" />
+ <param lpi_supported="false"/>
<param load_sound_model_ids="0xC0000008, 0x0800104C" />
<param wakeup_config_ids="0xC0000008, 0x08001049" />
<param buffering_config_ids="0xC0000008, 0x08001044" />
diff --git a/configs/crow/resourcemanager_crow_idp_wcd9395_aatc.xml b/configs/crow/resourcemanager_crow_idp_wcd9395_aatc.xml
index 524cc3f..459d534 100644
--- a/configs/crow/resourcemanager_crow_idp_wcd9395_aatc.xml
+++ b/configs/crow/resourcemanager_crow_idp_wcd9395_aatc.xml
@@ -1474,6 +1474,7 @@
<sound_model_info>
<first_stage_module_params>
<param module_type="GMM" />
+ <param lpi_supported="false"/>
<param load_sound_model_ids="0xC0000008, 0x0800104C" />
<param wakeup_config_ids="0xC0000008, 0x08001049" />
<param buffering_config_ids="0xC0000008, 0x08001044" />
diff --git a/configs/crow/resourcemanager_crow_idp_wcd9395_dmic.xml b/configs/crow/resourcemanager_crow_idp_wcd9395_dmic.xml
index 8c548df..3b033d2 100644
--- a/configs/crow/resourcemanager_crow_idp_wcd9395_dmic.xml
+++ b/configs/crow/resourcemanager_crow_idp_wcd9395_dmic.xml
@@ -1474,6 +1474,7 @@
<sound_model_info>
<first_stage_module_params>
<param module_type="GMM" />
+ <param lpi_supported="false"/>
<param load_sound_model_ids="0xC0000008, 0x0800104C" />
<param wakeup_config_ids="0xC0000008, 0x08001049" />
<param buffering_config_ids="0xC0000008, 0x08001044" />
diff --git a/configs/crow/resourcemanager_crow_idp_wcd9395_wcd_dmic.xml b/configs/crow/resourcemanager_crow_idp_wcd9395_wcd_dmic.xml
index 8c548df..3b033d2 100644
--- a/configs/crow/resourcemanager_crow_idp_wcd9395_wcd_dmic.xml
+++ b/configs/crow/resourcemanager_crow_idp_wcd9395_wcd_dmic.xml
@@ -1474,6 +1474,7 @@
<sound_model_info>
<first_stage_module_params>
<param module_type="GMM" />
+ <param lpi_supported="false"/>
<param load_sound_model_ids="0xC0000008, 0x0800104C" />
<param wakeup_config_ids="0xC0000008, 0x08001049" />
<param buffering_config_ids="0xC0000008, 0x08001044" />
diff --git a/configs/crow/resourcemanager_crow_qrd.xml b/configs/crow/resourcemanager_crow_qrd.xml
index 1fe922e..03cda18 100644
--- a/configs/crow/resourcemanager_crow_qrd.xml
+++ b/configs/crow/resourcemanager_crow_qrd.xml
@@ -1475,6 +1475,7 @@
<sound_model_info>
<first_stage_module_params>
<param module_type="GMM" />
+ <param lpi_supported="false"/>
<param load_sound_model_ids="0xC0000008, 0x0800104C" />
<param wakeup_config_ids="0xC0000008, 0x08001049" />
<param buffering_config_ids="0xC0000008, 0x08001044" />
diff --git a/configs/kalama/resourcemanager_kalama_cdp.xml b/configs/kalama/resourcemanager_kalama_cdp.xml
index b706057..5ba1983 100644
--- a/configs/kalama/resourcemanager_kalama_cdp.xml
+++ b/configs/kalama/resourcemanager_kalama_cdp.xml
@@ -766,6 +766,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/configs/kalama/resourcemanager_kalama_cdp_apq.xml b/configs/kalama/resourcemanager_kalama_cdp_apq.xml
index 885b661..924b3ee 100644
--- a/configs/kalama/resourcemanager_kalama_cdp_apq.xml
+++ b/configs/kalama/resourcemanager_kalama_cdp_apq.xml
@@ -761,6 +761,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/configs/kalama/resourcemanager_kalama_grd.xml b/configs/kalama/resourcemanager_kalama_grd.xml
index 665934f..becf30f 100644
--- a/configs/kalama/resourcemanager_kalama_grd.xml
+++ b/configs/kalama/resourcemanager_kalama_grd.xml
@@ -764,6 +764,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/configs/kalama/resourcemanager_kalama_mtp.xml b/configs/kalama/resourcemanager_kalama_mtp.xml
index 7dffdc0..bda23c9 100644
--- a/configs/kalama/resourcemanager_kalama_mtp.xml
+++ b/configs/kalama/resourcemanager_kalama_mtp.xml
@@ -781,6 +781,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/configs/kalama/resourcemanager_kalama_mtp_apq.xml b/configs/kalama/resourcemanager_kalama_mtp_apq.xml
index f596bdf..fee3ff1 100644
--- a/configs/kalama/resourcemanager_kalama_mtp_apq.xml
+++ b/configs/kalama/resourcemanager_kalama_mtp_apq.xml
@@ -776,6 +776,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/configs/kalama/resourcemanager_kalama_qrd.xml b/configs/kalama/resourcemanager_kalama_qrd.xml
index d6c6f5f..3818244 100644
--- a/configs/kalama/resourcemanager_kalama_qrd.xml
+++ b/configs/kalama/resourcemanager_kalama_qrd.xml
@@ -782,6 +782,7 @@
<name>PAL_STREAM_ULTRASOUND</name>
<priority>4</priority>
<samplerate>96000</samplerate>
+ <bit_width>16</bit_width>
</usecase>
</out-device>
<out-device>
diff --git a/context_manager/inc/ContextManager.h b/context_manager/inc/ContextManager.h
index a9d4d04..677e7d2 100644
--- a/context_manager/inc/ContextManager.h
+++ b/context_manager/inc/ContextManager.h
@@ -141,6 +141,9 @@
uint32_t see_id;
std::map<uint32_t, Usecase*> usecases;
+protected:
+ static std::mutex see_client_mutex;
+
public:
see_client(uint32_t id);
~see_client();
@@ -148,6 +151,8 @@
Usecase* Usecase_Get(uint32_t usecase_id);
int32_t Usecase_Remove(uint32_t usecase_id);
int32_t Usecase_Add(uint32_t usecase_id, Usecase* uc);
+ void lock_see_client() { see_client_mutex.lock(); };
+ void unlock_see_client() { see_client_mutex.unlock(); };
void CloseAllUsecases();
};
diff --git a/context_manager/src/ContextManager.cpp b/context_manager/src/ContextManager.cpp
index 97a5948..5b2d9a1 100644
--- a/context_manager/src/ContextManager.cpp
+++ b/context_manager/src/ContextManager.cpp
@@ -71,6 +71,8 @@
#define ACKDATA_DEFAULT_SIZE 1024
#define PAL_ALIGN_8BYTE(x) (((x) + 7) & (~7))
+std::mutex see_client::see_client_mutex;
+
int32_t ContextManager::process_register_request(uint32_t see_id, uint32_t usecase_id, uint32_t size,
void *payload)
{
@@ -87,6 +89,8 @@
goto exit;
}
+ seeclient->lock_see_client();
+
uc = seeclient->Usecase_Get(usecase_id);
if (uc == NULL) {
PAL_VERBOSE(LOG_TAG, "Creating new usecase:0x%x for see_id:%d", usecase_id, see_id);
@@ -154,6 +158,7 @@
if (rc) {
send_asps_basic_response(rc, EVENT_ID_ASPS_SENSOR_REGISTER_REQUEST, see_id);
}
+ seeclient->unlock_see_client();
PAL_VERBOSE(LOG_TAG, "Exit rc:%d", rc);
return rc;
}
@@ -246,6 +251,8 @@
goto exit;
}
+ seeclient->lock_see_client();
+
uc = seeclient->Usecase_Get(usecase_id);
if (uc == NULL) {
rc = -EINVAL;
@@ -266,6 +273,7 @@
}
exit:
+ seeclient->unlock_see_client();
PAL_VERBOSE(LOG_TAG, "Exit rc:%d", rc);
return rc;
}
@@ -915,6 +923,8 @@
PAL_VERBOSE(LOG_TAG, "Enter:");
+ see_client_mutex.lock();
+
for (auto it_uc = this->usecases.begin(); it_uc != this->usecases.cend();) {
uc = it_uc->second;
PAL_VERBOSE(LOG_TAG, "Calling StopAndClose on usecase_id:0x%x", uc->GetUseCaseID());
@@ -923,6 +933,8 @@
delete uc;
}
+ see_client_mutex.unlock();
+
PAL_VERBOSE(LOG_TAG, "Exit:");
}
diff --git a/device/inc/Device.h b/device/inc/Device.h
index 638766d..c14a16a 100644
--- a/device/inc/Device.h
+++ b/device/inc/Device.h
@@ -100,6 +100,7 @@
//device atrributues per stream are stored by priority in a map
std::multimap<uint32_t, std::pair<Stream *, struct pal_device *>> mStreamDevAttr;
uint32_t mSampleRate = 0;
+ uint32_t mBitWidth = 0;
Device(struct pal_device *device, std::shared_ptr<ResourceManager> Rm);
Device();
@@ -138,6 +139,7 @@
virtual ~Device();
void getCurrentSndDevName(char *name);
void setSampleRate(uint32_t sr){mSampleRate = sr;};
+ void setBitWidth(uint32_t bw) {mBitWidth = bw;};
void lockDeviceMutex() { mDeviceMutex.lock(); };
void unlockDeviceMutex() { mDeviceMutex.unlock(); };
bool compareStreamDevAttr(const struct pal_device *inDevAttr,
diff --git a/device/src/Device.cpp b/device/src/Device.cpp
index 5694e41..5a75d7c 100644
--- a/device/src/Device.cpp
+++ b/device/src/Device.cpp
@@ -934,7 +934,10 @@
/* update sample rate if it's valid */
if (mSampleRate)
deviceAttr->config.sample_rate = mSampleRate;
-
+ if (mBitWidth) {
+ deviceAttr->config.bit_width = mBitWidth;
+ deviceAttr->config.aud_fmt_id = rm->getAudioFmt(mBitWidth);
+ }
#if DUMP_DEV_ATTR
pal_stream_attributes dumpstrAttr;
(*it).second.first->getStreamAttributes(&dumpstrAttr);
diff --git a/resource_manager/src/ResourceManager.cpp b/resource_manager/src/ResourceManager.cpp
index 8007e33..d037720 100644
--- a/resource_manager/src/ResourceManager.cpp
+++ b/resource_manager/src/ResourceManager.cpp
@@ -1762,8 +1762,10 @@
return ret;
}
- lpi_stream = (sleep_monitor_vote_type_[type] == LPI_VOTE &&
- !IsTransitToNonLPIOnChargingSupported() && (!force_nlpi_vote));
+ if (sleep_monitor_vote_type_[type] == LPI_VOTE) {
+ lpi_stream = (!force_nlpi_vote && str->ConfigSupportLPI() &&
+ !IsTransitToNonLPIOnChargingSupported());
+ }
mSleepMonitorMutex.lock();
if (vote) {
@@ -4445,7 +4447,7 @@
* 1. sound model loaded but not started by sthal
* 2. stop recognition called by sthal
*/
- if (!str->isActive())
+ if (!str->isStarted())
continue;
cap_prof = str->GetCurrentCaptureProfile();
@@ -8718,82 +8720,29 @@
case PAL_PARAM_ID_BT_A2DP_RECONFIG_SUPPORTED:
case PAL_PARAM_ID_BT_A2DP_SUSPENDED:
case PAL_PARAM_ID_BT_A2DP_ENCODER_LATENCY:
- {
- std::shared_ptr<Device> dev = nullptr;
- struct pal_device dattr;
- pal_param_bta2dp_t *param_bt_a2dp = nullptr;
-
- if (isDeviceAvailable(PAL_DEVICE_OUT_BLUETOOTH_A2DP)) {
- dattr.id = PAL_DEVICE_OUT_BLUETOOTH_A2DP;
- } else if (isDeviceAvailable(PAL_DEVICE_OUT_BLUETOOTH_BLE)) {
- dattr.id = PAL_DEVICE_OUT_BLUETOOTH_BLE;
- } else if (isDeviceAvailable(PAL_DEVICE_OUT_BLUETOOTH_BLE_BROADCAST)) {
- dattr.id = PAL_DEVICE_OUT_BLUETOOTH_BLE_BROADCAST;
- } else {
- goto exit;
- }
- dev = Device::getInstance(&dattr , rm);
- if (dev) {
- status = dev->getDeviceParameter(param_id, (void **)¶m_bt_a2dp);
- if (status) {
- PAL_ERR(LOG_TAG, "get Parameter %d failed\n", param_id);
- goto exit;
- }
- *param_payload = param_bt_a2dp;
- *payload_size = sizeof(pal_param_bta2dp_t);
- }
- break;
- }
case PAL_PARAM_ID_BT_A2DP_CAPTURE_SUSPENDED:
- {
- std::shared_ptr<Device> dev = nullptr;
- struct pal_device dattr;
- pal_param_bta2dp_t *param_bt_a2dp = nullptr;
-
- if (isDeviceAvailable(PAL_DEVICE_IN_BLUETOOTH_A2DP)) {
- dattr.id = PAL_DEVICE_IN_BLUETOOTH_A2DP;
- } else if (isDeviceAvailable(PAL_DEVICE_IN_BLUETOOTH_BLE)) {
- dattr.id = PAL_DEVICE_IN_BLUETOOTH_BLE;
- } else {
- goto exit;
- }
- dev = Device::getInstance(&dattr , rm);
- if (dev) {
- status = dev->getDeviceParameter(param_id, (void **)¶m_bt_a2dp);
- if (status) {
- PAL_ERR(LOG_TAG, "get Parameter %d failed\n", param_id);
- goto exit;
- }
- *param_payload = param_bt_a2dp;
- *payload_size = sizeof(pal_param_bta2dp_t);
- }
- break;
- }
case PAL_PARAM_ID_BT_A2DP_DECODER_LATENCY:
{
std::shared_ptr<Device> dev = nullptr;
struct pal_device dattr;
pal_param_bta2dp_t* param_bt_a2dp = nullptr;
- if (isDeviceAvailable(PAL_DEVICE_IN_BLUETOOTH_A2DP)) {
- dattr.id = PAL_DEVICE_IN_BLUETOOTH_A2DP;
- } else if (isDeviceAvailable(PAL_DEVICE_IN_BLUETOOTH_BLE)) {
- dattr.id = PAL_DEVICE_IN_BLUETOOTH_BLE;
+ if (isDeviceAvailable((*(pal_param_bta2dp_t**)param_payload)->dev_id)) {
+ dattr.id = (*(pal_param_bta2dp_t**)param_payload)->dev_id;
} else {
goto exit;
}
+
dev = Device::getInstance(&dattr, rm);
- if (!dev) {
- PAL_ERR(LOG_TAG, "Failed to get device instance");
- goto exit;
+ if (dev) {
+ status = dev->getDeviceParameter(param_id, (void**)¶m_bt_a2dp);
+ if (status) {
+ PAL_ERR(LOG_TAG, "get Parameter %d failed\n", param_id);
+ goto exit;
+ }
+ *param_payload = param_bt_a2dp;
+ *payload_size = sizeof(pal_param_bta2dp_t);
}
- status = dev->getDeviceParameter(param_id, (void**)¶m_bt_a2dp);
- if (status) {
- PAL_ERR(LOG_TAG, "get Parameter %d failed\n", param_id);
- goto exit;
- }
- *param_payload = param_bt_a2dp;
- *payload_size = sizeof(pal_param_bta2dp_t);
break;
}
case PAL_PARAM_ID_GAIN_LVL_MAP:
diff --git a/stream/inc/Stream.h b/stream/inc/Stream.h
index 6385a0e..e7f1b81 100644
--- a/stream/inc/Stream.h
+++ b/stream/inc/Stream.h
@@ -248,6 +248,7 @@
struct pal_mmap_buffer *info __unused) {return -EINVAL;}
virtual int32_t GetMmapPosition(struct pal_mmap_position *position __unused) {return -EINVAL;}
virtual int32_t getTagsWithModuleInfo(size_t *size __unused, uint8_t *payload __unused) {return -EINVAL;};
+ virtual bool ConfigSupportLPI() {return true;}; //Only LPI streams can update their vote to NLPI
int32_t getStreamAttributes(struct pal_stream_attributes *sattr);
int32_t getModifiers(struct modifier_kv *modifiers,uint32_t *noOfModifiers);
const std::string& getStreamSelector() const;
diff --git a/stream/inc/StreamSoundTrigger.h b/stream/inc/StreamSoundTrigger.h
index 035c1d7..9da6d26 100644
--- a/stream/inc/StreamSoundTrigger.h
+++ b/stream/inc/StreamSoundTrigger.h
@@ -147,7 +147,7 @@
bool enable __unused) {
return -ENOSYS;
}
-
+ bool isStarted();
void SetDetectedToEngines(bool detected);
int32_t SetEngineDetectionState(int32_t state);
@@ -165,6 +165,7 @@
int32_t EnableLPI(bool is_enable);
int32_t setECRef(std::shared_ptr<Device> dev, bool is_enable) override;
int32_t setECRef_l(std::shared_ptr<Device> dev, bool is_enable) override;
+ bool ConfigSupportLPI() override;
void TransitTo(int32_t state_id);
friend class PalRingBufferReader;
@@ -181,7 +182,6 @@
(GetCurrentStateId() == ST_STATE_BUFFERING);
}
struct st_uuid GetVendorUuid();
-
void *GetGSLEngine() {
if (gsl_engine_)
return (void *)gsl_engine_.get();
diff --git a/stream/src/StreamCommon.cpp b/stream/src/StreamCommon.cpp
index bc00847..3c8c7e1 100644
--- a/stream/src/StreamCommon.cpp
+++ b/stream/src/StreamCommon.cpp
@@ -121,6 +121,8 @@
continue;
rm->getDeviceInfo(devAttr.id, sattr->type, "", &inDeviceInfo);
dev->setSampleRate(inDeviceInfo.samplerate);
+ if (devAttr.id == PAL_DEVICE_OUT_HANDSET)
+ dev->setBitWidth(inDeviceInfo.bit_width);
}
}
for (int i = 0; i < no_of_devices; i++) {
@@ -184,6 +186,7 @@
if (!dev)
continue;
dev->setSampleRate(0);
+ dev->setBitWidth(0);
}
}
diff --git a/stream/src/StreamPCM.cpp b/stream/src/StreamPCM.cpp
index e001253..5f2c5a3 100644
--- a/stream/src/StreamPCM.cpp
+++ b/stream/src/StreamPCM.cpp
@@ -1656,8 +1656,10 @@
rm->lockGraph();
for (int32_t i=0; i < mDevices.size(); i++) {
if ((mDevices[i]->getSndDeviceId() == PAL_DEVICE_OUT_BLUETOOTH_A2DP) ||
- (mDevices[i]->getSndDeviceId() == PAL_DEVICE_OUT_BLUETOOTH_BLE)) {
- PAL_DBG(LOG_TAG, "start BT A2DP/BLE device as to populate the full GKVs");
+ (mDevices[i]->getSndDeviceId() == PAL_DEVICE_OUT_BLUETOOTH_BLE) ||
+ (mDevices[i]->getSndDeviceId() == PAL_DEVICE_IN_BLUETOOTH_BLE) ||
+ (mDevices[i]->getSndDeviceId() == PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET)) {
+ PAL_DBG(LOG_TAG, "start BT devices as to populate the full GKVs");
status = mDevices[i]->start();
if ((0 != status) && mDevices.size() == 1) {
PAL_ERR(LOG_TAG, "device start failed: %d", status);
diff --git a/stream/src/StreamSoundTrigger.cpp b/stream/src/StreamSoundTrigger.cpp
index afad0bb..2014c1d 100644
--- a/stream/src/StreamSoundTrigger.cpp
+++ b/stream/src/StreamSoundTrigger.cpp
@@ -1967,7 +1967,7 @@
}
TransitTo(ST_STATE_LOADED);
- if (st_stream_.isActive()) {
+ if (st_stream_.isStarted()) {
std::shared_ptr<StEventConfig> ev_cfg1(
new StStartRecognitionEventConfig(false));
status = st_stream_.ProcessInternalEvent(ev_cfg1);
@@ -2066,7 +2066,7 @@
}
case ST_EV_RESUME: {
st_stream_.paused_ = false;
- if (!st_stream_.isActive()) {
+ if (!st_stream_.isStarted()) {
// Possible if App has stopped recognition during active
// concurrency.
break;
@@ -2287,7 +2287,7 @@
st_stream_.device_opened_ = true;
}
- if (st_stream_.isActive() && !st_stream_.paused_) {
+ if (st_stream_.isStarted() && !st_stream_.paused_) {
status = dev->start();
if (0 != status) {
PAL_ERR(LOG_TAG, "device %d start failed with status %d",
@@ -2307,7 +2307,7 @@
st_stream_.mDevices.pop_back();
dev->close();
st_stream_.device_opened_ = false;
- } else if (st_stream_.isActive() && !st_stream_.paused_) {
+ } else if (st_stream_.isStarted() && !st_stream_.paused_) {
if (!rm->isDeviceActive_l(dev, &st_stream_))
st_stream_.rm->registerDevice(dev, &st_stream_);
if (st_stream_.second_stage_processing_) {
@@ -3489,6 +3489,20 @@
return status;
}
+bool StreamSoundTrigger::ConfigSupportLPI() {
+
+ bool lpi = true;
+ bool config_support_lpi = true;
+
+ if (sm_cfg_ && sm_cfg_->GetVUIFirstStageConfig(model_type_))
+ config_support_lpi =
+ sm_cfg_->GetVUIFirstStageConfig(model_type_)->IsLpiSupported();
+
+ if (!config_support_lpi || !vui_ptfm_info_->GetLpiEnable())
+ lpi = false;
+
+ return lpi;
+}
int32_t StreamSoundTrigger::ssrDownHandler() {
int32_t status = 0;
@@ -3514,6 +3528,12 @@
return status;
}
+bool StreamSoundTrigger::isStarted() {
+ return (currentState == STREAM_STARTED ||
+ GetCurrentStateId() == ST_STATE_BUFFERING ||
+ GetCurrentStateId() == ST_STATE_DETECTED);
+}
+
struct st_uuid StreamSoundTrigger::GetVendorUuid()
{
struct st_uuid uuid;
diff --git a/utils/inc/VoiceUIPlatformInfo.h b/utils/inc/VoiceUIPlatformInfo.h
index a035ed2..dc68035 100644
--- a/utils/inc/VoiceUIPlatformInfo.h
+++ b/utils/inc/VoiceUIPlatformInfo.h
@@ -100,6 +100,7 @@
st_module_type_t GetModuleType() const { return module_type_; }
std::string GetModuleName() const { return module_name_; }
+ bool IsLpiSupported() const { return lpi_supported_; }
uint32_t GetModuleTagId(st_param_id_type_t param_id) const {
return module_tag_ids_[param_id];
}
@@ -108,6 +109,7 @@
}
private:
+ bool lpi_supported_;
st_module_type_t module_type_;
std::string module_name_;
uint32_t module_tag_ids_[MAX_PARAM_IDS];
diff --git a/utils/src/VoiceUIPlatformInfo.cpp b/utils/src/VoiceUIPlatformInfo.cpp
index 7fac943..6c70312 100644
--- a/utils/src/VoiceUIPlatformInfo.cpp
+++ b/utils/src/VoiceUIPlatformInfo.cpp
@@ -113,7 +113,8 @@
VUIFirstStageConfig::VUIFirstStageConfig() :
module_type_(ST_MODULE_TYPE_GMM),
- module_name_("GMM")
+ module_name_("GMM"),
+ lpi_supported_(true)
{
for (int i = 0; i < MAX_PARAM_IDS; i++) {
module_tag_ids_[i] = 0;
@@ -145,6 +146,8 @@
}
PAL_DBG(LOG_TAG, "Module name:%s, type:%d",
module_name_.c_str(), module_type_);
+ } else if (!strcmp(attribs[i], "lpi_supported")) {
+ lpi_supported_ = !strcmp(attribs[++i], "true");
} else {
uint32_t index = 0;