diff --git a/bthost_ipc/bthost_ipc.c b/bthost_ipc/bthost_ipc.c
index ee28ba2..7691ecf 100644
--- a/bthost_ipc/bthost_ipc.c
+++ b/bthost_ipc/bthost_ipc.c
@@ -108,6 +108,7 @@
 
 audio_sbc_encoder_config_t sbc_codec;
 audio_aptx_encoder_config_t aptx_codec;
+audio_aptx_adaptive_encoder_config_t aptx_adaptive_codec;
 audio_aptx_tws_encoder_config_t aptx_tws_codec;
 audio_aac_encoder_config_t aac_codec;
 audio_ldac_encoder_config_t ldac_codec;
@@ -412,6 +413,98 @@
             *codec_type = AUDIO_FORMAT_APTX_HD;
         }
 
+        if (codec_cfg[VENDOR_ID_OFFSET] == VENDOR_APTX_ADAPTIVE &&
+            codec_cfg[CODEC_ID_OFFSET] == APTX_ADAPTIVE_CODEC_ID)
+        {
+            ALOGW("AptX-Adaptive codec");
+            *codec_type = ENC_CODEC_TYPE_APTX_ADAPTIVE;
+
+            memset(&aptx_adaptive_codec, 0, sizeof(audio_aptx_adaptive_encoder_config_t));
+            p_cfg++; //skip dev_idx
+            len = *p_cfg++;//LOSC
+            p_cfg++; // Skip media type
+            len--;
+            p_cfg++; //codec_type
+            len--;
+            p_cfg+=4;//skip vendor id
+            len -= 4;
+            p_cfg += 2; //skip codec id
+            len -= 2;
+
+            switch(*p_cfg++ & A2D_APTX_ADAPTIVE_SAMP_FREQ_MASK)
+            {
+                case A2DP_APTX_ADAPTIVE_SAMPLERATE_44100:
+                     aptx_adaptive_codec.sampling_rate = 0x2;
+                     if(sample_freq) *sample_freq = 44100;
+                     break;
+                case A2DP_APTX_ADAPTIVE_SAMPLERATE_48000:
+                     aptx_adaptive_codec.sampling_rate = 0x1;
+                     if(sample_freq) *sample_freq = 48000;
+                     break;
+                case A2DP_APTX_ADAPTIVE_SAMPLERATE_88000:
+                     aptx_adaptive_codec.sampling_rate = 0;
+                     break;
+                case A2DP_APTX_ADAPTIVE_SAMPLERATE_192000:
+                     aptx_adaptive_codec.sampling_rate = 0;
+                     break;
+                default:
+                     ALOGE("Unknown sampling rate");
+            }
+            len--;
+
+            switch(*p_cfg++ & A2D_APTX_ADAPTIVE_CHAN_MASK)
+            {
+                case A2DP_APTX_ADAPTIVE_CHANNELS_MONO:
+                     aptx_adaptive_codec.channel_mode = 1;
+                     break;
+                /*case A2DP_APTX_ADAPTIVE_CHANNELS_STEREO:
+                     aptx_adaptive_codec.channel_mode = 2;
+                     break;*/
+                case A2DP_APTX_ADAPTIVE_CHANNELS_JOINT_STEREO:
+                     aptx_adaptive_codec.channel_mode = 0;
+                     break;
+                case A2DP_APTX_ADAPTIVE_CHANNELS_TWS_STEREO:
+                     aptx_adaptive_codec.channel_mode = 4;
+                     break;
+                default:
+                     ALOGE("Unknown sampling rate");
+            }
+            len--;
+
+            aptx_adaptive_codec.min_sink_buffering_LL = 20; // gghai temp setting to default value
+            aptx_adaptive_codec.max_sink_buffering_LL = 50;
+            aptx_adaptive_codec.min_sink_buffering_HQ = 20;
+            aptx_adaptive_codec.max_sink_buffering_HQ = 50;
+            aptx_adaptive_codec.min_sink_buffering_TWS = 20;
+            aptx_adaptive_codec.max_sink_buffering_TWS = 50;
+
+            aptx_adaptive_codec.TTP_LL_low = *(p_cfg ++);
+            aptx_adaptive_codec.TTP_LL_high = *(p_cfg ++);
+            aptx_adaptive_codec.TTP_HQ_low = *(p_cfg ++);
+            aptx_adaptive_codec.TTP_HQ_high = *(p_cfg ++);
+            aptx_adaptive_codec.TTP_TWS_low = *(p_cfg ++);
+            aptx_adaptive_codec.TTP_TWS_high = *(p_cfg ++);
+            len -= 6;
+
+            p_cfg += 3; // ignoring eoc bits
+            len -= 3;
+            ALOGW("%s: ## aptXAdaptive ## sampleRate 0x%x", __func__, aptx_adaptive_codec.sampling_rate);
+            ALOGW("%s: ## aptXAdaptive ## channelMode 0x%x", __func__, aptx_adaptive_codec.channel_mode);
+            ALOGW("%s: ## aptXAdaptive ## ttp_ll_0 0x%x", __func__, aptx_adaptive_codec.TTP_LL_low);
+            ALOGW("%s: ## aptXAdaptive ## ttp_ll_1 0x%x", __func__, aptx_adaptive_codec.TTP_LL_high);
+            ALOGW("%s: ## aptXAdaptive ## ttp_hq_0 0x%x", __func__, aptx_adaptive_codec.TTP_HQ_low);
+            ALOGW("%s: ## aptXAdaptive ## ttp_hq_1 0x%x", __func__, aptx_adaptive_codec.TTP_HQ_high);
+            ALOGW("%s: ## aptXAdaptive ## ttp_tws_0 0x%x", __func__, aptx_adaptive_codec.TTP_TWS_low);
+            ALOGW("%s: ## aptXAdaptive ## ttp_tws_1 0x%x", __func__, aptx_adaptive_codec.TTP_TWS_high);
+
+            if(len == 0)
+                ALOGW("%s: codec config copied", __func__);
+            else
+                ALOGW("%s: codec config length error: %d", __func__, len);
+
+            return ((void *)&aptx_adaptive_codec);
+        }
+
         if (vendor_ldac_id == VENDOR_LDAC &&
             codec_cfg[CODEC_ID_OFFSET] == LDAC_CODEC_ID)
         {
@@ -1412,6 +1505,7 @@
         ALOGE("Error in fetching persist.vendor.bluetooth.soc.scram_freqs property");
         return false;
     }
