sthal: update list during incall mode in recovery progress.

note: With STHAL not ready state, the event from AHAL doesn't update
      the recovery list during incall mode starting.
      Refine and check microphone flag when recovery for barge-in
      case.
Bug: 141724113
Test: Manually test the specified scenario.

Change-Id: I7debf7878c838003536fcb72c966492401b30b3f
diff --git a/sound_trigger_hw_iaxxx.c b/sound_trigger_hw_iaxxx.c
index 6b15f4b..e7a3556 100644
--- a/sound_trigger_hw_iaxxx.c
+++ b/sound_trigger_hw_iaxxx.c
@@ -1601,12 +1601,6 @@
          * Need to reset the enabled flag
          */
         stdev->is_bargein_route_enabled = false;
-    } else if (stdev->rx_active_count > 0 &&
-               stdev->is_bargein_route_enabled == false) {
-        /* rx stream is enabled during codec recovery.
-         * Need to raise the enabled flag
-         */
-        stdev->is_bargein_route_enabled = true;
     }
 
     if (stdev->is_buffer_package_loaded == true) {
@@ -1631,6 +1625,13 @@
         ALOGD("%s: ST mode is in_call, reset all routes", __func__);
 
         stdev->is_mic_route_enabled = false;
+        stdev->is_bargein_route_enabled = false;
+        for (i = 0; i < MAX_MODELS; i++) {
+            if (stdev->models[i].is_active == true) {
+                update_recover_list(stdev, i, true);
+                stdev->models[i].is_active = false;
+            }
+        }
 
         // if chre enabled before crash during call, need to setup package for SLPI.
         if (stdev->is_chre_loaded == true) {
@@ -1648,8 +1649,6 @@
      * Reset mic and src package if sound trigger recording is active
      * The src-mic, src-amp must be enable before AEC enable, because
      * the endpoint sequence control.
-     *
-     * The stream 0 should be enable at last moment for the data alignment.
      */
     if (stdev->is_mic_route_enabled == true) {
         // recover src package if sound trigger recording is active
@@ -1661,38 +1660,39 @@
         if (err != 0) {
             ALOGE("Failed to restart SRC-mic route");
         }
-    }
+        /*
+         * RX stream was enabled during codec recovery.
+         * Need to setup the barge-in package and routing.
+         */
+        if (stdev->rx_active_count > 0) {
+            stdev->is_bargein_route_enabled = true;
+            ct = EXTERNAL_OSCILLATOR;
+            if (is_mic_controlled_by_ahal(stdev) == true) {
+                strmt = STRM_48K;
+            }
+            err = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF);
+            if (err != 0) {
+                ALOGE("failed to load SRC package");
+            }
+            err = enable_src_route(stdev->route_hdl, true, SRC_AMP_REF);
+            if (err != 0) {
+                ALOGE("Failed to restart SRC-amp route");
+            }
 
-    if (stdev->rx_active_count > 0 &&
-        stdev->is_bargein_route_enabled == true) {
-        ct = EXTERNAL_OSCILLATOR;
-        if (is_mic_controlled_by_ahal(stdev) == true) {
-            strmt = STRM_48K;
+            err = setup_aec_package(stdev->odsp_hdl);
+            if (err != 0) {
+                ALOGE("Failed to restart AEC package");
+            }
+            err = enable_bargein_route(stdev->route_hdl, true);
+            if (err != 0) {
+                ALOGE("Failed to restart bargein route");
+            }
+            err = enable_amp_ref_route(stdev->route_hdl, true, strmt);
+            if (err != 0) {
+                ALOGE("Failed to restart amp-ref route");
+            }
         }
-        err = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF);
-        if (err != 0) {
-            ALOGE("failed to load SRC package");
-        }
-        err = enable_src_route(stdev->route_hdl, true, SRC_AMP_REF);
-        if (err != 0) {
-            ALOGE("Failed to restart SRC-amp route");
-        }
-
-        err = setup_aec_package(stdev->odsp_hdl);
-        if (err != 0) {
-            ALOGE("Failed to restart AEC package");
-        }
-        err = enable_bargein_route(stdev->route_hdl, true);
-        if (err != 0) {
-            ALOGE("Failed to restart bargein route");
-        }
-        err = enable_amp_ref_route(stdev->route_hdl, true, strmt);
-        if (err != 0) {
-            ALOGE("Failed to restart amp-ref route");
-        }
-    }
-
-    if (stdev->is_mic_route_enabled == true) {
+        // The stream 0 should be enable at last moment for the data alignment.
         if (is_mic_controlled_by_ahal(stdev) == false) {
             err = enable_mic_route(stdev->route_hdl, true, ct);
             if (err != 0) {