Merge "st-hal: Update custom config data for merged sound model usecases"
diff --git a/sound_trigger_hw.c b/sound_trigger_hw.c
index 2506887..030be52 100644
--- a/sound_trigger_hw.c
+++ b/sound_trigger_hw.c
@@ -876,6 +876,7 @@
st_session_pause(p_ses);
}
}
+ platform_stdev_reset_backend_cfg(stdev->platform);
list_for_each(p_ses_node, &stdev->sound_model_list) {
p_ses = node_to_item(p_ses_node, st_session_t, list_node);
if (p_ses && p_ses->exec_mode == ST_EXEC_MODE_ADSP) {
@@ -1125,6 +1126,7 @@
st_session_pause(p_ses);
}
}
+ platform_stdev_reset_backend_cfg(stdev->platform);
list_for_each(p_ses_node, &stdev->sound_model_list) {
p_ses = node_to_item(p_ses_node, st_session_t, list_node);
if (p_ses && p_ses->exec_mode == ST_EXEC_MODE_ADSP) {
@@ -1998,6 +2000,7 @@
}
st_session->sm_type = sound_model->type;
+ stdev->lpi_enable = st_hw_check_lpi_support(stdev, NULL);
st_hw_check_and_set_lpi_mode(st_session);
/* CPE DRAM can only be accessed by single client, i.e. Apps or CPE,
@@ -2118,7 +2121,7 @@
}
struct st_vendor_info *stopped_v_info = stopped_ses->vendor_uuid_info;
- ALOGD("%s:[%d] v_info %p", __func__, stopped_ses->sm_handle, stopped_v_info);
+ ALOGV("%s:[%d] v_info %p", __func__, stopped_ses->sm_handle, stopped_v_info);
stopped_ses_channel_count =
platform_stdev_get_backend_channel_count(stdev->platform,
@@ -2144,7 +2147,7 @@
(st_session_is_active(ses) == false) &&
(st_session_is_buffering(ses) == false);
if (is_stopped) {
- ALOGV("%s:[%d]ses is stopped, ignore", __func__, ses->sm_handle);
+ ALOGV("%s:[%d] is stopped, ignore", __func__, ses->sm_handle);
continue;
}
diff --git a/sound_trigger_platform.c b/sound_trigger_platform.c
index c048569..c5b7189 100644
--- a/sound_trigger_platform.c
+++ b/sound_trigger_platform.c
@@ -101,6 +101,7 @@
#define ST_PARAM_KEY_CHANNEL_COUNT "channel_count"
#define ST_PARAM_KEY_IN_CHANNELS "in_channels"
#define ST_PARAM_KEY_IN_CHANNELS_LPI "in_channels_lpi"
+#define ST_PARAM_KEY_LPI_MODE "lpi_mode"
#define ST_PARAM_KEY_OUT_CHANNELS "out_channels"
#define ST_PARAM_KEY_ADM_CFG_PROFILE "adm_cfg_profile"
#define ST_PARAM_KEY_CAPTURE_DEVICE "capture_device"
@@ -2216,6 +2217,19 @@
goto err_exit;
}
}
+
+ lsm_params->lpi_enable = ST_PLATFORM_LPI_NONE;
+ err = str_parms_get_str(parms, ST_PARAM_KEY_LPI_MODE,
+ str_value, sizeof(str_value));
+ if (err >= 0) {
+ str_parms_del(parms, ST_PARAM_KEY_LPI_MODE);
+ if (!strncasecmp(str_value, "NON_LPI", sizeof("NON_LPI")))
+ lsm_params->lpi_enable = ST_PLATFORM_LPI_DISABLE;
+ else if (!strncasecmp(str_value, "LPI", sizeof("LPI")))
+ lsm_params->lpi_enable = ST_PLATFORM_LPI_ENABLE;
+ else
+ ALOGE("%s: invalid lpi_mode set: %s", __func__, str_value);
+ }
}
list_add_tail(&sm_info->lsm_usecase_list, &lsm_params->list_node);
@@ -3972,27 +3986,27 @@
channel_count = my_data->codec_backend_cfg.channel_count;
}
if (channel_count == SOUND_TRIGGER_CHANNEL_MODE_OCT) {
- if (my_data->codec_backend_cfg.lpi_enable)
+ if (my_data->stdev->lpi_enable)
st_device = ST_DEVICE_HANDSET_8MIC_LPI;
else
st_device = ST_DEVICE_HANDSET_8MIC;
} else if (channel_count == SOUND_TRIGGER_CHANNEL_MODE_HEX) {
- if (my_data->codec_backend_cfg.lpi_enable)
+ if (my_data->stdev->lpi_enable)
st_device = ST_DEVICE_HANDSET_6MIC_LPI;
else
st_device = ST_DEVICE_HANDSET_6MIC;
} else if (channel_count == SOUND_TRIGGER_CHANNEL_MODE_QUAD) {
- if (my_data->codec_backend_cfg.lpi_enable)
+ if (my_data->stdev->lpi_enable)
st_device = ST_DEVICE_HANDSET_QMIC_LPI;
else
st_device = ST_DEVICE_HANDSET_QMIC;
} else if (channel_count == SOUND_TRIGGER_CHANNEL_MODE_TRI) {
- if (my_data->codec_backend_cfg.lpi_enable)
+ if (my_data->stdev->lpi_enable)
st_device = ST_DEVICE_HANDSET_TMIC_LPI;
else
st_device = ST_DEVICE_HANDSET_TMIC;
} else if (channel_count == SOUND_TRIGGER_CHANNEL_MODE_STEREO) {
- if (my_data->codec_backend_cfg.lpi_enable)
+ if (my_data->stdev->lpi_enable)
st_device = ST_DEVICE_HANDSET_DMIC_LPI;
else
st_device = ST_DEVICE_HANDSET_DMIC;
@@ -4973,7 +4987,8 @@
void* platform,
struct st_vendor_info* v_info,
struct st_lsm_params** lsm_usecase,
- st_exec_mode_t exec_mode
+ st_exec_mode_t exec_mode,
+ bool lpi_enable
)
{
struct st_lsm_params *usecase = NULL;
@@ -4999,7 +5014,12 @@
usecase = node_to_item(lsm_node, struct st_lsm_params, list_node);
if (usecase->exec_mode == exec_mode) {
if (my_data->xml_version >= PLATFORM_XML_VERSION_0x0105) {
- if (capture_device == usecase->capture_device) {
+ if (capture_device == usecase->capture_device &&
+ (usecase->lpi_enable == ST_PLATFORM_LPI_NONE ||
+ (lpi_enable && usecase->lpi_enable ==
+ ST_PLATFORM_LPI_ENABLE) ||
+ (!lpi_enable && usecase->lpi_enable ==
+ ST_PLATFORM_LPI_DISABLE))) {
*lsm_usecase = usecase;
v_info->in_channels = usecase->in_channels;
v_info->fluence_type = usecase->fluence_type;
diff --git a/sound_trigger_platform.h b/sound_trigger_platform.h
index c6543d3..cd415ac 100644
--- a/sound_trigger_platform.h
+++ b/sound_trigger_platform.h
@@ -276,6 +276,12 @@
ST_SHARED_BUF_RAW,
} st_shared_buf_fmt_t;
+typedef enum {
+ ST_PLATFORM_LPI_NONE,
+ ST_PLATFORM_LPI_ENABLE,
+ ST_PLATFORM_LPI_DISABLE
+} st_platform_lpi_enable_t;
+
struct st_lsm_params {
struct listnode list_node;
st_exec_mode_t exec_mode;
@@ -287,6 +293,7 @@
st_profile_type_t adm_cfg_profile;
audio_devices_t capture_device;
st_fluence_type_t fluence_type;
+ st_platform_lpi_enable_t lpi_enable;
};
struct st_gcs_params {
@@ -308,12 +315,6 @@
ST_SS_USECASE_TYPE_LSM
} st_ss_usecase_type_t;
-typedef enum {
- ST_PLATFORM_LPI_NONE,
- ST_PLATFORM_LPI_ENABLE,
- ST_PLATFORM_LPI_DISABLE
-} st_platform_lpi_enable_t;
-
struct st_ss_usecase {
union {
struct st_arm_ss_params *arm;
@@ -689,7 +690,8 @@
void* platform,
struct st_vendor_info* v_info,
struct st_lsm_params** lsm_usecase,
- st_exec_mode_t exec_mode
+ st_exec_mode_t exec_mode,
+ bool lpi_enable
);
int platform_stdev_get_xml_version(void* platform);
diff --git a/st_hw_common.c b/st_hw_common.c
index 4bacc65..14230c4 100644
--- a/st_hw_common.c
+++ b/st_hw_common.c
@@ -294,9 +294,7 @@
(st_ses->vendor_uuid_info->lpi_enable &&
is_projected_lpi_budget_available(st_ses->stdev, stc_ses));
} else {
- st_ses->hw_ses_adsp->lpi_enable =
- (st_ses->stdev->platform_lpi_enable ==
- ST_PLATFORM_LPI_ENABLE) ? true: false;
+ st_ses->hw_ses_adsp->lpi_enable = st_ses->stdev->lpi_enable;
}
}
pthread_mutex_unlock(&st_ses->lock);
diff --git a/st_hw_session_lsm.c b/st_hw_session_lsm.c
index 6a01641..a49adb5 100644
--- a/st_hw_session_lsm.c
+++ b/st_hw_session_lsm.c
@@ -2064,7 +2064,7 @@
return -ENODEV;
platform_get_lsm_usecase(p_ses->stdev->platform, v_info,
- &p_lsm_ses->lsm_usecase, p_ses->exec_mode);
+ &p_lsm_ses->lsm_usecase, p_ses->exec_mode, p_ses->lpi_enable);
if (!p_lsm_ses->lsm_usecase) {
ALOGE("%s: couldn't get lsm usecase", __func__);
goto sm_error;
@@ -2986,7 +2986,7 @@
return -ENODEV;
platform_get_lsm_usecase(p_ses->stdev->platform, v_info,
- &p_lsm_ses->lsm_usecase, p_ses->exec_mode);
+ &p_lsm_ses->lsm_usecase, p_ses->exec_mode, p_ses->lpi_enable);
if (!p_lsm_ses->lsm_usecase) {
ALOGE("%s: couldn't get lsm usecase", __func__);
goto sm_error;
@@ -3819,7 +3819,7 @@
capture_device = platform_stdev_get_capture_device(p_ses->stdev->platform);
platform_get_lsm_usecase(p_ses->stdev->platform, v_info,
- &p_lsm_ses->lsm_usecase, p_ses->exec_mode);
+ &p_lsm_ses->lsm_usecase, p_ses->exec_mode, p_ses->lpi_enable);
if (!p_lsm_ses->lsm_usecase) {
ALOGE("%s: failed to allocate lsm usecase for the session", __func__);
return -ENODEV;
diff --git a/st_session.c b/st_session.c
index dc3cf6b..46924c7 100644
--- a/st_session.c
+++ b/st_session.c
@@ -261,7 +261,6 @@
ALOGV("%s: string array[%d] %p", __func__, i, (*arr)[i]);
}
-
static int merge_sound_models(struct sound_trigger_device *stdev,
unsigned int num_models, listen_model_type *in_models[],
listen_model_type *out_model)
@@ -6250,7 +6249,7 @@
stc_ses->state = ST_STATE_IDLE;
if (st_ses) { /* Could get freed if other client exists */
- st_ses ->vendor_uuid_info = v_info;
+ st_ses->vendor_uuid_info = v_info;
st_ses->exec_mode = exec_mode;
st_ses->sm_handle = sm_handle;
st_ses->lab_fp = NULL;