Merge branch 'dev/p/fp2/fp_apps_bringup' into int/p/fp2

* dev/p/fp2/fp_apps_bringup:
  Enable microphone selection

Issue: FP2P-104
Change-Id: I5d900ba6fd2d86f22e30941017be2cfaed47c2ea
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 8fb77e1..b5773f2 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -951,7 +951,25 @@
                 } else if(usecase->id == USECASE_AUDIO_RECORD_AFE_PROXY) {
                     out_device = AUDIO_DEVICE_OUT_TELEPHONY_TX;
                 }
-                in_snd_device = platform_get_input_snd_device(adev->platform, out_device);
+
+                /*
+                 * Select a specific device microphone if we are in test mode.
+                 */
+                switch (mFpTestMicSource) {
+                    case FP_TEST_PRIMARY_MIC:
+                        ALOGD("FP test selected primary mic.");
+                        in_snd_device = SND_DEVICE_IN_HANDSET_MIC;
+                        break;
+                    case FP_TEST_SECONDARY_MIC:
+                        ALOGD("FP test selected secondary mic.");
+                        in_snd_device = SND_DEVICE_IN_SPEAKER_MIC;
+                        break;
+                    case FP_TEST_DEFAULT_MIC:
+                    default:
+                        ALOGV("FP test disabled");
+                        in_snd_device = platform_get_input_snd_device(adev->platform, out_device);
+                        break;
+                }
             }
         }
     }
@@ -3268,6 +3286,21 @@
         }
     }
 
+    /* Microphone selection in test mode */
+    ret = str_parms_get_str(parms, FP_TEST_KEY, value, sizeof(value));
+    if (ret >= 0) {
+        if (strncmp(FP_TEST_KEY_PRIMARY, value, sizeof(value)) == 0) {
+            ALOGD("FP test requests primary mic.");
+            mFpTestMicSource = FP_TEST_PRIMARY_MIC;
+        } else if (strncmp(FP_TEST_KEY_SECONDARY, value, sizeof(value)) == 0) {
+            ALOGD("FP test requests secondary mic.");
+            mFpTestMicSource = FP_TEST_SECONDARY_MIC;
+        } else {
+            ALOGD("FP test requests to be disabled");
+            mFpTestMicSource = FP_TEST_DEFAULT_MIC;
+        }
+    }
+
     audio_extn_set_parameters(adev, parms);
 
 done:
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index af57cab..3074e4e 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -55,6 +55,16 @@
 #define SND_CARD_STATE_OFFLINE 0
 #define SND_CARD_STATE_ONLINE 1
 
+/* Expose microphone selection for testing purposes */
+#define FP_TEST_KEY             "fp_test"
+#define FP_TEST_KEY_PRIMARY     "primary_mic"
+#define FP_TEST_KEY_SECONDARY   "secondary_mic"
+#define FP_TEST_DEFAULT_MIC     0X00000000
+#define FP_TEST_PRIMARY_MIC     0X00000100
+#define FP_TEST_SECONDARY_MIC   0X00000200
+
+static uint32_t mFpTestMicSource = FP_TEST_DEFAULT_MIC;
+
 typedef int snd_device_t;
 
 /* These are the supported use cases by the hardware.