+	ALOGE("scram_freqs Prop value = %s", value);
 
     pthread_mutex_lock(&audio_stream.lock);
     for (i = 0; i < STREAM_START_MAX_RETRY_COUNT; i++)
@@ -1433,6 +1527,12 @@
         pthread_mutex_unlock(&audio_stream.lock);
         return false;
     }
+    if (codec_type == ENC_CODEC_TYPE_APTX_ADAPTIVE) {
+        ALOGW("%s:aptX Adaptive codec, return false",__func__);
+        pthread_mutex_unlock(&audio_stream.lock);
+        return false;
+    }
+
     if(status == A2DP_CTRL_ACK_SUCCESS) {
 
         if (codec_type == CODEC_TYPE_CELT) {
diff --git a/bthost_ipc/bthost_ipc.h b/bthost_ipc/bthost_ipc.h
index a962c0d..5d81bbf 100644
--- a/bthost_ipc/bthost_ipc.h
+++ b/bthost_ipc/bthost_ipc.h
@@ -124,6 +124,7 @@
 */
 #define AUDIO_CODEC_TYPE_CELT         603979776u // 0x24000000UL
 #define ENC_CODEC_TYPE_APTX_DUAL_MONO 570425344u // 0x22000000UL
+#define ENC_CODEC_TYPE_APTX_ADAPTIVE 620756992u // 0x25000000UL
 #define CODEC_TYPE_SBC 0x00
 #define CODEC_TYPE_AAC 0x02
 #define CODEC_TYPE_CELT 0xEF
@@ -139,6 +140,9 @@
 #ifndef VENDOR_APTX_HD
 #define VENDOR_APTX_HD 0xD7
 #endif
+#ifndef VENDOR_APTX_ADAPTIVE
+#define VENDOR_APTX_ADAPTIVE 0xD7
+#endif
 #ifndef VENDOR_APTX_LL
 #define VENDOR_APTX_LL 0x0A
 #endif
@@ -148,6 +152,9 @@
 #ifndef APTX_HD_CODEC_ID
 #define APTX_HD_CODEC_ID 0x24
 #endif
+#ifndef APTX_ADAPTIVE_CODEC_ID
+#define APTX_ADAPTIVE_CODEC_ID 0xAD
+#endif
 #ifndef APTX_TWS_CODEC_ID
 #define APTX_TWS_CODEC_ID 0x25
 #endif
@@ -192,6 +199,19 @@
 #define A2D_APTX_CHAN_MONO       0x01
 #define A2D_APTX_TWS_CHAN_MODE   0x08
 
+/* APTX Adaptive bitmask helper */
+#define A2D_APTX_ADAPTIVE_SAMP_FREQ_MASK           (0xF8)
+#define A2D_APTX_ADAPTIVE_CHAN_MASK                (0x0F)
+#define A2DP_APTX_ADAPTIVE_SAMPLERATE_44100        (0x08)
+#define A2DP_APTX_ADAPTIVE_SAMPLERATE_48000        (0x10)
+#define A2DP_APTX_ADAPTIVE_SAMPLERATE_88000        (0x20)
+#define A2DP_APTX_ADAPTIVE_SAMPLERATE_192000       (0x40)
+#define A2DP_APTX_ADAPTIVE_CHANNELS_MONO          (0x01)
+#define A2DP_APTX_ADAPTIVE_CHANNELS_STEREO        (0x02)
+#define A2DP_APTX_ADAPTIVE_CHANNELS_TWS_STEREO    (0x04)
+#define A2DP_APTX_ADAPTIVE_CHANNELS_JOINT_STEREO  (0x08)
+#define A2DP_APTX_ADAPTIVE_CHANNELS_TWS_MONO      (0x10)
+
 
 /* LDAC bitmask helper */
 #define A2D_LDAC_SAMP_FREQ_MASK  0x3F
@@ -271,6 +291,29 @@
     uint32_t bitrate;
 } audio_aptx_encoder_config_t;
 
+/* Information about BT APTX Adaptive encoder
+ * configuration. This data is used between audio HAL
+ * module and BT IPC library to configure DSP encoder
+ */
+
+typedef struct {
+    uint8_t sampling_rate;
+    uint8_t  channel_mode;
+    uint16_t mtu;
+    uint8_t min_sink_buffering_LL;
+    uint8_t max_sink_buffering_LL;
+    uint8_t min_sink_buffering_HQ;
+    uint8_t max_sink_buffering_HQ;
+    uint8_t min_sink_buffering_TWS;
+    uint8_t max_sink_buffering_TWS;
+    uint8_t TTP_LL_low;
+    uint8_t TTP_LL_high;
+    uint8_t TTP_HQ_low;
+    uint8_t TTP_HQ_high;
+    uint8_t TTP_TWS_low;
+    uint8_t TTP_TWS_high;
+} audio_aptx_adaptive_encoder_config_t;
+
 struct bit_rate_level_map_t {
     uint32_t link_quality_level;
     uint32_t bitrate;
diff --git a/tools/btconfig/btconfig.c b/tools/btconfig/btconfig.c
index 2963040..13728d6 100644
--- a/tools/btconfig/btconfig.c
+++ b/tools/btconfig/btconfig.c
@@ -6795,7 +6795,7 @@
 {
     int iRet;
     UCHAR resultBuf[MAX_EVENT_SIZE];
-    if (!strcasecmp(soc_type, "smd")){
+    if (!strcasecmp(soc_type, "pronto")){
             UCHAR buf[5] = {(unsigned char)0x10, (unsigned char)0x02,( unsigned char)0x0,(unsigned char) 0x0,( unsigned char)0x01 };
             iRet = hci_send_cmd( fd, HCI_VENDOR_CMD_OGF, 0x17, 5, buf);
         }
@@ -6833,8 +6833,7 @@
     }
 
 #ifdef ANDROID
-    property_get("ro.vendor.qti.bt.hci_transport", prop, NULL);
-    property_get("vendor.qti.bluetooth.soc", soc_type, NULL);
+    property_get("vendor.qcom.bluetooth.soc", soc_type, "pronto");
 #endif
 
     if((!strcasecmp(soc_type, "rome")) || (!strcasecmp(soc_type, "cherokee")))
@@ -6851,7 +6850,7 @@
         exit(0);
     }
 
-    if (!strcasecmp(prop, "smd")) {
+    if (!strcasecmp(soc_type, "pronto")) {
         printf("SOC is WCN\n");
 
         fd = wcn_init_smd(argv[optind]);
