audio: add linein to BT headset loopback support

- Add AUDIO_DEVICE_OUT_BLUETOOTH_A2DP as the sink
  device to support linein to BT headset loopback.
- set device_connect parameter in transcode loopback
  test app to load A2DP source IPC library.

Change-Id: Ib52fdf9aa966f50834ffa34884f5fa76053df15e
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index 7516717..c76319f 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -171,6 +171,7 @@
     if((sink_device_mask & AUDIO_DEVICE_OUT_SPEAKER) ||
        (sink_device_mask & AUDIO_DEVICE_OUT_WIRED_HEADSET) ||
        (sink_device_mask & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) ||
+       (sink_device_mask & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP) ||
        (sink_device_mask & AUDIO_DEVICE_OUT_LINE)) {
            return true;
        }
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index f918a86..413b75c 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2366,6 +2366,8 @@
              }
          } else if ((usecase->stream.out != NULL) &&
               !(usecase->stream.out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) &&
+              (usecase->type != TRANSCODE_LOOPBACK_TX) &&
+              (usecase->type != TRANSCODE_LOOPBACK_RX) &&
               usecase->stream.out->started) {
               if (is_bt_soc_on(adev) == false) {
                   ALOGD("BT SCO/A2dp disconnected while in connection");
diff --git a/qahw_api/test/trans_loopback_test.c b/qahw_api/test/trans_loopback_test.c
index 6f5cb75..e7194f0 100644
--- a/qahw_api/test/trans_loopback_test.c
+++ b/qahw_api/test/trans_loopback_test.c
@@ -579,6 +579,7 @@
     log_file = stdout;
     transcode_loopback_config_t    *transcode_loopback_config = NULL;
     transcode_loopback_config_t *temp = NULL;
+    char param[100] = {0};
 
     struct option long_options[] = {
         /* These options set a flag. */
@@ -654,6 +655,12 @@
         exit_process_thread = true;
         goto exit_transcode_loopback_test;
     }
+
+    if (sink_device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP) {
+        snprintf(param, sizeof(param), "%s=%d", "connect", sink_device);
+        qahw_set_parameters(primary_hal_handle, param);
+    }
+
     transcode_loopback_config->hal_handle = primary_hal_handle;
     fprintf(log_file,"\nLoading HAL for loopback usecase done\n");