st-hal: fix setting user verification mode

As part of  merging and deleting of multi-client sound models, setting
user verification mode of resultant model to DSP is lost. Fix the same.

Change-Id: I5e8d87bb069ef0394fa53d8def61e3dd2f65a7ba
diff --git a/st_hw_session_lsm.c b/st_hw_session_lsm.c
index 6252490..d2e673e 100644
--- a/st_hw_session_lsm.c
+++ b/st_hw_session_lsm.c
@@ -2525,8 +2525,8 @@
         ALOGE("%s: Unknown recognition mode %d", __func__, recognition_mode);
         goto error_exit_1;
     }
-    ALOGV("%s: st recogntion_mode %d, dsp det_mode %d", __func__,
-          recognition_mode, det_mode.mode);
+    ALOGD("%s: st_recogntion_mode %d, det_mode %d, lab %d", __func__,
+          recognition_mode, det_mode.mode, capture_requested);
 
     stage_idx = LSM_STAGE_INDEX_FIRST;
     param_count = 0;
diff --git a/st_session.c b/st_session.c
index f9ee651..f54c999 100644
--- a/st_session.c
+++ b/st_session.c
@@ -302,6 +302,13 @@
         status = -EINVAL;
         goto cleanup;
     }
+    if (stdev->enable_debug_dumps) {
+        ST_DBG_DECLARE(FILE *sm_fd = NULL; static int sm_cnt = 0);
+        ST_DBG_FILE_OPEN_WR(sm_fd, ST_DEBUG_DUMP_LOCATION,
+            "st_smlib_output_merged_sm", "bin", sm_cnt++);
+        ST_DBG_FILE_WRITE(sm_fd, out_model->data, out_model->size);
+        ST_DBG_FILE_CLOSE(sm_fd);
+    }
     ALOGV("%s: Exit", __func__);
     return 0;
 
@@ -375,6 +382,13 @@
         merge_model.data = out_model->data;
         merge_model.size = out_model->size;
     }
+    if (stdev->enable_debug_dumps && out_model->data && out_model->size) {
+        ST_DBG_DECLARE(FILE *sm_fd = NULL; static int sm_cnt = 0);
+        ST_DBG_FILE_OPEN_WR(sm_fd, ST_DEBUG_DUMP_LOCATION,
+            "st_smlib_output_deleted_sm", "bin", sm_cnt++);
+        ST_DBG_FILE_WRITE(sm_fd, out_model->data, out_model->size);
+        ST_DBG_FILE_CLOSE(sm_fd);
+    }
     return 0;
 
 cleanup:
@@ -815,6 +829,7 @@
             st_ses->sm_info.cf_levels;
         st_ses->hw_ses_current->sthw_cfg.num_conf_levels =
             st_ses->sm_info.cf_levels_size;
+        st_ses->recognition_mode = c_ses_rem->recognition_mode;
         /* Delete current client model */
         release_sound_model_info(&stc_ses->sm_info);
         stc_ses->sm_info.sm_data = NULL;
@@ -824,7 +839,7 @@
     list_for_each(node, &st_ses->clients_list) {
         c_ses = node_to_item(node, st_session_t, hw_list_node);
         if ((c_ses != stc_ses) && c_ses->sm_info.sm_data) {
-            if (c_ses->recognition_mode == RECOGNITION_MODE_USER_IDENTIFICATION)
+            if (c_ses->recognition_mode & RECOGNITION_MODE_USER_IDENTIFICATION)
                 rec_mode |=  RECOGNITION_MODE_USER_IDENTIFICATION;
         }
     }