Snap for 4807121 from 5d0261eae8f299f0fe09608a679e84e3d7b7341e to pi-release

Change-Id: Ia6b3c9f26e6bcf73caf334a8243ce655c3c66581
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index bb44172..d1671a8 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -92,6 +92,7 @@
 #define ENCODER_LATENCY_APTX_HD    20
 #define ENCODER_LATENCY_LDAC       40
 #define ENCODER_LATENCY_SBC        10
+#define ENCODER_LATENCY_PCM        50
 
 // Default A2DP sink latency offset
 #define DEFAULT_SINK_LATENCY_AAC       180
@@ -99,6 +100,7 @@
 #define DEFAULT_SINK_LATENCY_APTX_HD   180
 #define DEFAULT_SINK_LATENCY_LDAC      180
 #define DEFAULT_SINK_LATENCY_SBC       140
+#define DEFAULT_SINK_LATENCY_PCM       140
 
 // Slimbus Tx sample rate for ABR feedback channel
 #define ABR_TX_SAMPLE_RATE             "KHZ_8"
@@ -125,6 +127,7 @@
     ENC_CODEC_TYPE_APTX = AUDIO_FORMAT_APTX, // 0x20000000UL
     ENC_CODEC_TYPE_APTX_HD = AUDIO_FORMAT_APTX_HD, // 0x21000000UL
     ENC_CODEC_TYPE_LDAC = AUDIO_FORMAT_LDAC, // 0x23000000UL
+    ENC_CODEC_TYPE_PCM = AUDIO_FORMAT_PCM_16_BIT, // 0x1u
 } enc_codec_t;
 
 typedef int (*audio_stream_open_t)(void);
@@ -770,7 +773,10 @@
         (sampling_rate_rx == 48000 || sampling_rate_rx == 44100 )) {
         sampling_rate_rx *= 2;
     }
-
+    // No need to configure backend for PCM format.
+    if (a2dp.bt_encoder_format == ENC_CODEC_TYPE_PCM) {
+        return 0;
+    }
     // Set Rx backend sample rate
     switch (sampling_rate_rx) {
     case 44100:
@@ -1340,6 +1346,11 @@
                 (configure_ldac_enc_format((audio_ldac_encoder_config *)codec_info) &&
                  configure_a2dp_decoder_format(ENC_CODEC_TYPE_LDAC));
             break;
+        case ENC_CODEC_TYPE_PCM:
+            ALOGD("Received PCM format for BT device");
+            a2dp.bt_encoder_format = ENC_CODEC_TYPE_PCM;
+            is_configured = true;
+            break;
         default:
             ALOGD("%s: Received unsupported encoder format", __func__);
             is_configured = false;
@@ -1698,6 +1709,10 @@
             latency = (avsync_runtime_prop > 0) ? ldac_offset : ENCODER_LATENCY_LDAC;
             latency += DEFAULT_SINK_LATENCY_LDAC;
             break;
+        case ENC_CODEC_TYPE_PCM:
+            latency = ENCODER_LATENCY_PCM;
+            latency += DEFAULT_SINK_LATENCY_PCM;
+            break;
         default:
             latency = DEFAULT_ENCODER_LATENCY;
             break;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index b104319..977ba10 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -249,7 +249,7 @@
     .period_count = AFE_PROXY_RECORD_PERIOD_COUNT,
     .format = PCM_FORMAT_S16_LE,
     .start_threshold = AFE_PROXY_RECORD_PERIOD_SIZE,
-    .stop_threshold = INT_MAX,
+    .stop_threshold = AFE_PROXY_RECORD_PERIOD_SIZE * AFE_PROXY_RECORD_PERIOD_COUNT,
     .avail_min = AFE_PROXY_RECORD_PERIOD_SIZE,
 };