NFC_NCIHALx_AR3C.4.5.0_M_OpnSrc
diff --git a/Android.mk b/Android.mk
index 880297a..c9a295a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,10 +1,3 @@
-# function to find all *.cpp files under a directory
-define all-cpp-files-under
-$(patsubst ./%,%, \
-  $(shell cd $(LOCAL_PATH) ; \
-          find $(1) -name "*.cpp" -and -not -name ".*") \
- )
-endef
 
 
 LOCAL_PATH:= $(call my-dir)
@@ -14,15 +7,22 @@
 HAL := src/hal
 UDRV := src/udrv
 
-D_CFLAGS := -DANDROID -DBUILDCFG=1
+D_CFLAGS := -DANDROID -DBUILDCFG=1 \
+    -Wno-deprecated-register \
+    -Wno-unused-parameter \
 
 #Enable NXP Specific
 D_CFLAGS += -DNXP_EXTNS=TRUE
-
+D_CFLAGS += -DNFC_NXP_STAT_DUAL_UICC_EXT_SWITCH=TRUE
 D_CFLAGS += -DNFC_NXP_AID_MAX_SIZE_DYN=TRUE
+
+#Enable HCE-F specific
+D_CFLAGS += -DNXP_NFCC_HCE_F=TRUE
+
 #variables for NFC_NXP_CHIP_TYPE
 PN547C2 := 1
 PN548C2 := 2
+PN551   := 3
 
 NQ110 := $PN547C2
 NQ120 := $PN547C2
@@ -35,17 +35,16 @@
 ifeq ($(PN548C2),2)
 D_CFLAGS += -DPN548C2=2
 endif
+ifeq ($(PN551),3)
+D_CFLAGS += -DPN551=3
+endif
 
 #### Select the JCOP OS Version ####
-JCOP_VER_3_0 := 1
-JCOP_VER_3_1_1 := 2
-JCOP_VER_3_1_2 := 3
-JCOP_VER_3_2 := 4
-JCOP_VER_3_3 := 5
+JCOP_VER_3_1 := 1
+JCOP_VER_3_2 := 2
+JCOP_VER_3_3 := 3
 
-LOCAL_CFLAGS += -DJCOP_VER_3_0=$(JCOP_VER_3_0)
-LOCAL_CFLAGS += -DJCOP_VER_3_1_1=$(JCOP_VER_3_1_1)
-LOCAL_CFLAGS += -DJCOP_VER_3_1_2=$(JCOP_VER_3_1_2)
+LOCAL_CFLAGS += -DJCOP_VER_3_1=$(JCOP_VER_3_1)
 LOCAL_CFLAGS += -DJCOP_VER_3_2=$(JCOP_VER_3_2)
 LOCAL_CFLAGS += -DJCOP_VER_3_3=$(JCOP_VER_3_3)
 
@@ -58,12 +57,14 @@
 endif
 
 #### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN548C2)
+NXP_CHIP_TYPE := $(PN551)
 
 ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
 else ifeq ($(NXP_CHIP_TYPE),$(PN548C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN548C2
+else ifeq ($(NXP_CHIP_TYPE),$(PN551))
+D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN551
 endif
 
 #Gemalto SE support
@@ -77,7 +78,6 @@
 
 LOCAL_ARM_MODE := arm
 LOCAL_MODULE := libnfc-nci
-LOCAL_MODULE_TAGS := optional
 LOCAL_SHARED_LIBRARIES := libhardware_legacy libcutils liblog libdl libhardware
 LOCAL_CFLAGS += $(D_CFLAGS)
 LOCAL_C_INCLUDES := $(LOCAL_PATH)/src/include \
diff --git a/README.md b/README.md
index a33821f..5110523 100644
--- a/README.md
+++ b/README.md
@@ -18,5 +18,6 @@
 | :-------------: |:-------------:| :-----:|
 | android-6.0.0_r1                     |  4.2.0_M (PN547C2/PN548C2) |  NFC_NCIHALx_AR0F.4.2.0_M_OpnSrc |
 | android-6.0.0_r1                     |  4.3.0_M (PN547C2/PN548C2) |  NFC_NCIHALx_AR0F.4.3.0_M_OpnSrc |
+| android-6.0.1_r17                    |  4.5.0_M (PN551/PN548C2)   |  NFC_NCIHALx_AR3C.4.5.0_M_OpnSrc |
 
 
diff --git a/halimpl/pn54x/Android.mk b/halimpl/pn54x/Android.mk
index 1d27253..e6b4451 100644
--- a/halimpl/pn54x/Android.mk
+++ b/halimpl/pn54x/Android.mk
@@ -13,15 +13,6 @@
 # limitations under the License.
 
 
-# function to find all *.cpp files under a directory
-define all-cpp-files-under
-$(patsubst ./%,%, \
-  $(shell cd $(LOCAL_PATH) ; \
-          find $(1) -name "*.cpp" -and -not -name ".*") \
- )
-endef
-
-
 HAL_SUFFIX := $(TARGET_DEVICE)
 ifeq ($(TARGET_DEVICE),crespo)
 	HAL_SUFFIX := herring
@@ -33,56 +24,66 @@
 #variables for NFC_NXP_CHIP_TYPE
 PN547C2 := 1
 PN548C2 := 2
+PN551   := 3
 NQ110 := $PN547C2
 NQ120 := $PN547C2
 NQ210 := $PN548C2
 NQ220 := $PN548C2
+
+#Enable HCE-F specific
+D_CFLAGS += -DNXP_NFCC_HCE_F=TRUE
+
 #NXP PN547 Enable
 ifeq ($(PN547C2),1)
-LOCAL_CFLAGS += -DPN547C2=1
+D_CFLAGS += -DPN547C2=1
 endif
 ifeq ($(PN548C2),2)
-LOCAL_CFLAGS += -DPN548C2=2
+D_CFLAGS += -DPN548C2=2
+endif
+ifeq ($(PN551),3)
+D_CFLAGS += -DPN551=3
 endif
 
 #### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN548C2)
+NXP_CHIP_TYPE := $(PN551)
 
 ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
 else ifeq ($(NXP_CHIP_TYPE),$(PN548C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN548C2
+else ifeq ($(NXP_CHIP_TYPE),$(PN551))
+D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN551
 endif
 
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
-LOCAL_PRELINK_MODULE := false
-LOCAL_ARM_MODE := arm
 ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
 LOCAL_MODULE := nfc_nci_pn547.grouper
 else ifeq ($(NXP_CHIP_TYPE),$(PN548C2))
 LOCAL_MODULE := nfc_nci.pn54x.default
+else ifeq ($(NXP_CHIP_TYPE),$(PN551))
+LOCAL_MODULE := nfc_nci.pn54x.default
 endif
 LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SRC_FILES := $(call all-c-files-under, .)  $(call all-cpp-files-under, .)
+LOCAL_SRC_FILES := $(call all-subdir-c-files)  $(call all-subdir-cpp-files)
 LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libdl
-LOCAL_MODULE_TAGS := optional
 
 LOCAL_CFLAGS := $(D_CFLAGS)
 LOCAL_C_INCLUDES += \
-	$(LOCAL_PATH)/utils \
-	$(LOCAL_PATH)/inc \
-	$(LOCAL_PATH)/common \
-	$(LOCAL_PATH)/dnld \
-	$(LOCAL_PATH)/hal \
-	$(LOCAL_PATH)/log \
-	$(LOCAL_PATH)/tml \
-	$(LOCAL_PATH)/self-test
+    $(LOCAL_PATH)/utils \
+    $(LOCAL_PATH)/inc \
+    $(LOCAL_PATH)/common \
+    $(LOCAL_PATH)/dnld \
+    $(LOCAL_PATH)/hal \
+    $(LOCAL_PATH)/log \
+    $(LOCAL_PATH)/tml \
+    $(LOCAL_PATH)/self-test
 
 LOCAL_CFLAGS += -DANDROID \
         -DNXP_UICC_ENABLE -DNXP_HW_SELF_TEST
 LOCAL_CFLAGS += -DNFC_NXP_HFO_SETTINGS=FALSE
 LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
+LOCAL_CFLAGS += -DNFC_NXP_STAT_DUAL_UICC_EXT_SWITCH=TRUE
 LOCAL_CFLAGS += $(D_CFLAGS)
 #LOCAL_CFLAGS += -DFELICA_CLT_ENABLE
 #-DNXP_PN547C1_DOWNLOAD
diff --git a/halimpl/pn54x/common/phNfcCommon.h b/halimpl/pn54x/common/phNfcCommon.h
index 5b8b516..65b8097 100644
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ b/halimpl/pn54x/common/phNfcCommon.h
@@ -40,14 +40,21 @@
 
 /* Actual FW library name*/
 #define FW_LIB_PATH       FW_DLL_ROOT_DIR "libpn548ad_fw"          FW_DLL_EXTENSION
-/* Restore Currupted PLL Setttings/etc */
+/* Restore Corrupted PLL Setttings/etc */
 #define PLATFORM_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw_platform" FW_DLL_EXTENSION
 /* Upgrade the public Key */
 #define PKU_LIB_PATH      FW_DLL_ROOT_DIR "libpn548ad_fw_pku"      FW_DLL_EXTENSION
+#elif(NFC_NXP_CHIP_TYPE == PN551)
+/* Actual FW library name*/
+#define FW_LIB_PATH       FLASH_CONF_ROOT_DIR "libpn551_fw"      FW_DLL_EXTENSION
+/* Restore Corrupted PLL Settings/etc */
+#define PLATFORM_LIB_PATH FW_DLL_ROOT_DIR "libpn551_fw_platform" FW_DLL_EXTENSION
+/* Upgrade the public Key */
+#define PKU_LIB_PATH      FW_DLL_ROOT_DIR "libpn551_fw_pku"      FW_DLL_EXTENSION
 #else
 /* Actual FW library name*/
 #define FW_LIB_PATH       FW_DLL_ROOT_DIR "libpn547_fw"          FW_DLL_EXTENSION
-/* Restore Currupted PLL Settings/etc */
+/* Restore Corrupted PLL Settings/etc */
 #define PLATFORM_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw_platform" FW_DLL_EXTENSION
 /* Upgrade the public Key */
 #define PKU_LIB_PATH      FW_DLL_ROOT_DIR "libpn547_fw_pku"      FW_DLL_EXTENSION
@@ -55,12 +62,14 @@
 
 #if(NFC_NXP_CHIP_TYPE == PN548C2)
 #define COMPILATION_MW "PN548C2"
+#elif(NFC_NXP_CHIP_TYPE == PN551)
+#define COMPILATION_MW "PN551"
 #else
 #define COMPILATION_MW "PN547C2"
 #endif
 /* HAL Version number (Updated as per release) */
-#define NXP_MW_VERSION_MAJ  (3U)
-#define NXP_MW_VERSION_MIN  (0U)
+#define NXP_MW_VERSION_MAJ  (4U)
+#define NXP_MW_VERSION_MIN  (6U)
 
 #define GET_EEPROM_DATA (1U)
 #define SET_EEPROM_DATA (2U)
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
index ca6b29d..69df125 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ b/halimpl/pn54x/dnld/phDnldNfc.c
@@ -29,8 +29,8 @@
 static void *pFwLibHandle; /* Global firmware lib handle used in this file only */
 uint16_t wMwVer = 0; /* Middleware version no */
 uint16_t wFwVer = 0; /* Firmware version no */
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
-uint8_t gRecFWDwnld; // flag  set to true to  indicate dummy FW download
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
+uint8_t gRecFWDwnld; // flag set to true to indicate dummy FW download
 #endif
 static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
 static pphDnldNfc_RspCb_t      UserCb; /* Upper layer call back function */
@@ -283,8 +283,13 @@
         }
         else
         {
-            if((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) || (PHDNLDNFC_HWVER_MRA2_2 == bChipVer) ||
-               (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer))
+            if((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) || (PHDNLDNFC_HWVER_MRA2_2 == bChipVer)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+              || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer)
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
+              || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer)
+#endif
+                )
             {
                 (gpphDnldContext->FrameInp.Type) = phDnldNfc_ChkIntg;
             }
@@ -876,7 +881,7 @@
     phDnldNfc_SetHwDevHandle();
 
     /*Read Firmware file name from config file*/
-    if(GetNxpStrValue(NAME_NXP_FW_NAME, fwFileName, sizeof(fwFileName)) == TRUE)
+    if(GetNxpStrValue(NAME_NXP_FW_NAME, (char *)fwFileName, sizeof(fwFileName)) == TRUE)
     {
         strcpy(fwpathName, FW_DLL_ROOT_DIR);
         strncat(fwpathName, fwFileName, strlen(fwFileName));
@@ -884,7 +889,7 @@
     }
 
     /* load the library and get the image info pointer */
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     if(gRecFWDwnld == TRUE)
         wStatus = phDnldNfc_LoadRecoveryFW(pathName, &pImageInfo, &ImageInfoLen);
     else
@@ -892,7 +897,7 @@
         wStatus = phDnldNfc_LoadFW(pathName, &pImageInfo, &ImageInfoLen);
 
     NXPLOG_FWDNLD_D("FW Image Length - ImageInfoLen %d",ImageInfoLen);
-    NXPLOG_FWDNLD_D("FW Image Info Pointer - pImageInfo %x",(uintptr_t)pImageInfo);
+    NXPLOG_FWDNLD_D("FW Image Info Pointer - pImageInfo %p",pImageInfo);
 
     if((pImageInfo == NULL) || (ImageInfoLen == 0))
     {
@@ -922,7 +927,7 @@
            NXPLOG_FWDNLD_D("FW Major Version Num - %x",gpphDnldContext->nxp_nfc_fw[5]);
            NXPLOG_FWDNLD_D("FW Minor Version Num - %x",gpphDnldContext->nxp_nfc_fw[4]);
            NXPLOG_FWDNLD_D("FW Image Length - %d",ImageInfoLen);
-           NXPLOG_FWDNLD_D("FW Image Info Pointer - %x",(uintptr_t)pImageInfo);
+           NXPLOG_FWDNLD_D("FW Image Info Pointer - %p",pImageInfo);
 
            /* get the FW version */
            wFwVer = (((uint16_t)(gpphDnldContext->nxp_nfc_fw[5]) << 8U) | (gpphDnldContext->nxp_nfc_fw[4]));
@@ -959,7 +964,7 @@
 
     /* if memory is not allocated then allocate memory for donwload context structure */
     phDnldNfc_SetHwDevHandle();
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     if(gRecFWDwnld == TRUE)
         wStatus = phDnldNfc_LoadRecoveryFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
     else
@@ -985,7 +990,7 @@
        if((NULL != gpphDnldContext->nxp_nfc_fwp) && (0 != gpphDnldContext->nxp_nfc_fwp_len))
        {
            NXPLOG_FWDNLD_D("Recovery Image Length - %d",ImageInfoLen);
-           NXPLOG_FWDNLD_D("Recovery Image Info Pointer - %x",(uintptr_t)pImageInfo);
+           NXPLOG_FWDNLD_D("Recovery Image Info Pointer - %p",pImageInfo);
            wStatus = NFCSTATUS_SUCCESS;
        }
        else
@@ -1020,7 +1025,7 @@
     phDnldNfc_SetHwDevHandle();
 
     /* load the PKU image library */
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     if(gRecFWDwnld == TRUE)
         wStatus = phDnldNfc_LoadRecoveryFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
     else
@@ -1046,7 +1051,7 @@
        if((NULL != gpphDnldContext->nxp_nfc_fwp) && (0 != gpphDnldContext->nxp_nfc_fwp_len))
        {
            NXPLOG_FWDNLD_D("PKU Image Length - %d",ImageInfoLen);
-           NXPLOG_FWDNLD_D("PKU Image Info Pointer - %x",(uintptr_t)pImageInfo);
+           NXPLOG_FWDNLD_D("PKU Image Info Pointer - %p",pImageInfo);
            wStatus = NFCSTATUS_SUCCESS;
        }
        else
@@ -1104,19 +1109,16 @@
 {
     void* pImageInfo = NULL;
     void* pImageInfoLen = NULL;
-
+    if(pathName == NULL)
+    {
 #if(NFC_NXP_CHIP_TYPE == PN548C2)
-    /* check for path name */
-    if(pathName == NULL)
-    {
         pathName = "/system/vendor/firmware/libpn548ad_fw.so";
-    }
+#elif(NFC_NXP_CHIP_TYPE == PN551)
+        pathName = "/system/vendor/firmware/libpn551_fw.so";
 #else
-    if(pathName == NULL)
-    {
         pathName = "/system/vendor/firmware/libpn547_fw.so";
-    }
 #endif
+    }
 
     /* check if the handle is not NULL then free the library */
     if(pFwLibHandle != NULL)
@@ -1159,7 +1161,8 @@
 
     return NFCSTATUS_SUCCESS;
 }
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 /*******************************************************************************
 **
 ** Function         phDnldNfc_LoadRecoveryFW
@@ -1172,7 +1175,7 @@
 **                  pImgInfo    - Firmware image handle
 **                  pImgInfoLen - Firmware image length
 **
-** Returns          NFC
+** Returns          NFCSTATUS
 **
 *******************************************************************************/
 NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName, uint8_t **pImgInfo, uint16_t* pImgInfoLen)
@@ -1180,18 +1183,17 @@
     void* pImageInfo = NULL;
     void* pImageInfoLen = NULL;
 
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
     /* check for path name */
     if(pathName == NULL)
     {
+#if(NFC_NXP_CHIP_TYPE == PN548C2)
         pathName = "/system/vendor/firmware/libpn548ad_fw.so";
-    }
+#elif(NFC_NXP_CHIP_TYPE == PN551)
+        pathName = "/system/vendor/firmware/libpn551_fw.so";
 #else
-    if(pathName == NULL)
-       {
-           pathName = "/system/vendor/firmware/libpn547_fw.so";
-       }
+        pathName = "/system/vendor/firmware/libpn547_fw.so";
 #endif
+    }
     /* check if the handle is not NULL then free the library */
     if(pFwLibHandle != NULL)
     {
diff --git a/halimpl/pn54x/dnld/phDnldNfc.h b/halimpl/pn54x/dnld/phDnldNfc.h
index 10aeed1..118f060 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.h
+++ b/halimpl/pn54x/dnld/phDnldNfc.h
@@ -42,6 +42,8 @@
 #define PHDNLDNFC_HWVER_MRA2_2       (0x05U)   /* ChipVersion MRA2.2 */
 
 #define PHDNLDNFC_HWVER_PN548AD_MRA1_0       (0x08U)   /* PN548AD ChipVersion MRA1.0 */
+
+#define PHDNLDNFC_HWVER_PN551_MRA1_0         (0x08U)   /* PN551 ChipVersion MRA1.0 */
 /*
  * Enum definition contains Download Life Cycle States
  */
@@ -104,7 +106,7 @@
 extern NFCSTATUS phDnldNfc_LoadPKInfo(void);
 extern void phDnldNfc_CloseFwLibHandle(void);
 extern NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t **pImgInfo, uint16_t* pImgInfoLen);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 extern NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName, uint8_t **pImgInfo, uint16_t* pImgInfoLen);
 #endif
 extern NFCSTATUS phDnldNfc_UnloadFW(void);
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Internal.c b/halimpl/pn54x/dnld/phDnldNfc_Internal.c
index c54666e..2a8f623 100644
--- a/halimpl/pn54x/dnld/phDnldNfc_Internal.c
+++ b/halimpl/pn54x/dnld/phDnldNfc_Internal.c
@@ -57,14 +57,18 @@
 #define PHDNLDNFC_USERDATA_EEPROM_LEN     (0x0DC0U)    /* 16 bits length of user data area */
 #else
 
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
-/* EEPROM offset and length value for PN547C2 */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET  (0x023CU)    /* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN     (0x0C80U)    /* 16 bits length of user data area */
-#else
+#if((NFC_NXP_CHIP_TYPE == PN548C2))
 /* EEPROM offset and length value for PN548AD */
 #define PHDNLDNFC_USERDATA_EEPROM_OFFSET  (0x02BCU)    /* 16 bits offset indicating user data area start location */
 #define PHDNLDNFC_USERDATA_EEPROM_LEN     (0x0C00U)    /* 16 bits length of user data area */
+#elif(NFC_NXP_CHIP_TYPE == PN551)
+/* EEPROM offset and length value for PN551 */
+#define PHDNLDNFC_USERDATA_EEPROM_OFFSET  (0x02BCU)    /* 16 bits offset indicating user data area start location */
+#define PHDNLDNFC_USERDATA_EEPROM_LEN     (0x0C00U)    /* 16 bits length of user data area */
+#else
+/* EEPROM offset and length value for PN547C2 */
+#define PHDNLDNFC_USERDATA_EEPROM_OFFSET  (0x023CU)    /* 16 bits offset indicating user data area start location */
+#define PHDNLDNFC_USERDATA_EEPROM_LEN     (0x0C80U)    /* 16 bits length of user data area */
 #endif
 
 #endif
@@ -663,6 +667,11 @@
         {
             wFrameLen = 0;
             wFrameLen  = (pDlContext->tCmdRspFrameInfo.dwSendlength);
+            if(wFrameLen > PHDNLDNFC_CMDRESP_MAX_BUFF_SIZE)
+            {
+                 NXPLOG_FWDNLD_D("wFrameLen exceeds the limit");
+                 return NFCSTATUS_FAILED;
+            }
 
             if(phDnldNfc_FTRaw != (pDlContext->FrameInp.Type))
             {
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
index 95ff877..7a89a48 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
@@ -35,7 +35,7 @@
 /* External global variable to get FW version */
 extern uint16_t wFwVer;
 extern uint16_t wMwVer;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t gRecFWDwnld; // flag  set to true to  indicate dummy FW download
 #endif
 /* RF Configuration structure */
@@ -180,7 +180,8 @@
     phNxpNciHal_fw_dnld_chk_integrity,
     NULL
 };
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 /* Array of pointers to start dummy fw download seq */
 static NFCSTATUS (*phNxpNciHal_dummy_rec_dwnld_seqhandler[])(
         void* pContext, NFCSTATUS status, void* pInfo) = {
@@ -562,8 +563,13 @@
             bHwVer = (pRespBuff->pBuff[0]);
             bHwVer &= 0x0F; /* 0x0F is the mask to extract chip version */
 
-            if ((PHDNLDNFC_HWVER_MRA2_1 == bHwVer) || (PHDNLDNFC_HWVER_MRA2_2 == bHwVer) ||
-                    (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer))
+            if ((PHDNLDNFC_HWVER_MRA2_1 == bHwVer) || (PHDNLDNFC_HWVER_MRA2_2 == bHwVer)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+              || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer)
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
+              || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer)
+#endif
+                )
             {
                 bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN_MRA2_1;
                 (gphNxpNciHal_fw_IoctlCtx.bChipVer) = bHwVer;
@@ -1874,11 +1880,12 @@
     if (NFCSTATUS_SUCCESS == phDnldNfc_InitImgInfo())
     {
         NXPLOG_FWDNLD_D("phDnldNfc_InitImgInfo:SUCCESS");
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         if(gRecFWDwnld == TRUE)
         {
             status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dummy_rec_dwnld_seqhandler);
-        }else
+        }
+        else
 #endif
         {
             status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
@@ -1907,8 +1914,13 @@
 NFCSTATUS
 phLibNfc_VerifyCrcStatus(uint8_t bCrcStatus)
 {
+#if(NFC_NXP_CHIP_TYPE == PN551)
+    uint8_t bBitPos = 1;
+    uint8_t bShiftVal = 2;
+#else
     uint8_t bBitPos = 0;
     uint8_t bShiftVal = 1;
+#endif
     NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
     while(bBitPos < 7)
     {
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index e049b43..bd79b13 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -34,7 +34,7 @@
 extern uint8_t icode_send_eof;
 extern uint8_t icode_detected;
 static uint8_t cmd_icode_eof[] = { 0x00, 0x00, 0x00 };
-
+static uint8_t read_failed_disable_nfc = FALSE;
 static uint8_t config_access = FALSE;
 static NFCSTATUS phNxpNciHal_FwDwnld(void);
 static NFCSTATUS phNxpNciHal_SendCmd(uint8_t cmd_len, uint8_t* pcmd_buff);
@@ -61,7 +61,7 @@
 extern int send_to_upper_kovio;
 extern int kovio_detected;
 extern int disable_kovio;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t gRecFWDwnld;// flag  set to true to  indicate dummy FW download
 static uint8_t gRecFwRetryCount; //variable to hold dummy FW recovery count
 #endif
@@ -94,8 +94,8 @@
 static void phNxpNciHal_core_MinInitialized_complete(NFCSTATUS status);
 static NFCSTATUS phNxpNciHal_set_Boot_Mode(uint8_t mode);
 NFCSTATUS phNxpNciHal_check_clock_config(void);
-NFCSTATUS phNxpNciHal_china_tianjin_rf_setting(void);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+NFCSTATUS phNxpNciHal_set_china_region_configs(void);
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 static NFCSTATUS phNxpNciHalRFConfigCmdRecSequence();
 static NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus();
 #endif
@@ -241,6 +241,7 @@
 
     NXPLOG_NCIHAL_D("NxpNciHal thread stopped");
 
+    pthread_exit(NULL);
     return NULL;
 }
 
@@ -313,7 +314,11 @@
 static NFCSTATUS phNxpNciHal_CheckValidFwVersion(void)
 {
     NFCSTATUS status = NFCSTATUS_NOT_ALLOWED;
+#if(NFC_NXP_CHIP_TYPE == PN551)
+    const unsigned char sfw_mobile_major_no = 0x05;
+#else
     const unsigned char sfw_mobile_major_no = 0x01;
+#endif
     const unsigned char sfw_infra_major_no = 0x02;
     unsigned char ufw_current_major_no = 0x00;
     unsigned long num = 0;
@@ -353,7 +358,7 @@
             NXPLOG_NCIHAL_D("Firmware download not allowed (NXP_FW_PROTECION_OVERRIDE not defiend)");
         }
     }
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     else if(gRecFWDwnld == TRUE)
     {
         status = NFCSTATUS_SUCCESS;
@@ -452,20 +457,17 @@
         {
             NXPLOG_NCIHAL_E ("FW Download failed - NFCC init will continue");
         }
-        else
+        /* call read pending */
+        wConfigStatus = phTmlNfc_Read(
+                nxpncihal_ctrl.p_cmd_data,
+                NCI_MAX_DATA_LEN,
+                (pphTmlNfc_TransactCompletionCb_t) &phNxpNciHal_read_complete,
+                NULL);
+        if (wConfigStatus != NFCSTATUS_PENDING)
         {
-            /* call read pending */
-            wConfigStatus = phTmlNfc_Read(
-                    nxpncihal_ctrl.p_cmd_data,
-                    NCI_MAX_DATA_LEN,
-                    (pphTmlNfc_TransactCompletionCb_t) &phNxpNciHal_read_complete,
-                    NULL);
-            if (wConfigStatus != NFCSTATUS_PENDING)
-            {
-                NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-                phTmlNfc_Shutdown();
-                status = NFCSTATUS_FAILED;
-            }
+            NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
+            phTmlNfc_Shutdown();
+            status = NFCSTATUS_FAILED;
         }
     }
     else
@@ -497,6 +499,7 @@
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     phOsalNfc_Config_t tOsalConfig;
     phTmlNfc_Config_t tTmlConfig;
+    uint8_t nfc_dev_node[260];
     static phLibNfc_Message_t msg;
     int init_retry_cnt=0;
     /*NCI_RESET_CMD*/
@@ -509,6 +512,11 @@
 
     /*Create the timer for extns write response*/
     timeoutTimerId = phOsalNfc_Timer_Create();
+    if(timeoutTimerId == PH_OSALNFC_TIMER_ID_INVALID)
+    {
+        NXPLOG_NCIHAL_E("Invalid Timer Id, Timer Creation failed");
+        return NFCSTATUS_FAILED;
+    }
 
     if (phNxpNciHal_init_monitor() == NULL)
     {
@@ -534,7 +542,16 @@
     nxpncihal_ctrl.gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
     nxpncihal_ctrl.gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C;/* For PN54X */
     nxpncihal_ctrl.hal_boot_mode = boot_mode;
-    tTmlConfig.pDevName = (int8_t *) "/dev/pn544";
+
+    /*Get the device node name from config file*/
+    memset(nfc_dev_node,0,sizeof(nfc_dev_node));
+    if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, (char *)nfc_dev_node, sizeof (nfc_dev_node)))
+    {
+        NXPLOG_NCIHAL_E("Invalid nfc device node name keeping the default device node /dev/pn544");
+        strcpy ((char *)nfc_dev_node, "/dev/pn544");
+    }
+
+    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
     tOsalConfig.dwCallbackThreadId
     = (uintptr_t) nxpncihal_ctrl.gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
@@ -544,7 +561,10 @@
     status = phTmlNfc_Init(&tTmlConfig);
     if(status == NFCSTATUS_SUCCESS)
     {
-        if(pthread_create(&nxpncihal_ctrl.client_thread, NULL,
+        pthread_attr_t attr;
+        pthread_attr_init(&attr);
+        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+        if(pthread_create(&nxpncihal_ctrl.client_thread, &attr,
                     phNxpNciHal_client_thread, &nxpncihal_ctrl) == 0x00)
         {
             status = phTmlNfc_Read(
@@ -630,6 +650,14 @@
     NFCSTATUS wConfigStatus = NFCSTATUS_SUCCESS;
     NFCSTATUS status = NFCSTATUS_SUCCESS;
 
+    /*structure related to set config management
+    Initialising pointer variable
+     */
+    mGetCfg_info = NULL;
+    mGetCfg_info =  malloc(sizeof(phNxpNci_getCfg_info_t));
+    if(mGetCfg_info  != NULL)
+        memset(mGetCfg_info,0x00,sizeof(phNxpNci_getCfg_info_t));
+
     if(nxpncihal_ctrl.hal_boot_mode == NFC_FAST_BOOT_MODE)
     {
         NXPLOG_NCIHAL_E (" HAL NFC fast init mode calling min_open %d",nxpncihal_ctrl.hal_boot_mode);
@@ -637,13 +665,6 @@
         return wConfigStatus;
     }
 
-    /*structure related to set config management
-    Initialising pointer variable
-     */
-    mGetCfg_info = NULL;
-    mGetCfg_info =  malloc(sizeof(phNxpNci_getCfg_info_t));
-    memset(mGetCfg_info,0x00,sizeof(phNxpNci_getCfg_info_t));
-
     /*NCI_INIT_CMD*/
     static uint8_t cmd_init_nci[] = {0x20,0x01,0x00};
     /*NCI_RESET_CMD*/
@@ -658,6 +679,11 @@
 
     /*Create the timer for extns write response*/
     timeoutTimerId = phOsalNfc_Timer_Create();
+    if(timeoutTimerId == PH_OSALNFC_TIMER_ID_INVALID)
+    {
+        NXPLOG_NCIHAL_E("Invalid Timer Id, Timer Creation failed");
+        return NFCSTATUS_FAILED;
+    }
 
     if (phNxpNciHal_init_monitor() == NULL)
     {
@@ -685,16 +711,16 @@
         NXPLOG_NCIHAL_E("malloc of nfc_dev_node failed ");
         goto clean_and_return;
     }
-    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, nfc_dev_node, sizeof (nfc_dev_node)))
+    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, (char *)nfc_dev_node, sizeof (nfc_dev_node)))
     {
         NXPLOG_NCIHAL_E("Invalid nfc device node name keeping the default device node /dev/pn544");
-        strcpy (nfc_dev_node, "/dev/pn544");
+        strcpy ((char *)nfc_dev_node, "/dev/pn544");
     }
 
     /* Configure hardware link */
     nxpncihal_ctrl.gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
     nxpncihal_ctrl.gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C;/* For PN54X */
-    tTmlConfig.pDevName = (uint8_t *) nfc_dev_node;
+    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
     tOsalConfig.dwCallbackThreadId
     = (uintptr_t) nxpncihal_ctrl.gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
@@ -781,7 +807,10 @@
 int phNxpNciHal_fw_mw_ver_check()
 {
     NFCSTATUS status = NFCSTATUS_FAILED;
-
+    if((!(strcmp(COMPILATION_MW,"PN551")) && (rom_version==0x10) && (fw_maj_ver == 0x05)))
+    {
+        status = NFCSTATUS_SUCCESS;
+    }
     if((!(strcmp(COMPILATION_MW,"PN548C2")) && (rom_version==0x10) && (fw_maj_ver == 0x01)))
     {
         status = NFCSTATUS_SUCCESS;
@@ -1041,6 +1070,18 @@
         nxpncihal_ctrl.read_retry_cnt = 0;
     }
 
+    if(pInfo->wStatus == NFCSTATUS_READ_FAILED)
+    {
+        if (nxpncihal_ctrl.p_nfc_stack_cback != NULL)
+        {
+            read_failed_disable_nfc = TRUE;
+            /* Send the event */
+            (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
+                    HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
+        }
+        return;
+    }
+
     if (pInfo->wStatus == NFCSTATUS_SUCCESS)
     {
         NXPLOG_NCIHAL_D("read successful status = 0x%x", pInfo->wStatus);
@@ -1147,9 +1188,9 @@
     uint8_t fw_dwnld_flag = FALSE, setConfigAlways = FALSE;
 
     /* Temp fix to re-apply the proper clock setting */
-    int temp_fix = 1;
-    unsigned long num = 0;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+     int temp_fix = 1;
+     unsigned long num = 0;
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     //initialize dummy FW recovery variables
     gRecFwRetryCount = 0;
     gRecFWDwnld = 0;
@@ -1174,6 +1215,14 @@
         }
         if(retry_core_init_cnt > 3)
         {
+            if (nxpncihal_ctrl.p_nfc_stack_cback != NULL)
+            {
+                NXPLOG_NCIHAL_D("Posting Core Init Failed\n");
+                read_failed_disable_nfc = TRUE;
+                /* Send the event */
+                (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
+                        HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
+            }
             return NFCSTATUS_FAILED;
         }
 
@@ -1266,7 +1315,7 @@
     }
     NXPLOG_NCIHAL_D ("EEPROM_fw_dwnld_flag : 0x%02x SetConfigAlways flag : 0x%02x", fw_dwnld_flag, setConfigAlways);
 
-    if((TRUE == fw_dwnld_flag) || (TRUE == setConfigAlways))
+    if((TRUE == fw_dwnld_flag) || (TRUE == setConfigAlways) || isNxpConfigModified())
     {
         config_access = TRUE;
         retlen = 0;
@@ -1334,7 +1383,7 @@
     }
 
         retlen = 0;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         NXPLOG_NCIHAL_D ("Performing TVDD Settings");
         isfound = GetNxpNumValue(NAME_NXP_EXT_TVDD_CFG, &num, sizeof(num));
         if (isfound > 0) {
@@ -1381,7 +1430,7 @@
         }
 #endif
         retlen = 0;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         config_access = FALSE;
 #endif
         NXPLOG_NCIHAL_D ("Performing RF Settings BLK 1");
@@ -1389,7 +1438,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1400,7 +1449,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 1 failed");
@@ -1415,7 +1465,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1426,7 +1476,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 2 failed");
@@ -1441,7 +1492,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1452,7 +1503,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 3 failed");
@@ -1467,7 +1519,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1478,7 +1530,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 4 failed");
@@ -1493,7 +1546,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1504,7 +1557,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 5 failed");
@@ -1519,7 +1573,7 @@
                 bufflen, &retlen);
         if (retlen > 0) {
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
             if(status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
@@ -1530,7 +1584,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
             if (status != NFCSTATUS_SUCCESS) {
                 NXPLOG_NCIHAL_E("RF Settings BLK 6 failed");
@@ -1539,7 +1594,7 @@
             }
         }
         retlen = 0;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         config_access = TRUE;
 #endif
         NXPLOG_NCIHAL_D ("Performing NAME_NXP_CORE_CONF_EXTN Settings");
@@ -1585,7 +1640,7 @@
         }
 
         retlen = 0;
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         config_access = FALSE;
 #endif
         isfound = GetNxpByteArrayValue(NAME_NXP_CORE_RF_FIELD,
@@ -1593,8 +1648,8 @@
         if (retlen > 0) {
             /* NXP ACT Proprietary Ext */
             status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
-            if(status == NFCSTATUS_SUCCESS)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
+            if (status == NFCSTATUS_SUCCESS)
             {
                 status = phNxpNciHal_CheckRFCmdRespStatus();
                 /*STATUS INVALID PARAM 0x09*/
@@ -1604,7 +1659,8 @@
                     retry_core_init_cnt++;
                     goto retry_core_init;
                 }
-            }else
+            }
+            else
 #endif
                 if (status != NFCSTATUS_SUCCESS) {
                     NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
@@ -1612,11 +1668,11 @@
                     goto retry_core_init;
                 }
         }
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
         config_access = TRUE;
 #endif
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
         retlen = 0;
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 
         /* NXP SWP switch timeout Setting*/
         if(GetNxpNumValue(NAME_NXP_SWP_SWITCH_TIMEOUT, (void *)&retlen, sizeof(retlen)))
@@ -1627,11 +1683,11 @@
                 if( 0 < retlen)
                 {
                     uint16_t timeout = retlen * 1000;
-                    uint16_t timeoutHx = 0x0000;
+                    unsigned int timeoutHx = 0x0000;
 
                     uint8_t tmpbuffer[10];
-                    snprintf ( tmpbuffer, 10, "%04x", timeout );
-                    sscanf (tmpbuffer,"%x",&timeoutHx);
+                    snprintf ((char *)tmpbuffer, 10, "%04x", timeout );
+                    sscanf ((const char *)tmpbuffer,"%x",(unsigned int *)&timeoutHx);
 
                     swp_switch_timeout_cmd[7]= (timeoutHx & 0xFF);
                     swp_switch_timeout_cmd[8]=  ((timeoutHx & 0xFF00) >> 8);
@@ -1652,11 +1708,12 @@
             }
 
         }
-
-        status = phNxpNciHal_china_tianjin_rf_setting();
+#endif
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+        status = phNxpNciHal_set_china_region_configs();
         if (status != NFCSTATUS_SUCCESS)
         {
-            NXPLOG_NCIHAL_E("phNxpNciHal_china_tianjin_rf_setting failed");
+            NXPLOG_NCIHAL_E("phNxpNciHal_set_china_region_configs failed");
             retry_core_init_cnt++;
             goto retry_core_init;
         }
@@ -1803,6 +1860,28 @@
             goto retry_core_init;
         }
 
+        // Set the proper screen state
+        switch(p_core_init_rsp_params[255])
+        {
+            case 0x0:
+            case 0x3:
+                NXPLOG_NCIHAL_E ("Last Screen State Sent = 0x0");
+                set_screen_state[3] = 0x00; //SCREEN ON UNLOCKED (listen and poll mode)
+            break;
+            case 0x1:
+                NXPLOG_NCIHAL_E ("Last Screen State Sent = 0x1");
+                set_screen_state[3] = 0x01; //SCREEN OFF
+            break;
+            case 0x2:
+                NXPLOG_NCIHAL_E ("Last Screen State Sent = 0x2");
+                set_screen_state[3] = 0x02; //SCREEN ON LOCKED (only listen mode)
+            break;
+            default:
+                NXPLOG_NCIHAL_E ("Setting default as SCREEN ON UNLOCKED");
+                set_screen_state[3] = 0x00; //SCREEN ON UNLOCKED (listen and poll mode)
+            break;
+        }
+
         if(*(p_core_init_rsp_params + 1) == 1) // RF state is Discovery!!
         {
             NXPLOG_NCIHAL_E("Sending Set Screen ON State Command as raw packet!!");
@@ -1828,7 +1907,6 @@
         else
         {
             NXPLOG_NCIHAL_E("Sending Set Screen OFF State Command as raw packet!!");
-            set_screen_state[3] = 0x01; //Screen OFF
             status = phNxpNciHal_send_ext_cmd (sizeof(set_screen_state),
                                           set_screen_state);
             if (status != NFCSTATUS_SUCCESS)
@@ -1900,7 +1978,8 @@
         free(buffer);
         buffer = NULL;
     }
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+    config_access = FALSE;
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
     //initialize dummy FW recovery variables
     gRecFWDwnld = 0;
     gRecFwRetryCount = 0;
@@ -1928,7 +2007,7 @@
 #endif*/
     return NFCSTATUS_SUCCESS;
 }
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
 /******************************************************************************
  * Function         phNxpNciHal_CheckRFCmdRespStatus
  *
@@ -1944,7 +2023,7 @@
 {
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     static uint16_t INVALID_PARAM = 0x09;
-    if(nxpncihal_ctrl.rx_data_len > 0  && nxpncihal_ctrl.p_rx_data[2] > 0)
+    if ((nxpncihal_ctrl.rx_data_len > 0) && (nxpncihal_ctrl.p_rx_data[2] > 0))
     {
         if(nxpncihal_ctrl.p_rx_data[3] == 0x09)
         {
@@ -1984,7 +2063,6 @@
         return NFCSTATUS_FAILED;
     }
     do{
-        status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
         phDnldNfc_InitImgInfo();
         if (NFCSTATUS_SUCCESS == phNxpNciHal_CheckValidFwVersion())
         {
@@ -2257,7 +2335,11 @@
     static uint8_t cmd_ce_disc_nci[] = {0x21,0x03,0x07,0x03,0x80,0x01,0x81,0x01,0x82,0x01};
 
     CONCURRENCY_LOCK();
-
+    if(read_failed_disable_nfc)
+    {
+        read_failed_disable_nfc = FALSE;
+        goto close_and_return;
+    }
     status = phNxpNciHal_send_ext_cmd(sizeof(cmd_ce_disc_nci),cmd_ce_disc_nci);
     if(status != NFCSTATUS_SUCCESS)
     {
@@ -2271,7 +2353,7 @@
     {
         NXPLOG_NCIHAL_E ("NCI_CORE_RESET: Failed");
     }
-
+    close_and_return:
     if (NULL != gpphTmlNfc_Context->pDevHandle)
     {
         phNxpNciHal_close_complete(NFCSTATUS_SUCCESS);
@@ -2594,14 +2676,32 @@
             ret = 0;
         }
         break;
+    case HAL_NFC_IOCTL_P61_GET_ACCESS:
+        NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_GET_ACCESS timeout = %d",(*(int32_t *)p_data));
+        status = phTmlNfc_get_ese_access(gpphTmlNfc_Context->pDevHandle, (*(int32_t *)p_data));
+        if(NFCSTATUS_SUCCESS == status)
+        {
+            ret = 0;
+        }
+        break;
+    case HAL_NFC_IOCTL_P61_REL_ACCESS:
+        status = phTmlNfc_IoCtl(phTmlNfc_e_RelP61Access);
+        NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_ACCESS retval = %d\n",status);
+        if(NFCSTATUS_SUCCESS == status)
+        {
+            ret = 0;
+        }
+        break;
 #endif
     case HAL_NFC_IOCTL_SET_BOOT_MODE:
-        status = phNxpNciHal_set_Boot_Mode(*(uint8_t*)p_data);
-        if(NFCSTATUS_FAILED != status)
+        if(NULL != p_data)
         {
-            if(NULL != p_data)
-               *(uint16_t*)p_data = (uint16_t)status;
-            ret = 0;
+            status = phNxpNciHal_set_Boot_Mode(*(uint8_t*)p_data);
+            if(NFCSTATUS_FAILED != status)
+            {
+                *(uint16_t*)p_data = (uint16_t)status;
+                ret = 0;
+            }
         }
         break;
 
@@ -2614,7 +2714,10 @@
         FwRfInfo = (phNxpNciHal_FwRfupdateInfo_t *) p_data;
         status = phNxpNciHal_CheckFwRegFlashRequired(&FwRfInfo->fw_update_reqd,
                 &FwRfInfo->rf_update_reqd);
-        ret = 0;
+        if(NFCSTATUS_SUCCESS == status)
+        {
+            ret = 0;
+        }
         break;
     case HAL_NFC_IOCTL_FW_DWNLD:
         status = phNxpNciHal_FwDwnld();
@@ -2788,22 +2891,25 @@
 }
 
 /******************************************************************************
- * Function         phNxpNciHal_china_tianjin_rf_setting
+ * Function         phNxpNciHal_set_china_region_configs
  *
- * Description      This function is called to check RF Setting
+ * Description      This function is called to set china region specific configs
  *
  * Returns          Status.
  *
  ******************************************************************************/
-NFCSTATUS phNxpNciHal_china_tianjin_rf_setting(void)
+NFCSTATUS phNxpNciHal_set_china_region_configs(void)
 {
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     int isfound = 0;
     int rf_enable = FALSE;
+    int cfg_blk_chk_enable = FALSE;
     int rf_val = 0;
-    int send_flag;
+    int flag_send_tianjin_config=TRUE;
+    int flag_send_transit_config=TRUE;
     uint8_t retry_cnt =0;
     int enable_bit =0;
+    int enable_blk_num_chk_bit =0;
     static uint8_t get_rf_cmd[] = {0x20, 0x03,0x03, 0x01, 0xA0, 0x85};
 
 retry_send_ext:
@@ -2811,7 +2917,7 @@
     {
         return NFCSTATUS_FAILED;
     }
-    send_flag = TRUE;
+
     phNxpNciRfSet.isGetRfSetting = TRUE;
     status = phNxpNciHal_send_ext_cmd(sizeof(get_rf_cmd),get_rf_cmd);
     if(status != NFCSTATUS_SUCCESS)
@@ -2827,6 +2933,8 @@
         NXPLOG_NCIHAL_E("GET_CONFIG_RSP is FAILED for CHINA TIANJIN");
         return status;
     }
+
+    /* check if tianjin_rf_setting is required */
     rf_val = phNxpNciRfSet.p_rx_data[10];
     isfound = (GetNxpNumValue(NAME_NXP_CHINA_TIANJIN_RF_ENABLED, (void *)&rf_enable, sizeof(rf_enable)));
     if(isfound >0)
@@ -2842,20 +2950,40 @@
         }
         else
         {
-            send_flag = FALSE;  // No need to change in RF setting
+            flag_send_tianjin_config = FALSE;  // No need to change in RF setting
         }
+    }
 
-        if(send_flag == TRUE)
+    /*check if china block number check is required*/
+    rf_val = phNxpNciRfSet.p_rx_data[8];
+    isfound = (GetNxpNumValue(NAME_NXP_CHINA_BLK_NUM_CHK_ENABLE, (void *)&cfg_blk_chk_enable, sizeof(cfg_blk_chk_enable)));
+    if(isfound >0)
+    {
+        enable_blk_num_chk_bit = rf_val & 0x40;
+        if((enable_blk_num_chk_bit != 0x40) && (cfg_blk_chk_enable == 1))
         {
-            static uint8_t set_rf_cmd[] = {0x20, 0x02, 0x08, 0x01, 0xA0, 0x85, 0x04, 0x50, 0x08, 0x68, 0x00};
-            memcpy(&set_rf_cmd[4],&phNxpNciRfSet.p_rx_data[5],7);
-            status = phNxpNciHal_send_ext_cmd(sizeof(set_rf_cmd),set_rf_cmd);
-            if(status != NFCSTATUS_SUCCESS)
-            {
-                NXPLOG_NCIHAL_E("unable to set the RF setting");
-                retry_cnt++;
-                goto retry_send_ext;
-            }
+            phNxpNciRfSet.p_rx_data[8] |= 0x40;   // Enable if it is disabled
+        }
+        else if((enable_blk_num_chk_bit == 0x40) && (cfg_blk_chk_enable == 0))
+        {
+            phNxpNciRfSet.p_rx_data[8] &= ~0x40;  // Disable if it is Enabled
+        }
+        else
+        {
+            flag_send_transit_config = FALSE;  // No need to change in RF setting
+        }
+    }
+
+    if(flag_send_tianjin_config || flag_send_transit_config)
+    {
+        static uint8_t set_rf_cmd[] = {0x20, 0x02, 0x08, 0x01, 0xA0, 0x85, 0x04, 0x50, 0x08, 0x68, 0x00};
+        memcpy(&set_rf_cmd[4],&phNxpNciRfSet.p_rx_data[5],7);
+        status = phNxpNciHal_send_ext_cmd(sizeof(set_rf_cmd),set_rf_cmd);
+        if(status != NFCSTATUS_SUCCESS)
+        {
+            NXPLOG_NCIHAL_E("unable to set the RF setting");
+            retry_cnt++;
+            goto retry_send_ext;
         }
     }
 
diff --git a/halimpl/pn54x/hal/phNxpNciHal_Kovio.c b/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
index 1479d54..623ce84 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
@@ -19,7 +19,7 @@
 
 
 #define KOVIO_TIMEOUT 1000    /* Timeout value to wait for RF INTF Activated NTF.*/
-#define KOVIO_ACT_NTF_TEMP_BUFF_LEN (32+16)    /* length of temp buffer to manipulate
+#define KOVIO_ACT_NTF_TEMP_BUFF_LEN 64    /* length of temp buffer to manipulate
                                     the activated notification to match BCM format*/
 #define MAX_WRITE_RETRY 5
 
@@ -152,7 +152,7 @@
     send_to_upper_kovio = 1;
     if((p_ntf[0]==0x61)&&(p_ntf[1]==0x05))
     {
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
         if((p_ntf[5]==0x81)&&(p_ntf[6]==0x70))
 #else
         if((p_ntf[5]==0x8A)&&(p_ntf[6]==0x77))
diff --git a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c b/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c
index b1fcdc1..bac4327 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_NfcDepSWPrio.c
@@ -560,6 +560,7 @@
     }
 
     NXPLOG_NCIHAL_E("tmp_thread: exit");
+    pthread_exit(NULL);
     return NULL;
 }
 /*******************************************************************************
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index 535ab8a..39abcbb 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -211,7 +211,7 @@
         case 0x80:
             NXPLOG_NCIHAL_D("NxpNci: Protocol = MIFARE");
             break;
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
         case 0x81:
 #else
         case 0x8A:
@@ -305,6 +305,10 @@
             p_ntf[2]--;
             (*p_len)--;
         }
+        else
+        {
+            p_ntf[p_ntf[2]+ 2] |= 0x01;
+        }
     }
     else if (p_ntf[2] == 0x02 &&
             p_ntf[1] == 0x00 && icode_detected == 1)
@@ -695,10 +699,10 @@
             *cmd_len = 8;
         }
     }
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
+
     if (retval == 0x01 &&
-        p_cmd_data[0] == 0x21 &&
-        p_cmd_data[1] == 0x00)
+            p_cmd_data[0] == 0x21 &&
+            p_cmd_data[1] == 0x00)
     {
         NXPLOG_NCIHAL_D ("Going through extns - Adding Mifare in RF Discovery");
         p_cmd_data[2] += 3;
@@ -711,13 +715,12 @@
         NXPLOG_NCIHAL_D ("Going through extns - Adding Mifare in RF Discovery - END");
     }
     else
-#endif
     if (p_cmd_data[3] == 0x81 &&
             p_cmd_data[4] == 0x01 &&
             p_cmd_data[5] == 0x03)
     {
         NXPLOG_NCIHAL_D("> Going through the set host list");
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
         *cmd_len = 8;
 
         p_cmd_data[2] = 0x05;
@@ -1059,14 +1062,14 @@
         {
 
             //Clear the buffer first
-            memset(set_cfg_eeprom+setCfgStartIndex,0x00,sizeof(set_cfg_eeprom) - setCfgStartIndex);
+            memset(set_cfg_eeprom+setCfgStartIndex,0x00,(set_cfg_cmd_len - setCfgStartIndex));
 
             //copy get config data into set_cfg_eeprom
             memcpy(set_cfg_eeprom+setCfgStartIndex, nxpncihal_ctrl.p_rx_data+getCfgStartIndex, fieldLen);
             if(mEEPROM_info->update_mode == BITWISE)
             {
                 cur_value = (set_cfg_eeprom[setCfgStartIndex+memIndex] >> b_position) & 0x01;
-                if(cur_value != mEEPROM_info->buffer)
+                if(cur_value != mEEPROM_info->buffer[0])
                 {
                     update_req = TRUE;
                     if(mEEPROM_info->buffer[0]== 1)
diff --git a/halimpl/pn54x/libnfc-brcm.conf b/halimpl/pn54x/libnfc-brcm.conf
index c98668a..934720f 100644
--- a/halimpl/pn54x/libnfc-brcm.conf
+++ b/halimpl/pn54x/libnfc-brcm.conf
@@ -146,10 +146,12 @@
 UICC_LISTEN_TECH_MASK=0x07
 
 ###############################################################################
-# Force HOST listen feature enable or disable.
-# 0: Disable
-# 1: Enable
-HOST_LISTEN_ENABLE=0x01
+# Forcing HOST to listen for a selected technology
+# 0x00 : Disable Host Listen
+# 0x01 : Enable Host Listen for Tech A
+# 0x02 : Enable Host Listen for Tech B
+# 0x03 : Enable Host Listen for Tech AB
+HOST_LISTEN_TECH_MASK=0x03
 
 ###############################################################################
 # Enabling/Disabling Forward functionality
@@ -313,7 +315,7 @@
 # 2  NFA_RW_PRES_CHK_RESET; Deactivate to Sleep, then re-activate
 # 3  NFA_RW_PRES_CHK_RB_CH0; Type-4 tag protocol's ReadBinary command on channel 0
 # 4  NFA_RW_PRES_CHK_RB_CH3; Type-4 tag protocol's ReadBinary command on channel 3
-#PRESENCE_CHECK_ALGORITHM=0
+PRESENCE_CHECK_ALGORITHM=1
 
 ###############################################################################
 # Force tag polling for the following technology(s).
@@ -328,7 +330,7 @@
 # NFA_TECHNOLOGY_MASK_B             0x02    /* NFC Technology B             */
 # NFA_TECHNOLOGY_MASK_F             0x04    /* NFC Technology F             */
 # NFA_TECHNOLOGY_MASK_ISO15693	    0x08    /* Proprietary Technology       */
-# NFA_TECHNOLOGY_MASK_KOVIO	        0x20    /* Proprietary Technology       */
+# NFA_TECHNOLOGY_MASK_KOVIO	    0x20    /* Proprietary Technology       */
 # NFA_TECHNOLOGY_MASK_A_ACTIVE      0x40    /* NFC Technology A active mode */
 # NFA_TECHNOLOGY_MASK_F_ACTIVE      0x80    /* NFC Technology F active mode */
 POLLING_TECH_MASK=0xEF
@@ -378,8 +380,25 @@
 AID_MATCHING_MODE=0x01
 
 ###############################################################################
-# Preferred Secure Element for Technology based routing
-# eSE               0x01
-# UICC              0x02
+# Default Secure Element route id
+DEFAULT_OFFHOST_ROUTE=0x02
 
-NXP_PRFD_TECH_SE=0x01
+###############################################################################
+# Vendor Specific Proprietary Protocol & Discovery Configuration
+# Set to 0xFF if unsupported
+#  byte[0] NCI_PROTOCOL_18092_ACTIVE
+#  byte[1] NCI_PROTOCOL_B_PRIME
+#  byte[2] NCI_PROTOCOL_DUAL
+#  byte[3] NCI_PROTOCOL_15693
+#  byte[4] NCI_PROTOCOL_KOVIO
+#  byte[5] NCI_PROTOCOL_MIFARE
+#  byte[6] NCI_DISCOVERY_TYPE_POLL_KOVIO
+#  byte[7] NCI_DISCOVERY_TYPE_POLL_B_PRIME
+#  byte[8] NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+NFA_PROPRIETARY_CFG={05:FF:FF:06:81:80:70:FF:FF}
+
+#################################################################################
+# Bail out mode
+#  If set to 1, NFCC is using bail out mode for either Type A or Type B poll.
+NFA_POLL_BAIL_OUT_MODE=0x01
+#################################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
index 8b47c52..e092f3c 100644
--- a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
@@ -66,7 +66,7 @@
 
 ###############################################################################
 # Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 #Atonomous Mode
diff --git a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
index bcce366..55b769b 100644
--- a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
@@ -73,7 +73,7 @@
 
 ###############################################################################
 # Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 # NXP TVDD configurations settings
@@ -310,6 +310,11 @@
 NXP_AGC_DEBUG_ENABLE=0x00
 
 ###############################################################################
+# UICC mode supported
+# Disable           0x00
+# Enable            0x01
+NXP_DUAL_UICC_ENABLE=0x00
+###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
diff --git a/halimpl/pn54x/libnfc-nxp-PN551_example.conf b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
new file mode 100644
index 0000000..25be0df
--- /dev/null
+++ b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
@@ -0,0 +1,327 @@
+## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn551)
+## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn551)
+
+###############################################################################
+# Application options
+# Logging Levels
+# NXPLOG_DEFAULT_LOGLEVEL    0x01
+# ANDROID_LOG_DEBUG          0x03
+# ANDROID_LOG_WARN           0x02
+# ANDROID_LOG_ERROR          0x01
+# ANDROID_LOG_SILENT         0x00
+#
+NXPLOG_EXTNS_LOGLEVEL=0x03
+NXPLOG_NCIHAL_LOGLEVEL=0x03
+NXPLOG_NCIX_LOGLEVEL=0x03
+NXPLOG_NCIR_LOGLEVEL=0x03
+NXPLOG_FWDNLD_LOGLEVEL=0x03
+NXPLOG_TML_LOGLEVEL=0x03
+
+###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn544"
+
+###############################################################################
+# Extension for Mifare reader enable
+MIFARE_READER_ENABLE=0x01
+
+###############################################################################
+# Vzw Feature enable
+VZW_FEATURE_ENABLE=0x01
+
+###############################################################################
+# File name for Firmware
+NXP_FW_NAME="libpn551_fw.so"
+
+###############################################################################
+# System clock source selection configuration
+#define CLK_SRC_XTAL       1
+#define CLK_SRC_PLL        2
+
+NXP_SYS_CLK_SRC_SEL=0x01
+
+###############################################################################
+# System clock frequency selection configuration
+#define CLK_FREQ_13MHZ         1
+#define CLK_FREQ_19_2MHZ       2
+#define CLK_FREQ_24MHZ         3
+#define CLK_FREQ_26MHZ         4
+#define CLK_FREQ_38_4MHZ       5
+#define CLK_FREQ_52MHZ         6
+
+NXP_SYS_CLK_FREQ_SEL=0x01
+
+###############################################################################
+# The timeout value to be used for clock request acknowledgment
+# min value = 0x01 to max = 0x06
+
+NXP_SYS_CLOCK_TO_CFG=0x06
+
+###############################################################################
+# NXP proprietary settings
+NXP_ACT_PROP_EXTN={2F, 02, 00}
+
+###############################################################################
+# NFC forum profile settings
+NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
+
+###############################################################################
+# NFCC Configuration Control
+# Allow NFCC to manage RF Config       0x01
+# Don't allow NFCC to manage RF Config 0x00
+NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
+
+###############################################################################
+# Standby enable settings
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
+
+###############################################################################
+# NXP TVDD configurations settings
+# Allow NFCC to configure External TVDD, There are currently three
+#configurations (1, 2 and 3) are supported, out of them only one can be
+#supported.
+
+NXP_EXT_TVDD_CFG=0x01
+
+#config1:SLALM, 3.3V for both RM and CM
+NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
+
+#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
+#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
+NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 24, 08 }
+
+#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
+#DCDCWaitTime=4.2ms
+NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_1={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_2={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_3={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_4={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_5={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_6={
+#}
+
+###############################################################################
+## Set configuration optimization decision setting
+## Enable    = 0x01
+## Disable   = 0x00
+NXP_SET_CONFIG_ALWAYS=0x00
+
+###############################################################################
+# Core configuration extensions
+# It includes
+# Wired mode settings A0ED, A0EE
+# Tag Detector A040, A041, A043
+# Low Power mode A007
+# Clock settings A002, A003
+# PbF settings A008
+NXP_CORE_CONF_EXTN={20, 02, 19, 06,
+    A0, EC, 01, 01,
+    A0, ED, 01, 00,
+    A0, 5E, 01, 01,
+    A0, 40, 01, 01,
+    A0, DD, 01, 2D,
+    A0, 96, 01, 01
+    }
+#       A0, 41, 01, 02,
+#       A0, 43, 01, 04,
+#       A0, 02, 01, 01,
+#       A0, 03, 01, 11,
+#       A0, 07, 01, 03,
+#       A0, 08, 01, 01
+#       }
+
+###############################################################################
+# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
+        }
+###############################################################################
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+NXP_I2C_FRAGMENTATION_ENABLED=0x00
+
+###############################################################################
+# Core configuration settings
+NXP_CORE_CONF={ 20, 02, 2E, 0E,
+        28, 01, 00,
+        21, 01, 00,
+        30, 01, 08,
+        31, 01, 03,
+        32, 01, 60,
+        38, 01, 01,
+        33, 04, 01, 02, 03, 04,
+        54, 01, 06,
+        50, 01, 02,
+        5B, 01, 00,
+        80, 01, 01,
+        81, 01, 01,
+        82, 01, 0E,
+        18, 01, 01
+        }
+
+###############################################################################
+# Mifare Classic Key settings
+#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
+#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
+#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
+#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
+
+###############################################################################
+# Default SE Options
+# No secure element 0x00
+# eSE               0x01
+# UICC              0x02
+
+NXP_DEFAULT_SE=0x03
+
+###############################################################################
+#Enable SWP full power mode when phone is power off
+NXP_SWP_FULL_PWR_ON=0x00
+
+###############################################################################
+#### Select the CHIP ####
+#PN547C2            0x01
+#PN65T              0x02
+#PN548AD            0x03
+#PN66T              0x04
+#PN551              0x05
+#PN67T              0x06
+
+NXP_NFC_CHIP=0x05
+###############################################################################
+# CE when Screen state is locked
+# Disable           0x00
+# Enable            0x01
+NXP_CE_ROUTE_STRICT_DISABLE=0x01
+
+#Timeout in secs to get NFCEE Discover notification
+NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
+
+NXP_DEFAULT_NFCEE_TIMEOUT=0x06
+
+#Timeout in secs
+NXP_SWP_RD_START_TIMEOUT=0x0A
+
+#Timeout in secs
+NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
+
+###############################################################################
+#Set the default AID route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_AID_ROUTE=0x00
+
+###############################################################################
+#Set the Mifare Desfire route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_DESFIRE_ROUTE=0x02
+
+###############################################################################
+#Set the Mifare CLT route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_MIFARE_CLT_ROUTE=0x02
+
+###############################################################################
+#Set the default AID Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_AID_PWR_STATE=0x19
+
+###############################################################################
+#Set the Mifare Desfire Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_DESFIRE_PWR_STATE=0x1B
+
+###############################################################################
+#Set the Mifare CLT Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
+
+###############################################################################
+# AID Matching platform options
+# AID_MATCHING_L 0x01
+# AID_MATCHING_K 0x02
+AID_MATCHING_PLATFORM=0x01
+###############################################################################
+#CHINA_TIANJIN_RF_SETTING
+#Enable  0x01
+#Disable 0x00
+NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+###############################################################################
+#SWP_SWITCH_TIMEOUT_SETTING
+# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
+# Timeout in milliseconds, for example
+# No Timeout  0x00
+# 10 millisecond timeout 0x0A
+NXP_SWP_SWITCH_TIMEOUT=0x0A
+###############################################################################
+#Dynamic RSSI feature enable
+# Disable           0x00
+# Enable            0x01
+NXP_AGC_DEBUG_ENABLE=0x00
+###############################################################################
+# UICC mode supported
+# Disable           0x00
+# Enable            0x01
+NXP_DUAL_UICC_ENABLE=0x00
+###############################################################################
+#Config to allow adding aids
+#NFC on/off is required after this config
+#1 = enabling adding aid  to NFCC routing table.
+#0 = disabling adding aid to NFCC routing table.
+NXP_ENABLE_ADD_AID=0x01
+###############################################################################
+# Enable/Disable checking default proto SE Id
+# Disable           0x00
+# Enable            0x01
+NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
diff --git a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
index 62f5fdb..fab964c 100644
--- a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
@@ -66,7 +66,7 @@
 
 ###############################################################################
 # Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 #Atonomous Mode
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index 71d42bb..24954cb 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -72,7 +72,7 @@
 
 ###############################################################################
 # Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 # NXP TVDD configurations settings
@@ -374,6 +374,11 @@
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+###############################################################################
+# UICC mode supported
+# Disable           0x00
+# Enable            0x01
+NXP_DUAL_UICC_ENABLE=0x00
 #################################################################################
 # JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
 # JCOP CP TIMEOUT
@@ -383,3 +388,9 @@
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+###############################################################################
+#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
+#Enable/Disable block number checks for china transit use case
+#Enable  0x01
+#Disable  0x00
+NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
new file mode 100644
index 0000000..5c5aabe
--- /dev/null
+++ b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
@@ -0,0 +1,397 @@
+## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
+## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
+
+###############################################################################
+# Application options
+# Logging Levels
+# NXPLOG_DEFAULT_LOGLEVEL    0x01
+# ANDROID_LOG_DEBUG          0x03
+# ANDROID_LOG_WARN           0x02
+# ANDROID_LOG_ERROR          0x01
+# ANDROID_LOG_SILENT         0x00
+#
+NXPLOG_EXTNS_LOGLEVEL=0x03
+NXPLOG_NCIHAL_LOGLEVEL=0x03
+NXPLOG_NCIX_LOGLEVEL=0x03
+NXPLOG_NCIR_LOGLEVEL=0x03
+NXPLOG_FWDNLD_LOGLEVEL=0x03
+NXPLOG_TML_LOGLEVEL=0x03
+
+###############################################################################
+# Nfc Device Node name
+NXP_NFC_DEV_NODE="/dev/pn544"
+
+###############################################################################
+# Extension for Mifare reader enable
+MIFARE_READER_ENABLE=0x01
+
+###############################################################################
+# Vzw Feature enable
+VZW_FEATURE_ENABLE=0x01
+
+###############################################################################
+# File name for Firmware
+NXP_FW_NAME="libpn551_fw.so"
+
+###############################################################################
+# System clock source selection configuration
+#define CLK_SRC_XTAL       1
+#define CLK_SRC_PLL        2
+
+NXP_SYS_CLK_SRC_SEL=0x01
+
+###############################################################################
+# System clock frequency selection configuration
+#define CLK_FREQ_13MHZ         1
+#define CLK_FREQ_19_2MHZ       2
+#define CLK_FREQ_24MHZ         3
+#define CLK_FREQ_26MHZ         4
+#define CLK_FREQ_38_4MHZ       5
+#define CLK_FREQ_52MHZ         6
+
+NXP_SYS_CLK_FREQ_SEL=0x01
+
+###############################################################################
+# The timeout value to be used for clock request acknowledgment
+# min value = 0x01 to max = 0x06
+
+NXP_SYS_CLOCK_TO_CFG=0x06
+
+###############################################################################
+# NXP proprietary settings
+NXP_ACT_PROP_EXTN={2F, 02, 00}
+
+###############################################################################
+# NFC forum profile settings
+NXP_NFC_PROFILE_EXTN={20, 02, 05, 01, A0, 44, 01, 00}
+
+###############################################################################
+# NFCC Configuration Control
+# Allow NFCC to manage RF Config       0x01
+# Don't allow NFCC to manage RF Config 0x00
+NXP_NFC_MERGE_RF_PARAMS={20, 02, 04, 01, 85, 01, 01}
+
+###############################################################################
+# Standby enable settings
+#NXP_CORE_STANDBY={2F, 00, 01, 01}
+
+
+###############################################################################
+# NXP TVDD configurations settings
+# Allow NFCC to configure External TVDD, There are currently three
+#configurations (1, 2 and 3) are supported, out of them only one can be
+#supported.
+
+NXP_EXT_TVDD_CFG=0x01
+
+#config1:SLALM, 3.3V for both RM and CM
+NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
+
+#config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
+#monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
+NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 24, 08 }
+
+#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
+#DCDCWaitTime=4.2ms
+NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_1={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_2={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_3={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_4={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_5={
+#}
+
+###############################################################################
+# NXP RF configuration ALM/PLM settings
+# This section needs to be updated with the correct values based on the platform
+#NXP_RF_CONF_BLK_6={
+#}
+
+
+###############################################################################
+# Set configuration optimization decision setting
+# Enable    = 0x01
+# Disable   = 0x00
+NXP_SET_CONFIG_ALWAYS=0x00
+
+###############################################################################
+# Core configuration extensions
+# It includes
+# Wired mode settings A0ED, A0EE
+# Tag Detector A040, A041, A043
+# Low Power mode A007
+# Clock settings A002, A003
+# PbF settings A008
+# Clock timeout settings A004
+NXP_CORE_CONF_EXTN={20, 02, 21, 08,
+    A0, EC, 01, 01,
+    A0, ED, 01, 03,
+    A0, 5E, 01, 01,
+    A0, 12, 01, 02,
+    A0, 40, 01, 01,
+    A0, DD, 01, 2D,
+    A0, F2, 01, 01,
+    A0, 96, 01, 01
+    }
+#       A0, 41, 01, 02,
+#       A0, 43, 01, 04,
+#       A0, 02, 01, 01,
+#       A0, 03, 01, 11,
+#       A0, 07, 01, 03,
+#       A0, 08, 01, 01
+#       }
+
+###############################################################################
+# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
+        }
+###############################################################################
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+NXP_I2C_FRAGMENTATION_ENABLED=0x00
+
+###############################################################################
+# Core configuration settings
+NXP_CORE_CONF={ 20, 02, 2E, 0E,
+        28, 01, 00,
+        21, 01, 00,
+        30, 01, 08,
+        31, 01, 03,
+        32, 01, 60,
+        38, 01, 01,
+        33, 04, 01, 02, 03, 04,
+        54, 01, 06,
+        50, 01, 02,
+        5B, 01, 00,
+        80, 01, 01,
+        81, 01, 01,
+        82, 01, 0E,
+        18, 01, 01
+        }
+
+###############################################################################
+# Mifare Classic Key settings
+#NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5,
+#                                     A0, 52, 06, D3, F7, D3, F7, D3, F7,
+#                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
+#                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
+
+###############################################################################
+# Default SE Options
+# No secure element 0x00
+# eSE               0x01
+# UICC              0x02
+
+NXP_DEFAULT_SE=0x03
+
+###############################################################################
+#Enable SWP full power mode when phone is power off
+NXP_SWP_FULL_PWR_ON=0x00
+
+###############################################################################
+#### Select the CHIP ####
+#PN547C2            0x01
+#PN65T              0x02
+#PN548AD            0x03
+#PN66T              0x04
+#PN551              0x05
+#PN67T              0x06
+NXP_NFC_CHIP=0x06
+
+###############################################################################
+# CE when Screen state is locked
+# Disable           0x00
+# Enable            0x01
+NXP_CE_ROUTE_STRICT_DISABLE=0x01
+
+#Timeout in secs to get NFCEE Discover notification
+NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
+
+NXP_DEFAULT_NFCEE_TIMEOUT=0x06
+
+#Timeout in secs
+NXP_SWP_RD_START_TIMEOUT=0x0A
+
+#Timeout in secs
+NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
+
+###############################################################################
+
+#Set the default AID route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_AID_ROUTE=0x00
+
+###############################################################################
+#Set the Mifare Desfire route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_DESFIRE_ROUTE=0x02
+
+###############################################################################
+#Set the Mifare CLT route Location :
+#This settings will be used when application does not set this parameter
+# host 0x00
+# eSE  0x01
+# UICC 0x02
+DEFAULT_MIFARE_CLT_ROUTE=0x02
+###############################################################################
+#Set the default AID Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_AID_PWR_STATE=0x19
+
+###############################################################################
+#Set the Mifare Desfire Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_DESFIRE_PWR_STATE=0x1B
+
+###############################################################################
+#Set the Mifare CLT Power state :
+#This settings will be used when application does not set this parameter
+# bit pos 0 = Switch On
+# bit pos 1 = Switch Off
+# bit pos 2 = Battery Off
+# bit pos 3 = Screen Lock
+# bit pos 4 = Screen Off
+DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
+
+###############################################################################
+# AID Matching platform options
+# AID_MATCHING_L 0x01
+# AID_MATCHING_K 0x02
+AID_MATCHING_PLATFORM=0x01
+###############################################################################
+# P61 interface options
+# NFC 0x01
+# SPI 0x02
+NXP_P61_LS_DEFAULT_INTERFACE=0x01
+###############################################################################
+# P61 LTSM interface options
+# NFC 0x01
+# SPI 0x02
+NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+###############################################################################
+#CHINA_TIANJIN_RF_SETTING
+#Enable  0x01
+#Disable  0x00
+NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+###############################################################################
+#SWP_SWITCH_TIMEOUT_SETTING
+# Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
+# Timeout in milliseconds, for example
+# No Timeout  0x00
+# 10 millisecond timeout 0x0A
+NXP_SWP_SWITCH_TIMEOUT=0x0A
+###############################################################################
+# P61 interface options for JCOP Download
+# NFC 0x01
+# SPI 0x02
+NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+###############################################################################
+# P61 JCOP OS download  options
+# FRAMEWORK API BY APPLICATION 0x00
+# AT BOOT_TIME 0x01
+NXP_JCOPDL_AT_BOOT_ENABLE=0x00
+
+###############################################################################
+# Loader service version
+# NFC service checks for LS version 2.0 or 2.1
+# LS2.0 0x20
+# LS2.1 0x21
+# LS2.2 0x22
+# AT NFC service intialization
+NXP_LOADER_SERVICE_VERSION=0x22
+###############################################################################
+#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000 msec to 20000 msec and zero is to disable.
+NXP_NFCC_STANDBY_TIMEOUT=20000
+
+###############################################################################
+#Dynamic RSSI feature enable
+# Disable           0x00
+# Enable            0x01
+NXP_AGC_DEBUG_ENABLE=0x00
+###############################################################################
+#Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
+# For Technology routing to ESE Technology Mask = 4
+# For ISO-DEP Protocol routing to ESE Mask      = 2
+# It can also take TECH|PROTO    = 6
+# To ignore the delay set mask to = 0
+NXP_ESE_WIRED_PRT_MASK=0x00
+
+###############################################################################
+#Virtual Mode UICC and Wired Mode  ongoing delay Wired Mode
+#For Technology routing to UICC Technology Mask = 4
+#For ISO-DEP Protocol routing to UICC set Mask  = 2
+#For Select AID Routing to UICC       set Mask  = 1
+#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay  set mask = 0
+NXP_UICC_WIRED_PRT_MASK=0x00
+
+################################################################################
+#RF field true delay Wired Mode
+# delay wired mode = 1
+# allow wired mode = 0
+NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
+
+###############################################################################
+# UICC mode supported
+# Disable           0x00
+# Enable            0x01
+NXP_DUAL_UICC_ENABLE=0x00
+###############################################################################
+#Config to allow adding aids
+#NFC on/off is required after this config
+#1 = enabling adding aid  to NFCC routing table.
+#0 = disabling adding aid to NFCC routing table.
+NXP_ENABLE_ADD_AID=0x01
+#################################################################################
+# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
+# JCOP CP TIMEOUT
+NXP_CP_TIMEOUT={00, 77}
+###############################################################################
+# Enable/Disable checking default proto SE Id
+# Disable           0x00
+# Enable            0x01
+NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+###############################################################################
+#NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
+#Enable/Disable block number checks for china transit use case
+#Enable  0x01
+#Disable  0x00
+NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
\ No newline at end of file
diff --git a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
index b5bdf1d..a3e4ef4 100644
--- a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
+++ b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
@@ -105,7 +105,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 }
@@ -175,7 +177,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 }
@@ -243,7 +247,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 } /* exp_rsp */
@@ -300,7 +306,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 } /* exp_rsp */
@@ -401,7 +409,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 } /* exp_rsp */
@@ -540,7 +550,9 @@
 #endif
         },
         {
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_CHIP_TYPE == PN551)
+            0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
+#elif(NFC_NXP_CHIP_TYPE == PN548C2)
             0x4, {0x40,0x01,0x19,0x00 } /* exp_rsp */
 #else
             0x4, {0x40,0x01,0x17,0x00 } /* exp_rsp */
@@ -1175,6 +1187,7 @@
 
     NXPLOG_NCIHAL_D("Self test thread stopped");
 
+    pthread_exit(NULL);
     return NULL;
 }
 
@@ -1419,15 +1432,15 @@
         NXPLOG_NCIHAL_E("malloc of nfc_dev_node failed ");
         goto clean_and_return;
     }
-    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, nfc_dev_node, sizeof (nfc_dev_node)))
+    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, (char*)nfc_dev_node, sizeof (nfc_dev_node)))
     {
         NXPLOG_NCIHAL_E("Invalid nfc device node name keeping the default device node /dev/pn544");
-        strcpy (nfc_dev_node, "/dev/pn544");
+        strcpy ((char *)nfc_dev_node, "/dev/pn544");
     }
 
     gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
     gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C;/* For PN54X */
-    tTmlConfig.pDevName = (uint8_t *) nfc_dev_node;
+    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
     tOsalConfig.dwCallbackThreadId = (uintptr_t) gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
     tTmlConfig.dwGetMsgThreadId = (uintptr_t) gDrvCfg.nClientId;
@@ -1624,7 +1637,7 @@
 
     nci_test_data_t prbs_cmd_data;
 
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
     prbs_cmd_data.cmd.len = 0x09;
 #else
@@ -1747,7 +1760,7 @@
 
     NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - tech 0x%x bitrate = 0x%x", tech, bitrate);
     if(NULL == prbs_cmd ||
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
             prbs_cmd_len != 0x09)
 #else
             prbs_cmd_len != 0x07)
@@ -1758,7 +1771,7 @@
 
     prbs_cmd[0] = 0x2F;
     prbs_cmd[1] = 0x30;
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     prbs_cmd[2] = 0x06;
     prbs_cmd[3] = (uint8_t)prbs_type;
     //0xFF Error value used for validation.
diff --git a/halimpl/pn54x/tml/phTmlNfc.c b/halimpl/pn54x/tml/phTmlNfc.c
index be19b25..87cbfd9 100644
--- a/halimpl/pn54x/tml/phTmlNfc.c
+++ b/halimpl/pn54x/tml/phTmlNfc.c
@@ -33,6 +33,7 @@
  */
 #define PHTMLNFC_MAXTIME_RETRANSMIT (200U)
 #define MAX_WRITE_RETRY_COUNT 0x03
+#define MAX_READ_RETRY_COUNT 0x05
 /* Retry Count = Standby Recovery time of NFCC / Retransmission time + 1 */
 static uint8_t bCurrentRetryCount = (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
 
@@ -45,7 +46,7 @@
 
 /* Initialize Context structure pointer used to access context structure */
 phTmlNfc_Context_t *gpphTmlNfc_Context = NULL;
-extern phTmlNfc_i2cfragmentation_t fragmentation_enabled = I2C_FRAGMENATATION_DISABLED;
+extern phTmlNfc_i2cfragmentation_t fragmentation_enabled;
 /* Local Function prototypes */
 static NFCSTATUS phTmlNfc_StartThread(void);
 static void phTmlNfc_CleanUp(void);
@@ -116,7 +117,7 @@
             if (NFCSTATUS_SUCCESS != wInitStatus)
             {
                 wInitStatus = PHNFCSTVAL(CID_NFC_TML, NFCSTATUS_INVALID_DEVICE);
-                gpphTmlNfc_Context->pDevHandle = (void *) NFCSTATUS_INVALID_DEVICE;
+                gpphTmlNfc_Context->pDevHandle = NULL;
             }
             else
             {
@@ -346,6 +347,7 @@
     NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
     int32_t dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
     uint8_t temp[260];
+    static uint8_t read_count = 0;
     /* Transaction info buffer to be passed to Callback Thread */
     static phTmlNfc_TransactInfo_t tTransactionInfo;
     /* Structure containing Tml callback function and parameters to be invoked
@@ -375,7 +377,7 @@
             dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
 
             /* Read the data from the file onto the buffer */
-            if (NFCSTATUS_INVALID_DEVICE != (uintptr_t)gpphTmlNfc_Context->pDevHandle)
+            if (((uintptr_t)gpphTmlNfc_Context->pDevHandle) > 0)
             {
                 NXPLOG_TML_D("PN54X - Invoking I2C Read.....\n");
                 dwNoBytesWrRd = phTmlNfc_i2c_read(gpphTmlNfc_Context->pDevHandle, temp, 260);
@@ -383,17 +385,41 @@
                 if (-1 == dwNoBytesWrRd)
                 {
                     NXPLOG_TML_E("PN54X - Error in I2C Read.....\n");
+                    if(read_count < MAX_READ_RETRY_COUNT)
+                    {
+                        read_count++;
+                    }
+                    else
+                    {
+                        /* Fill the Transaction info structure to be passed to Callback Function */
+                        tTransactionInfo.wStatus = NFCSTATUS_READ_FAILED;
+                        //tTransactionInfo.pBuff = gpphTmlNfc_Context->tReadInfo.pBuffer;
+                        /* Actual number of bytes read is filled in the structure */
+                        //tTransactionInfo.wLength = gpphTmlNfc_Context->tReadInfo.wLength;
+
+                        /* Read operation Failed. Post a Message onto Callback Thread*/
+                        /* Prepare the message to be posted on User thread */
+                        tDeferredInfo.pCallback = &phTmlNfc_ReadDeferredCb;
+                        tDeferredInfo.pParameter = &tTransactionInfo;
+                        tMsg.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
+                        tMsg.pMsgData = &tDeferredInfo;
+                        tMsg.Size = sizeof(tDeferredInfo);
+                        NXPLOG_TML_D("PN54X - Posting read failure message.....\n");
+                        phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
+                        return;
+                    }
                     sem_post(&gpphTmlNfc_Context->rxSemaphore);
                 }
                 else if(dwNoBytesWrRd > 260)
                 {
                     NXPLOG_TML_E("Numer of bytes read exceeds the limit 260.....\n");
+                    read_count = 0;
                     sem_post(&gpphTmlNfc_Context->rxSemaphore);
                 }
                 else
                 {
                     memcpy(gpphTmlNfc_Context->tReadInfo.pBuffer, temp, dwNoBytesWrRd);
-
+                    read_count = 0;
                     NXPLOG_TML_D("PN54X - I2C Read successful.....\n");
                     /* This has to be reset only after a successful read */
                     gpphTmlNfc_Context->tReadInfo.bEnable = 0;
@@ -491,7 +517,7 @@
             NXPLOG_TML_D("PN54X - Write requested.....\n");
             /* Set the variable to success initially */
             wStatus = NFCSTATUS_SUCCESS;
-            if (NFCSTATUS_INVALID_DEVICE != (uintptr_t)gpphTmlNfc_Context->pDevHandle)
+            if (((uintptr_t)gpphTmlNfc_Context->pDevHandle) > 0)
             {
                 retry:
 
@@ -574,7 +600,7 @@
             }
             else
             {
-                NXPLOG_TML_D("PN54X - NFCSTATUS_INVALID_DEVICE != gpphTmlNfc_Context->pDevHandle");
+                NXPLOG_TML_D("PN54X - NFCSTATUS_INVALID_DEVICE == gpphTmlNfc_Context->pDevHandle");
             }
 
             /* If Data packet is sent, then NO retransmission */
@@ -921,29 +947,27 @@
         switch (eControlCode)
         {
             case phTmlNfc_e_ResetDevice:
-                {
-                    /*Reset PN54X*/
-                    phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
-                    usleep(100 * 1000);
-                    phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
-                    usleep(100 * 1000);
-                    phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
-                    break;
-                }
             case phTmlNfc_e_EnableNormalMode:
                 {
+                    /*Block reader thread until VEN Toggling is completed*/
                     /*Reset PN54X*/
+                    gpphTmlNfc_Context->tReadInfo.bEnable = 0;
                     phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
                     usleep(10 * 1000);
                     phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
                     usleep(100 * 1000);
+                    gpphTmlNfc_Context->tReadInfo.bEnable = 1;
+                    sem_post(&gpphTmlNfc_Context->rxSemaphore);
                     break;
                 }
             case phTmlNfc_e_EnableDownloadMode:
                 {
                     phTmlNfc_ConfigNciPktReTx(phTmlNfc_e_DisableRetrans, 0);
+                    gpphTmlNfc_Context->tReadInfo.bEnable = 0;
                     (void)phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle,2);
                     usleep(100 * 1000);
+                    gpphTmlNfc_Context->tReadInfo.bEnable = 1;
+                    sem_post(&gpphTmlNfc_Context->rxSemaphore);
                     break;
                 }
 #if(NFC_NXP_ESE == TRUE)
@@ -977,6 +1001,9 @@
                 wStatus = phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 3);
                 break;
             }
+            case phTmlNfc_e_RelP61Access:
+                wStatus = phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 4);
+                break;
 #endif
             default:
                 {
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
index 64d4360..ce12db9 100644
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ b/halimpl/pn54x/tml/phTmlNfc.h
@@ -106,7 +106,8 @@
     phTmlNfc_e_SetP61WiredMode, /* Set the current P61 mode of operation to Wired*/
     phTmlNfc_e_SetP61IdleMode, /* Set the current P61 mode of operation to Idle*/
     phTmlNfc_e_SetP61DisableMode, /* Set the ese vdd gpio to low*/
-    phTmlNfc_e_SetP61EnableMode /* Set the ese vdd gpio to high*/
+    phTmlNfc_e_SetP61EnableMode, /* Set the ese vdd gpio to high*/
+    phTmlNfc_e_RelP61Access /*Release the P61 lock*/
 
 #endif
 } phTmlNfc_ControlCode_t ;  /* Control code for IOCTL call */
@@ -211,6 +212,7 @@
 NFCSTATUS phTmlNfc_WriteAbort(void);
 NFCSTATUS phTmlNfc_ReadAbort(void);
 NFCSTATUS phTmlNfc_IoCtl(phTmlNfc_ControlCode_t eControlCode);
+NFCSTATUS phTmlNfc_get_ese_access(void *pDevHandle, long timeout);
 void phTmlNfc_DeferredCall(uintptr_t dwThreadId, phLibNfc_Message_t *ptWorkerMsg);
 void phTmlNfc_ConfigNciPktReTx( phTmlNfc_ConfigRetrans_t eConfig, uint8_t bRetryCount);
 void phTmlNfc_set_fragmentation_enabled(phTmlNfc_i2cfragmentation_t enable);
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.c b/halimpl/pn54x/tml/phTmlNfc_i2c.c
index 20c45b5..bc1e13b 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.c
@@ -85,7 +85,7 @@
 
     NXPLOG_TML_D("Opening port=%s\n", pConfig->pDevName);
     /* open port */
-    nHandle = open((char const *)pConfig->pDevName, O_RDWR);
+    nHandle = open((const char *)pConfig->pDevName, O_RDWR);
     if (nHandle < 0)
     {
         NXPLOG_TML_E("_i2c_open() Failed: retval %x",nHandle);
@@ -455,6 +455,41 @@
     wStatus = p61_current_state;
     return wStatus;
 }
+/*******************************************************************************
+**
+** Function         phTmlNfc_get_ese_access
+**
+** Description
+**
+** Parameters       pDevHandle     - valid device handle
+**                  timeout - timeout to wait for ese access
+**
+** Returns          success or failure
+**
+*******************************************************************************/
+NFCSTATUS phTmlNfc_get_ese_access(void *pDevHandle, long timeout)
+{
+    int ret = -1;
+    NFCSTATUS status = NFCSTATUS_SUCCESS;
+    NXPLOG_TML_D("phTmlNfc_get_ese_access(), enter timeout  %ld", timeout);
+
+    if (NULL == pDevHandle)
+    {
+        return NFCSTATUS_FAILED;
+    }
+
+    ret = ioctl((intptr_t)pDevHandle, P544_GET_ESE_ACCESS, timeout);
+    if (ret < 0)
+    {
+        if (ret == -EBUSY)
+            status = NFCSTATUS_BUSY;
+        else
+            status = NFCSTATUS_FAILED;
+    }
+    NXPLOG_TML_D("phTmlNfc_get_ese_access(), exit ret %d, status %d", ret, status);
+    return status;
+}
+
 #endif
 /*******************************************************************************
 **
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
index 22aba63..fb8cce8 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.h
@@ -70,4 +70,8 @@
 */
 #define P544_SET_NFC_SERVICE_PID _IOW(PN544_MAGIC, 0x05, long)
 
+/*
+  NFC and SPI will call the ioctl to get the i2c/spi bus access
+*/
+#define P544_GET_ESE_ACCESS _IOW(PN544_MAGIC, 0x06, long)
 #endif
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index 79da1cd..a337bc4 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -58,7 +58,11 @@
 #endif
 
 #define config_name             "libnfc-nxp.conf"
+#if (NXP_EXTNS == TRUE)
+#define extra_config_base       "libnfc-"
+#else
 #define extra_config_base       "libnfc-nxp-"
+#endif
 #define extra_config_ext        ".conf"
 #define     IsStringValue       0x80000000
 
@@ -237,8 +241,19 @@
             moveToList();
     }
 
-    while (!feof(fd) && fread(&c, 1, 1, fd) == 1)
+    for (;;)
     {
+        if (feof(fd) || fread(&c, 1, 1, fd) != 1)
+        {
+            if (state == BEGIN_LINE)
+                break;
+
+            // got to the EOF but not in BEGIN_LINE state so the file
+            // probably does not end with a newline, so the parser has
+            // not processed current line, simulate a newline in the file
+            c = '\n';
+        }
+
         switch (state & 0xff)
         {
         case BEGIN_LINE:
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 994be49..dd0d48e 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -87,6 +87,7 @@
 #define NAME_NXP_CORE_STANDBY        "NXP_CORE_STANDBY"
 #define NAME_NXP_NFC_PROFILE_EXTN    "NXP_NFC_PROFILE_EXTN"
 #define NAME_NXP_CHINA_TIANJIN_RF_ENABLED  "NXP_CHINA_TIANJIN_RF_ENABLED"
+#define NAME_NXP_CHINA_BLK_NUM_CHK_ENABLE  "NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE"
 #define NAME_NXP_SWP_SWITCH_TIMEOUT  "NXP_SWP_SWITCH_TIMEOUT"
 #define NAME_NXP_SWP_FULL_PWR_ON     "NXP_SWP_FULL_PWR_ON"
 #define NAME_NXP_CORE_RF_FIELD       "NXP_CORE_RF_FIELD"
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 1260fca..26078ef 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -41,6 +41,8 @@
     #include "gki.h"
     #include "nfa_api.h"
     #include "nfc_int.h"
+    #include "nfc_target.h"
+    #include "vendor_cfg.h"
 }
 #include "config.h"
 #include "android_logmsg.h"
@@ -74,13 +76,16 @@
 char nci_hal_module[64];
 
 static UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ];
+static UINT8 nfa_proprietary_cfg[sizeof ( tNFA_PROPRIETARY_CFG )];
 extern tNFA_DM_CFG *p_nfa_dm_cfg;
+extern tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg;
 extern UINT8 nfa_ee_max_ee_cfg;
 extern const UINT8  nfca_version_string [];
 extern const UINT8  nfa_version_string [];
 static UINT8 deviceHostWhiteList [NFA_HCI_MAX_HOST_IN_NETWORK];
 static tNFA_HCI_CFG jni_nfa_hci_cfg;
 extern tNFA_HCI_CFG *p_nfa_hci_cfg;
+extern BOOLEAN nfa_poll_bail_out_mode;
 
 /*******************************************************************************
 **
@@ -161,14 +166,23 @@
     initializeProtocolLogLevel ();
 
     if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) )
-        p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0];
+        p_nfa_dm_cfg = ( tNFA_DM_CFG * ) ((void*)&nfa_dm_cfg[0]);
 
     if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) )
     {
         nfa_ee_max_ee_cfg = num;
         ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
     }
+    if ( GetNumValue ( NAME_NFA_POLL_BAIL_OUT_MODE, &num, sizeof ( num ) ) )
+    {
+        nfa_poll_bail_out_mode = num;
+        ALOGD("%s: Overriding NFA_POLL_BAIL_OUT_MODE to use %d", func, nfa_poll_bail_out_mode);
+    }
 
+    if ( GetStrValue ( NAME_NFA_PROPRIETARY_CFG, (char*)nfa_proprietary_cfg, sizeof ( tNFA_PROPRIETARY_CFG ) ) )
+    {
+        p_nfa_proprietary_cfg = (tNFA_PROPRIETARY_CFG*)(void*)( &nfa_proprietary_cfg[0]);
+    }
     //configure device host whitelist of HCI host ID's; see specification ETSI TS 102 622 V11.1.10
     //(2012-10), section 6.1.3.1
     num = GetStrValue ( NAME_DEVICE_HOST_WHITE_LIST, (char*) deviceHostWhiteList, sizeof ( deviceHostWhiteList ) );
@@ -290,6 +304,7 @@
 UINT32 NfcAdaptation::NFCA_TASK (UINT32 arg)
 {
     const char* func = "NfcAdaptation::NFCA_TASK";
+    (void)(arg);
     ALOGD ("%s: enter", func);
     GKI_run (0);
     ALOGD ("%s: exit", func);
@@ -308,6 +323,7 @@
 UINT32 NfcAdaptation::Thread (UINT32 arg)
 {
     const char* func = "NfcAdaptation::Thread";
+    (void)(arg);
     ALOGD ("%s: enter", func);
 
     {
@@ -671,7 +687,9 @@
     static UINT8 cmd_init_nci[]  = {0x20,0x01,0x00};
     static UINT8 cmd_reset_nci_size = sizeof(cmd_reset_nci) / sizeof(UINT8);
     static UINT8 cmd_init_nci_size  = sizeof(cmd_init_nci)  / sizeof(UINT8);
+    tNFC_FWUpdate_Info_t fw_update_inf;
     UINT8 p_core_init_rsp_params;
+    UINT8 fw_dwnld_status = NFC_STATUS_FAILED;
 #endif
     HalInitialize ();
 
@@ -693,9 +711,23 @@
     HalWrite(cmd_init_nci_size , cmd_init_nci);
     mHalCoreInitCompletedEvent.wait();
     mHalInitCompletedEvent.lock ();
-    ALOGD ("%s: try init HAL", func);
-    HalCoreInitialized (&p_core_init_rsp_params);
-    mHalInitCompletedEvent.wait ();
+
+    mHalEntryFuncs.ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &fw_update_inf);
+    NFC_TRACE_DEBUG1 ("fw_update required  -> %d", fw_update_inf.fw_update_reqd);
+    if(fw_update_inf.fw_update_reqd == TRUE)
+    {
+        mHalEntryFuncs.ioctl(HAL_NFC_IOCTL_FW_DWNLD, &fw_dwnld_status);
+        if (fw_dwnld_status !=  NFC_STATUS_OK)
+        {
+            ALOGD ("%s: FW Download failed", func);
+        }
+        else
+        {
+            ALOGD ("%s: try init HAL", func);
+            HalCoreInitialized (&p_core_init_rsp_params);
+            mHalInitCompletedEvent.wait ();
+        }
+    }
 #endif
 
     mHalCloseCompletedEvent.lock ();
@@ -719,6 +751,7 @@
 void NfcAdaptation::HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status)
 {
     const char* func = "NfcAdaptation::HalDownloadFirmwareCallback";
+    (void)(event_status);
     ALOGD ("%s: event=0x%X", func, event);
     switch (event)
     {
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index 7e96e82..7b9acab 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -46,7 +46,11 @@
 const char transport_config_path[] = "/etc/";
 
 #define config_name             "libnfc-brcm.conf"
+#if(NXP_EXTNS == TRUE)
+#define extra_config_base       "libnfc-"
+#else
 #define extra_config_base       "libnfc-brcm-"
+#endif
 #define extra_config_ext        ".conf"
 #define     IsStringValue       0x80000000
 
@@ -72,8 +76,7 @@
 public:
     virtual ~CNfcConfig();
     static CNfcConfig& GetInstance();
-    friend void readOptionalConfig(const char* optional);
-
+    friend void readOptionalConfigExt(const char* optional);
     bool    getValue(const char* name, char* pValue, size_t& len) const;
     bool    getValue(const char* name, unsigned long& rValue) const;
     bool    getValue(const char* name, unsigned short & rValue) const;
@@ -416,6 +419,10 @@
         strPath.assign(transport_config_path);
         strPath += config_name;
         theInstance.readConfig(strPath.c_str(), true);
+#if(NXP_EXTNS == TRUE)
+        readOptionalConfigExt("nxp");
+#endif
+
     }
 
     return theInstance;
@@ -758,7 +765,7 @@
 ** Returns:     none
 **
 *******************************************************************************/
-void readOptionalConfig(const char* extra)
+void readOptionalConfigExt(const char* extra)
 {
     string strPath;
     strPath.assign(transport_config_path);
diff --git a/src/adaptation/libmain.c b/src/adaptation/libmain.c
index 93b4942..3ab046e 100644
--- a/src/adaptation/libmain.c
+++ b/src/adaptation/libmain.c
@@ -21,6 +21,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <nfa_nv_ci.h>
 #include "buildcfg.h"
 #include "nfa_nv_co.h"
 #include "config.h"
diff --git a/src/gki/ulinux/gki_ulinux.c b/src/gki/ulinux/gki_ulinux.c
index bea706a..e9562cb 100755
--- a/src/gki/ulinux/gki_ulinux.c
+++ b/src/gki/ulinux/gki_ulinux.c
@@ -234,6 +234,8 @@
     int policy, ret = 0;
     pthread_condattr_t attr;
     pthread_attr_t attr1;
+    (void)stack;
+    (void)stacksize;
 
     pthread_condattr_init(&attr);
     pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
@@ -360,8 +362,8 @@
 
 #if ( FALSE == GKI_PTHREAD_JOINABLE )
             i = 0;
-            while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 10))
-                usleep(100 * 1000);
+            while ((gki_cb.com.OSWaitEvt[task_id - 1] != 0) && (++i < 5))
+                usleep(2 * 1000);
 #else
             /* wait for proper Arnold Schwarzenegger task state */
             result = pthread_join( gki_cb.os.thread_id[task_id-1], NULL );
@@ -509,6 +511,7 @@
     int err = 0;
 #if(NXP_EXTNS == TRUE)
     UINT8 rtask = 0;
+    (void)p_task_id;
 #endif
     volatile int * p_run_cond = &gki_cb.os.no_timer_suspend;
 #if (NXP_EXTNS == TRUE)
@@ -1186,6 +1189,7 @@
 *******************************************************************************/
 UINT8 GKI_suspend_task (UINT8 task_id)
 {
+    (void)task_id;
     GKI_TRACE_1("GKI_suspend_task %d - NOT implemented", task_id);
 
 
@@ -1212,6 +1216,8 @@
 *******************************************************************************/
 UINT8 GKI_resume_task (UINT8 task_id)
 {
+    (void)task_id;
+
     GKI_TRACE_1("GKI_resume_task %d - NOT implemented", task_id);
 
 
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index e8c09a0..34baed2 100755
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -373,7 +373,7 @@
 #define NCI_INTERFACE_FIRST_VS          0x80
 #if (NXP_EXTNS == TRUE)
 #define NCI_INTERFACE_MIFARE            0x80
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 #define NCI_INTERFACE_UICC_DIRECT       0x82
 #define NCI_INTERFACE_ESE_DIRECT        0x83
 #else
@@ -412,53 +412,6 @@
  * Proprietary Protocols
  **********************************************/
 #if (NXP_EXTNS == TRUE)
-#ifndef NCI_PROTOCOL_ISO7816
-#define NCI_PROTOCOL_ISO7816             0xA0
-#endif
-#ifndef NCI_PROTOCOL_MIFARE
-#define NCI_PROTOCOL_MIFARE             0x80
-#endif
-#ifndef NCI_PROTOCOL_18092_ACTIVE
-#define NCI_PROTOCOL_18092_ACTIVE       0x05
-#endif
-#else
-#ifndef NCI_PROTOCOL_MIFARE
-#define NCI_PROTOCOL_MIFARE             0xFF
-#endif
-#ifndef NCI_PROTOCOL_18092_ACTIVE
-#define NCI_PROTOCOL_18092_ACTIVE       0x80
-#endif
-#endif
-
-#ifndef NCI_PROTOCOL_B_PRIME
-#define NCI_PROTOCOL_B_PRIME            0x81
-#endif
-#ifndef NCI_PROTOCOL_DUAL
-#define NCI_PROTOCOL_DUAL               0x82
-#endif
-#if (NXP_EXTNS == TRUE)
-#ifndef NCI_PROTOCOL_15693
-#define NCI_PROTOCOL_15693              0x06
-#endif
-#else
-#ifndef NCI_PROTOCOL_15693
-#define NCI_PROTOCOL_15693              0x83
-#endif
-#endif
-
-
-#ifndef NCI_PROTOCOL_KOVIO
-#if (NXP_EXTNS == TRUE)
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
-#define NCI_PROTOCOL_KOVIO              0x81
-#else
-#define NCI_PROTOCOL_KOVIO              0x8A
-#endif
-#else
-#define NCI_PROTOCOL_KOVIO              0x8A
-#endif
-#endif
-#if(NXP_EXTNS == TRUE)
 #ifndef NCI_PROTOCOL_T3BT
 #define NCI_PROTOCOL_T3BT               0x8b
 #endif
@@ -471,22 +424,11 @@
 #define NCI_DISCOVERY_TYPE_POLL_F               0x02
 #define NCI_DISCOVERY_TYPE_POLL_A_ACTIVE        0x03
 #define NCI_DISCOVERY_TYPE_POLL_F_ACTIVE        0x05
-#define NCI_DISCOVERY_TYPE_POLL_B_PRIME         0x74
-#if (NXP_EXTNS == TRUE)
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO           0x70
-#else
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO           0x77
-#endif
-#else
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO           0x77
-#endif
 #define NCI_DISCOVERY_TYPE_LISTEN_A             0x80
 #define NCI_DISCOVERY_TYPE_LISTEN_B             0x81
 #define NCI_DISCOVERY_TYPE_LISTEN_F             0x82
 #define NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE      0x83
 #define NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE      0x85
-#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME       0xF4
 #define NCI_DISCOVERY_TYPE_POLL_ISO15693        0x06
 #define NCI_DISCOVERY_TYPE_LISTEN_ISO15693      0x86
 #define NCI_DISCOVERY_TYPE_MAX  NCI_DISCOVERY_TYPE_LISTEN_ISO15693
@@ -543,6 +485,7 @@
 #define NCI_PARAM_ID_PB_BAILOUT         0x11
 #define NCI_PARAM_ID_PB_ATTRIB_PARAM1   0x12
 #define NCI_PARAM_ID_PF_BIT_RATE        0x18
+#define NCI_PARAM_ID_PF_RC              0x19
 #define NCI_PARAM_ID_PB_H_INFO          0x20
 #define NCI_PARAM_ID_PI_BIT_RATE        0x21
 
@@ -618,6 +561,8 @@
 
 #define NCI_PARAM_LEN_PA_FSDI               1
 
+#define NCI_PARAM_LEN_PF_RC                 1
+
 #define NCI_PARAM_LEN_LA_BIT_FRAME_SDD      1
 #define NCI_PARAM_LEN_LA_PLATFORM_CONFIG    1
 #define NCI_PARAM_LEN_LA_SEL_INFO           1
@@ -632,7 +577,7 @@
 #define NCI_PARAM_LEN_LF_T3T_PMM            8
 #define NCI_PARAM_LEN_LF_T3T_ID            10
 #define NCI_PARAM_LEN_LF_CON_ADV_FEAT       1 //FelicaOnHost
-
+#define NCI_PARAM_LEN_LF_T3T_ID            10
 
 #define NCI_PARAM_LEN_FWI                   1
 #define NCI_PARAM_LEN_WT                    1
diff --git a/src/hal/int/nfc_brcm_defs.h b/src/hal/int/nfc_brcm_defs.h
index 6e8670a..ff242f5 100755
--- a/src/hal/int/nfc_brcm_defs.h
+++ b/src/hal/int/nfc_brcm_defs.h
@@ -181,6 +181,7 @@
 /**********************************************
  * NCI Interface Types
  **********************************************/
+#define NCI_INTERFACE_VS_MIFARE         0x80
 #define NCI_INTERFACE_VS_CALYPSO_CE     0x81
 #define NCI_INTERFACE_VS_T2T_CE         0x82    /* for Card Emulation side */
 #define NCI_INTERFACE_VS_15693          0x83    /* for both Reader/Writer and Card Emulation side */
diff --git a/src/include/bt_types.h b/src/include/bt_types.h
index ec12331..78b3512 100644
--- a/src/include/bt_types.h
+++ b/src/include/bt_types.h
@@ -263,7 +263,7 @@
 #define UINT24_TO_BE_STREAM(p, u24) {*(p)++ = (UINT8)((u24) >> 16); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)(u24);}
 #define UINT16_TO_BE_STREAM(p, u16) {*(p)++ = (UINT8)((u16) >> 8); *(p)++ = (UINT8)(u16);}
 #define UINT8_TO_BE_STREAM(p, u8)   {*(p)++ = (UINT8)(u8);}
-#define ARRAY_TO_BE_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
+#define ARRAY_TO_BE_STREAM(p, a, len) {register unsigned int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
 
 #define BE_STREAM_TO_UINT8(u8, p)   {u8 = (UINT8)(*(p)); (p) += 1;}
 #define BE_STREAM_TO_UINT16(u16, p) {u16 = (UINT16)(((UINT16)(*(p)) << 8) + (UINT16)(*((p) + 1))); (p) += 2;}
diff --git a/src/include/config.h b/src/include/config.h
index 14be80c..a2f6dfe 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -86,7 +86,6 @@
 #define NAME_NFA_DTA_START_UP_VSC_CFG   "NFA_DTA_START_UP_VSC_CFG"
 #define NAME_UICC_LISTEN_TECH_MASK      "UICC_LISTEN_TECH_MASK"
 #define NAME_UICC_LISTEN_TECH_EX_MASK   "UICC_LISTEN_TECH_EXCLUDE_MASK"
-#define NAME_HOST_LISTEN_ENABLE         "HOST_LISTEN_ENABLE"
 #if (NXP_EXTNS == TRUE)
 #define NAME_APPL_DTA_MODE              "APPL_DTA_MODE"
 #define NAME_DEFAULT_AID_ROUTE          "DEFAULT_AID_ROUTE"
@@ -98,8 +97,9 @@
 #define NAME_CHECK_DEFAULT_PROTO_SE_ID  "NXP_CHECK_DEFAULT_PROTO_SE_ID"
 #define NAME_NFA_DM_DISC_NTF_TIMEOUT    "NFA_DM_DISC_NTF_TIMEOUT"
 #define NAME_NXP_FWD_FUNCTIONALITY_ENABLE   "NXP_FWD_FUNCTIONALITY_ENABLE"
+#define NAME_HOST_LISTEN_TECH_MASK      "HOST_LISTEN_TECH_MASK"
 #endif
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 #define NAME_NXP_PRFD_TECH_SE            "NXP_PRFD_TECH_SE"
 #endif
 #define NAME_SNOOZE_MODE_CFG            "SNOOZE_MODE_CFG"
@@ -125,12 +125,16 @@
 #define NAME_POWER_OFF_MODE             "POWER_OFF_MODE"
 #define NAME_GLOBAL_RESET               "DO_GLOBAL_RESET"
 #define NAME_NCI_HAL_MODULE             "NCI_HAL_MODULE"
+#define NAME_NFA_POLL_BAIL_OUT_MODE     "NFA_POLL_BAIL_OUT_MODE"
+#define NAME_NFA_PROPRIETARY_CFG        "NFA_PROPRIETARY_CFG"
+#if(NXP_EXTNS == TRUE)
 #define NAME_NXP_NFCC_STANDBY_TIMEOUT   "NXP_NFCC_STANDBY_TIMEOUT"
 #define NAME_NXP_CP_TIMEOUT             "NXP_CP_TIMEOUT"
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NAME_NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE   "NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE"
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+#define NAME_NXP_DUAL_UICC_ENABLE       "NXP_DUAL_UICC_ENABLE"
 #endif
-
+#endif
 #define                     LPTD_PARAM_LEN (40)
 
 // default configuration
@@ -146,7 +150,7 @@
 
 extern struct tUART_CONFIG  uartConfig;
 #define MAX_CHIPID_LEN  (16)
-void    readOptionalConfig(const char* option);
+void    readOptionalConfigExt(const char* option);
 
 /* Snooze mode configuration structure */
 typedef struct
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index becd3d7..20ef9f5 100644
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -707,7 +707,8 @@
 #ifndef NFA_EE_MAX_AID_ENTRIES
 #if(NXP_EXTNS == TRUE)
 #define NFA_EE_MIN_AID_SIZE         (5)
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#define NFA_EE_MIN_AID_ENTRY_SIZE   (NFA_EE_MIN_AID_SIZE + 4)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 #define NFA_EE_MAX_AID_ENTRIES      (50)
 #else
 #define NFA_EE_MAX_AID_ENTRIES      (20)
diff --git a/src/include/vendor_cfg.h b/src/include/vendor_cfg.h
new file mode 100644
index 0000000..71d2a46
--- /dev/null
+++ b/src/include/vendor_cfg.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/******************************************************************************
+ *
+ *  This file contains compile-time configurable constants for vendor specific proprietary protocols
+ *
+ ******************************************************************************/
+#ifndef __NFC_VENDOR_CFG_H__
+#define __NFC_VENDOR_CFG_H__
+
+/* compile-time configuration structure for proprietary protocol and discovery value */
+typedef struct
+{
+    UINT8 pro_protocol_18092_active;
+    UINT8 pro_protocol_b_prime;
+    UINT8 pro_protocol_dual;
+    UINT8 pro_protocol_15693;
+    UINT8 pro_protocol_kovio;
+    UINT8 pro_protocol_mfc;
+
+    UINT8 pro_discovery_kovio_poll;
+    UINT8 pro_discovery_b_prime_poll;
+    UINT8 pro_discovery_b_prime_listen;
+} tNFA_PROPRIETARY_CFG;
+
+
+extern tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg;
+
+ /**********************************************
+ * Proprietary Protocols
+ **********************************************/
+#ifndef NCI_PROTOCOL_18092_ACTIVE
+#define NCI_PROTOCOL_18092_ACTIVE       (p_nfa_proprietary_cfg->pro_protocol_18092_active)
+#endif
+#ifndef NCI_PROTOCOL_B_PRIME
+#define NCI_PROTOCOL_B_PRIME            (p_nfa_proprietary_cfg->pro_protocol_b_prime)
+#endif
+#ifndef NCI_PROTOCOL_DUAL
+#define NCI_PROTOCOL_DUAL               (p_nfa_proprietary_cfg->pro_protocol_dual)
+#endif
+#ifndef NCI_PROTOCOL_15693
+#define NCI_PROTOCOL_15693              (p_nfa_proprietary_cfg->pro_protocol_15693)
+#endif
+#ifndef NCI_PROTOCOL_KOVIO
+#define NCI_PROTOCOL_KOVIO              (p_nfa_proprietary_cfg->pro_protocol_kovio)
+#endif
+#ifndef NCI_PROTOCOL_MIFARE
+#define NCI_PROTOCOL_MIFARE             (p_nfa_proprietary_cfg->pro_protocol_mfc)
+#endif
+
+ /**********************************************
+ * Proprietary Discovery technology and mode
+ **********************************************/
+#ifndef NCI_DISCOVERY_TYPE_POLL_KOVIO
+#define NCI_DISCOVERY_TYPE_POLL_KOVIO           (p_nfa_proprietary_cfg->pro_discovery_kovio_poll)
+#endif
+
+#ifndef NCI_DISCOVERY_TYPE_POLL_B_PRIME
+#define NCI_DISCOVERY_TYPE_POLL_B_PRIME         (p_nfa_proprietary_cfg->pro_discovery_b_prime_poll)
+#endif
+
+#ifndef NCI_DISCOVERY_TYPE_LISTEN_B_PRIME
+#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME       (p_nfa_proprietary_cfg->pro_discovery_b_prime_listen)
+#endif
+
+#endif /* __NFC_VENDOR_CFG_H__ */
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
index e05d55c..cb04f3f 100755
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -70,6 +70,20 @@
     tNFA_CONN_EVT_DATA conn_evt;
 
     NFA_TRACE_DEBUG1 ("nfa_ce_handle_t3t_evt: event 0x%x", event);
+#if(NXP_EXTNS == TRUE && NXP_NFCC_HCE_F == TRUE)
+    UINT8 listen_info_idx;
+    /*Fix: for the felica on host for nfcFcallback*/
+    for (listen_info_idx=0; listen_info_idx<NFA_CE_LISTEN_INFO_IDX_INVALID; listen_info_idx++)
+            {
+                if ((p_cb->listen_info[listen_info_idx].flags & NFA_CE_LISTEN_INFO_IN_USE) &&
+                    (p_cb->listen_info[listen_info_idx].flags & NFA_CE_LISTEN_INFO_FELICA))
+                {
+                    p_cb->idx_cur_active      = listen_info_idx;
+                    p_cb->p_active_conn_cback = p_cb->listen_info[p_cb->idx_cur_active].p_conn_cback;
+                    break;
+                }
+            }
+#endif
 
     switch (event)
     {
@@ -281,7 +295,7 @@
 #endif
         ce_msg.activate_ntf.hdr.event = NFA_CE_ACTIVATE_NTF_EVT;
         ce_msg.activate_ntf.p_activation_params = &p_data->activate;
-        nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+        nfa_ce_hdl_event ((void *) &ce_msg);
         break;
 
     case NFA_DM_RF_DISC_DEACTIVATED_EVT:
@@ -294,7 +308,7 @@
             /*clear the p61 ce*/
             nfa_ee_ce_p61_active = 0;
 #endif
-            nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+            nfa_ce_hdl_event ((void *) &ce_msg);
         }
         break;
 
@@ -321,7 +335,11 @@
     UINT8 tlv_size;
     UINT16 t3t_flags2_mask = 0xFFFF;        /* Mask of which T3T_IDs are disabled */
     UINT8 t3t_idx = 0;
+
+#if(NXP_EXTNS == TRUE && NXP_NFCC_HCE_F == TRUE)
     UINT8 adv_Feat = 1;
+#endif
+
     /* Point to start of tlv buffer */
     p_params = tlv;
 
@@ -346,17 +364,19 @@
     /* For NCI draft 22+, the polarity of NFC_PMID_LF_T3T_FLAGS2 is flipped */
     t3t_flags2_mask = ~t3t_flags2_mask;
 
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
+    NFA_TRACE_DEBUG0 (" LF_T3T_FLAGS swap for NCI specification compliance");
+    t3t_flags2_mask = ((t3t_flags2_mask >> 8)  | (t3t_flags2_mask << 8));
+#endif
+
     UINT8_TO_STREAM (p_params, NFC_PMID_LF_T3T_FLAGS2);      /* type */
     UINT8_TO_STREAM (p_params, NCI_PARAM_LEN_LF_T3T_FLAGS2); /* length */
-#if (NXP_EXTNS == TRUE)
-
-
+#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_HCE_F == TRUE))
 //FelicaOnHost
     UINT16_TO_BE_STREAM (p_params, t3t_flags2_mask);
     UINT8_TO_STREAM (p_params, NCI_PARAM_ID_LF_CON_ADV_FEAT);      /* type */
     UINT8_TO_STREAM (p_params, NCI_PARAM_LEN_LF_CON_ADV_FEAT); /* length */
     UINT8_TO_STREAM (p_params, adv_Feat);            /* Mask of IDs to disable listening */
-
 #else
     UINT16_TO_STREAM (p_params, t3t_flags2_mask);            /* Mask of IDs to disable listening */
 #endif
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index e29f2b2..a9550f8 100755
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -129,7 +129,7 @@
 
     power_mode_change.status     = NFA_STATUS_OK;
     power_mode_change.power_mode = nfa_dm_cb.nfcc_pwr_mode;
-    (*nfa_dm_cb.p_dm_cback) (NFA_DM_PWR_MODE_CHANGE_EVT, (tNFA_DM_CBACK_DATA*) &power_mode_change);
+    (*nfa_dm_cb.p_dm_cback) (NFA_DM_PWR_MODE_CHANGE_EVT, (void*) &power_mode_change);
 }
 /*******************************************************************************
 **
@@ -166,7 +166,7 @@
         nfa_dm_cb.params.lf_t3t_id[xx][0] = 0xFF;
         nfa_dm_cb.params.lf_t3t_id[xx][1] = 0xFF;
         nfa_dm_cb.params.lf_t3t_id[xx][2] = 0x02;
-        nfa_dm_cb.params.lf_t3t_id[xx][2] = 0xFE;
+        nfa_dm_cb.params.lf_t3t_id[xx][3] = 0xFE;
     }
 
     /* LF_T3T_PMM */
@@ -452,9 +452,21 @@
         break;
 
     case NFC_NFCC_TIMEOUT_REVT:
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
-        conn_evt.status = p_data->status;
-        nfa_dm_conn_cback_event_notify (NFA_RECOVERY_EVT, &conn_evt);
+#if(NXP_EXTNS == TRUE)
+        if(p_data->status == NFC_STATUS_FAILED)
+        {
+            dm_cback_data.status = p_data->status;
+            (*nfa_dm_cb.p_dm_cback) (NFA_DM_NFCC_TIMEOUT_EVT, &dm_cback_data);
+        }
+        else
+        {
+#endif
+#if (NFC_NXP_ESE ==  TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+            conn_evt.status = p_data->status;
+            nfa_dm_conn_cback_event_notify (NFA_RECOVERY_EVT, &conn_evt);
+#endif
+#if(NXP_EXTNS == TRUE)
+        }
 #endif
         break;
 
@@ -555,7 +567,7 @@
             else
             {
                 nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_DISABLING;
-                nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type);
+                nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (void *) &deactivate_type);
                 if ((nfa_dm_cb.disc_cb.disc_flags & (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF)) == 0)
                 {
                     /* not waiting to deactivate, clear the flag now */
@@ -771,6 +783,7 @@
 *******************************************************************************/
 BOOLEAN nfa_dm_act_release_excl_rf_ctrl (tNFA_DM_MSG *p_data)
 {
+    (void)p_data;
     NFA_TRACE_DEBUG0 ("nfa_dm_act_release_excl_rf_ctrl ()");
 
     /* nfa_dm_rel_excl_rf_control_and_notify() is called when discovery state goes IDLE */
@@ -1141,6 +1154,7 @@
 BOOLEAN nfa_dm_act_disable_polling (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_disable_polling ()");
 
@@ -1182,6 +1196,7 @@
 BOOLEAN nfa_dm_act_enable_listening (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_enable_listening ()");
 
@@ -1204,6 +1219,7 @@
 BOOLEAN nfa_dm_act_disable_listening (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_disable_listening ()");
 
@@ -1226,6 +1242,7 @@
 BOOLEAN nfa_dm_act_pause_p2p (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_pause_p2p ()");
 
@@ -1248,6 +1265,7 @@
 BOOLEAN nfa_dm_act_resume_p2p (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)(p_data);
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_resume_p2p ()");
 
@@ -1348,6 +1366,7 @@
 BOOLEAN nfa_dm_act_start_rf_discovery (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_start_rf_discovery ()");
 
@@ -1382,9 +1401,14 @@
 BOOLEAN nfa_dm_act_stop_rf_discovery (tNFA_DM_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_stop_rf_discovery ()");
 
+#if(NXP_EXTNS == TRUE)
+    /* Reset P2P prio logic if deactivate is called from app layer */
+    nfa_dm_p2p_prio_logic_disable();
+#endif
     if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_ENABLED) ||
         (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_IDLE) )
     {
@@ -1430,7 +1454,7 @@
     nfa_dm_cb.disc_cb.disc_duration = p_data->disc_duration.rf_disc_dur_ms;
     return (TRUE);
 }
-#if(NXP_EXTNS == TRUE)
+
 /*******************************************************************************
 **
 ** Function         nfa_dm_act_get_rf_disc_duration
@@ -1444,7 +1468,6 @@
 {
     return (nfa_dm_cb.disc_cb.disc_duration);
 }
-#endif
 /*******************************************************************************
 **
 ** Function         nfa_dm_act_select
@@ -1500,9 +1523,10 @@
 BOOLEAN nfa_dm_act_disable_timeout (tNFA_DM_MSG *p_data)
 {
     tNFA_DM_API_DISABLE disable;
+    (void)p_data;
 
     disable.graceful = FALSE;
-    nfa_dm_disable ((tNFA_DM_MSG *) &disable);
+    nfa_dm_disable ((void *) &disable);
     return (TRUE);
 }
 
@@ -1561,6 +1585,7 @@
 {
     BT_HDR             *p_msg;
     tNFA_CONN_EVT_DATA evt_data;
+    (void)conn_id;
 
     NFA_TRACE_DEBUG1 ("nfa_dm_act_data_cback (): event = 0x%X", event);
 
@@ -1760,10 +1785,11 @@
                     {
                         /* activate LLCP */
                         nfa_p2p_activate_llcp (p_data);
-#if(NXP_EXTNS == TRUE)
-                        GKI_freebuf (nfa_dm_cb.p_activate_ntf);
-                        nfa_dm_cb.p_activate_ntf = NULL;
-#endif
+                        if (nfa_dm_cb.p_activate_ntf)
+                        {
+                            GKI_freebuf (nfa_dm_cb.p_activate_ntf);
+                            nfa_dm_cb.p_activate_ntf = NULL;
+                        }
                     }
                     else
                     {
@@ -1780,8 +1806,8 @@
                      ||(nfa_dm_cb.disc_cb.activated_protocol  == NFC_PROTOCOL_ISO_DEP)
                      ||(nfa_dm_cb.disc_cb.activated_protocol  == NFC_PROTOCOL_15693)
                      ||(nfa_dm_cb.disc_cb.activated_protocol  == NFC_PROTOCOL_KOVIO)
-#if(NXP_EXTNS == TRUE)
                      ||(nfa_dm_cb.disc_cb.activated_protocol  == NFC_PROTOCOL_MIFARE)
+#if(NXP_EXTNS == TRUE)
                      ||(nfa_dm_cb.disc_cb.activated_protocol  == NFC_PROTOCOL_T3BT)
 #endif
                     )
@@ -1907,7 +1933,12 @@
         return;
     }
 
-    if (status == NFA_STATUS_OK)
+    if (status == NFA_STATUS_OK
+#if(NXP_EXTNS == TRUE)
+            && (nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_IDLE &&
+                nfa_dm_cb.disc_cb.disc_state != NFA_DM_RFST_DISCOVERY)
+#endif
+        )
     {
         /* notify NFC link activation */
         memcpy ( &(evt_data.activated.activate_ntf),
@@ -1927,25 +1958,25 @@
         /* get length of NFCID and location */
         if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_A)
         {
-#if(NXP_EXTNS == TRUE)
             if((p_tech_params->param.pa.nfcid1_len == 0) && (p_params != NULL))
             {
                 nfcid_len = sizeof(p_params->t1t.uid);
                 p_nfcid   = p_params->t1t.uid;
                 evt_data.activated.activate_ntf.rf_tech_param.param.pa.nfcid1_len = nfcid_len;
+#if(NXP_EXTNS == TRUE)
                 if(nfcid_len > 0 && p_nfcid != NULL)
                 {
+#endif
                     memcpy (evt_data.activated.activate_ntf.rf_tech_param.param.pa.nfcid1,p_nfcid,nfcid_len);
+#if(NXP_EXTNS == TRUE)
                 }
+#endif
             }
             else
             {
-#endif
                 nfcid_len = p_tech_params->param.pa.nfcid1_len;
                 p_nfcid   = p_tech_params->param.pa.nfcid1;
-#if(NXP_EXTNS == TRUE)
             }
-#endif
         }
         else if (p_tech_params->mode == NFC_DISCOVERY_TYPE_POLL_B)
         {
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.c
index 473cb74..bf61168 100755
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.c
@@ -1331,6 +1331,8 @@
 *******************************************************************************/
 void NFA_SetReaderMode (BOOLEAN ReaderModeFlag, UINT32 Technologies)
 {
+    (void)Technologies;
+
     NFA_TRACE_API1 ("NFA_SetReaderMode =0x%x", ReaderModeFlag);
     gFelicaReaderMode = ReaderModeFlag;
     return;
@@ -1371,7 +1373,7 @@
 {
     tNFA_MW_VERSION mwVer;
     mwVer.validation = ( NXP_EN_PN547C2 | (NXP_EN_PN65T << 1) | (NXP_EN_PN548C2 << 2) |
-                        (NXP_EN_PN66T << 3));
+                        (NXP_EN_PN66T << 3) | (NXP_EN_PN551 << 4) | (NXP_EN_PN67T << 5));
     mwVer.android_version = NXP_ANDROID_VER;
     NFA_TRACE_API1("0x%x:NFC MW Major Version:", NFC_NXP_MW_VERSION_MAJ);
     NFA_TRACE_API1("0x%x:NFC MW Minor Version:", NFC_NXP_MW_VERSION_MIN);
@@ -1380,4 +1382,82 @@
     NFA_TRACE_API2("mwVer:Major=0x%x,Minor=0x%x", mwVer.major_version,mwVer.minor_version);
     return mwVer;
 }
+
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+/*******************************************************************************
+**
+** Function:        NFA_ResetNfcc
+**
+** Description:     Reset the NFCC
+**
+** Returns:         NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**
+*******************************************************************************/
+tNFA_STATUS NFA_ResetNfcc()
+{
+    tNFA_STATUS status = NFA_STATUS_FAILED;
+    status = nfc_ncif_reset_nfcc();
+    return status;
+}
+
+/*******************************************************************************
+**
+** Function:        NFA_EE_HCI_Control
+**
+** Description:     Enable/Disable EE&HCI subsystem based on mode flag.
+**                  Since NFCC reset being done, to receive Ntf corresponding to
+**                  UICC/ESE, EE and HCI Network has to be reset.
+**                  In MW corresponding context will be cleared and re-initialized
+**
+** Returns:         none:
+**
+*******************************************************************************/
+void NFA_EE_HCI_Control(BOOLEAN flagEnable)
+{
+    uint8_t id[2] = {NFA_ID_HCI, NFA_ID_EE};
+    uint8_t i = 0;
+    if(!flagEnable)
+    {
+        NFA_TRACE_DEBUG0 ("NFA_EE_HCI_Control (); Disable system");
+        nfa_sys_cb.graceful_disable = TRUE;
+        for(i=0; i<2; i++)
+        {
+            if (nfa_sys_cb.is_reg[id[i]])
+            {
+                if (nfa_sys_cb.reg[id[i]]->disable != NULL)
+                {
+                    (*nfa_sys_cb.reg[id[i]]->disable) ();
+                }
+                else
+                {
+                    nfa_sys_deregister (id[i]);;
+                }
+            }
+        }
+    }
+    else
+    {
+        nfa_ee_init();
+        nfa_hci_init();
+
+        NFA_TRACE_DEBUG0 ("NFA_EE_HCI_Control (); Enable system");
+        for(i=0; i<2; i++)
+        {
+            if (nfa_sys_cb.is_reg[id[i]])
+            {
+                if (nfa_sys_cb.reg[id[i]]->enable != NULL)
+                {
+                    (*nfa_sys_cb.reg[id[i]]->enable) ();
+                }
+                else
+                {
+                    nfa_sys_cback_notify_enable_complete (id[i]);
+                }
+            }
+        }
+
+    }
+}
+#endif
 #endif
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 202e213..09d14ca 100755
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -30,8 +30,8 @@
     13,                         /* total length */
     NFC_PMID_LF_T3T_PMM,        /* Type-3 tag default PMM */
     NCI_PARAM_LEN_LF_T3T_PMM,
-    0x20,
-    0x79,
+    0x01,                       /* This PAD0 is used to identify HCE-F on Android */
+    0xFE,                       /* This PAD0 is used to identify HCE-F on Android */
     0xFF,
     0xFF,
     0xFF,
@@ -121,3 +121,39 @@
 };
 
 tNFA_HCI_CFG *p_nfa_hci_cfg = (tNFA_HCI_CFG *) &nfa_hci_cfg;
+
+BOOLEAN nfa_poll_bail_out_mode = FALSE;
+const tNFA_PROPRIETARY_CFG nfa_proprietary_cfg =
+{
+#if(NXP_EXTNS == TRUE)
+    0x05, /* NCI_PROTOCOL_18092_ACTIVE */
+#else
+    0x80,
+#endif
+    0x81, /* NCI_PROTOCOL_B_PRIME */
+    0x82, /* NCI_PROTOCOL_DUAL */
+#if(NXP_EXTNS == TRUE)
+    0x06,
+#else
+    0x83, /* NCI_PROTOCOL_15693 */
+#endif
+#if(NXP_EXTNS == TRUE && NFC_NXP_CHIP_TYPE != PN547C2)
+    0x81,
+#else
+    0x8A, /* NCI_PROTOCOL_KOVIO */
+#endif
+#if(NXP_EXTNS == TRUE)
+    0x80,
+#else
+    0xFF, /* NCI_PROTOCOL_MIFARE */
+#endif
+#if(NXP_EXTNS == TRUE && NFC_NXP_CHIP_TYPE != PN547C2)
+    0x70,
+#else
+    0x77, /* NCI_DISCOVERY_TYPE_POLL_KOVIO */
+#endif
+    0x74, /* NCI_DISCOVERY_TYPE_POLL_B_PRIME */
+    0xF4, /* NCI_DISCOVERY_TYPE_LISTEN_B_PRIME */
+};
+
+tNFA_PROPRIETARY_CFG *p_nfa_proprietary_cfg = (tNFA_PROPRIETARY_CFG *) &nfa_proprietary_cfg;
\ No newline at end of file
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index fb7d777..1f00329 100755
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -46,15 +46,15 @@
 #include "nfa_dm_int.h"
 #include "nfa_p2p_int.h"
 #include "nfa_sys_int.h"
+#include "nci_hmsgs.h"
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #include "nfa_ee_api.h"
 #include "nfa_ee_int.h"
 #endif
 #include "nfa_rw_int.h"
 
-#if(NXP_EXTNS == TRUE)
 #include "nfc_int.h"
-#include "nci_hmsgs.h"
+#if(NXP_EXTNS == TRUE)
 #include<config.h>
 #endif
 /*
@@ -63,6 +63,7 @@
 #if(NXP_EXTNS == TRUE)
 static BOOLEAN reconnect_in_progress;
 static BOOLEAN is_emvco_active;
+static UINT8 gLastSak = 0x00;
 #endif
 
 static UINT8 nfa_dm_get_rf_discover_config (tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask,
@@ -87,8 +88,8 @@
 #if(NXP_EXTNS == TRUE)
 typedef struct nfa_dm_p2p_prio_logic
 {
-    UINT8            isodep_detected; /*flag to check if ISO-DEP is detected */
-    UINT8            timer_expired;   /*flag to check whether timer is expired  */
+    BOOLEAN          isodep_detected; /* flag to check if ISO-DEP is detected */
+    BOOLEAN          timer_expired;   /* flag to check whether timer is expired */
     TIMER_LIST_ENT   timer_list; /*timer structure pointer */
     UINT8            first_tech_mode;
 }nfa_dm_p2p_prio_logic_t;
@@ -101,7 +102,7 @@
 static UINT16 P2P_PRIO_LOGIC_DEACT_NTF_TIMEOUT = 200; /* timeout value 2 sec waiting for deactivate ntf */
 #endif
 
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
 BOOLEAN etsi_reader_in_progress = FALSE;
 #endif
 /*******************************************************************************
@@ -119,9 +120,11 @@
 {
     UINT8 num_params = 0;
 
+    NFA_TRACE_DEBUG2 ("%s : dm_disc_mask = 0x%08X",__FUNCTION__, dm_disc_mask);
+
     if (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED)
     {
-        NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config () listen disabled, rm listen from 0x%x", dm_disc_mask);
+        NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config() : listen disabled, remove listen from 0x%x", dm_disc_mask);
         dm_disc_mask &= NFA_DM_DISC_MASK_POLL;
     }
     if (nfa_dm_is_p2p_paused ())
@@ -325,11 +328,11 @@
 {
     UINT8 sak = 0;
     UINT8 tech_list = 0;
-    unsigned long hostEnable = TRUE, fwdEnable = TRUE;
+    UINT8 hostListenMask = 0x00, fwdEnable = 0x00;
 
-    if ((GetNumValue(NAME_HOST_LISTEN_ENABLE, &hostEnable, sizeof(hostEnable))))
+    if ((GetNumValue(NAME_HOST_LISTEN_TECH_MASK, &hostListenMask, sizeof(hostListenMask))))
     {
-        NFA_TRACE_DEBUG2 ("%s:HOST_LISTEN_ENABLE=0x0%lu;", __FUNCTION__, hostEnable);
+        NFA_TRACE_DEBUG2 ("%s : HOST_LISTEN_TECH_MASK = 0x%X;", __FUNCTION__, hostListenMask);
     }
     if((GetNumValue(NAME_NXP_FWD_FUNCTIONALITY_ENABLE, &fwdEnable, sizeof(fwdEnable))))
     {
@@ -337,7 +340,7 @@
     }
 
     tech_list = nfa_ee_get_supported_tech_list(0x02);
-    if(hostEnable)
+    if(hostListenMask == 0x03)
     {
         if(!fwdEnable && (tech_list == NFA_TECHNOLOGY_MASK_B))
         {
@@ -370,6 +373,111 @@
 
     return sak;
 }
+
+/*******************************************************************************
+**
+** Function         nfa_dm_set_hce_config
+**
+** Description      Update listen mode set configs(LA_SEL_INFO & LB_SENSB_INFO)
+**                  for HCE-A only or HCE-B only functionality.
+**
+** Returns          NFA_STATUS_OK if success
+**
+*******************************************************************************/
+static tNFA_STATUS nfa_dm_set_hce_config (tNFA_DM_DISC_TECH_PROTO_MASK tech_proto_mask)
+{
+    UINT8 params[40], *p;
+    UINT8 SAK = 0x00;
+    UINT8 SENSB_RES = 0x00;
+    UINT8 uiccTechList = 0x00;
+    UINT8 isFwdFnctnEnable = 0x00;
+    UINT8 hostListenMask = 0x00;
+
+    NFA_TRACE_DEBUG2 ("%s : tech_proto_mask = 0x%08X",__FUNCTION__, tech_proto_mask);
+
+    if ((GetNumValue(NAME_HOST_LISTEN_TECH_MASK, &hostListenMask, sizeof(hostListenMask))))
+    {
+        NFA_TRACE_DEBUG2 ("%s : HOST_LISTEN_TECH_MASK = 0x0%lu;", __FUNCTION__, hostListenMask);
+    }
+
+    p = params;
+
+    uiccTechList = nfa_ee_get_supported_tech_list(0x02);
+
+    if(tech_proto_mask & NFA_DM_DISC_MASK_LA_ISO_DEP)
+    {
+        switch(hostListenMask)
+        {
+            case 0x00: //Host doesn't wants to listen
+                SAK |= 0x00;
+                break;
+            case 0x01: //Host wants to listen only A
+                if((uiccTechList == NFA_TECHNOLOGY_MASK_B) || (uiccTechList == 0x00))
+                    SAK |= 0x20;
+                else
+                    SAK |= 0x00;
+                break;
+            case 0x02: //Host wants to listen only B
+                SAK |= 0x00;
+                break;
+            case 0x03: //Host wants to listen AB both
+                if((uiccTechList == NFA_TECHNOLOGY_MASK_B) || (uiccTechList == 0x00))
+                    SAK |= 0x20;
+                else
+                    SAK |= 0x00;
+                break;
+        }
+        gLastSak |= SAK;
+    }
+    if (tech_proto_mask & NFA_DM_DISC_MASK_LA_NFC_DEP)
+    {
+        NFA_TRACE_DEBUG2 ("%s : gLastSak = 0x%X;", __FUNCTION__, gLastSak);
+        if(gLastSak)
+            SAK |= gLastSak;
+        SAK |= NCI_PARAM_SEL_INFO_NFCDEP;
+        gLastSak &= 0x00;
+    }
+
+    NFA_TRACE_DEBUG2 ("%s : LA_SEL_INFO = 0x%X;", __FUNCTION__, SAK);
+
+    UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
+    UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
+    UINT8_TO_STREAM (p, SAK);
+
+    if(tech_proto_mask & NFA_DM_DISC_MASK_LB_ISO_DEP)
+    {
+        switch(hostListenMask)
+        {
+            case 0x00: //Host doesn't wants to listen
+            case 0x01: //Host wants to listen only A
+                    SENSB_RES |= 0x00;
+                break;
+            case 0x02: //Host wants to listen only B
+                if((uiccTechList == NFA_TECHNOLOGY_MASK_A) || (uiccTechList == 0x00))
+                    SENSB_RES |= 0x01;
+                break;
+            case 0x03: //Host wants to listen AB both
+                if((uiccTechList == NFA_TECHNOLOGY_MASK_A) || (uiccTechList == 0x00))
+                    SENSB_RES |= 0x01;
+                else
+                    SENSB_RES |= 0x00;
+                break;
+        }
+    }
+
+    NFA_TRACE_DEBUG2 ("%s : LB_SENSB_INFO = 0x%X;", __FUNCTION__, SENSB_RES);
+
+    UINT8_TO_STREAM (p, NFC_PMID_LB_SENSB_INFO);
+    UINT8_TO_STREAM (p, NCI_PARAM_LEN_LB_SENSB_INFO);
+    UINT8_TO_STREAM (p, SENSB_RES);
+
+    if (p > params)
+    {
+        nfa_dm_check_set_config ((UINT8) (p - params), params, TRUE);
+    }
+
+    return NFA_STATUS_OK;
+}
 #endif
 
 /*******************************************************************************
@@ -807,9 +915,8 @@
     /* Set initial disc_mask to legacy poll or listen */
     tNFA_DM_DISC_TECH_PROTO_MASK disc_mask = ((tech_n_mode & 0x80) ? NFA_DM_DISC_MASK_L_LEGACY : NFA_DM_DISC_MASK_P_LEGACY);
 
-    switch (tech_n_mode)
+    if (NFC_DISCOVERY_TYPE_POLL_A == tech_n_mode)
     {
-    case NFC_DISCOVERY_TYPE_POLL_A:
         switch (protocol)
         {
         case NFC_PROTOCOL_T1T:
@@ -825,38 +932,45 @@
             disc_mask = NFA_DM_DISC_MASK_PA_NFC_DEP;
             break;
         }
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_B:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_B == tech_n_mode)
+    {
         if (protocol == NFC_PROTOCOL_ISO_DEP)
             disc_mask = NFA_DM_DISC_MASK_PB_ISO_DEP;
 #if(NXP_EXTNS == TRUE)
         else if(protocol == NFC_PROTOCOL_T3BT)
             disc_mask = NFA_DM_DISC_MASK_PB_T3BT;
 #endif
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_F:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_F == tech_n_mode)
+    {
         if (protocol == NFC_PROTOCOL_T3T)
             disc_mask = NFA_DM_DISC_MASK_PF_T3T;
         else if (protocol == NFC_PROTOCOL_NFC_DEP)
             disc_mask = NFA_DM_DISC_MASK_PF_NFC_DEP;
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_ISO15693:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_ISO15693 == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_P_ISO15693;
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_B_PRIME:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_B_PRIME == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_P_B_PRIME;
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_KOVIO:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_KOVIO == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_P_KOVIO;
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_A_ACTIVE == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_PAA_NFC_DEP;
-        break;
-    case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE:
+    }
+    else if (NFC_DISCOVERY_TYPE_POLL_F_ACTIVE == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_PFA_NFC_DEP;
-        break;
-
-    case NFC_DISCOVERY_TYPE_LISTEN_A:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_A == tech_n_mode)
+    {
         switch (protocol)
         {
         case NFC_PROTOCOL_T1T:
@@ -872,29 +986,34 @@
             disc_mask = NFA_DM_DISC_MASK_LA_NFC_DEP;
             break;
         }
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_B:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_B == tech_n_mode)
+    {
         if (protocol == NFC_PROTOCOL_ISO_DEP)
             disc_mask = NFA_DM_DISC_MASK_LB_ISO_DEP;
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_F:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_F == tech_n_mode)
+    {
         if (protocol == NFC_PROTOCOL_T3T)
             disc_mask = NFA_DM_DISC_MASK_LF_T3T;
         else if (protocol == NFC_PROTOCOL_NFC_DEP)
             disc_mask = NFA_DM_DISC_MASK_LF_NFC_DEP;
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_ISO15693:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_L_ISO15693;
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_L_B_PRIME;
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_LAA_NFC_DEP;
-        break;
-    case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE:
+    }
+    else if (NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == tech_n_mode)
+    {
         disc_mask = NFA_DM_DISC_MASK_LFA_NFC_DEP;
-        break;
     }
 
     NFA_TRACE_DEBUG3 ("nfa_dm_disc_get_disc_mask (): tech_n_mode:0x%X, protocol:0x%X, disc_mask:0x%X",
@@ -1048,19 +1167,22 @@
 *******************************************************************************/
 static void nfa_dm_disc_deact_ntf_timeout_cback (TIMER_LIST_ENT *p_tle)
 {
+    (void)p_tle;
+
     NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()");
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
     if (nfc_cb.num_disc_maps == 1)
     {
     NFC_TRACE_ERROR0 ("reset Nfc..!!");
     etsi_reader_in_progress = TRUE;
     nfc_ncif_cmd_timeout();
+
     }
     else
     {
 #endif
         nfa_dm_disc_force_to_idle();
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
     }
 #endif
 }
@@ -1152,10 +1274,12 @@
 void nfa_dm_start_rf_discover (void)
 {
     tNFC_DISCOVER_PARAMS    disc_params[NFA_DM_MAX_DISC_PARAMS];
-    tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask = 0, poll_mask, listen_mask;
+    tNFA_DM_DISC_TECH_PROTO_MASK dm_disc_mask = 0x00, poll_mask = 0x00, listen_mask = 0x00;
+    UINT8                   config_params[10], *p;
     UINT8                   num_params, xx;
-    unsigned long           fwdEnable = FALSE, hostEnable =FALSE;
-    UINT8                   tech_list = 0;
+    UINT8                   fwdEnable = FALSE, hostEnable = FALSE;
+    UINT8                   hostListenMask = 0x00;
+    UINT8                   tech_list = 0x00;
 
     NFA_TRACE_DEBUG0 ("nfa_dm_start_rf_discover ()");
     /* Make sure that RF discovery was enabled, or some app has exclusive control */
@@ -1181,16 +1305,15 @@
         {
             if (nfa_dm_cb.disc_cb.entry[xx].in_use)
             {
-                poll_mask = (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_POLL);
                 NFA_TRACE_DEBUG2 ("requested_disc_mask = 0x%x, xx=%d", nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask, xx);
-                /* clear poll mode technolgies and protocols which are already used by others */
+                poll_mask = (nfa_dm_cb.disc_cb.entry[xx].requested_disc_mask & NFA_DM_DISC_MASK_POLL);
+
+                /* clear poll mode technologies and protocols which are already used by others */
                 poll_mask &= ~(dm_disc_mask & NFA_DM_DISC_MASK_POLL);
 
-                listen_mask = 0;
-
                 /*
-                ** add listen mode technolgies and protocols if host ID is matched to listen mode routing table
-                */
+                 ** add listen mode technologies and protocols if host ID is matched to listen mode routing table
+                 */
 
                 /* NFC-A */
                 if (nfa_dm_cb.disc_cb.entry[xx].host_id == nfa_dm_cb.disc_cb.listen_RT[NFA_DM_DISC_LRT_NFC_A])
@@ -1273,6 +1396,8 @@
                                    xx, nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask);
 
                 dm_disc_mask |= nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask;
+
+                NFA_TRACE_DEBUG1 ("dm_disc_mask finally : 0x%x", dm_disc_mask);
             }
         }
 
@@ -1280,15 +1405,16 @@
         if((GetNumValue(NAME_NXP_FWD_FUNCTIONALITY_ENABLE, &fwdEnable, sizeof(fwdEnable))) == FALSE)
         {
             fwdEnable = TRUE; //default value
+            NFA_TRACE_DEBUG2 ("%s:NXP_FWD_FUNCTIONALITY_ENABLE=0x0%lu;", __FUNCTION__, fwdEnable);
         }
-        if ((GetNumValue(NAME_HOST_LISTEN_ENABLE, &hostEnable, sizeof(hostEnable))) == FALSE)
+        if (GetNumValue(NAME_HOST_LISTEN_TECH_MASK, &hostListenMask, sizeof(hostListenMask)))
         {
-            hostEnable = TRUE;
-            NFA_TRACE_DEBUG2 ("%s:HOST_LISTEN_ENABLE=0x0%lu;", __FUNCTION__, hostEnable);
+            NFA_TRACE_DEBUG2 ("%s:HOST_LISTEN_TECH_MASK = 0x0%lu;", __FUNCTION__, hostListenMask);
         }
 
         tech_list = nfa_ee_get_supported_tech_list(0x02);
-        if((fwdEnable == FALSE) || (hostEnable == FALSE))
+
+        if((fwdEnable == FALSE) || (hostListenMask == 0x00))
         {
             if(tech_list == NFA_TECHNOLOGY_MASK_B)
             {
@@ -1306,7 +1432,33 @@
         /* Let P2P set GEN bytes for LLCP to NFCC */
         if (dm_disc_mask & NFA_DM_DISC_MASK_NFC_DEP)
         {
+
             nfa_p2p_set_config (dm_disc_mask);
+
+        }
+        if (dm_disc_mask & (NFA_DM_DISC_MASK_PF_NFC_DEP | NFA_DM_DISC_MASK_PF_T3T))
+        {
+            /* According to the NFC Forum Activity spec, controllers must:
+             * 1) Poll with RC=0 and SC=FFFF to find NFC-DEP targets
+             * 2) Poll with RC=1 and SC=FFFF to find T3T targets
+             * Many controllers don't do this yet, and seem to be activating
+             * NFC-DEP by default.
+             *
+             * We can at least fix the scenario where we're not interested
+             * in NFC-DEP, by setting RC=1 in that case. Otherwise, keep
+             * the default of RC=0. */
+            p = config_params;
+            UINT8_TO_STREAM (p, NFC_PMID_PF_RC);
+            UINT8_TO_STREAM (p, NCI_PARAM_LEN_PF_RC);
+            if ((dm_disc_mask & NFA_DM_DISC_MASK_PF_NFC_DEP) && !nfa_dm_is_p2p_paused())
+            {
+                UINT8_TO_STREAM (p, 0x00); // RC=0
+            }
+            else
+            {
+                UINT8_TO_STREAM (p, 0x01); // RC=1
+            }
+            nfa_dm_check_set_config(p - config_params, config_params, FALSE);
         }
     }
 
@@ -1323,7 +1475,14 @@
         **      NFC-A, NFC-B, NFC-BP, NFC-I93
         */
 #if(NXP_EXTNS == TRUE)
-        /* do not set rf listen mode config*/
+        if (GetNumValue(NAME_HOST_LISTEN_TECH_MASK, &hostListenMask, sizeof(hostListenMask)))
+        {
+            NFA_TRACE_DEBUG2 ("%s : HOST_LISTEN_TECH_MASK = 0x0%lu;", __FUNCTION__, hostListenMask);
+        }
+        if(hostListenMask)
+        {
+            nfa_dm_set_hce_config(dm_disc_mask);
+        }
 #else
         /* if this is not for exclusive control */
         if (!nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
@@ -1899,7 +2058,7 @@
             /* Perform pending deactivate command and on response notfiy deactivation */
             nfa_dm_cb.disc_cb.deact_notify_pending = TRUE;
             nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
-                                   (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type);
+                                   (void *) &nfa_dm_cb.disc_cb.pending_deact_type);
         }
     }
 }
@@ -1916,7 +2075,7 @@
 static void nfa_dm_disc_kovio_timeout_cback (TIMER_LIST_ENT *p_tle)
 {
     tNFC_DEACTIVATE_DEVT deact;
-
+    (void)p_tle;
     NFA_TRACE_DEBUG0 ("nfa_dm_disc_kovio_timeout_cback()");
 
     /* notify presence check failure, if presence check is pending */
@@ -1933,7 +2092,7 @@
         deact.status = NFC_STATUS_OK;
         deact.type   = NFC_DEACTIVATE_TYPE_DISCOVERY;
         deact.is_ntf = TRUE;
-        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (void*)&deact);
     }
 }
 
@@ -2007,7 +2166,7 @@
         {
             nfa_dm_cb.disc_cb.deact_pending = FALSE;
             nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
-                                   (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.disc_cb.pending_deact_type);
+                                   (void *) &nfa_dm_cb.disc_cb.pending_deact_type);
         }
     }
 }
@@ -2023,6 +2182,7 @@
 *******************************************************************************/
 static void nfa_dm_disc_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data)
 {
+    (void)conn_id;
     NFA_TRACE_DEBUG0 ("nfa_dm_disc_data_cback ()");
 
     /* if selection failed */
@@ -2586,7 +2746,6 @@
     switch (event)
     {
     case NFA_DM_RF_DEACTIVATE_CMD:
-#if(NXP_EXTNS == TRUE)
         if (nfa_dm_cb.disc_cb.activated_protocol == NCI_PROTOCOL_MIFARE)
         {
             nfa_dm_cb.disc_cb.deact_pending = TRUE;
@@ -2594,7 +2753,7 @@
             status = nfa_dm_send_deactivate_cmd(p_data->deactivate_type);
             break;
         }
-#endif
+
         if (old_sleep_wakeup_flag)
         {
             /* sleep wakeup is already enabled when deactivate cmd is requested,
@@ -2620,7 +2779,7 @@
             deact.status = NFC_STATUS_OK;
             deact.type   = NFC_DEACTIVATE_TYPE_IDLE;
             deact.is_ntf = TRUE;
-            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (void*)&deact);
 
             /* NFCC is in IDLE state */
             nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
@@ -2740,7 +2899,7 @@
             deact.status = NFC_STATUS_OK;
             deact.type   = NFC_DEACTIVATE_TYPE_IDLE;
             deact.is_ntf = TRUE;
-            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (void*)&deact);
 
             /* NFCC is in IDLE state */
             nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
@@ -3165,7 +3324,7 @@
         select_params.rf_interface = rf_interface;
 
         nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_NOTIFY;
-        nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_SELECT_CMD, (tNFA_DM_RF_DISC_DATA *) &select_params);
+        nfa_dm_disc_sm_execute (NFA_DM_RF_DISCOVER_SELECT_CMD, (void *) &select_params);
     }
     else
     {
@@ -3224,7 +3383,7 @@
                 nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle);
                 nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle);
             }
-            nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type);
+            nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (void *) &deactivate_type);
             return NFA_STATUS_OK;
         }
         else
@@ -3234,7 +3393,7 @@
     }
     else
     {
-        nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (tNFA_DM_RF_DISC_DATA *) &deactivate_type);
+        nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (void *) &deactivate_type);
         return NFA_STATUS_OK;
     }
 }
@@ -3330,7 +3489,6 @@
 }
 #endif /* BT_TRACE_VERBOSE */
 
-#if(NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         P2P_Prio_Logic
@@ -3341,8 +3499,13 @@
 ** Returns          True if success
 **
 *******************************************************************************/
-BOOLEAN nfa_dm_p2p_prio_logic(UINT8 event, UINT8 *p, UINT8 ntf_rsp)
+BOOLEAN nfa_dm_p2p_prio_logic (UINT8 event, UINT8 *p, UINT8 event_type)
 {
+    if (!nfa_poll_bail_out_mode)
+    {
+        NFA_TRACE_DEBUG0 ("p2p priority is running under bail out mode ONLY.");
+        return TRUE;
+    }
 
     if((nfa_dm_cb.flags & NFA_DM_FLAGS_P2P_PAUSED) &&
        (nfa_dm_cb.flags & NFA_DM_FLAGS_LISTEN_DISABLED))
@@ -3350,10 +3513,11 @@
         NFA_TRACE_DEBUG0("returning from nfa_dm_p2p_prio_logic  Disable p2p_prio_logic");
         return TRUE;
     }
-    if (TRUE == reconnect_in_progress ||
-            TRUE == is_emvco_active)
+#if(NXP_EXTNS == TRUE)
+    if( (TRUE == reconnect_in_progress) ||
+       (TRUE == is_emvco_active))
     {
-        NFA_TRACE_DEBUG0("returning from nfa_dm_p2p_prio_logic  reconnect_in_progress || is_emvco_active");
+        NFA_TRACE_DEBUG0("returning from nfa_dm_p2p_prio_logic  reconnect_in_progress");
         return TRUE;
     }
     if(0x01 == appl_dta_mode_flag)
@@ -3361,16 +3525,17 @@
         /*Disable the P2P Prio Logic when DTA is running*/
         return TRUE;
     }
-    if(event == NCI_MSG_RF_DISCOVER && p2p_prio_logic_data.timer_expired == 1 && ntf_rsp == 1)
+#endif
+    if (event == NCI_MSG_RF_DISCOVER && p2p_prio_logic_data.timer_expired == TRUE && event_type == NFA_DM_P2P_PRIO_RSP)
     {
-        NFA_TRACE_DEBUG0("nfa_dm_p2p_prio_logic starting a timer for next rf intf activated ntf");
-        P2P_PRIO_LOGIC_CLEANUP_TIMEOUT = (nfa_dm_act_get_rf_disc_duration()/10); /*timeout value 50 ms multiplied by 10 for p2p_prio_logic_cleanup*/
-
+        NFA_TRACE_DEBUG0 ("nfa_dm_p2p_prio_logic starting a timer for next rf intf activated ntf");
         nfc_start_quick_timer (&p2p_prio_logic_data.timer_list,
-                        NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP, P2P_PRIO_LOGIC_CLEANUP_TIMEOUT);
+                        NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP,
+                        ((UINT32) nfa_dm_act_get_rf_disc_duration() * QUICK_TIMER_TICKS_PER_SEC) / 1000);
         return TRUE;
     }
-    if(event == NCI_MSG_RF_INTF_ACTIVATED && p2p_prio_logic_data.timer_expired == 1)
+
+    if (event == NCI_MSG_RF_INTF_ACTIVATED && p2p_prio_logic_data.timer_expired == TRUE)
     {
         NFA_TRACE_DEBUG0("nfa_dm_p2p_prio_logic stopping a timer for next rf intf activated ntf");
         nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
@@ -3392,32 +3557,28 @@
             protocol      = *p++;
             tech_mode     = *p++;
         }
-        NFA_TRACE_DEBUG1("nfa_dm_p2p_prio_logic type = 0x%x", type);
+        NFA_TRACE_DEBUG1 ("nfa_dm_p2p_prio_logic event_type = 0x%x", event_type);
 
-
+#if(NXP_EXTNS == TRUE)
         if(type == NCI_INTERFACE_UICC_DIRECT || type == NCI_INTERFACE_ESE_DIRECT )
         {
              NFA_TRACE_DEBUG0 ("Disable the p2p prio logic RDR_SWP");
              return TRUE;
         }
-
-        if(event == NCI_MSG_RF_INTF_ACTIVATED && tech_mode >= 0x80)
+#endif
+        if (event == NCI_MSG_RF_INTF_ACTIVATED && tech_mode >= 0x80)
         {
             NFA_TRACE_DEBUG0 ("nfa_dm_p2p_prio_logic listen mode activated reset all the nfa_dm_p2p_prio_logic variables ");
-            memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
-            if(p2p_prio_logic_data.timer_list.in_use)
-            {
-                nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
-            }
+            nfa_dm_p2p_prio_logic_cleanup ();
         }
 
         if ((tech_mode < 0x80) &&
             event == NCI_MSG_RF_INTF_ACTIVATED &&
             protocol == NCI_PROTOCOL_ISO_DEP &&
-            p2p_prio_logic_data.isodep_detected == 0)
+            p2p_prio_logic_data.isodep_detected == FALSE)
         {
-            memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
-            p2p_prio_logic_data.isodep_detected = 1;
+            nfa_dm_p2p_prio_logic_cleanup ();
+            p2p_prio_logic_data.isodep_detected = TRUE;
             p2p_prio_logic_data.first_tech_mode = tech_mode;
             NFA_TRACE_DEBUG0 ("ISO-DEP Detected First Time  Resume the Polling Loop");
             nci_snd_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
@@ -3428,11 +3589,11 @@
 
         else if(event == NCI_MSG_RF_INTF_ACTIVATED &&
                 protocol == NCI_PROTOCOL_ISO_DEP &&
-                p2p_prio_logic_data.isodep_detected == 1 &&
+                p2p_prio_logic_data.isodep_detected == TRUE &&
                 p2p_prio_logic_data.first_tech_mode != tech_mode)
         {
-            p2p_prio_logic_data.isodep_detected = 1;
-            p2p_prio_logic_data.timer_expired = 0;
+            p2p_prio_logic_data.isodep_detected = TRUE;
+            p2p_prio_logic_data.timer_expired = FALSE;
             NFA_TRACE_DEBUG0 ("ISO-DEP Detected Second Time Other Techmode  Resume the Polling Loop");
             nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
             nci_snd_deactivate_cmd(NFA_DEACTIVATE_TYPE_DISCOVERY);
@@ -3443,47 +3604,48 @@
 
         else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
                  protocol == NCI_PROTOCOL_ISO_DEP &&
-                 p2p_prio_logic_data.isodep_detected == 1 &&
-                 p2p_prio_logic_data.timer_expired == 1)
+                 p2p_prio_logic_data.isodep_detected == TRUE &&
+                 p2p_prio_logic_data.timer_expired == TRUE)
         {
             NFA_TRACE_DEBUG0 ("ISO-DEP Detected TimerExpired, Final Notifying the Event");
             nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
-            memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
+            nfa_dm_p2p_prio_logic_cleanup ();
         }
 
         else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
                  protocol == NCI_PROTOCOL_ISO_DEP &&
-                 p2p_prio_logic_data.isodep_detected == 1 &&
+                 p2p_prio_logic_data.isodep_detected == TRUE &&
                  p2p_prio_logic_data.first_tech_mode == tech_mode)
         {
             NFA_TRACE_DEBUG0 ("ISO-DEP Detected Same Techmode, Final Notifying the Event");
             nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
             NFA_TRACE_DEBUG0 ("P2P_Stop_Timer");
-            memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
+            nfa_dm_p2p_prio_logic_cleanup ();
         }
 
         else if (event == NCI_MSG_RF_INTF_ACTIVATED &&
                  protocol != NCI_PROTOCOL_ISO_DEP &&
-                 p2p_prio_logic_data.isodep_detected == 1)
+                 p2p_prio_logic_data.isodep_detected == TRUE)
         {
             NFA_TRACE_DEBUG0 ("ISO-DEP Not Detected  Giving Priority for other Technology");
             nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
             NFA_TRACE_DEBUG0 ("P2P_Stop_Timer");
-            memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
+            nfa_dm_p2p_prio_logic_cleanup ();
         }
 
         else if (event == NCI_MSG_RF_DEACTIVATE &&
-                 p2p_prio_logic_data.isodep_detected == 1 &&
-                 p2p_prio_logic_data.timer_expired == 0 &&
-                 ntf_rsp == 1)
+                 p2p_prio_logic_data.isodep_detected == TRUE &&
+                 p2p_prio_logic_data.timer_expired == FALSE &&
+                 event_type == NFA_DM_P2P_PRIO_RSP)
         {
             NFA_TRACE_DEBUG0 ("NFA_DM_RF_DEACTIVATE_RSP");
             return FALSE;
         }
 
         else if (event == NCI_MSG_RF_DEACTIVATE &&
-                 p2p_prio_logic_data.isodep_detected == 1 &&
-                 p2p_prio_logic_data.timer_expired == 0 && ntf_rsp == 2)
+                 p2p_prio_logic_data.isodep_detected == TRUE &&
+                 p2p_prio_logic_data.timer_expired == FALSE &&
+                 event_type == NFA_DM_P2P_PRIO_NTF)
         {
             NFA_TRACE_DEBUG0 ("NFA_DM_RF_DEACTIVATE_NTF");
             if(p2p_prio_logic_data.timer_list.in_use)
@@ -3491,7 +3653,8 @@
                 nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
             }
             nfc_start_quick_timer (&p2p_prio_logic_data.timer_list,
-                                   NFC_TTYPE_P2P_PRIO_RESPONSE, P2P_RESUME_POLL_TIMEOUT);
+                                   NFC_TTYPE_P2P_PRIO_RESPONSE,
+                                   ((UINT32) 160 * QUICK_TIMER_TICKS_PER_SEC) / 1000 );
 
             NFA_TRACE_DEBUG0 ("P2P_Start_Timer");
 
@@ -3502,18 +3665,26 @@
     NFA_TRACE_DEBUG0("returning TRUE");
     return TRUE;
 }
+
+#if(NXP_EXTNS == TRUE)
+void nfa_dm_p2p_prio_logic_disable ()
+{
+    if(&p2p_prio_logic_data.timer_list.in_use)
+        nfc_stop_quick_timer (&p2p_prio_logic_data.timer_list);
+    memset (&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
+}
+
 void NFA_SetReconnectState (BOOLEAN flag)
 {
     reconnect_in_progress = flag;
     NFA_TRACE_DEBUG1("NFA_SetReconnectState = 0x%x", reconnect_in_progress);
 }
-
 void NFA_SetEmvCoState (BOOLEAN flag)
 {
     is_emvco_active = flag;
     NFA_TRACE_DEBUG1("NFA_SetEmvCoState = 0x%x", is_emvco_active);
 }
-
+#endif
 /*******************************************************************************
 **
 ** Function         p2p_prio_logic_timeout
@@ -3556,4 +3727,3 @@
     memset(&p2p_prio_logic_data, 0x00, sizeof(nfa_dm_p2p_prio_logic_t));
     nfc_ncif_cmd_timeout();
 }
-#endif
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.c
index 6730b13..dd14b89 100755
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.c
@@ -271,7 +271,7 @@
     tNFC_STATUS nfc_status;
     UINT32 cur_bit;
 
-    NFA_TRACE_DEBUG0 ("nfa_dm_check_set_config ()");
+    NFA_TRACE_DEBUG1 ("nfa_dm_check_set_config () tlv_len=%d",tlv_list_len);
 
     /* We only allow 32 pending SET_CONFIGs */
     if (nfa_dm_cb.setcfg_pending_num >= NFA_DM_SETCONFIG_PENDING_MAX)
@@ -290,6 +290,13 @@
 
         switch (type)
         {
+        /*
+        **  Poll F Configuration
+        */
+        case NFC_PMID_PF_RC:
+            p_stored = nfa_dm_cb.params.pf_rc;
+            max_len  = NCI_PARAM_LEN_PF_RC;
+            break;
         case NFC_PMID_TOTAL_DURATION:
             p_stored = nfa_dm_cb.params.total_duration;
             max_len  = NCI_PARAM_LEN_TOTAL_DURATION;
@@ -490,6 +497,13 @@
        || ((appl_dta_mode_flag) && (app_init)))
 #endif
     {
+#if(NXP_EXTNS == TRUE)
+        NFA_TRACE_DEBUG1 ("nfa_dm_check_set_config () updated_len=%d",updated_len);
+        if(!updated_len)
+        {
+            return NFA_STATUS_OK;
+        }
+#endif
         if ((nfc_status = NFC_SetConfig (updated_len, p_tlv_list)) == NFC_STATUS_OK)
         {
             /* Keep track of whether we will need to notify NFA_DM_SET_CONFIG_EVT on NFC_SET_CONFIG_REVT */
diff --git a/src/nfa/dm/nfa_dm_ndef.c b/src/nfa/dm/nfa_dm_ndef.c
index f0c6577..876e4ba 100755
--- a/src/nfa/dm/nfa_dm_ndef.c
+++ b/src/nfa/dm/nfa_dm_ndef.c
@@ -180,7 +180,7 @@
         ndef_register.status = NFA_STATUS_OK;
 
         NFA_TRACE_DEBUG1 ("NDEF handler successfully registered. Handle=0x%08x", p_reg_info->ndef_type_handle);
-        (*(p_reg_info->p_ndef_cback)) (NFA_NDEF_REGISTER_EVT, (tNFA_NDEF_EVT_DATA *) &ndef_register);
+        (*(p_reg_info->p_ndef_cback)) (NFA_NDEF_REGISTER_EVT, (void *) &ndef_register);
 
         return FALSE;       /* indicate that we will free message buffer when type_handler is deregistered */
     }
@@ -190,7 +190,7 @@
         NFA_TRACE_ERROR0 ("NDEF handler failed to register.");
         ndef_register.ndef_type_handle = NFA_HANDLE_INVALID;
         ndef_register.status = NFA_STATUS_FAILED;
-        (*(p_reg_info->p_ndef_cback)) (NFA_NDEF_REGISTER_EVT, (tNFA_NDEF_EVT_DATA *) &ndef_register);
+        (*(p_reg_info->p_ndef_cback)) (NFA_NDEF_REGISTER_EVT, (void *) &ndef_register);
 
         return TRUE;
     }
@@ -389,7 +389,7 @@
         ndef_data.ndef_type_handle = 0;     /* No ndef-handler handle, since this callback is not from RegisterNDefHandler */
         ndef_data.p_data = p_msg_buf;
         ndef_data.len = len;
-        (*p_cb->p_excl_ndef_cback) (NFA_NDEF_DATA_EVT, (tNFA_NDEF_EVT_DATA *) &ndef_data);
+        (*p_cb->p_excl_ndef_cback) (NFA_NDEF_DATA_EVT, (void *) &ndef_data);
         return;
     }
 
@@ -402,7 +402,7 @@
             ndef_data.ndef_type_handle = p_handler->ndef_type_handle;
             ndef_data.p_data = NULL;   /* Start of record */
             ndef_data.len = 0;
-            (*p_handler->p_ndef_cback) (NFA_NDEF_DATA_EVT, (tNFA_NDEF_EVT_DATA *) &ndef_data);
+            (*p_handler->p_ndef_cback) (NFA_NDEF_DATA_EVT, (void *) &ndef_data);
         }
         return;
     }
@@ -511,7 +511,7 @@
             }
 
             /* Notify NDEF type handler */
-            (*p_handler->p_ndef_cback) (NFA_NDEF_DATA_EVT, (tNFA_NDEF_EVT_DATA *) &ndef_data);
+            (*p_handler->p_ndef_cback) (NFA_NDEF_DATA_EVT, (void *) &ndef_data);
 
             /* Indicate that at lease one handler has received this record */
             record_handled = TRUE;
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index 955d4a2..beb0ad4 100755
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -47,7 +47,7 @@
 #include "nfa_sys_int.h"
 #include "nfc_api.h"
 #include "nfa_ee_int.h"
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 #include <config.h>
 #endif
 
@@ -122,7 +122,7 @@
 UINT8 nfa_ee_ce_route_strict_disable = 0x01;
 BOOLEAN  gNfaProvisionMode = FALSE; /* to know if device is set to provision mode or not */
 UINT8 nfa_ee_ce_p61_active = 0x00;
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 static UINT16 max_routing_table_size;
 static UINT16 max_aid_config_length;
 static UINT16 max_aid_entries;
@@ -293,7 +293,6 @@
 *******************************************************************************/
 static void nfa_ee_conn_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data)
 {
-    BT_HDR             *p_msg;
     tNFA_EE_NCI_CONN    cbk;
 
     NFA_TRACE_DEBUG2("nfa_ee_conn_cback: conn_id: %d, event=0x%02x", conn_id, event);
@@ -307,9 +306,8 @@
     cbk.conn_id     = conn_id;
     cbk.event       = event;
     cbk.p_data      = p_data;
-    p_msg           = (BT_HDR *)&cbk;
 
-    nfa_ee_evt_hdlr (p_msg);
+    nfa_ee_evt_hdlr ((void*)&cbk);
 }
 
 
@@ -530,7 +528,7 @@
             }
         }
     }
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 
      max_routing_table_size = nfc_ncif_getMaxRoutingTableSize();
     if(max_routing_table_size < (NFA_EE_TOTAL_TECH_ROUTE_SIZE + NFA_EE_TOTAL_PROTO_ROUTE_SIZE))
@@ -538,7 +536,7 @@
         max_routing_table_size = NFA_EE_ROUT_BUF_SIZE;
     }
     max_aid_config_length = nfa_ee_find_max_aid_config_length();
-    max_aid_entries = max_aid_config_length/NFA_EE_MIN_AID_SIZE;
+    max_aid_entries = max_aid_config_length/NFA_EE_MIN_AID_ENTRY_SIZE;
     NFA_TRACE_DEBUG3("max_routing_table_size = %d max_aid_config_length: %d and max_aid_entries: %d",
                       max_routing_table_size, max_aid_config_length, max_aid_entries);
     /* Dynamic ecb allocation based on max aid entry calculated from max. routing table size( from core_init rsp )*/
@@ -547,16 +545,19 @@
         nfa_ee_cb.ecb[xx].aid_len = GKI_getbuf(max_aid_entries);
         nfa_ee_cb.ecb[xx].aid_pwr_cfg = GKI_getbuf(max_aid_entries);
         nfa_ee_cb.ecb[xx].aid_rt_info = GKI_getbuf(max_aid_entries);
-        nfa_ee_cb.ecb[xx].aid_rt_loc = GKI_getbuf(max_aid_entries);
-        if((NULL != nfa_ee_cb.ecb[xx].aid_len) &&
+        nfa_ee_cb.ecb[xx].aid_rt_loc  = GKI_getbuf(max_aid_entries);
+        nfa_ee_cb.ecb[xx].aid_cfg     = GKI_getbuf(max_aid_config_length);
+        if((NULL  != nfa_ee_cb.ecb[xx].aid_len) &&
                 (NULL != nfa_ee_cb.ecb[xx].aid_pwr_cfg) &&
                 (NULL != nfa_ee_cb.ecb[xx].aid_rt_info) &&
-                (NULL != nfa_ee_cb.ecb[xx].aid_rt_loc))
+            (NULL != nfa_ee_cb.ecb[xx].aid_rt_loc)  &&
+            (NULL != nfa_ee_cb.ecb[xx].aid_cfg))
         {
             memset(nfa_ee_cb.ecb[xx].aid_len, 0, max_aid_entries);
             memset(nfa_ee_cb.ecb[xx].aid_pwr_cfg, 0, max_aid_entries);
             memset(nfa_ee_cb.ecb[xx].aid_rt_info, 0, max_aid_entries);
             memset(nfa_ee_cb.ecb[xx].aid_rt_loc, 0, max_aid_entries);
+            memset(nfa_ee_cb.ecb[xx].aid_cfg, 0, max_aid_config_length);
         }
         else
         {
@@ -585,7 +586,7 @@
 void nfa_ee_api_deregister(tNFA_EE_MSG *p_data)
 {
     tNFA_EE_CBACK *p_cback = NULL;
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     int                 index  = p_data->deregister.index, xx = 0;
 #else
      int                 index  = p_data->deregister.index;
@@ -593,13 +594,14 @@
     tNFA_EE_CBACK_DATA  evt_data = {0};
 
     NFA_TRACE_DEBUG0 ("nfa_ee_api_deregister");
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     for(xx = 0; xx < NFA_EE_NUM_ECBS; xx++)
     {
         GKI_freebuf(nfa_ee_cb.ecb[xx].aid_len);
         GKI_freebuf(nfa_ee_cb.ecb[xx].aid_pwr_cfg);
         GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_info);
         GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_loc);
+        GKI_freebuf(nfa_ee_cb.ecb[xx].aid_cfg);
     }
 #endif
     p_cback = nfa_ee_cb.p_ee_cback[index];
@@ -625,11 +627,18 @@
     NFA_TRACE_DEBUG2 ("nfa_ee_api_mode_set() handle:0x%02x mode:%d", p_cb->nfcee_id, p_data->mode_set.mode);
     NFC_NfceeModeSet (p_cb->nfcee_id, p_data->mode_set.mode);
     /* set the NFA_EE_STATUS_PENDING bit to indicate the status is not exactly active */
-    if (p_data->mode_set.mode == NFC_MODE_ACTIVATE)
+    if (p_data->mode_set.mode == NFC_MODE_ACTIVATE
+#if(NXP_EXTNS == TRUE)
+            && (p_cb->ee_status != NFA_EE_STATUS_REMOVED)
+#endif
+        )
         p_cb->ee_status = NFA_EE_STATUS_PENDING | NFA_EE_STATUS_ACTIVE;
     else
     {
-        p_cb->ee_status = NFA_EE_STATUS_INACTIVE;
+#if(NXP_EXTNS == TRUE)
+        if(p_cb->ee_status != NFA_EE_STATUS_REMOVED)
+#endif
+            p_cb->ee_status = NFA_EE_STATUS_INACTIVE;
         /* DH should release the NCI connection before deactivate the NFCEE */
         if (p_cb->conn_st == NFA_EE_CONN_ST_CONN)
         {
@@ -666,6 +675,20 @@
 #endif
     UINT8                   old_size_mask        = p_cb->size_mask;
 
+    if (   (p_cb->tech_switch_on == p_data->set_tech.technologies_switch_on)
+        && (p_cb->tech_switch_off == p_data->set_tech.technologies_switch_off)
+        && (p_cb->tech_battery_off == p_data->set_tech.technologies_battery_off)
+#if(NXP_EXTNS == TRUE)
+        && (p_cb->tech_screen_lock == p_data->set_tech.technologies_screen_lock)
+        && (p_cb->tech_screen_off == p_data->set_tech.technologies_screen_off)
+#endif
+        )
+    {
+        /* nothing to change */
+        evt_data.status = NFA_STATUS_OK;
+        nfa_ee_report_event (p_cb->p_ee_cback, NFA_EE_SET_TECH_CFG_EVT, &evt_data);
+        return;
+    }
     p_cb->tech_switch_on   = p_data->set_tech.technologies_switch_on;
     p_cb->tech_switch_off  = p_data->set_tech.technologies_switch_off;
     p_cb->tech_battery_off = p_data->set_tech.technologies_battery_off;
@@ -728,6 +751,20 @@
 #endif
     UINT8                   old_size_mask        = p_cb->size_mask;
 
+    if (   (p_cb->proto_switch_on == p_data->set_proto.protocols_switch_on)
+        && (p_cb->proto_switch_off == p_data->set_proto.protocols_switch_off)
+        && (p_cb->proto_battery_off == p_data->set_proto.protocols_battery_off)
+#if(NXP_EXTNS == TRUE)
+        && (p_cb->proto_screen_lock == p_data->set_proto.protocols_screen_lock)
+        && (p_cb->proto_screen_off == p_data->set_proto.protocols_screen_off)
+#endif
+        )
+    {
+        /* nothing to change */
+        evt_data.status = NFA_STATUS_OK;
+        nfa_ee_report_event (p_cb->p_ee_cback, NFA_EE_SET_PROTO_CFG_EVT, &evt_data);
+        return;
+    }
     p_cb->proto_switch_on       = p_data->set_proto.protocols_switch_on;
     p_cb->proto_switch_off      = p_data->set_proto.protocols_switch_off;
     p_cb->proto_battery_off     = p_data->set_proto.protocols_battery_off;
@@ -834,14 +871,14 @@
         len_needed  = p_add->aid_len + 2; /* tag/len */
 
         if ((len_needed + len) >
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
         max_aid_config_length
 #else
         NFA_EE_MAX_AID_CFG_LEN
 #endif
         )
         {
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
             NFA_TRACE_ERROR3 ("Exceed capacity: (len_needed:%d + len:%d) > max_aid_config_length:%d", len_needed, len, max_aid_config_length);
 #else
             NFA_TRACE_ERROR3 ("Exceed capacity: (len_needed:%d + len:%d) > NFA_EE_MAX_AID_CFG_LEN:%d", len_needed, len, NFA_EE_MAX_AID_CFG_LEN);
@@ -849,7 +886,7 @@
             evt_data.status = NFA_STATUS_BUFFER_FULL;
         }
 #if(NXP_EXTNS == TRUE)
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
         else if (dh_ecb->aid_entries < max_aid_entries)
 #else
         else if (dh_ecb->aid_entries < NFA_EE_MAX_AID_ENTRIES)
@@ -895,7 +932,7 @@
         }
         else
         {
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
             NFA_TRACE_ERROR1 ("Exceed NFA_EE_MAX_AID_ENTRIES:%d", max_aid_entries);
 #else
             NFA_TRACE_ERROR1 ("Exceed NFA_EE_MAX_AID_ENTRIES:%d", NFA_EE_MAX_AID_ENTRIES);
@@ -983,9 +1020,17 @@
         for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++)
         {
             memset(&p_cb->aid_cfg[0],0x00, sizeof(p_cb->aid_cfg));
-            memset(&p_cb->aid_len[0], 0x00, sizeof(p_cb->aid_len));
-            memset(&p_cb->aid_pwr_cfg[0], 0x00, sizeof(p_cb->aid_pwr_cfg));
-            memset(&p_cb->aid_rt_info[0], 0x00, sizeof(p_cb->aid_rt_info));
+
+#if((NXP_EXTNS == TRUE) && (((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE)))
+            memset(&p_cb->aid_len[0], 0x00, max_aid_entries);
+            memset(&p_cb->aid_pwr_cfg[0], 0x00, max_aid_entries);
+            memset(&p_cb->aid_rt_info[0], 0x00, max_aid_entries);
+#else
+            memset(&p_cb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+            memset(&p_cb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+            memset(&p_cb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+#endif
+
             p_cb->aid_entries = 0;
             nfa_ee_cb.ee_cfged      |= nfa_ee_ecb_to_mask(p_cb);
         }
@@ -993,9 +1038,16 @@
         tNFA_EE_ECB *p_ecb = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
 
         memset(&p_ecb->aid_cfg[0],0x00, sizeof(p_ecb->aid_cfg));
-        memset(&p_ecb->aid_len[0], 0x00, sizeof(p_ecb->aid_len));
-        memset(&p_ecb->aid_pwr_cfg[0], 0x00, sizeof(p_ecb->aid_pwr_cfg));
-        memset(&p_ecb->aid_rt_info[0], 0x00, sizeof(p_ecb->aid_rt_info));
+
+#if((NXP_EXTNS == TRUE) && (((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE)))
+        memset(&p_ecb->aid_len[0], 0x00, max_aid_entries);
+        memset(&p_ecb->aid_pwr_cfg[0], 0x00, max_aid_entries);
+        memset(&p_ecb->aid_rt_info[0], 0x00, max_aid_entries);
+#else
+        memset(&p_ecb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_ecb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_ecb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+#endif
         p_ecb->aid_entries = 0;
         p_cb->ecb_flags         |= NFA_EE_ECB_FLAGS_AID;
         nfa_ee_cb.ee_cfged      |= nfa_ee_ecb_to_mask(p_ecb);
@@ -1022,7 +1074,7 @@
 {
     tNFA_EE_CBACK_DATA  evt_data = {0};
     UINT16 total_size = NFC_GetLmrtSize();
-
+    (void)p_data;
     evt_data.size       = total_size - nfa_ee_total_lmrt_size();
     NFA_TRACE_DEBUG2 ("nfa_ee_api_lmrt_size total size:%d remaining size:%d", total_size, evt_data.size);
 
@@ -1126,12 +1178,12 @@
         }
         else
         {
-            nfa_ee_report_event( p_cb->p_ee_cback, NFA_EE_NO_MEM_ERR_EVT, (tNFA_EE_CBACK_DATA *)&status);
+            nfa_ee_report_event( p_cb->p_ee_cback, NFA_EE_NO_MEM_ERR_EVT, (void *)&status);
         }
     }
     else
     {
-        nfa_ee_report_event( p_cb->p_ee_cback, NFA_EE_NO_CB_ERR_EVT, (tNFA_EE_CBACK_DATA *)&status);
+        nfa_ee_report_event( p_cb->p_ee_cback, NFA_EE_NO_CB_ERR_EVT, (void *)&status);
     }
 }
 
@@ -1661,7 +1713,7 @@
     }
 
     nfa_ee_build_discover_req_evt (&evt_data);
-    nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, (tNFA_EE_CBACK_DATA *)&evt_data);
+    nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, (void *)&evt_data);
 }
 
 /*******************************************************************************
@@ -1694,19 +1746,21 @@
 #endif
     if (p_rsp->status == NFA_STATUS_OK)
     {
-
         if (p_rsp->mode == NFA_EE_MD_ACTIVATE)
         {
-            p_cb->ee_status = NFC_NFCEE_STATUS_ACTIVE;
+#if(NXP_EXTNS == TRUE)
+            if (p_cb->ee_status != NFC_NFCEE_STATUS_REMOVED)
+#endif
+                p_cb->ee_status = NFC_NFCEE_STATUS_ACTIVE;
         }
         else
         {
 #if(NXP_EXTNS == TRUE)
-    /* Do not update routing table on secure element enable/disable. */
+            /* Do not update routing table on secure element enable/disable. */
 #else
             if (p_cb->tech_switch_on | p_cb->tech_switch_off | p_cb->tech_battery_off |
-                p_cb->proto_switch_on| p_cb->proto_switch_off| p_cb->proto_battery_off |
-                p_cb->aid_entries)
+                    p_cb->proto_switch_on| p_cb->proto_switch_off| p_cb->proto_battery_off |
+                    p_cb->aid_entries)
             {
                 /* this NFCEE still has configuration when deactivated. clear the configuration */
                 nfa_ee_cb.ee_cfged  &= ~nfa_ee_ecb_to_mask(p_cb);
@@ -1717,7 +1771,10 @@
             p_cb->proto_switch_on   = p_cb->proto_switch_off= p_cb->proto_battery_off   = 0;
             p_cb->aid_entries       = 0;
 #endif
-            p_cb->ee_status = NFC_NFCEE_STATUS_INACTIVE;
+#if(NXP_EXTNS == TRUE)
+            if (p_cb->ee_status != NFC_NFCEE_STATUS_REMOVED)
+#endif
+                p_cb->ee_status = NFC_NFCEE_STATUS_INACTIVE;
         }
     }
     NFA_TRACE_DEBUG4 ("status:%d ecb_flags  :0x%02x ee_cfged:0x%02x ee_status:%d",
@@ -1744,7 +1801,7 @@
         mode_set.ee_handle  = (tNFA_HANDLE)p_rsp->nfcee_id | NFA_HANDLE_GROUP_EE;
         mode_set.ee_status  = p_cb->ee_status;
 
-        nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_MODE_SET_EVT, (tNFA_EE_CBACK_DATA *)&mode_set);
+        nfa_ee_report_event(p_cb->p_ee_cback, NFA_EE_MODE_SET_EVT, (void *)&mode_set);
 
         if ((p_cb->ee_status == NFC_NFCEE_STATUS_INACTIVE)
             || (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE))
@@ -1934,7 +1991,7 @@
        nfa_ee_ce_p61_active = 0x01;
     }
 #endif
-    nfa_ee_report_event(NULL, NFA_EE_ACTION_EVT, (tNFA_EE_CBACK_DATA *)&evt_data);
+    nfa_ee_report_event(NULL, NFA_EE_ACTION_EVT, (void *)&evt_data);
 }
 
 #if(NXP_EXTNS == TRUE)
@@ -2160,7 +2217,7 @@
         NFA_TECHNOLOGY_MASK_B_PRIME
     };
 
-    NFA_TRACE_DEBUG1("nfa_ee_get_tech_route(): %d", power_state);
+    NFA_TRACE_DEBUG1("nfa_ee_get_tech_route(): power state : %d", power_state);
 
     for (xx = 0; xx < NFA_EE_MAX_TECH_ROUTE; xx++)
     {
@@ -2188,7 +2245,7 @@
             }
         }
     }
-    NFA_TRACE_DEBUG4("0x%x, 0x%x, 0x%x, 0x%x", p_handles[0], p_handles[1], p_handles[2], p_handles[3]);
+    NFA_TRACE_DEBUG4("TechA route: 0x%x, TechB route: 0x%x, TechF route: 0x%x, TechB' route: 0x%x", p_handles[0], p_handles[1], p_handles[2], p_handles[3]);
 }
 
 /*******************************************************************************
@@ -2688,6 +2745,7 @@
     {
         if (nfa_ee_cb.ee_cfg_sts & NFA_EE_STS_CHANGED)
         {
+            NFA_TRACE_DEBUG1 ("%s:Routing table dirty, update required...",__FUNCTION__);
             needed = TRUE;
         }
         else
@@ -2699,6 +2757,7 @@
                 NFA_TRACE_DEBUG3("%d: ecb_flags  : 0x%02x, mask: 0x%02x", xx, p_cb->ecb_flags  , mask);
                 if ((p_cb->ecb_flags  ) && (nfa_ee_cb.ee_cfged & mask))
                 {
+                    NFA_TRACE_DEBUG1 ("%s:Routing table dirty, update required...",__FUNCTION__);
                     needed = TRUE;
                     break;
                 }
@@ -2725,6 +2784,7 @@
 void nfa_ee_rout_timeout(tNFA_EE_MSG *p_data)
 {
     UINT8               ee_cfged = nfa_ee_cb.ee_cfged;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0("nfa_ee_rout_timeout()");
     if (nfa_ee_need_recfg())
@@ -2759,6 +2819,8 @@
 *******************************************************************************/
 void nfa_ee_discv_timeout(tNFA_EE_MSG *p_data)
 {
+    (void)p_data;
+
     NFC_NfceeDiscover(FALSE);
     if (nfa_ee_cb.p_enable_cback)
         (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_OFF);
@@ -2788,8 +2850,9 @@
 #if(NXP_EXTNS == TRUE)
     tNFA_EE_CBACK_DATA  evt_data = {0};
 #endif
+    (void)p_data;
 
-#if((NXP_EXTNS == TRUE) && (!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if((NXP_EXTNS == TRUE) && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     NFA_TRACE_DEBUG1("max supported routing table size: %d", max_routing_table_size);
     /* update routing table: DH and the activated NFCEEs */
     p = (UINT8 *)GKI_getbuf(max_routing_table_size);
@@ -2844,7 +2907,7 @@
     {
         more = FALSE;
     }
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     find_and_resolve_tech_conflict();
 #endif
     /* add the routing for DH first */
@@ -2901,7 +2964,7 @@
 }
 
 
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 /*******************************************************************************
 **
 ** Function         find_and_resolve_tech_conflict
@@ -2917,7 +2980,7 @@
     int yy,xx;
     tNFA_EE_ECB *p_cb = nfa_ee_cb.ecb;
     UINT8   techA_found=0, techF_found=0;
-    UINT8   techA_ee, techF_ee;
+    UINT8   techA_ee=0, techF_ee=0;
     unsigned long preferred_se = 0x01;
     BOOLEAN conflict = FALSE;
     UINT8 tech_to_rm, ee_from_rm;
@@ -3080,7 +3143,7 @@
     NFA_TRACE_DEBUG0 ("nfa_ee_lmrt_size");
     int     len;
     len = nfa_all_ee_find_total_aid_len() + 2 /* tag/len */ + 2 /*route/power state*/;
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     return len < max_aid_config_length?len:max_aid_config_length;
 #else
     return len < NFA_EE_MAX_AID_CFG_LEN?len:NFA_EE_MAX_AID_CFG_LEN;
@@ -3103,7 +3166,7 @@
     }
     return status;
 }
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfa_ee_find_max_aid_config_length
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.c
index 78b318b..92ce48d 100755
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.c
@@ -660,7 +660,7 @@
 *******************************************************************************/
 UINT16 NFA_GetAidTableSize()
 {
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     return nfa_ee_api_get_max_aid_config_length();
 #else
     return NFA_EE_MAX_AID_CFG_LEN;
@@ -680,7 +680,7 @@
 UINT16 NFA_GetRemainingAidTableSize()
 {
     UINT16 size = 0;
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     size = nfa_ee_api_get_max_aid_config_length() - nfa_ee_lmrt_size();
 #else
     size = NFA_EE_MAX_AID_CFG_LEN - nfa_ee_lmrt_size();
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index b029506..62beeab 100755
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -222,7 +222,7 @@
             rsp.nfcee_id    = p_cb->nfcee_id;
             rsp.status      = NFA_STATUS_OK;
             ee_msg.p_data   = &rsp;
-            nfa_ee_nci_mode_set_rsp ((tNFA_EE_MSG *) &ee_msg);
+            nfa_ee_nci_mode_set_rsp ((void *) &ee_msg);
         }
     }
 }
@@ -330,7 +330,7 @@
             {
                 nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
                 data.hdr.event = NFA_EE_DISCV_TIMEOUT_EVT;
-                nfa_ee_evt_hdlr((BT_HDR *)&data);
+                nfa_ee_evt_hdlr((void *)&data);
             }
         }
     }
@@ -350,7 +350,6 @@
 {
     tNFA_EE_INT_EVT         int_event=0;
     tNFA_EE_NCI_WAIT_RSP    cbk;
-    BT_HDR                  *p_hdr;
 
     switch (event)
     {
@@ -383,11 +382,10 @@
     NFA_TRACE_DEBUG2 ("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event, int_event);
     if (int_event)
     {
-        p_hdr           = (BT_HDR *) &cbk;
         cbk.hdr.event   = int_event;
         cbk.p_data      = p_data;
 
-        nfa_ee_evt_hdlr (p_hdr);
+        nfa_ee_evt_hdlr ((void *) &cbk);
     }
 
 }
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.c
index f77c48b..4fb13f0 100755
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.c
@@ -1744,7 +1744,7 @@
 {
     tNFA_HCI_EVT_DATA           evt_data;
     tNFA_HCI_API_GET_HOST_LIST  *p_msg;
-
+    (void)p_data;
     if (nfa_hci_cb.inst != NFA_HCI_EVT_HOT_PLUG)
     {
         NFA_TRACE_ERROR0 ("nfa_hci_handle_admin_gate_evt - Unknown event on ADMIN Pipe");
@@ -2002,6 +2002,7 @@
 {
     tNFA_HCI_EVT_DATA   evt_data;
     tNFA_HANDLE         app_handle = nfa_hciu_get_pipe_owner (p_pipe->pipe_id);
+    (void)p_gate;
 
     switch (nfa_hci_cb.inst)
     {
@@ -2072,6 +2073,7 @@
 {
     tNFA_HCI_EVT_DATA   evt_data;
     tNFA_STATUS         status = NFA_STATUS_OK;
+    (void)p_gate;
 
     if (nfa_hci_cb.inst != NFA_HCI_ANY_OK)
         status = NFA_STATUS_FAILED;
diff --git a/src/nfa/hci/nfa_hci_ci.c b/src/nfa/hci/nfa_hci_ci.c
index 808dff0..fbf9190 100755
--- a/src/nfa/hci/nfa_hci_ci.c
+++ b/src/nfa/hci/nfa_hci_ci.c
@@ -70,7 +70,7 @@
 void nfa_nv_ci_write (tNFA_NV_CO_STATUS status)
 {
     tNFA_HCI_EVENT_DATA *p_msg;
-
+    (void)status;
     if ((p_msg = (tNFA_HCI_EVENT_DATA *) GKI_getbuf (sizeof (tNFA_HCI_EVENT_DATA))) != NULL)
     {
         p_msg->nv_write.hdr.event = NFA_HCI_RSP_NV_WRITE_EVT;
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.c
index 7369856..d79ff9d 100755
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.c
@@ -525,6 +525,7 @@
 *******************************************************************************/
 void nfa_hci_dh_startup_complete (void)
 {
+    int ee_entry_index = 0;
 //NFC-INIT MACH
 #if(NXP_EXTNS == TRUE)
     if(nfa_hci_cb.ee_disable_disc)
@@ -546,8 +547,35 @@
         if (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
         {
             nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
-            /* Wait for EE Discovery to complete */
-            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL);
+            /* Check if all EEs are discovered already*/
+            if(nfa_ee_cb.cur_ee == nfa_ee_max_ee_cfg)
+            {
+                while(ee_entry_index < nfa_ee_max_ee_cfg)
+                {
+                    /*Check if host discovered is inactive*/
+                    if((nfa_ee_cb.ecb[ee_entry_index].nfcee_id == NFA_EE_INTERFACE_HCI_ACCESS)&&(nfa_ee_cb.ecb[ee_entry_index].ee_status == NFA_EE_STATUS_INACTIVE))
+                    {
+                        break;
+                    }
+                    ee_entry_index++;
+                }
+                if (ee_entry_index == nfa_ee_max_ee_cfg)
+                {
+                    nfa_sys_stop_timer (&nfa_hci_cb.timer);
+                    nfa_hci_cb.w4_hci_netwk_init = FALSE;
+                    nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+                }
+                else
+                {
+                    /* Wait for EE Discovery to complete */
+                    nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL);
+                }
+            }
+            else
+            {
+                /* Wait for EE Discovery to complete */
+                nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_EE_DISCV_TIMEOUT_VAL);
+            }
         }
         else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
         {
@@ -601,9 +629,22 @@
         nfa_hciu_send_to_all_apps (NFA_HCI_INIT_EVT, &evt_data);
         nfa_sys_cback_notify_enable_complete (NFA_ID_HCI);
     }
-
+#if((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE))
+    if (status == NFA_STATUS_OK){
+        nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+        NFA_TRACE_EVENT0 ("hci_state = NFA_HCI_STATE_IDLE");
+        if((nfa_sys_cb.enable_cplt_flags == nfa_sys_cb.enable_cplt_mask)
+            &&(!(nfa_sys_cb.p_enable_cback))
+            )
+            {
+                if((nfa_dm_cb.p_dm_cback))
+                (*nfa_dm_cb.p_dm_cback)(NFA_DM_EE_HCI_ENABLE, NULL);
+            }
+        }
+#else
     if (status == NFA_STATUS_OK)
         nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+#endif
 
     else
         nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
@@ -806,6 +847,10 @@
         nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
         /* deregister message handler on NFA SYS */
         nfa_sys_deregister (NFA_ID_HCI);
+#if((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE))
+        if(nfa_dm_cb.p_dm_cback)
+        (*nfa_dm_cb.p_dm_cback)(NFA_DM_EE_HCI_DISABLE, NULL);
+#endif
     }
 
     if ((event != NFC_DATA_CEVT) || (p_pkt == NULL))
@@ -1178,7 +1223,7 @@
     tNFA_HCI_EVT        evt = 0;
     tNFA_HCI_EVT_DATA   evt_data;
     UINT8               delete_pipe;
-
+    (void)p_evt_data;
     NFA_TRACE_EVENT2 ("nfa_hci_rsp_timeout () State: %u  Cmd: %u", nfa_hci_cb.hci_state, nfa_hci_cb.cmd_sent);
 
     evt_data.status      = NFA_STATUS_FAILED;
@@ -1553,7 +1598,7 @@
                 {
                     tNFC_DATA_CEVT   xx;
                     xx.p_data = p_msg;
-                    nfa_hci_conn_cback (0, NFC_DATA_CEVT, (tNFC_CONN *)&xx);
+                    nfa_hci_conn_cback (0, NFC_DATA_CEVT, (void *)&xx);
                     return FALSE;
                 }
             }
@@ -1574,7 +1619,6 @@
         nfa_hci_cb.nv_write_needed = FALSE;
         nfa_nv_co_write ((UINT8 *)&nfa_hci_cb.cfg, sizeof (nfa_hci_cb.cfg),DH_NV_BLOCK);
     }
-
     return FALSE;
 }
 
@@ -1584,6 +1628,7 @@
     NFA_TRACE_DEBUG0 ("nfa_hci_release_transcieve (); Release ongoing transcieve");
     if(nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
     {
+
         nfa_sys_stop_timer(&nfa_hci_cb.timer);
         nfa_hci_rsp_timeout(NULL);
     }
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.c
index c0dadf4..7b8f348 100755
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.c
@@ -1435,6 +1435,7 @@
 {
     UINT8 *p = (UINT8 *) (p_buf + 1) + p_buf->offset;
     static UINT8  next_pipe = 0x10;
+    (void)pipe;
 
     if (type == NFA_HCI_COMMAND_TYPE)
     {
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 43057e2..1c7236e 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -142,8 +142,8 @@
 #define NFA_PROTOCOL_ISO15693   NFC_PROTOCOL_15693
 #define NFA_PROTOCOL_B_PRIME    NFC_PROTOCOL_B_PRIME
 #define NFA_PROTOCOL_KOVIO      NFC_PROTOCOL_KOVIO
-#if (NXP_EXTNS == TRUE)
 #define NFA_PROTOCOL_MIFARE     NFC_PROTOCOL_MIFARE
+#if (NXP_EXTNS == TRUE)
 #define NFA_PROTOCOL_T3BT       NFC_PROTOCOL_T3BT
 #define NFA_NORMAL_BOOT_MODE    NFC_NORMAL_BOOT_MODE
 #define NFA_FAST_BOOT_MODE      NFC_FAST_BOOT_MODE
@@ -177,6 +177,11 @@
 #define NFA_DM_EMVCO_PCD_COLLISION_EVT  8   /* Collision event in case of EMV-CO Profile (Nxp)*/
 #define NFA_DM_SET_ROUTE_CONFIG_REVT    9   /* Status of EE Route config CMD (Nxp)*/
 #define NFA_DM_GET_ROUTE_CONFIG_REVT    10  /* Result of NFA_GetRouting         */
+
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+#define NFA_DM_EE_HCI_DISABLE           11  /*Status when EE HCI subsystems disabled*/
+#define NFA_DM_EE_HCI_ENABLE            12  /*Status when EE HCI susbsystems enabled*/
+#endif
 /* Reader over SWP Events*/
 #define NFA_RD_SWP_READER_REQUESTED     0
 #define NFA_RD_SWP_READER_START         1
@@ -667,9 +672,7 @@
 #define NFA_INTERFACE_FRAME         NFC_INTERFACE_FRAME
 #define NFA_INTERFACE_ISO_DEP       NFC_INTERFACE_ISO_DEP
 #define NFA_INTERFACE_NFC_DEP       NFC_INTERFACE_NFC_DEP
-#if (NXP_EXTNS == TRUE)
 #define NFA_INTERFACE_MIFARE        NFC_INTERFACE_MIFARE
-#endif
 typedef tNFC_INTF_TYPE tNFA_INTF_TYPE;
 
 /*******************************************************************************
@@ -1396,6 +1399,10 @@
 **
 *******************************************************************************/
 NFC_API extern tNFA_MW_VERSION NFA_GetMwVersion ();
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+NFC_API extern void NFA_EE_HCI_Control(BOOLEAN mode);
+NFC_API extern tNFA_STATUS NFA_ResetNfcc();
+#endif
 #endif
 #ifdef __cplusplus
 }
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index afe4134..9825a66 100755
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -486,6 +486,8 @@
     UINT8 atr_req_gen_bytes_len;
     UINT8 atr_res_gen_bytes[NCI_MAX_GEN_BYTES_LEN];
     UINT8 atr_res_gen_bytes_len;
+
+    UINT8 pf_rc[NCI_PARAM_LEN_PF_RC];
 } tNFA_DM_PARAMS;
 
 /*
@@ -569,7 +571,7 @@
 extern UINT8 nfa_ee_max_ee_cfg;
 extern tNCI_DISCOVER_MAPS *p_nfa_dm_interface_mapping;
 extern UINT8 nfa_dm_num_dm_interface_mapping;
-
+extern BOOLEAN nfa_poll_bail_out_mode;
 #if(NXP_EXTNS == TRUE)
 void nfa_dm_poll_disc_cback_dta_wrapper(tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data);
 extern unsigned char appl_dta_mode_flag;
@@ -633,6 +635,7 @@
 BOOLEAN nfa_dm_act_reg_vsc (tNFA_DM_MSG *p_data);
 BOOLEAN nfa_dm_act_send_vsc (tNFA_DM_MSG *p_data);
 #if(NXP_EXTNS == TRUE)
+void nfa_dm_p2p_prio_logic_disable ();
 BOOLEAN nfa_dm_act_send_nxp(tNFA_DM_MSG *p_data);
 UINT16 nfa_dm_act_get_rf_disc_duration ();
 #endif
@@ -680,5 +683,7 @@
 char *nfa_dm_nfc_revt_2_str (tNFC_RESPONSE_EVT event);
 #endif
 
-
+#if((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE))
+tNFC_STATUS nfc_ncif_reset_nfcc();
+#endif
 #endif /* NFA_DM_INT_H */
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/int/nfa_ee_int.h
index 2c2fa02..c94049e 100755
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/int/nfa_ee_int.h
@@ -122,7 +122,7 @@
 };
 typedef UINT8 tNFA_EE_CONN_ST;
 #if(NXP_EXTNS == TRUE)
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 #define NFA_EE_ROUT_BUF_SIZE            720
 #else
 #define NFA_EE_ROUT_BUF_SIZE            200
@@ -141,10 +141,12 @@
 
 #define NFA_EE_NUM_TECH     3
 #if(NXP_EXTNS == TRUE)
+#define NFA_UICC_ID 0x02
+#define NFA_ESE_ID  0xC0
 #define NFA_EE_BUFFER_FUTURE_EXT     15
 #define NFA_EE_PROTO_ROUTE_ENTRY_SIZE    5
 #define NFA_EE_TECH_ROUTE_ENTRY_SIZE    5
-#if(NFC_NXP_CHIP_TYPE == PN548C2)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
 /**
  * Max Routing Table Size = 720
  * After allocating size for Technology based routing and Protocol based routing,
@@ -216,23 +218,25 @@
      * the aid_len is the total length of all the TLVs associated with this AID entry
      */
 #if(NXP_EXTNS == TRUE)
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     UINT8                   *aid_len;           /* the actual lengths in aid_cfg */
     UINT8                   *aid_pwr_cfg;       /* power configuration of this AID entry */
     UINT8                   *aid_rt_info;       /* route/vs info for this AID entry */
     UINT8                   *aid_rt_loc;         /* route location info for this AID entry */
+    UINT8                   *aid_cfg;            /* routing entries based on AID */
 #else
     UINT8                   aid_rt_loc[NFA_EE_MAX_AID_ENTRIES];/* route location info for this AID entry */
     UINT8                   aid_len[NFA_EE_MAX_AID_ENTRIES];/* the actual lengths in aid_cfg */
     UINT8                   aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES];/* power configuration of this AID entry */
     UINT8                   aid_rt_info[NFA_EE_MAX_AID_ENTRIES];/* route/vs info for this AID entry */
+    UINT8                   aid_cfg[NFA_EE_MAX_AID_CFG_LEN];/* routing entries based on AID */
 #endif
 #else
     UINT8                   aid_len[NFA_EE_MAX_AID_ENTRIES];/* the actual lengths in aid_cfg */
     UINT8                   aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES];/* power configuration of this AID entry */
     UINT8                   aid_rt_info[NFA_EE_MAX_AID_ENTRIES];/* route/vs info for this AID entry */
-#endif
     UINT8                   aid_cfg[NFA_EE_MAX_AID_CFG_LEN];/* routing entries based on AID */
+#endif
     UINT8                   aid_entries;        /* The number of AID entries in aid_cfg */
     UINT8                   nfcee_id;           /* ID for this NFCEE */
     UINT8                   ee_status;          /* The NFCEE status */
diff --git a/src/nfa/p2p/nfa_p2p_act.c b/src/nfa/p2p/nfa_p2p_act.c
index f8817d3..087de60 100755
--- a/src/nfa/p2p/nfa_p2p_act.c
+++ b/src/nfa/p2p/nfa_p2p_act.c
@@ -1229,6 +1229,7 @@
 *******************************************************************************/
 BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg)
 {
+    (void)p_msg;
     P2P_TRACE_DEBUG0 ("nfa_p2p_restart_rf_discovery ()");
 
     nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
diff --git a/src/nfa/p2p/nfa_p2p_main.c b/src/nfa/p2p/nfa_p2p_main.c
index 2b743a3..dcb5fd2 100644
--- a/src/nfa/p2p/nfa_p2p_main.c
+++ b/src/nfa/p2p/nfa_p2p_main.c
@@ -202,6 +202,8 @@
 *******************************************************************************/
 static void nfa_p2p_update_active_listen_timeout_cback (TIMER_LIST_ENT *p_tle)
 {
+    (void)p_tle;
+
     NFA_TRACE_ERROR0 ("nfa_p2p_update_active_listen_timeout_cback()");
 
     /* restore active listen mode */
@@ -329,7 +331,7 @@
         llcp_activated.remote_wks      = LLCP_GetRemoteWKS ();
         llcp_activated.remote_version  = LLCP_GetRemoteVersion ();
 
-        nfa_dm_act_conn_cback_notify (NFA_LLCP_ACTIVATED_EVT, (tNFA_CONN_EVT_DATA *) &llcp_activated);
+        nfa_dm_act_conn_cback_notify (NFA_LLCP_ACTIVATED_EVT, (void *) &llcp_activated);
 
     }
     else if (event == LLCP_LINK_ACTIVATION_FAILED_EVT)
@@ -387,7 +389,7 @@
         }
 
         llcp_deactivated.reason = reason;
-        nfa_dm_act_conn_cback_notify (NFA_LLCP_DEACTIVATED_EVT, (tNFA_CONN_EVT_DATA *)&llcp_deactivated);
+        nfa_dm_act_conn_cback_notify (NFA_LLCP_DEACTIVATED_EVT, (void *)&llcp_deactivated);
 
         if (reason != LLCP_LINK_RF_LINK_LOSS_ERR) /* if NFC link is still up */
         {
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.c
index 2be337c..6e98fdb 100755
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.c
@@ -223,7 +223,7 @@
 static void nfa_rw_handle_ndef_detect(tRW_EVENT event, tRW_DATA *p_rw_data)
 {
     tNFA_CONN_EVT_DATA conn_evt_data;
-
+    (void)event;
     NFA_TRACE_DEBUG3("NDEF Detection completed: cur_size=%i, max_size=%i, flags=0x%x",
         p_rw_data->ndef.cur_size, p_rw_data->ndef.max_size, p_rw_data->ndef.flags);
 
@@ -312,9 +312,7 @@
                 conn_evt_data.ndef_detect.cur_size = 0;
                 conn_evt_data.ndef_detect.max_size = 0;
                 conn_evt_data.ndef_detect.flags    = RW_NDEF_FL_UNKNOWN;
-#if(NXP_EXTNS == TRUE)
                 conn_evt_data.ndef_detect.status   = NFA_STATUS_TIMEOUT;
-#endif
             }
             else
             {
@@ -342,7 +340,7 @@
 static void nfa_rw_handle_tlv_detect(tRW_EVENT event, tRW_DATA *p_rw_data)
 {
     tNFA_CONN_EVT_DATA conn_evt_data;
-
+    (void)event;
     /* Set TLV detection state */
     if (nfa_rw_cb.cur_op == NFA_RW_OP_SET_TAG_RO)
     {
@@ -533,7 +531,7 @@
             if (nfa_rw_cb.p_pending_msg->op_req.op == NFA_RW_OP_PRESENCE_CHECK)
             {
                 /* Notify app of presence check status */
-                nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT, (tNFA_CONN_EVT_DATA *)&status);
+                nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT, (void *)&status);
                 GKI_freebuf(nfa_rw_cb.p_pending_msg);
                 nfa_rw_cb.p_pending_msg = NULL;
             }
@@ -565,7 +563,7 @@
     else
     {
         /* Notify app of presence check status */
-        nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT, (tNFA_CONN_EVT_DATA *)&status);
+        nfa_dm_act_conn_cback_notify(NFA_PRESENCE_CHECK_EVT, (void *)&status);
 
         /* If in normal mode (not-exclusive RF mode) then deactivate the link if presence check failed */
         if ((nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE) && (status != NFC_STATUS_OK))
@@ -588,17 +586,14 @@
 static void nfa_rw_handle_t1t_evt (tRW_EVENT event, tRW_DATA *p_rw_data)
 {
     tNFA_CONN_EVT_DATA conn_evt_data;
-#if(NXP_EXTNS == TRUE)
     tNFA_TAG_PARAMS tag_params;
     UINT8 *p_rid_rsp;
     tNFA_STATUS activation_status;
-#endif
 
     conn_evt_data.status = p_rw_data->data.status;
     switch (event)
     {
     case RW_T1T_RID_EVT:
-#if(NXP_EXTNS == TRUE)
         if(p_rw_data->data.p_data != NULL)
         {
             /* Assume the data is just the response byte sequence */
@@ -607,17 +602,23 @@
             STREAM_TO_ARRAY (tag_params.t1t.hr,  p_rid_rsp, T1T_HR_LEN);
             /* Fetch UID0-3 from RID response message */
             STREAM_TO_ARRAY (tag_params.t1t.uid,  p_rid_rsp, T1T_CMD_UID_LEN);
+            GKI_freebuf (p_rw_data->data.p_data);
+            p_rw_data->data.p_data = NULL;
         }
         /* Command complete - perform cleanup, notify the app */
         nfa_rw_command_complete();
 
         if (p_rw_data->status == NFC_STATUS_TIMEOUT)
+        {
             activation_status = NFA_STATUS_TIMEOUT;
+        }
         else
+        {
             activation_status = NFA_STATUS_OK;
+        }
         nfa_dm_notify_activation_status(activation_status, &tag_params);
         break;
-#endif
+
     case RW_T1T_RALL_CPLT_EVT:
     case RW_T1T_READ_CPLT_EVT:
     case RW_T1T_RSEG_CPLT_EVT:
@@ -1060,7 +1061,7 @@
     case RW_T4T_NDEF_DETECT_EVT :           /* Result of NDEF detection procedure */
         nfa_rw_handle_ndef_detect(event, p_rw_data);
         break;
-#if(NXP_EXTNS == TRUE)
+
     case RW_T4T_NDEF_FORMAT_CPLT_EVT:
         /* Command complete - perform cleanup, notify the app */
         nfa_rw_command_complete();
@@ -1071,7 +1072,7 @@
 
         nfa_dm_act_conn_cback_notify(NFA_FORMAT_CPLT_EVT, &conn_evt_data);
         break;
-
+#if(NXP_EXTNS == TRUE)
     case RW_T3BT_RAW_READ_CPLT_EVT:
         nfa_rw_command_complete();
         nfa_dm_act_conn_cback_notify(NFA_ACTIVATED_EVT, &conn_evt_data);
@@ -1480,6 +1481,8 @@
 #if(NXP_EXTNS == TRUE)
 static void nfa_rw_handle_t3bt_evt (tRW_EVENT event, tRW_DATA *p_rw_data)
 {
+    (void)p_rw_data;
+
     //tNFC_ACTIVATE_DEVT *activate_ntf = (tNFC_ACTIVATE_DEVT*)nfa_dm_cb.p_activate_ntf;
     NFA_TRACE_DEBUG0("nfa_rw_handle_t3bt_evt:");
 
@@ -1565,33 +1568,31 @@
     tNFC_PROTOCOL protocol = nfa_rw_cb.protocol;
     tNFC_STATUS status = NFC_STATUS_FAILED;
 
-    switch (protocol)
+    if (NFC_PROTOCOL_T1T == protocol)
     {
-    case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
+        /* Type1Tag    - NFC-A */
         status = RW_T1tDetectNDef();
-        break;
-
-    case NFC_PROTOCOL_T2T:   /* Type2Tag    - NFC-A */
+    }
+    else if (NFC_PROTOCOL_T2T == protocol)
+    {
+        /* Type2Tag    - NFC-A */
         if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
         {
             status = RW_T2tDetectNDef(nfa_rw_cb.skip_dyn_locks);
         }
-        break;
-
-    case NFC_PROTOCOL_T3T:   /* Type3Tag    - NFC-F */
+    }
+    else if (NFC_PROTOCOL_T3T == protocol)
+    {
+        /* Type3Tag    - NFC-F */
         status = RW_T3tDetectNDef();
-        break;
-
-    case NFC_PROTOCOL_ISO_DEP:     /* ISODEP/4A,4B- NFC-A or NFC-B */
+    }
+    else if (NFC_PROTOCOL_ISO_DEP == protocol)
+    {     /* ISODEP/4A,4B- NFC-A or NFC-B */
         status = RW_T4tDetectNDef();
-        break;
-
-    case NFC_PROTOCOL_15693:       /* ISO 15693 */
+    }
+    else if (NFC_PROTOCOL_15693 == protocol)
+    {       /* ISO 15693 */
         status = RW_I93DetectNDef();
-        break;
-
-    default:
-        break;
     }
 
     return(status);
@@ -1641,33 +1642,28 @@
     }
     nfa_rw_cb.ndef_rd_offset = 0;
 
-    switch (protocol)
-    {
-    case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
+    if (NFC_PROTOCOL_T1T == protocol)
+    {    /* Type1Tag    - NFC-A */
         status = RW_T1tReadNDef(nfa_rw_cb.p_ndef_buf,(UINT16)nfa_rw_cb.ndef_cur_size);
-        break;
-
-    case NFC_PROTOCOL_T2T:   /* Type2Tag    - NFC-A */
+    }
+    else if (NFC_PROTOCOL_T2T == protocol)
+    {   /* Type2Tag    - NFC-A */
         if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
         {
             status = RW_T2tReadNDef(nfa_rw_cb.p_ndef_buf,(UINT16)nfa_rw_cb.ndef_cur_size);
         }
-        break;
-
-    case NFC_PROTOCOL_T3T:   /* Type3Tag    - NFC-F */
+    }
+    else if (NFC_PROTOCOL_T3T == protocol)
+    {   /* Type3Tag    - NFC-F */
         status = RW_T3tCheckNDef();
-        break;
-
-    case NFC_PROTOCOL_ISO_DEP:     /* ISODEP/4A,4B- NFC-A or NFC-B */
+    }
+    else if (NFC_PROTOCOL_ISO_DEP == protocol)
+    {     /* ISODEP/4A,4B- NFC-A or NFC-B */
         status = RW_T4tReadNDef();
-        break;
-
-    case NFC_PROTOCOL_15693:       /* ISO 15693 */
+    }
+    else if (NFC_PROTOCOL_15693 == protocol)
+    {       /* ISO 15693 */
         status = RW_I93ReadNDef();
-        break;
-
-    default:
-        break;
     }
     return(status);
 }
@@ -1684,6 +1680,7 @@
 static BOOLEAN nfa_rw_detect_ndef(tNFA_RW_MSG *p_data)
 {
     tNFA_CONN_EVT_DATA conn_evt_data;
+    (void)p_data;
     NFA_TRACE_DEBUG0("nfa_rw_detect_ndef");
 
     if ((conn_evt_data.ndef_detect.status = nfa_rw_start_ndef_detection()) != NFC_STATUS_OK)
@@ -1727,34 +1724,28 @@
     }
     else
     {
-        switch (protocol)
-        {
-        case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
+        if (NFC_PROTOCOL_T1T == protocol)
+        {    /* Type1Tag    - NFC-A */
             status = RW_T1tWriteNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
-            break;
-
-        case NFC_PROTOCOL_T2T:   /* Type2Tag    - NFC-A */
-
+        }
+        else if (NFC_PROTOCOL_T2T == protocol)
+        {   /* Type2Tag    - NFC-A */
             if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
             {
                 status = RW_T2tWriteNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
             }
-            break;
-
-        case NFC_PROTOCOL_T3T:   /* Type3Tag    - NFC-F */
+        }
+        else if (NFC_PROTOCOL_T3T == protocol)
+        {   /* Type3Tag    - NFC-F */
             status = RW_T3tUpdateNDef(nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
-            break;
-
-        case NFC_PROTOCOL_ISO_DEP:     /* ISODEP/4A,4B- NFC-A or NFC-B */
+        }
+        else if (NFC_PROTOCOL_ISO_DEP == protocol)
+        {     /* ISODEP/4A,4B- NFC-A or NFC-B */
             status = RW_T4tUpdateNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
-            break;
-
-        case NFC_PROTOCOL_15693:       /* ISO 15693 */
+        }
+        else if (NFC_PROTOCOL_15693 == protocol)
+        {       /* ISO 15693 */
             status = RW_I93UpdateNDef((UINT16)nfa_rw_cb.ndef_wr_len, nfa_rw_cb.p_ndef_wr_buf);
-            break;
-
-        default:
-            break;
         }
     }
 
@@ -1774,6 +1765,7 @@
 {
     tNFA_STATUS status = NFA_STATUS_OK;
     tNFA_CONN_EVT_DATA conn_evt_data;
+    (void)p_data;
 
     NFA_TRACE_DEBUG0("nfa_rw_read_ndef");
 
@@ -1897,17 +1889,30 @@
 #if(NXP_EXTNS == TRUE)
     UINT16              iso_15693_max_presence_check_timeout = NFA_DM_ISO_15693_MAX_PRESENCE_CHECK_TIMEOUT + RW_I93_MAX_RSP_TIMEOUT;
 #endif
-    switch (protocol)
-    {
-    case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
+    if (NFC_PROTOCOL_T1T == protocol)
+    {    /* Type1Tag    - NFC-A */
         status = RW_T1tPresenceCheck();
-        break;
-
-    case NFC_PROTOCOL_T3T:   /* Type3Tag    - NFC-F */
+    }
+    else if (NFC_PROTOCOL_T2T == protocol)
+    {
+        /* If T2T NFC-Forum, then let RW handle presence check */
+        if (sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
+        {
+        /* Type 2 tag have not sent NACK after activation */
+           status = RW_T2tPresenceCheck();
+        }
+        else
+        {
+           /* Will fall back to deactivate/reactivate */
+           unsupported = TRUE;
+        }
+    }
+    else if (NFC_PROTOCOL_T3T == protocol)
+    {   /* Type3Tag    - NFC-F */
         status = RW_T3tPresenceCheck();
-        break;
-
-    case NFC_PROTOCOL_ISO_DEP:     /* ISODEP/4A,4B- NFC-A or NFC-B */
+    }
+    else if (NFC_PROTOCOL_ISO_DEP == protocol)
+    {    /* ISODEP/4A,4B- NFC-A or NFC-B */
         if (p_data)
         {
             op_param    = p_data->op_req.params.option;
@@ -1973,32 +1978,18 @@
             unsupported = TRUE;
         }
 
-
-        break;
-
-    case NFC_PROTOCOL_15693:       /* ISO 15693 */
+    }
+    else if (NFC_PROTOCOL_15693 == protocol)
+    {       /* ISO 15693 */
         status = RW_I93PresenceCheck();
-        break;
-
-    case NFC_PROTOCOL_T2T:   /* Type2Tag    - NFC-A */
-        /* If T2T NFC-Forum, then let RW handle presence check */
-        if (sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
-        {
-            /* Type 2 tag have not sent NACK after activation */
-            status = RW_T2tPresenceCheck();
-        }
-        else
-        {
-            unsupported = TRUE;
-        }
-        break;
-
-    default:
+    }
+    else
+    {
         /* Protocol unsupported by RW module... */
         unsupported = TRUE;
-        break;
     }
 
+
     if (unsupported)
     {
         if (nfa_rw_cb.activated_tech_mode == NFC_DISCOVERY_TYPE_POLL_KOVIO)
@@ -2044,6 +2035,8 @@
 *******************************************************************************/
 BOOLEAN nfa_rw_presence_check_tick(tNFA_RW_MSG *p_data)
 {
+    (void)p_data;
+
     /* Store the current operation */
     nfa_rw_cb.cur_op = NFA_RW_OP_PRESENCE_CHECK;
     nfa_rw_cb.flags |= NFA_RW_FL_AUTO_PRESENCE_CHECK_BUSY;
@@ -2066,6 +2059,8 @@
 *******************************************************************************/
 BOOLEAN nfa_rw_presence_check_timeout (tNFA_RW_MSG *p_data)
 {
+    (void)p_data;
+
     nfa_rw_handle_presence_check_rsp(NFC_STATUS_FAILED);
     return TRUE;
 }
@@ -2083,6 +2078,7 @@
 {
     tNFC_PROTOCOL   protocol = nfa_rw_cb.protocol;
     tNFC_STATUS     status   = NFC_STATUS_FAILED;
+    (void)p_data;
 
     if (protocol == NFC_PROTOCOL_T1T)
     {
@@ -2101,13 +2097,11 @@
     {
         status = RW_I93FormatNDef();
     }
-
-#if(NXP_EXTNS == TRUE)
     else if (protocol == NFC_PROTOCOL_ISO_DEP)
     {
         status = RW_T4tFormatNDef();
     }
-#endif
+
     /* If unable to format NDEF, notify the app */
     if (status != NFC_STATUS_OK)
         nfa_rw_error_cleanup (NFA_FORMAT_CPLT_EVT);
@@ -2124,6 +2118,8 @@
 *******************************************************************************/
 static BOOLEAN nfa_rw_detect_tlv (tNFA_RW_MSG *p_data, UINT8 tlv)
 {
+    (void)p_data;
+
     NFA_TRACE_DEBUG0("nfa_rw_detect_tlv");
 
     switch (nfa_rw_cb.protocol)
@@ -2164,9 +2160,8 @@
 
     NFA_TRACE_DEBUG0 ("nfa_rw_config_tag_ro ()");
 
-    switch (protocol)
-    {
-    case NFC_PROTOCOL_T1T:
+    if (NFC_PROTOCOL_T1T == protocol)
+    {  /* Type1Tag    - NFC-A */
         if(  (nfa_rw_cb.tlv_st == NFA_RW_TLV_DETECT_ST_OP_NOT_STARTED)
            ||(nfa_rw_cb.tlv_st == NFA_RW_TLV_DETECT_ST_MEM_TLV_OP_COMPLETE) )
         {
@@ -2177,30 +2172,28 @@
         {
             status = RW_T1tSetTagReadOnly(b_hard_lock);
         }
-        break;
-
-    case NFC_PROTOCOL_T2T:
+    }
+    else if (NFC_PROTOCOL_T2T == protocol)
+    {  /* Type2Tag    - NFC-A */
         if (nfa_rw_cb.pa_sel_res == NFC_SEL_RES_NFC_FORUM_T2T)
         {
             status = RW_T2tSetTagReadOnly(b_hard_lock);
         }
-        break;
-
-    case NFC_PROTOCOL_T3T:
+    }
+    else if (NFC_PROTOCOL_T3T == protocol)
+    {
+        /* Type3Tag    - NFC-F */
         status = RW_T3tSetReadOnly(b_hard_lock);
-        break;
-
-    case NFC_PROTOCOL_ISO_DEP:
+    }
+    else if (NFC_PROTOCOL_ISO_DEP == protocol)
+    {
+        /* ISODEP/4A,4B- NFC-A or NFC-B */
         status = RW_T4tSetNDefReadOnly();
-        break;
-
-    case NFC_PROTOCOL_15693:
+    }
+    else if (NFC_PROTOCOL_15693 == protocol)
+    {
+        /* ISO 15693 */
         status = RW_I93SetTagReadOnly();
-        break;
-
-    default:
-        break;
-
     }
 
     if (status == NFC_STATUS_OK)
@@ -2226,6 +2219,8 @@
 *******************************************************************************/
 static BOOLEAN nfa_rw_t1t_rid(tNFA_RW_MSG *p_data)
 {
+    (void)p_data;
+
     if (RW_T1tRid () != NFC_STATUS_OK)
         nfa_rw_error_cleanup (NFA_READ_CPLT_EVT);
 
@@ -2243,6 +2238,8 @@
 *******************************************************************************/
 static BOOLEAN nfa_rw_t1t_rall(tNFA_RW_MSG *p_data)
 {
+    (void)p_data;
+
     if (RW_T1tReadAll() != NFC_STATUS_OK)
         nfa_rw_error_cleanup (NFA_READ_CPLT_EVT);
 
@@ -2497,6 +2494,7 @@
 {
     tNFC_STATUS     status;
     tNFA_TAG_PARAMS tag_params;
+    (void)p_data;
 
     status = RW_T3tGetSystemCodes();
 
@@ -2517,6 +2515,7 @@
 static BOOLEAN nfa_rw_t3bt_get_pupi(tNFA_RW_MSG *p_data)
 {
     tNFC_STATUS     status;
+    (void)p_data;
 
     status = RW_T3BtGetPupiID();
 
@@ -2676,6 +2675,7 @@
 {
     BT_HDR             *p_msg;
     tNFA_CONN_EVT_DATA evt_data;
+    (void)conn_id;
 
     NFA_TRACE_DEBUG1 ("nfa_rw_raw_mode_data_cback(): event = 0x%X", event);
 
@@ -2819,25 +2819,22 @@
     }
 
     /* Perform protocol-specific actions */
-    switch (nfa_rw_cb.protocol)
+    if (NFC_PROTOCOL_T1T == nfa_rw_cb.protocol)
     {
-    case NFC_PROTOCOL_T1T:
         /* Retrieve HR and UID fields from activation notification */
         memcpy (tag_params.t1t.hr, p_activate_params->rf_tech_param.param.pa.hr, NFA_T1T_HR_LEN);
         memcpy (tag_params.t1t.uid, p_activate_params->rf_tech_param.param.pa.nfcid1, p_activate_params->rf_tech_param.param.pa.nfcid1_len);
-#if(NXP_EXTNS == TRUE)
         msg.op = NFA_RW_OP_T1T_RID;
-        nfa_rw_handle_op_req((tNFA_RW_MSG *)&msg);
+        nfa_rw_handle_op_req((void *)&msg);
         activate_notify = FALSE;                    /* Delay notifying upper layer of NFA_ACTIVATED_EVT until HR0/HR1 is received */
-#endif
-        break;
-
-    case NFC_PROTOCOL_T2T:
+    }
+    else if (NFC_PROTOCOL_T2T == nfa_rw_cb.protocol)
+    {
         /* Retrieve UID fields from activation notification */
         memcpy (tag_params.t2t.uid, p_activate_params->rf_tech_param.param.pa.nfcid1, p_activate_params->rf_tech_param.param.pa.nfcid1_len);
-        break;
-
-    case NFC_PROTOCOL_T3T:
+    }
+    else if (NFC_PROTOCOL_T3T == nfa_rw_cb.protocol)
+    {
 #if(NXP_EXTNS == TRUE)
         if(appl_dta_mode_flag)
         {
@@ -2851,21 +2848,23 @@
             activate_notify = FALSE;
             /* Issue command to get Felica system codes */
             msg.op = NFA_RW_OP_T3T_GET_SYSTEM_CODES;
-            nfa_rw_handle_op_req((tNFA_RW_MSG *)&msg);
+            nfa_rw_handle_op_req((void *)&msg);
 #if(NXP_EXTNS == TRUE)
         }
 #endif
-        break;
-
+    }
 #if(NXP_EXTNS == TRUE)
-    case NFC_PROTOCOL_T3BT:
+    else if (NFC_PROTOCOL_T3BT == nfa_rw_cb.protocol)
+    {
+
+
         activate_notify = FALSE;                    /* Delay notifying upper layer of NFA_ACTIVATED_EVT until system codes are retrieved */
         msg.op = NFA_RW_OP_T3BT_PUPI;
-        nfa_rw_handle_op_req((tNFA_RW_MSG *)&msg);
-        break;
+        nfa_rw_handle_op_req((void *)&msg);
+    }
 #endif
-
-    case NFC_PROTOCOL_15693:
+    else if (NFC_PROTOCOL_15693 == nfa_rw_cb.protocol)
+    {
         /* Delay notifying upper layer of NFA_ACTIVATED_EVT to retrieve additional tag infomation */
         nfa_rw_cb.flags |= NFA_RW_FL_ACTIVATION_NTF_PENDING;
         activate_notify = FALSE;
@@ -2932,12 +2931,7 @@
                 nfa_rw_cb.i93_num_block  = 0;
             }
         }
-        break;
 
-
-    default:
-        /* No action needed for other protocols */
-        break;
     }
 
     /* Notify upper layer of NFA_ACTIVATED_EVT if needed, and start presence check timer */
@@ -2963,6 +2957,8 @@
 *******************************************************************************/
 BOOLEAN nfa_rw_deactivate_ntf(tNFA_RW_MSG *p_data)
 {
+    (void)p_data;
+
     /* Clear the activated flag */
     nfa_rw_cb.flags &= ~NFA_RW_FL_ACTIVATED;
 
diff --git a/src/nfa/rw/nfa_rw_main.c b/src/nfa/rw/nfa_rw_main.c
index 2176c08..49055f4 100755
--- a/src/nfa/rw/nfa_rw_main.c
+++ b/src/nfa/rw/nfa_rw_main.c
@@ -132,13 +132,13 @@
         msg.activate_ntf.p_activate_params  = &p_data->activate;
         msg.activate_ntf.excl_rf_not_active = excl_rf_not_active;
 
-        nfa_rw_handle_event ((BT_HDR *) &msg);
+        nfa_rw_handle_event ((void *) &msg);
         break;
 
     case NFA_DM_RF_DISC_DEACTIVATED_EVT:
         msg.hdr.event = NFA_RW_DEACTIVATE_NTF_EVT;
 
-        nfa_rw_handle_event ((BT_HDR *) &msg);
+        nfa_rw_handle_event ((void *) &msg);
         break;
 
     default:
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index c29dac6..7e2e0c0 100755
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -49,7 +49,7 @@
 #include "nci_defs.h"
 #include "nfc_hal_api.h"
 #include "gki.h"
-
+#include "vendor_cfg.h"
 /* NFC application return status codes */
 #define NFC_STATUS_OK                   NCI_STATUS_OK                   /* Command succeeded    */
 #define NFC_STATUS_REJECTED             NCI_STATUS_REJECTED             /* Command is rejected. */
@@ -76,13 +76,15 @@
 
 #if (NXP_EXTNS == TRUE)
 //DTA API for MW Version need to change according to release
-#define NXP_EN_PN547C2                  1
-#define NXP_EN_PN65T                    1
+#define NXP_EN_PN547C2                  0
+#define NXP_EN_PN65T                    0
 #define NXP_EN_PN548C2                  1
 #define NXP_EN_PN66T                    1
+#define NXP_EN_PN551                    1
+#define NXP_EN_PN67T                    1
 #define NXP_ANDROID_VER                 (4U) /* NXP android version */
-#define NFC_NXP_MW_VERSION_MAJ          (3U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN          (0U) /* MW Minor Version */
+#define NFC_NXP_MW_VERSION_MAJ          (4U) /* MW Major Version */
+#define NFC_NXP_MW_VERSION_MIN          (6U) /* MW Minor Version */
 #endif
 /* 0xE0 ~0xFF are proprietary status codes */
 #define NFC_STATUS_CMD_STARTED          0xE3/* Command started successfully                     */
@@ -123,6 +125,7 @@
 #define NFC_PMID_PB_BAILOUT         NCI_PARAM_ID_PB_BAILOUT
 #define NFC_PMID_PB_ATTRIB_PARAM1   NCI_PARAM_ID_PB_ATTRIB_PARAM1
 #define NFC_PMID_PF_BIT_RATE        NCI_PARAM_ID_PF_BIT_RATE
+#define NFC_PMID_PF_RC              NCI_PARAM_ID_PF_RC
 #define NFC_PMID_PB_H_INFO          NCI_PARAM_ID_PB_H_INFO
 #define NFC_PMID_BITR_NFC_DEP       NCI_PARAM_ID_BITR_NFC_DEP
 #define NFC_PMID_ATR_REQ_GEN_BYTES  NCI_PARAM_ID_ATR_REQ_GEN_BYTES
@@ -241,7 +244,7 @@
 
 #define NFC_NFCC_INFO_LEN       4
 #ifndef NFC_NFCC_MAX_NUM_VS_INTERFACE
-#define NFC_NFCC_MAX_NUM_VS_INTERFACE   4
+#define NFC_NFCC_MAX_NUM_VS_INTERFACE   5
 #endif
 typedef struct
 {
@@ -402,9 +405,9 @@
 #define NFC_PROTOCOL_T3T        NCI_PROTOCOL_T3T      /* Type3Tag    - NFC-F            */
 #define NFC_PROTOCOL_ISO_DEP    NCI_PROTOCOL_ISO_DEP  /* Type 4A,4B  - NFC-A or NFC-B   */
 #define NFC_PROTOCOL_NFC_DEP    NCI_PROTOCOL_NFC_DEP  /* NFCDEP/LLCP - NFC-A or NFC-F       */
+#define NFC_PROTOCOL_MIFARE     NCI_PROTOCOL_MIFARE
 #if (NXP_EXTNS == TRUE)
 #define NFC_PROTOCOL_ISO7816    NCI_PROTOCOL_ISO7816 /*ISO7816 -AID default Routing */
-#define NFC_PROTOCOL_MIFARE     NCI_PROTOCOL_MIFARE
 #define NFC_PROTOCOL_ISO7816    NCI_PROTOCOL_ISO7816
 #define NFC_PROTOCOL_T3BT       NCI_PROTOCOL_T3BT
 #endif
@@ -457,9 +460,7 @@
 #define NFC_INTERFACE_LLCP_LOW      NCI_INTERFACE_LLCP_LOW
 #define NFC_INTERFACE_LLCP_HIGH     NCI_INTERFACE_LLCP_HIGH
 #define NFC_INTERFACE_VS_T2T_CE     NCI_INTERFACE_VS_T2T_CE
-#if (NXP_EXTNS == TRUE)
-#define NFC_INTERFACE_MIFARE        NCI_INTERFACE_MIFARE
-#endif
+#define NFC_INTERFACE_MIFARE        NCI_INTERFACE_VS_MIFARE
 typedef tNCI_INTF_TYPE tNFC_INTF_TYPE;
 
 /**********************************************
@@ -664,15 +665,11 @@
 /* the data type associated with NFC_RESULT_DEVT */
 typedef struct
 {
-    tNFC_STATUS             status;         /* The event status - place holder. */
-    UINT8                   rf_disc_id;     /* RF Discovery ID                  */
-    UINT8                   protocol;       /* supported protocol               */
-    tNFC_RF_TECH_PARAMS     rf_tech_param;  /* RF technology parameters         */
-#if(NXP_EXTNS == TRUE)
-    UINT8                   more;           /* 0: last notification             */
-#else
-    BOOLEAN                 more;           /* 0: last notification             */
-#endif
+    tNFC_STATUS             status;         /* The event status - place holder.  */
+    UINT8                   rf_disc_id;     /* RF Discovery ID                   */
+    UINT8                   protocol;       /* supported protocol                */
+    tNFC_RF_TECH_PARAMS     rf_tech_param;  /* RF technology parameters          */
+    UINT8                   more;           /* 0: last, 1: last (limit), 2: more */
 } tNFC_RESULT_DEVT;
 
 /* the data type associated with NFC_SELECT_DEVT */
@@ -1400,6 +1397,16 @@
 NFC_API extern tNFC_FW_VERSION nfc_ncif_getFWVersion();
 /*******************************************************************************
 **
+** Function         nfc_ncif_storeScreenState
+**
+** Description      This function is called to store the last screen state
+**
+** Returns          void
+**
+*******************************************************************************/
+NFC_API extern void nfc_ncif_storeScreenState(UINT8 state);
+/*******************************************************************************
+**
 ** Function         NFC_EnableDisableHalLog
 **
 ** Description      This function is used to enable/disable
@@ -1407,7 +1414,7 @@
 **
 *******************************************************************************/
 void NFC_EnableDisableHalLog(UINT8 type);
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfc_ncif_getMaxRoutingTableSize
@@ -1475,9 +1482,38 @@
 **
 *******************************************************************************/
 INT32 NFC_EnableWired (void *pdata);
+
+#if((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
+/*******************************************************************************
+**
+** Function         NFC_GetEseAccess
+**
+** Description      This function request to pn54x driver to get access
+**                  of P61. it returns 0 on success. This api waits maximum
+**                  defined timeout
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_GetEseAccess (void *pdata);
+
+/*******************************************************************************
+**
+** Function         NFC_RelEseAccess
+**
+** Description      This function release access of P61.
+**                  it returns 0 on success.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelEseAccess (void *pdata);
+
 #endif
 #endif
 
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/nfc/include/rw_api.h b/src/nfc/include/rw_api.h
index f818e04..1f5ab5d 100755
--- a/src/nfc/include/rw_api.h
+++ b/src/nfc/include/rw_api.h
@@ -123,8 +123,8 @@
     RW_T4T_PRESENCE_CHECK_EVT,                  /* Response to RW_T4tPresenceCheck          */
     RW_T4T_RAW_FRAME_EVT,                       /* Response of raw frame sent               */
     RW_T4T_INTF_ERROR_EVT,                      /* RF Interface error event                 */
-#if(NXP_EXTNS == TRUE)
     RW_T4T_NDEF_FORMAT_CPLT_EVT,                /* Format operation completed               */
+#if(NXP_EXTNS == TRUE)
     RW_T4T_RAW_FRAME_RF_WTX_EVT,                /* Received RF WTX for raw frame sent       */
 #endif
     RW_T4T_MAX_EVT,
@@ -873,7 +873,6 @@
 *****************************************************************************/
 NFC_API extern tNFC_STATUS RW_T3tGetSystemCodes (void);
 
-#if(NXP_EXTNS == TRUE)
 /*****************************************************************************
 **
 ** Function         RW_T4tFormatNDef
@@ -889,7 +888,6 @@
 **      NFC_STATUS_FAILED: other error
 *****************************************************************************/
 NFC_API extern tNFC_STATUS RW_T4tFormatNDef (void);
-#endif
 
 /*******************************************************************************
 **
diff --git a/src/nfc/include/tags_defs.h b/src/nfc/include/tags_defs.h
index d63189a..5a9cb40 100755
--- a/src/nfc/include/tags_defs.h
+++ b/src/nfc/include/tags_defs.h
@@ -358,14 +358,12 @@
 #define T4T_CMD_INS_SELECT              0xA4
 #define T4T_CMD_INS_READ_BINARY         0xB0
 #define T4T_CMD_INS_UPDATE_BINARY       0xD6
-#if(NXP_EXTNS == TRUE)
 #define T4T_CMD_DES_CLASS               0x90
 #define T4T_CMD_INS_GET_HW_VERSION      0x60
 #define T4T_CMD_CREATE_AID              0xCA
 #define T4T_CMD_SELECT_APP              0x5A
 #define T4T_CMD_CREATE_DATAFILE         0xCD
 #define T4T_CMD_DES_WRITE               0x3D
-#endif
 #define T4T_CMD_P1_SELECT_BY_NAME       0x04
 #define T4T_CMD_P1_SELECT_BY_FILE_ID    0x00
 #define T4T_CMD_P2_FIRST_OR_ONLY_00H    0x00
@@ -408,7 +406,7 @@
 #define T4T_FC_NO_WRITE_ACCESS          0xFF    /* no write access granted at all (read-only) */
 
 #define T4T_FILE_LENGTH_SIZE            0x02
-#if(NXP_EXTNS == TRUE)
+
 #define T4T_ADDI_FRAME_RESP             0xAFU
 #define T4T_SIZE_IDENTIFIER_2K          0x16U
 #define T4T_SIZE_IDENTIFIER_4K          0x18U
@@ -419,7 +417,7 @@
 #define T4T_DESEV0_MINOR_VERSION        0x06U
 #define T4T_DES_EV1_NFC_APP_ID          0x010000
 #define T4T_DES_EV0_NFC_APP_ID          0x10EEEE
-#endif
+
 
 /*
 **
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index cc41d46..94c69ce 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -83,10 +83,11 @@
 #define NFC_TTYPE_RW_T4T_RESPONSE           107
 #define NFC_TTYPE_RW_I93_RESPONSE           108
 #define NFC_TTYPE_CE_T4T_UPDATE             109
-#if(NXP_EXTNS == TRUE)
+
 #define NFC_TTYPE_P2P_PRIO_RESPONSE         110  /* added for p2p prio logic timer */
-#define NFC_TTYPE_LISTEN_ACTIVATION         111  /* added for listen activation timer */
 #define NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP    112  /* added for p2p prio logic clenaup */
+#if(NXP_EXTNS == TRUE)
+#define NFC_TTYPE_LISTEN_ACTIVATION         111  /* added for listen activation timer */
 #define NFC_TTYPE_P2P_PRIO_LOGIC_DEACT_NTF_TIMEOUT 113
 #endif
 #define NFC_TTYPE_VS_BASE                   200
@@ -107,11 +108,26 @@
     NFC_STATE_NFCC_POWER_OFF_SLEEP  /* NFCC is power-off sleep mode             */
 };
 typedef UINT8 tNFC_STATE;
+
+/* DM P2P Priority event type */
+enum
+{
+    NFA_DM_P2P_PRIO_RSP = 0x01,         /* P2P priority event from RSP   */
+    NFA_DM_P2P_PRIO_NTF          /* P2P priority event from NTF   */
+};
 enum
 {
     I2C_FRAGMENATATION_ENABLED,     /*i2c fragmentation_enabled           */
     I2C_FRAGMENTATION_DISABLED      /*i2c_fragmentation_disabled          */
 };
+#if((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE))
+/*Get or Set swp activation state for UICC*/
+typedef enum
+{
+    GET_UICC_CONFIG = 0x01,         /*get swp activation state for UICC  */
+    SET_UICC_CONFIG                 /*set swp activation state for UICC  */
+}uicc_config_t;
+#endif
 /* NFC control block flags */
 #define NFC_FL_DEACTIVATING             0x0001  /* NFC_Deactivate () is called and the NCI cmd is not sent   */
 #define NFC_FL_RESTARTING               0x0002  /* restarting NFCC after PowerOffSleep          */
@@ -336,16 +352,19 @@
 NFC_API extern void nfc_ncif_proc_data (BT_HDR *p_msg);
 #if(NXP_EXTNS == TRUE)
 NFC_API extern tNFC_STATUS nfc_ncif_store_FWVersion(UINT8 * p_buf);
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 NFC_API extern tNFC_STATUS nfc_ncif_set_MaxRoutingTableSize(UINT8 * p_buf);
 #endif
-NFC_API extern BOOLEAN nfa_dm_p2p_prio_logic(UINT8 event, UINT8 *p, UINT8 ntf_rsp);
+
 NFC_API extern void nfc_ncif_update_window (void);
-NFC_API extern void nfa_dm_p2p_timer_event ();
+
 NFC_API extern void nfc_ncif_empty_cmd_queue ();
 NFC_API extern BOOLEAN nfc_ncif_proc_proprietary_rsp (UINT8 mt, UINT8 gid, UINT8 oid);
 NFC_API extern void nfc_ncif_proc_rf_wtx_ntf (UINT8 *p, UINT16 plen);
 #endif
+NFC_API extern BOOLEAN nfa_dm_p2p_prio_logic(UINT8 event, UINT8 *p, UINT8 ntf_rsp);
+NFC_API extern void nfa_dm_p2p_timer_event ();
+NFC_API extern void nfa_dm_p2p_prio_logic_cleanup ();
 
 #if (NFC_RW_ONLY == FALSE)
 NFC_API extern void nfc_ncif_proc_rf_field_ntf (UINT8 rf_status);
diff --git a/src/nfc/int/rw_int.h b/src/nfc/int/rw_int.h
index ba9d83c..159b3ed 100755
--- a/src/nfc/int/rw_int.h
+++ b/src/nfc/int/rw_int.h
@@ -492,10 +492,8 @@
 
     UINT16              max_read_size;      /* max reading size per a command   */
     UINT16              max_update_size;    /* max updating size per a command  */
-#if (NXP_EXTNS == TRUE)
     UINT16              card_size;
     UINT8               card_type;
-#endif
 } tRW_T4T_CB;
 
 /* RW retransmission statistics */
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.c
index d023a4a..5613202 100755
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.c
@@ -515,6 +515,7 @@
 {
     tLLCP_STATUS         status = LLCP_STATUS_SUCCESS;
     tLLCP_SAP_CBACK_DATA data;
+    (void)p_data;
 
     switch (event)
     {
@@ -757,6 +758,7 @@
 static void llcp_dlc_proc_disc_pdu (UINT8 dsap, UINT8 ssap, UINT16 length, UINT8 *p_data)
 {
     tLLCP_DLCB *p_dlcb;
+    (void)p_data;
 
     LLCP_TRACE_DEBUG0 ("llcp_dlc_proc_disc_pdu ()");
 
diff --git a/src/nfc/llcp/llcp_link.c b/src/nfc/llcp/llcp_link.c
index ea234be..33d5929 100755
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.c
@@ -219,13 +219,12 @@
 
         if (p_msg)
         {
-            p_msg->len    = LLCP_PDU_SYMM_SIZE;
+            /*LLCP test scenario requires non LLC PDU to be sent in case of wrong magic bytes.
+              So sending NFC-DEP pdu with size 1 (0x00)*/
+            p_msg->len    = 1;
             p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
 
             p = (UINT8 *) (p_msg + 1) + p_msg->offset;
-            UINT16_TO_BE_STREAM (p, LLCP_GET_PDU_HEADER (LLCP_SAP_LM, LLCP_PDU_SYMM_TYPE, LLCP_SAP_LM ));
-
-            llcp_cb.lcb.symm_state = LLCP_LINK_SYMM_REMOTE_XMIT_NEXT;
             NFC_SendData (NFC_RF_CONN_ID, p_msg);
         }
     }
@@ -1761,6 +1760,8 @@
 *******************************************************************************/
 void llcp_link_connection_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data)
 {
+    (void)conn_id;
+
     if (event == NFC_DATA_CEVT)
     {
 #if (BT_TRACE_PROTOCOL == TRUE)
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.c
index 0535b7e..4dd9001 100755
--- a/src/nfc/llcp/llcp_sdp.c
+++ b/src/nfc/llcp/llcp_sdp.c
@@ -67,6 +67,8 @@
 *******************************************************************************/
 void llcp_sdp_proc_data (tLLCP_SAP_CBACK_DATA *p_data)
 {
+    (void)p_data;
+
     /*
     ** Do nothing
     ** llcp_sdp_proc_SNL () is called by link layer
@@ -468,7 +470,7 @@
                 /*For P2P in LLCP mode TC_CTO_TAR_BI_03_x(x=3) fix*/
                 if ((appl_dta_mode_flag == 1) && (nfa_dm_cb.eDtaMode == NFA_DTA_LLCP_MODE))
                 {
-                    LLCP_TRACE_ERROR0 ("DEBUG> llcp_sdp_proc_snl () Calling llcp_sdp_send_sdres");
+                    LLCP_TRACE_ERROR0 (" llcp_sdp_proc_snl () Calling llcp_sdp_send_sdres");
                     tid = 0x01;
                     sap = 0x00;
                     llcp_sdp_send_sdres (tid, sap);
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.c
index 9fd81c0..61c0160 100755
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.c
@@ -188,9 +188,7 @@
     switch (op_code)
     {
     case NCI_MSG_RF_DISCOVER:
-#if(NXP_EXTNS == TRUE)
-        nfa_dm_p2p_prio_logic(op_code, pp, 1);
-#endif
+        nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_RSP);
         nfc_ncif_rf_management_status (NFC_START_DEVT, *pp);
         break;
 
@@ -206,13 +204,10 @@
         break;
 
     case NCI_MSG_RF_DEACTIVATE:
-#if(NXP_EXTNS == TRUE)
-        if (FALSE == nfa_dm_p2p_prio_logic(op_code, pp, 1))
+        if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_RSP))
         {
-            NFC_TRACE_ERROR0("Dont process the Response");
             return;
         }
-#endif
         nfc_ncif_proc_deactivate (*pp, *p_old, FALSE);
         break;
 
@@ -267,24 +262,18 @@
         break;
 
     case NCI_MSG_RF_DEACTIVATE:
-#if(NXP_EXTNS == TRUE)
-        if (FALSE == nfa_dm_p2p_prio_logic(op_code, pp, 2))
+        if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_NTF))
         {
-            NFC_TRACE_ERROR0("Dont process the Event");
             return;
         }
-#endif
         nfc_ncif_proc_deactivate (NFC_STATUS_OK, *pp, TRUE);
         break;
 
     case NCI_MSG_RF_INTF_ACTIVATED:
-#if(NXP_EXTNS == TRUE)
-        if (FALSE == nfa_dm_p2p_prio_logic(op_code, pp, 2))
+        if (FALSE == nfa_dm_p2p_prio_logic (op_code, pp, NFA_DM_P2P_PRIO_NTF))
         {
-            NFC_TRACE_ERROR0("Dont process the Event");
             return;
         }
-#endif
         nfc_ncif_proc_activate (pp, len);
         break;
 
@@ -337,9 +326,8 @@
     UINT8   *pp, len, op_code;
     tNFC_RESPONSE_CBACK *p_cback = nfc_cb.p_resp_cback;
     tNFC_NFCEE_DISCOVER_REVT    nfcee_discover;
-    tNFC_NFCEE_INFO_REVT        nfcee_info;
     tNFC_NFCEE_MODE_SET_REVT    mode_set;
-    tNFC_RESPONSE   *p_evt = (tNFC_RESPONSE *) &nfcee_info;
+    void   *p_evt = NULL;
     tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT;
     UINT8   *p_old = nfc_cb.last_cmd;
 
@@ -353,7 +341,7 @@
     switch (op_code)
     {
     case NCI_MSG_NFCEE_DISCOVER:
-        p_evt                       = (tNFC_RESPONSE *) &nfcee_discover;
+        p_evt                       = (void *) &nfcee_discover;
         nfcee_discover.status       = *pp++;
         nfcee_discover.num_nfcee    = *pp++;
 
@@ -364,7 +352,7 @@
         break;
 
     case NCI_MSG_NFCEE_MODE_SET:
-        p_evt                   = (tNFC_RESPONSE *) &mode_set;
+        p_evt                   = (void *) &mode_set;
         mode_set.status         = *pp;
         mode_set.nfcee_id       = 0;
         event                   = NFC_NFCEE_MODE_SET_REVT;
@@ -397,7 +385,7 @@
     UINT8                 *pp, len, op_code;
     tNFC_RESPONSE_CBACK   *p_cback = nfc_cb.p_resp_cback;
     tNFC_NFCEE_INFO_REVT  nfcee_info;
-    tNFC_RESPONSE         *p_evt   = (tNFC_RESPONSE *) &nfcee_info;
+    void* p_evt   = (void*) &nfcee_info;
     tNFC_RESPONSE_EVT     event    = NFC_NFCEE_INFO_REVT;
     UINT8                 xx;
     UINT8                 yy;
diff --git a/src/nfc/ndef/ndef_cho_utils.c b/src/nfc/ndef/ndef_cho_utils.c
index 51763d0..de50e25 100755
--- a/src/nfc/ndef/ndef_cho_utils.c
+++ b/src/nfc/ndef/ndef_cho_utils.c
@@ -600,6 +600,8 @@
 {
     UINT8  *p_rec, *p_type;
     UINT8   id_len, tnf, type_len;
+    (void)(max_size);
+    (void)(p_cur_size);
 
     /* find record by Payload ID */
     id_len = (UINT8)strlen (p_id_str);
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index be09a01..8997b09 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -87,15 +87,16 @@
 tNFC_CB nfc_cb;
 #endif
 UINT8 i2c_fragmentation_enabled = 0xff;
+
 #if (NFC_RW_ONLY == FALSE)
 #if(NXP_EXTNS == TRUE)
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-#define NFC_NUM_INTERFACE_MAP   4
-#else
 #define NFC_NUM_INTERFACE_MAP   3
+#else
+#define NFC_NUM_INTERFACE_MAP   2
 #endif
 #else
-#define NFC_NUM_INTERFACE_MAP   3
+#define NFC_NUM_INTERFACE_MAP   2
 #endif
 #else
 #define NFC_NUM_INTERFACE_MAP   1
@@ -119,12 +120,6 @@
     }
 #endif
 #if(NXP_EXTNS == TRUE)
-    ,
-    {
-        NCI_PROTOCOL_MIFARE,
-        NCI_INTERFACE_MODE_POLL,
-        NCI_INTERFACE_MIFARE
-    }
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
     ,
     /* This mapping is for Felica on DH  */
@@ -295,11 +290,7 @@
         {
             if ((*p) <= NCI_INTERFACE_MAX)
                 evt_data.enable.nci_interfaces |= (1 << (*p));
-            #if(NXP_EXTNS == TRUE)
             else if (((*p) >= NCI_INTERFACE_FIRST_VS) && (yy < NFC_NFCC_MAX_NUM_VS_INTERFACE))
-            #else
-            else if (((*p) > NCI_INTERFACE_FIRST_VS) && (yy < NFC_NFCC_MAX_NUM_VS_INTERFACE))
-            #endif
             {
                 /* save the VS RF interface in control block, if there's still room */
                 nfc_cb.vs_interface[yy++] = *p;
@@ -430,7 +421,6 @@
 void nfc_main_handle_hal_evt (tNFC_HAL_EVT_MSG *p_msg)
 {
     UINT8  *ps;
-
     NFC_TRACE_DEBUG1 ("nfc_main_handle_hal_evt(): HAL event=0x%x", p_msg->hal_evt);
 
     switch (p_msg->hal_evt)
@@ -488,12 +478,15 @@
                     if(mGetCfg_info == NULL)
                     {
                         mGetCfg_info = (phNxpNci_getCfg_info_t*)malloc(sizeof(phNxpNci_getCfg_info_t));
-                        memset(mGetCfg_info,0x00,sizeof(phNxpNci_getCfg_info_t));
+                        if(mGetCfg_info  != NULL)
+                        {
+                            memset(mGetCfg_info,0x00,sizeof(phNxpNci_getCfg_info_t));
+                            nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_GET_CONFIG_INFO,(void *)mGetCfg_info);
+                            nfa_dm_init_cfgs(mGetCfg_info);
+                            free(mGetCfg_info);
+                            mGetCfg_info = NULL;
+                        }
                     }
-                    nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_GET_CONFIG_INFO,(void *)mGetCfg_info);
-                    nfa_dm_init_cfgs(mGetCfg_info);
-                    free(mGetCfg_info);
-                    mGetCfg_info = NULL;
 #endif
                 }
                 else /* if post initailization failed */
@@ -684,7 +677,9 @@
 #else
     NFC_TRACE_DEBUG2 ("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
 #endif
-
+#if(NXP_EXTNS == TRUE)
+    tNFC_RESPONSE eventData;
+#endif
     switch (event)
     {
     case HAL_NFC_OPEN_CPLT_EVT:
@@ -714,6 +709,22 @@
     case HAL_NFC_ERROR_EVT:
 #if(NXP_EXTNS == TRUE)
     case HAL_NFC_POST_MIN_INIT_CPLT_EVT:
+
+        if(status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT)
+        {
+            eventData.status = (tNFC_STATUS) NFC_STATUS_FAILED;
+            /* Notify app of transport error */
+            if (nfc_cb.p_resp_cback)
+            {
+                (*nfc_cb.p_resp_cback) (NFC_NFCC_TIMEOUT_REVT, &eventData);
+                /* if enabling NFC, notify upper layer of failure after closing HAL*/
+                if (nfc_cb.nfc_state < NFC_STATE_IDLE)
+                {
+                    nfc_enabled (NFC_STATUS_FAILED, NULL);
+                }
+            }
+            break;
+        }
 #endif
         nfc_main_post_hal_evt (event, status);
         break;
@@ -1614,6 +1625,37 @@
     return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_ENABLE_MODE, pdata));
 }
 
+#if((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
+/*******************************************************************************
+**
+** Function         NFC_GetEseAccess
+**
+** Description      This function request to pn54x driver to get access
+**                  of P61. it returns 0 on success. This api waits maximum
+**                  defined timeout
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_GetEseAccess (void *pdata)
+{
+    return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_GET_ACCESS, pdata));
+}
+/*******************************************************************************
+**
+** Function         NFC_RelEseAccess
+**
+** Description      This function release access of P61.
+**                  it returns 0 on success.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelEseAccess (void *pdata)
+{
+    return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_REL_ACCESS, pdata));
+}
+#endif
 #endif
 
 #if(NXP_EXTNS == TRUE)
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index 25721fd..70cffeb 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -63,6 +63,7 @@
 #include "nfa_sys.h"
 #include "nfa_dm_int.h"
 #include "nfa_hci_int.h"
+#include <config.h>
 #endif
 tNFC_CONN_CB *p_cb_stored = NULL;
 #if (NFC_RW_ONLY == FALSE)
@@ -81,7 +82,8 @@
 #if(NXP_EXTNS == TRUE)
 // Global Structure varibale for FW Version
 static tNFC_FW_VERSION nfc_fw_version;
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+static UINT8 gScreenState = 0x0; // SCREEN ON UNLOCKED
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 static UINT16 maxRoutingTableSize;
 #endif
 uint8_t sListenActivated;
@@ -89,12 +91,17 @@
 BOOLEAN core_reset_init_num_buff = FALSE;
 UINT8 nfcc_dh_conn_id = 0xFF;
 extern void nfa_hci_rsp_timeout (tNFA_HCI_EVENT_DATA *p_evt_data);
-void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event);
 #endif
 
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
-extern etsi_reader_in_progress;
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event);
+extern BOOLEAN etsi_reader_in_progress;
 #endif
+#if((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE))
+void uicc_eeprom_get_config(UINT8* config_resp);
+void uicc_eeprom_set_config(UINT8* config_resp);
+#endif
+
 /*******************************************************************************
 **
 ** Function         nfc_ncif_update_window
@@ -174,10 +181,11 @@
             buffer[2] = Length of discovery packet.
             buffer[3~34] = Last Discovery command(including phase data).(32 byte)
             buffer[35] = Length of last command packet.
-            buffer[36~255] = Last Command /or Last Command & Data.
+            buffer[36~254] = Last Command /or Last Command & Data.
+            buffer[255] = Last screen state
         */
         UINT8 *buffer = NULL;
-        UINT8 bufflen = 0xFF;
+        UINT16 bufflen = 0x100;
         UINT8 fw_dwnld_status = NFC_STATUS_FAILED;
         tNFC_STATUS status = NFC_STATUS_FAILED;
         tNFC_FWUpdate_Info_t fw_update_inf;
@@ -206,6 +214,8 @@
         NFC_TRACE_ERROR1 ("Last State nfa_dm_cb.disc_cb.disc_flags 0x%x", nfa_dm_cb.disc_cb.disc_flags);
         NFC_TRACE_ERROR1 ("Last State nfa_dm_cb.disc_cb.disc_state 0x%x", nfa_dm_cb.disc_cb.disc_state);
 
+        buffer[255] = gScreenState;
+
         if(!(nfa_dm_cb.disc_cb.disc_state > NFA_DM_RFST_IDLE))
         {
             NFC_TRACE_ERROR0 ("Last State is Idle!!");
@@ -281,11 +291,14 @@
             {
                 /* Flush the data if any before proceeding further with the recovery */
                 p_cb = nfc_find_conn_cb_by_conn_id(nfcc_dh_conn_id);
-                NFC_TRACE_ERROR1("connection id %d", nfcc_dh_conn_id);
-                status = NFC_FlushData(p_cb->conn_id);
-                if(status != NFC_STATUS_OK)
+                if(NULL != p_cb)
                 {
-                    NFC_TRACE_ERROR0 ("NFC data flush failed");
+                    NFC_TRACE_ERROR1("connection id %d", nfcc_dh_conn_id);
+                    status = NFC_FlushData(p_cb->conn_id);
+                    if(status != NFC_STATUS_OK)
+                    {
+                        NFC_TRACE_ERROR0 ("NFC data flush failed");
+                    }
                 }
             }
         }
@@ -518,8 +531,9 @@
         {
             GKI_enqueue (&nfc_cb.nci_cmd_xmit_q, p_buf);
 #if (NXP_EXTNS == TRUE)
-            if(p_buf != NULL){
-                NFC_TRACE_DEBUG0 ("nfc_ncif_check_cmd_queue : making  p_buf NULL.");
+            if(p_buf != NULL)
+            {
+                NFC_TRACE_DEBUG0 ("nfc_ncif_check_cmd_queue : making p_buf NULL.");
                 p_buf = NULL;
             }
 #else
@@ -537,7 +551,7 @@
         if (p_buf)
         {
 #if (NXP_EXTNS == TRUE)
-
+            NFC_TRACE_DEBUG0 ("nfc_ncif_check_cmd_queue : Writing to HAL...");
             /* save the message header to double check the response */
             ps   = (UINT8 *)(p_buf + 1) + p_buf->offset;
             memcpy(nfc_cb.last_hdr, ps, NFC_SAVED_HDR_SIZE);
@@ -663,7 +677,7 @@
 void nfc_ncif_send_cmd (BT_HDR *p_buf)
 {
 #if(NXP_EXTNS == TRUE)
-    NFC_TRACE_DEBUG0 ("nfc_ncif_send_cmd.");
+    NFC_TRACE_DEBUG0 ("nfc_ncif_send_cmd()");
     if(p_buf == NULL)
     {
         NFC_TRACE_DEBUG0 ("p_buf is NULL.");
@@ -740,7 +754,7 @@
         /* make sure this is the RSP we are waiting for before updating the command window */
         if ((old_gid != gid) || (old_oid != oid))
         {
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
             if(((gid == NCI_GID_RF_MANAGE)&&(oid == NCI_MSG_RF_DISCOVER)) && (etsi_reader_in_progress == TRUE))
             {
                 NFC_TRACE_DEBUG0 ("Changing disc_state and disc_flags");
@@ -763,7 +777,7 @@
                 NFC_TRACE_ERROR2 ("nfc_ncif_process_event unexpected rsp: gid:0x%x, oid:0x%x", gid, oid);
                 return TRUE;
             }
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
             }
 #endif
         }
@@ -881,6 +895,8 @@
 void nfc_ncif_set_config_status (UINT8 *p, UINT8 len)
 {
     tNFC_RESPONSE   evt_data;
+    (void)len;
+
     if (nfc_cb.p_resp_cback)
     {
         evt_data.set_config.status          = (tNFC_STATUS) *p++;
@@ -929,7 +945,7 @@
     p_cb = nfc_find_conn_cb_by_conn_id (conn_id);
     if (p_cb && p_cb->p_cback)
     {
-        (*p_cb->p_cback) (conn_id, NFC_ERROR_CEVT, (tNFC_CONN *) &status);
+        (*p_cb->p_cback) (conn_id, NFC_ERROR_CEVT, (void *) &status);
     }
 }
 
@@ -968,6 +984,7 @@
 {
     UINT8   num, xx;
     tNFC_CONN_CB * p_cb;
+    (void)plen;
 
     num = *p++;
     for (xx = 0; xx < num; xx++)
@@ -1026,10 +1043,9 @@
     len             = *p++;
     p_start         = p;
     memset ( &p_param->param, 0, sizeof (tNFC_RF_TECH_PARAMU));
-    switch (p_param->mode)
+    if (  NCI_DISCOVERY_TYPE_POLL_A == p_param->mode
+        || NCI_DISCOVERY_TYPE_POLL_A_ACTIVE == p_param->mode  )
     {
-    case NCI_DISCOVERY_TYPE_POLL_A:
-    case NCI_DISCOVERY_TYPE_POLL_A_ACTIVE:
         p_pa        = &p_param->param.pa;
         /*
 SENS_RES Response   2 bytes Defined in [DIGPROT] Available after Technology Detection
@@ -1056,9 +1072,9 @@
                 p_pa->hr[1]  = *p;
             }
         }
-        break;
-
-    case NCI_DISCOVERY_TYPE_POLL_B:
+    }
+    else if (NCI_DISCOVERY_TYPE_POLL_B == p_param->mode)
+    {
         /*
 SENSB_RES Response length (n)   1 byte  Length of SENSB_RES Response (Byte 2 - Byte 12 or 13)Available after Technology Detection
 SENSB_RES Response Byte 2 - Byte 12 or 13   11 or 12 bytes  Defined in [DIGPROT] Available after Technology Detection
@@ -1069,10 +1085,10 @@
             p_pb->sensb_res_len = NCI_MAX_SENSB_RES_LEN;
         STREAM_TO_ARRAY (p_pb->sensb_res, p, p_pb->sensb_res_len);
         memcpy (p_pb->nfcid0, p_pb->sensb_res, NFC_NFCID0_MAX_LEN);
-        break;
-
-    case NCI_DISCOVERY_TYPE_POLL_F:
-    case NCI_DISCOVERY_TYPE_POLL_F_ACTIVE:
+    }
+    else if (  NCI_DISCOVERY_TYPE_POLL_F == p_param->mode
+                   || NCI_DISCOVERY_TYPE_POLL_F_ACTIVE == p_param->mode  )
+    {
         /*
 Bit Rate    1 byte  1   212 kbps/2   424 kbps/0 and 3 to 255  RFU
 SENSF_RES Response length.(n) 1 byte  Length of SENSF_RES (Byte 2 - Byte 17 or 19).Available after Technology Detection
@@ -1087,26 +1103,26 @@
         memcpy (p_pf->nfcid2, p_pf->sensf_res, NCI_NFCID2_LEN);
         p_pf->mrti_check    = p_pf->sensf_res[NCI_MRTI_CHECK_INDEX];
         p_pf->mrti_update   = p_pf->sensf_res[NCI_MRTI_UPDATE_INDEX];
-        break;
-
-    case NCI_DISCOVERY_TYPE_LISTEN_F:
-    case NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE:
+    }
+    else if (  NCI_DISCOVERY_TYPE_LISTEN_F == p_param->mode
+            || NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE == p_param->mode  )
+    {
         p_lf                = &p_param->param.lf;
         u8                  = *p++;
         if (u8)
         {
             STREAM_TO_ARRAY (p_lf->nfcid2, p, NCI_NFCID2_LEN);
         }
-        break;
-
-    case NCI_DISCOVERY_TYPE_POLL_ISO15693:
+    }
+    else if (NCI_DISCOVERY_TYPE_POLL_ISO15693 == p_param->mode)
+    {
         p_i93               = &p_param->param.pi93;
         p_i93->flag         = *p++;
         p_i93->dsfid        = *p++;
         STREAM_TO_ARRAY (p_i93->uid, p, NFC_ISO15693_UID_LEN);
-        break;
-
-    case NCI_DISCOVERY_TYPE_POLL_KOVIO:
+    }
+    else if (NCI_DISCOVERY_TYPE_POLL_KOVIO == p_param->mode)
+    {
         p_param->param.pk.uid_len = len;
         if (p_param->param.pk.uid_len > NFC_KOVIO_MAX_LEN)
         {
@@ -1114,7 +1130,6 @@
             p_param->param.pk.uid_len = NFC_KOVIO_MAX_LEN;
         }
         STREAM_TO_ARRAY (p_param->param.pk.uid, p, p_param->param.pk.uid_len);
-        break;
     }
 
     return (p_start + len);
@@ -1132,6 +1147,7 @@
 void nfc_ncif_proc_discover_ntf (UINT8 *p, UINT16 plen)
 {
     tNFC_DISCOVER   evt_data;
+    (void)plen;
 
     if (nfc_cb.p_discv_cback)
     {
@@ -1144,7 +1160,7 @@
         evt_data.result.rf_tech_param.mode  = *p++;
         p = nfc_ncif_decode_rf_params (&evt_data.result.rf_tech_param, p);
 
-        evt_data.result.more            = *p++;
+        evt_data.result.more = *p++;
         (*nfc_cb.p_discv_cback) (NFC_RESULT_DEVT, &evt_data);
     }
 }
@@ -1163,6 +1179,8 @@
 {
     tNFC_CONN_CB *p_cb = NULL;
     (void)p;
+    (void)plen;
+
     p_cb = nfc_find_conn_cb_by_conn_id (NFC_RF_CONN_ID);
 
     if(NULL != p_cb)
@@ -1556,7 +1574,7 @@
             }
             break;
         }
-        (*p_cback) (NFC_EE_ACTION_REVT, (tNFC_RESPONSE *) &evt_data);
+        (*p_cback) (NFC_EE_ACTION_REVT, (void *) &evt_data);
     }
 }
 
@@ -1602,7 +1620,7 @@
             plen    -=NFC_EE_DISCOVER_ENTRY_LEN;
             p_info++;
         }
-        (*p_cback) (NFC_EE_DISCOVER_REQ_REVT, (tNFC_RESPONSE *) &ee_disc_req);
+        (*p_cback) (NFC_EE_DISCOVER_REQ_REVT, (void *) &ee_disc_req);
     }
 
 }
@@ -1621,6 +1639,10 @@
     tNFC_GET_ROUTING_REVT evt_data;
     UINT8       more, num_entries, xx, yy, *pn, tl;
     tNFC_STATUS status = NFC_STATUS_CONTINUE;
+#if(NXP_EXTNS == TRUE)
+    (void)(p);
+    (void)(len);
+#endif
 
 #if(NXP_EXTNS == FALSE)
     if (nfc_cb.p_resp_cback)
@@ -1681,6 +1703,7 @@
     tNFC_CONN_CBACK *p_cback;
     tNFC_CONN   evt_data;
     UINT8           conn_id;
+    (void)plen;
 
     /* find the pending connection control block */
     p_cb                = nfc_find_conn_cb_by_conn_id (NFC_PEND_CONN_ID);
@@ -1908,6 +1931,10 @@
           fw_mw_ver_status = NCI_STATUS_FAILED;
     tNFC_FWUpdate_Info_t fw_update_inf;
     UINT8 *init_rsp = NULL ;
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+    UINT8 config_resp[16];
+#endif
+    int i;
     memset(&fw_update_inf, 0x00, sizeof(tNFC_FWUpdate_Info_t));
 #endif
     p = (UINT8 *) (p_msg + 1) + p_msg->offset;
@@ -1920,8 +1947,12 @@
         {
             nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &fw_update_inf);
             NFC_TRACE_DEBUG1 ("fw_update required  -> %d", fw_update_inf.fw_update_reqd);
+
             if(fw_update_inf.fw_update_reqd == TRUE)
             {
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+                uicc_eeprom_get_config(config_resp);
+#endif
                 nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_DWNLD, &fw_dwnld_status);
                 status = nfc_hal_nfcc_reset();
                 if(NCI_STATUS_OK == status)
@@ -1940,8 +1971,9 @@
             }
         }
     }
+
     fw_status = nfc_ncif_store_FWVersion(p);
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
     nfc_ncif_set_MaxRoutingTableSize(p);
 #endif
     nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_MW_VER_CHECK, &fw_mw_ver_status);
@@ -1956,6 +1988,14 @@
 #endif
        )
     {
+#if (NXP_EXTNS == TRUE)
+        if(fw_dwnld_status == NCI_STATUS_OK)
+        {
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+                uicc_eeprom_set_config(config_resp);
+#endif
+        }
+#endif
         p_cb->id            = NFC_RF_CONN_ID;
         p_cb->act_protocol  = NCI_PROTOCOL_UNKNOWN;
 #if(NXP_EXTNS == TRUE)
@@ -1966,6 +2006,7 @@
         nfc_cb.p_nci_init_rsp = p_msg;
         nfc_cb.p_hal->core_initialized (p);
     }
+
 #if(NXP_EXTNS == TRUE)
     /*Recovery is added in case of corrupted init rsp is received
      * eg: 400119 - only 3 bytes are received. In this case since the
@@ -2018,7 +2059,7 @@
                       nfc_fw_version.major_version,nfc_fw_version.minor_version);
     return status;
 }
-#if((!(NFC_NXP_CHIP_TYPE == PN547C2)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if(((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfc_ncif_set_MaxRoutingTableSize
@@ -2069,6 +2110,22 @@
 {
   return nfc_fw_version;
 }
+
+/*******************************************************************************
+**
+** Function         nfc_ncif_storeScreenState
+**
+** Description      This function is called to store the last screen state
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfc_ncif_storeScreenState(UINT8 state)
+{
+    /* store the screen state */
+    gScreenState = state;
+    NFC_TRACE_DEBUG1 ("nfc_ncif_storeScreenState gScreenState : %d", gScreenState);
+}
 #endif
 /*******************************************************************************
 **
@@ -2192,7 +2249,7 @@
                     }
                 }
             }
-            (*p_cb->p_cback) (p_cb->conn_id, NFC_DATA_CEVT, (tNFC_CONN *) &data_cevt);
+            (*p_cb->p_cback) (p_cb->conn_id, NFC_DATA_CEVT, (void *) &data_cevt);
             p_evt = NULL;
         }
     }
@@ -2321,7 +2378,7 @@
     }
     GKI_freebuf (p_msg);
 }
-#if(NFC_NXP_ESE == TRUE)
+#if(NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         nfc_ncif_credit_ntf_timeout
@@ -2372,12 +2429,12 @@
         }
     }
     NFC_TRACE_ERROR0 ("cmd timeout sending core reset!!!");
-    nfc_ncif_cmd_timeout();
+     nfc_ncif_cmd_timeout();
     //nci_snd_core_reset(0x00);
 }
 #endif
 
-#if(NFC_NXP_ESE == TRUE && NFC_NXP_CHIP_TYPE == PN548C2)
+#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
 void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event)
 {
     tNFC_RESPONSE   evt_data;
@@ -2475,6 +2532,192 @@
     NFC_TRACE_DEBUG1 ("nfc_ncif_proc_proprietary_rsp: exit status=%u", stat);
     return stat;
 }
+#if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
+/*******************************************************************************
+**
+** Function:        nfc_ncif_reset_nfcc
+**
+** Description:     Reset the NFCC
+**
+** Returns:         NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**
+*******************************************************************************/
+tNFC_STATUS nfc_ncif_reset_nfcc()
+{
+    NFC_TRACE_DEBUG1("%s : Enter",__FUNCTION__);
+    nfc_nci_ExtnCmd_t extn_cmd;
+    UINT8 status = NCI_STATUS_FAILED;
+    int isfound,retry_count = 0;
+    long retlen = 0;
+    uint8_t *buffer = NULL;
+    long bufflen = 256;
+
+    /*NCI_INIT_CMD*/
+    static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
+    /*NCI_RESET_CMD*/
+    static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00}; //keep configuration
+    /*NXP_ACT_PROP_EXTN*/
+    static uint8_t cmd_act_prop_extn[] = {0x2F, 0x02, 0x00};
+    /*NXP_CORE_STANDBY*/
+    static uint8_t cmd_core_standby[] = {0x2F, 0x00, 0x01, 0x01};
+
+    /*Nfcc power cycle*/
+    nfc_cb.p_hal->power_cycle();
+
+    /*Transceive NCI_INIT_CMD*/
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+    extn_cmd.cmd_len = sizeof(cmd_reset_nci);
+    extn_cmd.p_cmd = cmd_reset_nci;
+
+    do {
+        status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((status != NCI_STATUS_OK) && (retry_count <= 3));
+    if(status != NCI_STATUS_OK)
+        goto TheEndReset;
+
+    /*Transceive NCI_RESET_CMD*/
+    retry_count = 0;
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+    extn_cmd.cmd_len = sizeof(cmd_init_nci);
+    extn_cmd.p_cmd = cmd_init_nci;
+    do {
+        status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((status != NCI_STATUS_OK) && (retry_count <= 3));
+    if(status != NCI_STATUS_OK)
+        goto TheEndReset;
+
+        /*Transceive NXP_ACT_PROP_EXTN*/
+        retry_count = 0;
+    retlen = 0;
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+    extn_cmd.cmd_len = sizeof(cmd_act_prop_extn);
+    extn_cmd.p_cmd = cmd_act_prop_extn;
+
+    do {
+        status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((status != NCI_STATUS_OK) && (retry_count <= 3));
+    if(status != NCI_STATUS_OK)
+        goto TheEndReset;
+
+        /*Transceive NXP_CORE_STANDBY*/
+        retry_count = 0;
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+    extn_cmd.cmd_len = sizeof(cmd_core_standby);
+    extn_cmd.p_cmd = cmd_core_standby;
+
+    do {
+        status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((status != NCI_STATUS_OK) && (retry_count <= 3));
+    TheEndReset:
+    NFC_TRACE_DEBUG1("%s : Exit",__FUNCTION__);
+    return status;
+}
+/*******************************************************************************
+**
+** Function         uicc_eeprom_get_config
+**
+** Description      get UICC configuration from EEPROM
+**
+** Returns          None
+**
+*******************************************************************************/
+void uicc_eeprom_get_config(UINT8* config_resp )
+{
+    NFC_TRACE_DEBUG1("%s : Enter",__FUNCTION__);
+    UINT8 cmd_get_dualUicc_config[] = {0x20, 0x03, 0x03, 0x01, 0xA0, 0xEC};
+    nfc_nci_ExtnCmd_t extn_cmd;
+    int uicc_mode = 0;
+    UINT8* config_rsp = NULL;
+    UINT8 config_status = NCI_STATUS_FAILED;
+    UINT8 retry_count = 0;
+
+    if(GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode, sizeof(int)))
+    {
+        NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE : 0x%02x",uicc_mode);
+
+    }else
+    {
+        uicc_mode = 0x00;
+        NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE not found; taking default value : 0x%02x",uicc_mode);
+    }
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+    extn_cmd.cmd_len = sizeof(cmd_get_dualUicc_config);
+    extn_cmd.p_cmd = cmd_get_dualUicc_config;
+    do {
+        config_status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((config_status != NCI_STATUS_OK) && (retry_count <= 3));
+    if(config_status == NCI_STATUS_OK && extn_cmd.rsp_len > 0)
+    {
+            memcpy(config_resp, extn_cmd.p_cmd_rsp, extn_cmd.rsp_len);
+    }
+    else
+    {
+        NFC_TRACE_DEBUG1("%s :HAL_NFC_IOCTL_NCI_TRANSCEIVE Failed",__FUNCTION__);
+    }
+}
+
+/*******************************************************************************
+**
+** Function         uicc_eeprom_set_config
+**
+** Description      set UICC configuration in EEPROM
+**
+** Returns         No Data
+**
+*******************************************************************************/
+void uicc_eeprom_set_config(UINT8* config_rsp)
+{
+    NFC_TRACE_DEBUG1("%s : Enter",__FUNCTION__);
+    UINT8 cmd_set_dualUicc_config[] = {0x20, 0x02, 0x05, 0x01, 0xA0, 0xEC, 0x01, 0x11};
+    nfc_nci_ExtnCmd_t extn_cmd;
+    int uicc_mode = 0;
+    UINT8 config_status = NCI_STATUS_FAILED;
+    UINT8 retry_count = 0;
+
+    if(GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode, sizeof(int)))
+    {
+        NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE : 0x%02x",uicc_mode);
+
+    }else
+    {
+        uicc_mode = 0x00;
+        NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE not found; taking default value : 0x%02x",uicc_mode);
+    }
+    memset(&extn_cmd, 0x00, sizeof(nfc_nci_ExtnCmd_t));
+
+    if(uicc_mode == 0x00)
+    {
+        cmd_set_dualUicc_config[7] = 0x01;
+    }
+    else if(config_rsp != NULL)
+    {
+        cmd_set_dualUicc_config[7] = config_rsp[8];
+    }
+
+    extn_cmd.cmd_len = sizeof(cmd_set_dualUicc_config);
+    extn_cmd.p_cmd = cmd_set_dualUicc_config;
+    do {
+        config_status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_NCI_TRANSCEIVE, &extn_cmd);
+        retry_count++;
+    }
+    while((config_status != NCI_STATUS_OK) && (retry_count <= 3));
+    if((config_status != NCI_STATUS_OK) && (retry_count = 4))
+    {
+        NFC_TRACE_DEBUG1("%s :HAL_NFC_IOCTL_NCI_TRANSCEIVE Failed",__FUNCTION__);
+    }
+}
+#endif
 #endif
 
 #endif /* NFC_INCLUDED == TRUE*/
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index 559de7d..80c3aa5 100755
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -318,7 +318,6 @@
         case NFC_TTYPE_RW_I93_RESPONSE:
             rw_i93_process_timeout (p_tle);
             break;
-#if(NXP_EXTNS == TRUE)
         case NFC_TTYPE_P2P_PRIO_RESPONSE:
             nfa_dm_p2p_timer_event ();
             break;
@@ -328,7 +327,6 @@
         case NFC_TTYPE_P2P_PRIO_LOGIC_DEACT_NTF_TIMEOUT:
             nfa_dm_deact_ntf_timeout();
             break;
-#endif
 #if (NFC_RW_ONLY == FALSE)
         case NFC_TTYPE_CE_T4T_UPDATE:
             ce_t4t_process_timeout (p_tle);
@@ -409,6 +407,7 @@
     UINT16  event;
     BT_HDR  *p_msg;
     BOOLEAN free_buf;
+    (void)param;
 
     /* Initialize the nfc control block */
     memset (&nfc_cb, 0, sizeof (tNFC_CB));
diff --git a/src/nfc/nfc/nfc_utils.c b/src/nfc/nfc/nfc_utils.c
index b413d46..705e838 100755
--- a/src/nfc/nfc/nfc_utils.c
+++ b/src/nfc/nfc/nfc_utils.c
@@ -204,7 +204,7 @@
         if (p_conn_cb->conn_id != NFC_ILLEGAL_CONN_ID)
         {
             if (p_conn_cb->p_cback)
-                (*p_conn_cb->p_cback) (p_conn_cb->conn_id, NFC_DEACTIVATE_CEVT, (tNFC_CONN *) &deact);
+                (*p_conn_cb->p_cback) (p_conn_cb->conn_id, NFC_DEACTIVATE_CEVT, (void *) &deact);
             nfc_free_conn_cb (p_conn_cb);
         }
     }
diff --git a/src/nfc/tags/ce_t3t.c b/src/nfc/tags/ce_t3t.c
index 97de9ac..8b5967b 100755
--- a/src/nfc/tags/ce_t3t.c
+++ b/src/nfc/tags/ce_t3t.c
@@ -57,7 +57,18 @@
 /*******************************************************************************
 * Static constant definitions
 *******************************************************************************/
-static const UINT8 CE_DEFAULT_LF_PMM[NCI_T3T_PMM_LEN] = {0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};   /* Default PMm param */
+/* Default PMm param */
+static const UINT8 CE_DEFAULT_LF_PMM[NCI_T3T_PMM_LEN] =
+{
+    0x01,    /* This PAD0 is used to identify HCE-F on Android */
+    0xFE,    /* This PAD0 is used to identify HCE-F on Android */
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF,
+    0xFF
+};
 
 /*******************************************************************************
 **
@@ -379,7 +390,7 @@
         update_info.p_data = p_cb->ndef_info.p_scratch_buf;
         update_info.length = p_cb->ndef_info.scratch_ln;
         p_cb->state = CE_T3T_STATE_IDLE;
-        p_ce_cb->p_cback (CE_T3T_NDEF_UPDATE_CPLT_EVT, (tCE_DATA *) &update_info);
+        p_ce_cb->p_cback (CE_T3T_NDEF_UPDATE_CPLT_EVT, (void *) &update_info);
     }
 
     GKI_freebuf (p_cmd_msg);
@@ -679,6 +690,7 @@
 #if (BT_TRACE_PROTOCOL == TRUE)
     DispT3TagMessage (p_msg, TRUE);
 #endif
+    (void)conn_id;
 
     /* If activate system code is not NDEF, or if no local NDEF contents was set, then pass data up to the app */
     if ((p_cb->system_code != T3T_SYSTEM_CODE_NDEF) || (!p_cb->ndef_info.initialized))
diff --git a/src/nfc/tags/ce_t4t.c b/src/nfc/tags/ce_t4t.c
index b812cff..f625a69 100755
--- a/src/nfc/tags/ce_t4t.c
+++ b/src/nfc/tags/ce_t4t.c
@@ -599,8 +599,8 @@
 {
     BT_HDR  *p_c_apdu;
     UINT8   *p_cmd;
-    UINT8    cla, instruct, select_type = 0, length;
-    UINT16   offset, max_file_size;
+    UINT8    cla, instruct, select_type = 0;
+    UINT16   offset, max_file_size,length;
     tCE_DATA ce_data;
 
     if (event == NFC_DEACTIVATE_CEVT)
@@ -1070,6 +1070,13 @@
                              UINT16 max_le,
                              UINT16 max_lc)
 {
+#if (CE_TEST_INCLUDED == FALSE)
+    (void)(cc_len);
+    (void)(version);
+    (void)(max_le);
+    (void)(max_lc);
+#endif
+
 #if (CE_TEST_INCLUDED == TRUE)
     tCE_T4T_MEM *p_t4t = &ce_cb.mem.t4t;
     UINT8       *p;
@@ -1141,6 +1148,15 @@
                                       UINT8  read_access,
                                       UINT8  write_access)
 {
+#if (CE_TEST_INCLUDED == FALSE)
+    (void)(type);
+    (void)(length);
+    (void)(file_id);
+    (void)(max_file_size);
+    (void)(read_access);
+    (void)(write_access);
+#endif
+
 #if (CE_TEST_INCLUDED == TRUE)
     tCE_T4T_MEM *p_t4t = &ce_cb.mem.t4t;
     UINT8       *p;
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.c
index 76d0fea..b43979e 100755
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.c
@@ -3081,6 +3081,7 @@
 #if (BT_TRACE_VERBOSE == TRUE)
     UINT8  begin_state   = p_i93->state;
 #endif
+    (void)conn_id;
 
     RW_TRACE_DEBUG1 ("rw_i93_data_cback () event = 0x%X", event);
 
@@ -3118,15 +3119,13 @@
         }
         else
         {
-#if(NXP_EXTNS == TRUE)
             /* free retry buffer */
-            if ((event == NFC_DEACTIVATE_CEVT )&& p_i93->p_retry_cmd)
+            if (p_i93->p_retry_cmd)
             {
                 GKI_freebuf (p_i93->p_retry_cmd);
                 p_i93->p_retry_cmd = NULL;
                 p_i93->retry_count = 0;
             }
-#endif
             NFC_SetStaticRfCback (NULL);
             p_i93->state = RW_I93_STATE_NOT_ACTIVATED;
         }
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.c
index a593e01..30a6d8b 100755
--- a/src/nfc/tags/rw_main.c
+++ b/src/nfc/tags/rw_main.c
@@ -245,54 +245,57 @@
 #endif  /* RW_STATS_INCLUDED */
 
     rw_cb.p_cback = p_cback;
-    switch (p_activate_params->protocol)
-    {
     /* not a tag NFC_PROTOCOL_NFCIP1:   NFCDEP/LLCP - NFC-A or NFC-F */
-    case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
+    if (NFC_PROTOCOL_T1T == p_activate_params->protocol)
+    {
+    /* Type1Tag    - NFC-A */
         if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
         {
             status = rw_t1t_select (p_activate_params->rf_tech_param.param.pa.hr,
                                     p_activate_params->rf_tech_param.param.pa.nfcid1);
         }
-        break;
-
-    case NFC_PROTOCOL_T2T:   /* Type2Tag    - NFC-A */
+    }
+    else if (NFC_PROTOCOL_T2T == p_activate_params->protocol)
+    {
+    /* Type2Tag    - NFC-A */
         if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
         {
             if (p_activate_params->rf_tech_param.param.pa.sel_rsp == NFC_SEL_RES_NFC_FORUM_T2T)
                 status      = rw_t2t_select ();
         }
-        break;
-
-    case NFC_PROTOCOL_T3T:   /* Type3Tag    - NFC-F */
+    }
+    else if (NFC_PROTOCOL_T3T == p_activate_params->protocol)
+    {
+        /* Type3Tag    - NFC-F */
         if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F)
         {
             status = rw_t3t_select (p_activate_params->rf_tech_param.param.pf.nfcid2,
                                     p_activate_params->rf_tech_param.param.pf.mrti_check,
                                     p_activate_params->rf_tech_param.param.pf.mrti_update);
         }
-        break;
-
-    case NFC_PROTOCOL_ISO_DEP:     /* ISODEP/4A,4B- NFC-A or NFC-B */
+    }
+    else if (NFC_PROTOCOL_ISO_DEP == p_activate_params->protocol
 #if(NXP_EXTNS == TRUE)
-    case NFC_PROTOCOL_T3BT:
+    ||    NFC_PROTOCOL_T3BT == p_activate_params->protocol
 #endif
+    )
+    {
+        /* ISODEP/4A,4B- NFC-A or NFC-B */
         if (  (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_B)
             ||(p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)  )
         {
             status          = rw_t4t_select ();
         }
-        break;
-
-    case NFC_PROTOCOL_15693:     /* ISO 15693 */
+    }
+    else if (NFC_PROTOCOL_15693 == p_activate_params->protocol)
+    {   /* ISO 15693 */
         if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_ISO15693)
         {
             status          = rw_i93_select (p_activate_params->rf_tech_param.param.pi93.uid);
         }
-        break;
-    /* TODO set up callback for proprietary protocol */
-
-    default:
+    }
+    else
+    {
         RW_TRACE_ERROR0 ("RW_SetActivatedTagType Invalid protocol");
     }
 
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.c
index 710b73e..e18c75d 100755
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.c
@@ -89,6 +89,8 @@
 #if (BT_TRACE_VERBOSE == TRUE)
     UINT8                   begin_state         = p_t1t->state;
 #endif
+    (void)conn_id;
+    (void)event;
 
     p_pkt = (BT_HDR *) (p_data->data.p_data);
     if (p_pkt == NULL)
@@ -281,6 +283,11 @@
         {
             rw_t1t_data_cback (conn_id, event, p_data);
             break;
+        }else if((p_data != NULL) && (p_data->data.p_data != NULL))
+        {
+        /* Free the response buffer in case of invalid response*/
+            GKI_freebuf((BT_HDR *) (p_data->data.p_data));
+            p_data->data.p_data = NULL;
         }
         /* Data event with error status...fall through to NFC_ERROR_CEVT case */
 
@@ -300,7 +307,7 @@
                 evt_data.status = NFC_STATUS_FAILED;
 
             evt_data.p_data = NULL;
-            (*rw_cb.p_cback) (RW_T1T_INTF_ERROR_EVT, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (RW_T1T_INTF_ERROR_EVT, (void *) &evt_data);
             break;
         }
         nfc_stop_quick_timer (&p_t1t->timer);
@@ -317,14 +324,6 @@
         {
             rw_t1t_process_error ();
         }
-#if(NXP_EXTNS == TRUE)
-        if((p_data != NULL) && (p_data->data.p_data != NULL))
-        {
-            /* Free the response buffer in case of invalid response*/
-            GKI_freebuf((BT_HDR *) (p_data->data.p_data));
-            p_data->data.p_data = NULL;
-        }
-#endif
         break;
 
     default:
@@ -503,10 +502,6 @@
 
     /* Fetch UID0-3 from RID response message */
     STREAM_TO_ARRAY (p_t1t->mem,  p_rid_rsp, T1T_CMD_UID_LEN);
-#if(NXP_EXTNS == TRUE)
-    /* Free the RID response buffer */
-    GKI_freebuf (p_pkt);
-#endif
 
     /* Notify RID response Event */
     return RW_T1T_RID_EVT;
@@ -561,6 +556,7 @@
 void rw_t1t_process_timeout (TIMER_LIST_ENT *p_tle)
 {
     tRW_T1T_CB        *p_t1t  = &rw_cb.tcb.t1t;
+    (void)p_tle;
 
 #if (BT_TRACE_VERBOSE == TRUE)
     RW_TRACE_ERROR2 ("T1T timeout. state=%s command (opcode)=0x%02x ", rw_t1t_get_state_name (p_t1t->state), (rw_cb.tcb.t1t.p_cmd_rsp_info)->opcode);
@@ -676,12 +672,12 @@
         ndef_data.flags     = RW_NDEF_FL_UNKNOWN;
         ndef_data.max_size  = 0;
         ndef_data.cur_size  = 0;
-        (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &ndef_data);
+        (*rw_cb.p_cback) (rw_event, (void *) &ndef_data);
     }
     else
     {
         evt_data.p_data = NULL;
-        (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &evt_data);
+        (*rw_cb.p_cback) (rw_event, (void *) &evt_data);
     }
 }
 
@@ -702,7 +698,7 @@
     evt_data.status = status;
     rw_t1t_handle_op_complete ();
 
-    (*(rw_cb.p_cback)) (RW_T1T_PRESENCE_CHECK_EVT, (tRW_DATA *) &evt_data);
+    (*(rw_cb.p_cback)) (RW_T1T_PRESENCE_CHECK_EVT, (void *) &evt_data);
 }
 
 /*****************************************************************************
diff --git a/src/nfc/tags/rw_t1t_ndef.c b/src/nfc/tags/rw_t1t_ndef.c
index d278b2d..64c0361 100755
--- a/src/nfc/tags/rw_t1t_ndef.c
+++ b/src/nfc/tags/rw_t1t_ndef.c
@@ -644,7 +644,7 @@
             evt_data.status = status;
             evt_data.p_data = NULL;
             rw_t1t_handle_op_complete ();
-            (*rw_cb.p_cback) (RW_T1T_NDEF_READ_EVT, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (RW_T1T_NDEF_READ_EVT, (void *) &evt_data);
         }
         break;
 
@@ -663,7 +663,7 @@
                     tlv_data.num_bytes  = p_t1t->num_lockbytes;
                     tlv_data.status = status;
                     rw_t1t_handle_op_complete ();
-                    (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (tRW_DATA *) &tlv_data);
+                    (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (void *) &tlv_data);
                 }
                 else if (p_t1t->tlv_detect == TAG_NDEF_TLV)
                 {
@@ -687,7 +687,7 @@
                     }
                     ndef_data.status = status;
                     rw_t1t_handle_op_complete ();
-                    (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (tRW_DATA *)&ndef_data);
+                    (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (void *)&ndef_data);
                 }
             }
             break;
@@ -706,7 +706,7 @@
                 }
                 rw_t1t_handle_op_complete ();
                 /* Send response to upper layer */
-                (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (tRW_DATA *) &tlv_data);
+                (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (void *) &tlv_data);
             }
             else if (p_t1t->tlv_detect == TAG_LOCK_CTRL_TLV)
             {
@@ -719,7 +719,7 @@
                     rw_t1t_handle_op_complete ();
 
                     /* Send Negative response to upper layer */
-                    (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (tRW_DATA *)&tlv_data);
+                    (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (void *)&tlv_data);
                 }
                 else
                 {
@@ -731,7 +731,7 @@
                         tlv_data.status = status;
                         rw_t1t_handle_op_complete ();
 
-                        (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (tRW_DATA *) &tlv_data);
+                        (*rw_cb.p_cback) (RW_T1T_TLV_DETECT_EVT, (void *) &tlv_data);
                     }
                 }
             }
@@ -760,7 +760,7 @@
                         /* Send Negative response to upper layer */
                         rw_t1t_handle_op_complete ();
 
-                        (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (tRW_DATA *) &ndef_data);
+                        (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (void *) &ndef_data);
                     }
                     else
                     {
@@ -786,7 +786,7 @@
                             ndef_data.status = status;
                             rw_t1t_handle_op_complete ();
 
-                            (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (tRW_DATA *)&ndef_data);
+                            (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (void *)&ndef_data);
                         }
                     }
                 }
@@ -808,7 +808,7 @@
                     }
                     rw_t1t_handle_op_complete ();
 
-                    (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (tRW_DATA *) &ndef_data);
+                    (*rw_cb.p_cback) (RW_T1T_NDEF_DETECT_EVT, (void *) &ndef_data);
                 }
             }
             break;
@@ -2218,11 +2218,7 @@
                     {
                         /* Set/clear lock_attr byte bits based on whether a particular lock bit is set or not
                          * each bit in lock_attr represents one byte in Tag read only attribute */
-#if(NXP_EXTNS == TRUE)
                         if ((p_t1t->lockbyte[num_dynamic_lock_bytes].lock_byte & rw_t1t_mask_bits[xx]) && (block_count < T1T_BLOCKS_PER_SEGMENT))
-#else
-                        if (p_t1t->lockbyte[num_dynamic_lock_bytes].lock_byte & rw_t1t_mask_bits[xx])
-#endif
                         {
                             p_t1t->lock_attr[block_count] |= 0x01 << bits_covered;
                         }
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.c
index ddf5b9a..36a8f48 100755
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.c
@@ -102,7 +102,7 @@
 #endif
         evt_data.status = p_data->status;
         evt_data.p_data = p_pkt;
-        (*rw_cb.p_cback) (RW_T2T_RAW_FRAME_EVT, (tRW_DATA *)&evt_data);
+        (*rw_cb.p_cback) (RW_T2T_RAW_FRAME_EVT, (void *)&evt_data);
         return;
     }
 #if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
@@ -249,13 +249,13 @@
             ndef_data.cur_size  = 0;
             /* Move back to idle state */
             rw_t2t_handle_op_complete ();
-            (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &ndef_data);
+            (*rw_cb.p_cback) (rw_event, (void *) &ndef_data);
         }
         else
         {
             /* Move back to idle state */
             rw_t2t_handle_op_complete ();
-            (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (rw_event, (void *) &evt_data);
         }
     }
 
@@ -332,6 +332,12 @@
             rw_t2t_proc_data (conn_id, &(p_data->data));
             break;
         }
+        else if((p_data != NULL) && (p_data->data.p_data != NULL))
+        {
+        /* Free the response buffer in case of invalid response*/
+            GKI_freebuf((BT_HDR *) (p_data->data.p_data));
+            p_data->data.p_data = NULL;
+        }
         /* Data event with error status...fall through to NFC_ERROR_CEVT case */
 
     case NFC_ERROR_CEVT:
@@ -350,7 +356,7 @@
                 evt_data.status = NFC_STATUS_FAILED;
 
             evt_data.p_data = NULL;
-            (*rw_cb.p_cback) (RW_T2T_INTF_ERROR_EVT, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (RW_T2T_INTF_ERROR_EVT, (void *) &evt_data);
             break;
         }
         nfc_stop_quick_timer (&p_t2t->t2_timer);
@@ -374,12 +380,6 @@
         {
             rw_t2t_process_error ();
         }
-#if(NXP_EXTNS == TRUE)
-        /* Free the response buffer in case of invalid response*/
-        if (p_data != NULL) {
-                GKI_freebuf((BT_HDR *) (p_data->data.p_data));
-        }
-#endif
         break;
 
     default:
@@ -471,6 +471,7 @@
 {
     tRW_READ_DATA       evt_data;
     tRW_T2T_CB          *p_t2t          = &rw_cb.tcb.t2t;
+    (void)p_tle;
 
     if (p_t2t->state == RW_T2T_STATE_CHECK_PRESENCE)
     {
@@ -497,7 +498,7 @@
             rw_t2t_handle_op_complete ();
             evt_data.status = NFC_STATUS_OK;
             evt_data.p_data = NULL;
-            (*rw_cb.p_cback) (RW_T2T_SELECT_CPLT_EVT, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (RW_T2T_SELECT_CPLT_EVT, (void *) &evt_data);
         }
         else
         {
@@ -623,7 +624,7 @@
         /* If not Halt move to idle state */
         rw_t2t_handle_op_complete ();
 
-        (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &ndef_data);
+        (*rw_cb.p_cback) (rw_event, (void *) &ndef_data);
     }
     else
     {
@@ -633,7 +634,7 @@
             rw_t2t_handle_op_complete ();
 
         p_t2t->substate = RW_T2T_SUBSTATE_NONE;
-        (*rw_cb.p_cback) (rw_event, (tRW_DATA *) &evt_data);
+        (*rw_cb.p_cback) (rw_event, (void *) &evt_data);
     }
 }
 
@@ -654,7 +655,7 @@
     evt_data.status = status;
     rw_t2t_handle_op_complete ();
 
-    (*rw_cb.p_cback) (RW_T2T_PRESENCE_CHECK_EVT, (tRW_DATA *) &evt_data);
+    (*rw_cb.p_cback) (RW_T2T_PRESENCE_CHECK_EVT, (void *) &evt_data);
 }
 
 /*******************************************************************************
@@ -706,7 +707,7 @@
             evt_data.status = NFC_STATUS_FAILED;
             event = rw_t2t_info_to_event (p_cmd_rsp_info);
             rw_t2t_handle_op_complete ();
-            (*rw_cb.p_cback) (event, (tRW_DATA *) &evt_data);
+            (*rw_cb.p_cback) (event, (void *) &evt_data);
         }
     }
 }
diff --git a/src/nfc/tags/rw_t2t_ndef.c b/src/nfc/tags/rw_t2t_ndef.c
index 40c886c..74ceeac 100755
--- a/src/nfc/tags/rw_t2t_ndef.c
+++ b/src/nfc/tags/rw_t2t_ndef.c
@@ -320,14 +320,14 @@
         }
 
         rw_t2t_handle_op_complete ();
-        (*rw_cb.p_cback) (RW_T2T_NDEF_DETECT_EVT, (tRW_DATA *) &ndef_data);
+        (*rw_cb.p_cback) (RW_T2T_NDEF_DETECT_EVT, (void *) &ndef_data);
     }
     else if (p_t2t->tlv_detect == TAG_PROPRIETARY_TLV)
     {
         evt_data.msg_len = p_t2t->prop_msg_len;
         evt_data.status  = status;
         rw_t2t_handle_op_complete ();
-        (*rw_cb.p_cback) (RW_T2T_TLV_DETECT_EVT, (tRW_DATA *) &evt_data);
+        (*rw_cb.p_cback) (RW_T2T_TLV_DETECT_EVT, (void *) &evt_data);
     }
     else
     {
@@ -347,7 +347,7 @@
         }
         tlv_data.status     = status;
         rw_t2t_handle_op_complete ();
-        (*rw_cb.p_cback) (RW_T2T_TLV_DETECT_EVT, (tRW_DATA *) &tlv_data);
+        (*rw_cb.p_cback) (RW_T2T_TLV_DETECT_EVT, (void *) &tlv_data);
     }
 
 }
@@ -1657,7 +1657,7 @@
         evt_data.status = failed ? NFC_STATUS_FAILED : NFC_STATUS_OK;
         evt_data.p_data = NULL;
         rw_t2t_handle_op_complete ();
-        (*rw_cb.p_cback) (RW_T2T_NDEF_READ_EVT, (tRW_DATA *) &evt_data);
+        (*rw_cb.p_cback) (RW_T2T_NDEF_READ_EVT, (void *) &evt_data);
     }
 }
 
@@ -1829,7 +1829,7 @@
             p_t2t->ndef_msg_len = p_t2t->new_ndef_msg_len;
         }
         rw_t2t_handle_op_complete ();
-        (*rw_cb.p_cback) (RW_T2T_NDEF_WRITE_EVT, (tRW_DATA *) &evt_data);
+        (*rw_cb.p_cback) (RW_T2T_NDEF_WRITE_EVT, (void *) &evt_data);
     }
 }
 
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index e23accf..2687608 100755
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -1384,7 +1384,7 @@
     p_cb->rw_state = RW_T3T_STATE_IDLE;
     rw_t3t_update_ndef_flag (&evt_data.flags);
     /* Notify app of NDEF detection result */
-    (*(rw_cb.p_cback)) (RW_T3T_NDEF_DETECT_EVT, (tRW_DATA *) &evt_data);
+    (*(rw_cb.p_cback)) (RW_T3T_NDEF_DETECT_EVT, (void *) &evt_data);
 
     GKI_freebuf (p_msg_rsp);
 }
@@ -1425,13 +1425,13 @@
         p_msg_rsp->len -= T3T_MSG_RSP_OFFSET_CHECK_DATA;
         evt_data.status = NFC_STATUS_OK;
         evt_data.p_data = p_msg_rsp;
-        (*(rw_cb.p_cback)) (RW_T3T_CHECK_EVT, (tRW_DATA *) &evt_data);
+        (*(rw_cb.p_cback)) (RW_T3T_CHECK_EVT, (void *) &evt_data);
     }
 
 
     p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-    (*(rw_cb.p_cback)) (RW_T3T_CHECK_CPLT_EVT, (tRW_DATA *) &nfc_status);
+    (*(rw_cb.p_cback)) (RW_T3T_CHECK_CPLT_EVT, (void *) &nfc_status);
 }
 
 /*****************************************************************************
@@ -1467,7 +1467,7 @@
 
     p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-    (*(rw_cb.p_cback)) (RW_T3T_UPDATE_CPLT_EVT, (tRW_DATA *)&evt_data);
+    (*(rw_cb.p_cback)) (RW_T3T_UPDATE_CPLT_EVT, (void *)&evt_data);
 
     GKI_freebuf (p_msg_rsp);
 }
@@ -1498,7 +1498,7 @@
 
     p_cb->rw_state = RW_T3T_STATE_IDLE;
 
-    (*(rw_cb.p_cback)) (RW_T3T_RAW_FRAME_EVT, (tRW_DATA *) &evt_data);
+    (*(rw_cb.p_cback)) (RW_T3T_RAW_FRAME_EVT, (void *) &evt_data);
 }
 
 /*****************************************************************************
@@ -1560,7 +1560,7 @@
 
             p_msg_rsp->len = rsp_num_bytes_rx;
             read_data.p_data = p_msg_rsp;
-            (*(rw_cb.p_cback)) (RW_T3T_CHECK_EVT, (tRW_DATA *) &read_data);
+            (*(rw_cb.p_cback)) (RW_T3T_CHECK_EVT, (void *) &read_data);
 
             /* Send CHECK cmd for next NDEF segment, if needed */
             if (!(p_cb->flags & RW_T3T_FL_IS_FINAL_NDEF_SEGMENT))
@@ -1753,6 +1753,7 @@
     BT_HDR *p_cmd_buf;
     UINT8 *p, *p_cmd_start;
     tRW_DATA evt_data;
+    (void)sensf_res_buf_size;
 
     /* Validate response for NDEF poll */
     if ((nci_status == NCI_STATUS_OK) && (num_responses > 0))
@@ -1920,6 +1921,8 @@
 static void rw_t3t_handle_fmt_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf)
 {
     tRW_DATA evt_data;
+    (void)sensf_res_buf_size;
+    (void)p_sensf_res_buf;
 
     evt_data.status = NFC_STATUS_OK;
 
@@ -2071,6 +2074,8 @@
     UINT8 tempU8;
     UINT16 checksum, i;
     UINT32 tempU32 = 0;
+    (void)sensf_res_buf_size;
+    (void)p_sensf_res_buf;
 
     evt_data.status = NFC_STATUS_OK;
 
@@ -2258,6 +2263,7 @@
     BT_HDR     *p_msg = p_data->p_data;
     BOOLEAN free_msg = FALSE;           /* if TRUE, free msg buffer before returning */
     UINT8 *p, sod;
+    (void)conn_id;
 
     /* Stop rsponse timer */
     nfc_stop_quick_timer (&p_cb->timer);
@@ -2508,6 +2514,7 @@
 static tNFC_STATUS rw_t3t_unselect (UINT8 peer_nfcid2[])
 {
     tRW_T3T_CB *p_cb = &rw_cb.tcb.t3t;
+    (void)peer_nfcid2;
 
 #if (defined (RW_STATS_INCLUDED) && (RW_STATS_INCLUDED == TRUE))
     /* Display stats */
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.c
index 5af894f..619bd6e 100755
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.c
@@ -65,8 +65,8 @@
 #define RW_T4T_STATE_PRESENCE_CHECK             0x05    /* checking presence of tag             */
 #define RW_T4T_STATE_SET_READ_ONLY              0x06    /* convert tag to read only             */
 
-#if(NXP_EXTNS == TRUE)
 #define RW_T4T_STATE_NDEF_FORMAT                0x07    /* performing NDEF format               */
+#if(NXP_EXTNS == TRUE)
 #define RW_T3BT_STATE_GET_PROP_DATA             0x08
 #endif
 /* sub state */
@@ -80,7 +80,6 @@
 #define RW_T4T_SUBSTATE_WAIT_UPDATE_NLEN        0x07    /* waiting for response of updating NLEN    */
 #define RW_T4T_SUBSTATE_WAIT_UPDATE_CC          0x08    /* waiting for response of updating CC      */
 
-#if(NXP_EXTNS == TRUE)
 #define RW_T4T_SUBSTATE_WAIT_GET_HW_VERSION     0x09
 #define RW_T4T_SUBSTATE_WAIT_GET_SW_VERSION     0x0A
 #define RW_T4T_SUBSTATE_WAIT_GET_UID            0x0B
@@ -89,6 +88,7 @@
 #define RW_T4T_SUBSTATE_WAIT_CREATE_NDEF        0x0E
 #define RW_T4T_SUBSTATE_WAIT_WRITE_CC           0x0F
 #define RW_T4T_SUBSTATE_WAIT_WRITE_NDEF         0x10
+#if(NXP_EXTNS == TRUE)
 #define RW_T3BT_SUBSTATE_WAIT_GET_ATTRIB        0x11
 #define RW_T3BT_SUBSTATE_WAIT_GET_PUPI          0x12
 #endif
@@ -107,7 +107,6 @@
 static BOOLEAN rw_t4t_select_application (UINT8 version);
 static BOOLEAN rw_t4t_validate_cc_file (void);
 
-#if(NXP_EXTNS == TRUE)
 static BOOLEAN rw_t4t_get_hw_version (void);
 static BOOLEAN rw_t4t_get_sw_version (void);
 static BOOLEAN rw_t4t_create_app (void);
@@ -116,10 +115,11 @@
 static BOOLEAN rw_t4t_create_ndef (void);
 static BOOLEAN rw_t4t_write_cc (void);
 static BOOLEAN rw_t4t_write_ndef (void);
+#if(NXP_EXTNS == TRUE)
 static BOOLEAN rw_t3bt_get_pupi (void);
-static void rw_t4t_sm_ndef_format (BT_HDR  *p_r_apdu);
 static void rw_t3Bt_sm_get_card_id(BT_HDR *p_r_apdu);
 #endif
+static void rw_t4t_sm_ndef_format (BT_HDR  *p_r_apdu);
 static void rw_t4t_handle_error (tNFC_STATUS status, UINT8 sw1, UINT8 sw2);
 static void rw_t4t_sm_detect_ndef (BT_HDR *p_r_apdu);
 static void rw_t4t_sm_read_ndef (BT_HDR *p_r_apdu);
@@ -154,7 +154,6 @@
     return TRUE;
 }
 
-#if(NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         rw_t4t_get_hw_version
@@ -275,7 +274,6 @@
             break;
         default:
             return FALSE;
-            break;
         }
     }
     else
@@ -340,7 +338,8 @@
     tRW_T4T_CB  *p_t4t = &rw_cb.tcb.t4t;
     BT_HDR      *p_c_apdu;
     UINT8       *p;
-        UINT8        df_name[] = {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01};
+    UINT8       df_name[] = {0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01};
+
     p_c_apdu = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
 
     if (!p_c_apdu)
@@ -357,21 +356,21 @@
     UINT16_TO_BE_STREAM (p, 0x0000);
     if(p_t4t->card_type == T4T_TYPE_DESFIRE_EV1)
     {
-            UINT8_TO_BE_STREAM(p,(T4T_CMD_MAX_HDR_SIZE + sizeof(df_name)+2));
-            UINT24_TO_BE_STREAM(p, T4T_DES_EV1_NFC_APP_ID);
-        UINT16_TO_BE_STREAM(p, 0x0F21);                  /*Key settings and no.of keys */
-        UINT16_TO_BE_STREAM(p, 0x05E1);                  /* ISO file ID */
-        ARRAY_TO_BE_STREAM(p,df_name,sizeof(df_name));   /*DF file name */
-        UINT8_TO_BE_STREAM(p,0x00);                      /* Le */
+        UINT8_TO_BE_STREAM (p, (T4T_CMD_MAX_HDR_SIZE + sizeof(df_name) + 2));
+        UINT24_TO_BE_STREAM (p, T4T_DES_EV1_NFC_APP_ID);
+        UINT16_TO_BE_STREAM (p, 0x0F21);                  /*Key settings and no.of keys */
+        UINT16_TO_BE_STREAM (p, 0x05E1);                  /* ISO file ID */
+        ARRAY_TO_BE_STREAM (p, df_name, sizeof(df_name));   /*DF file name */
+        UINT8_TO_BE_STREAM (p, 0x00);                      /* Le */
         p_c_apdu->len = 20;
     }
     else
     {
-            UINT8_TO_BE_STREAM(p, T4T_CMD_MAX_HDR_SIZE);
-            UINT24_TO_BE_STREAM(p, T4T_DES_EV0_NFC_APP_ID);
-            UINT16_TO_BE_STREAM(p, 0x0F01);                  /*Key settings and no.of keys */
-            UINT8_TO_BE_STREAM(p,0x00);                      /* Le */
-            p_c_apdu->len = 11;
+        UINT8_TO_BE_STREAM (p, T4T_CMD_MAX_HDR_SIZE);
+        UINT24_TO_BE_STREAM (p, T4T_DES_EV0_NFC_APP_ID);
+        UINT16_TO_BE_STREAM (p, 0x0F01);                  /*Key settings and no.of keys */
+        UINT8_TO_BE_STREAM (p, 0x00);                      /* Le */
+        p_c_apdu->len = 11;
     }
 
     if (!rw_t4t_send_to_lower (p_c_apdu))
@@ -418,7 +417,7 @@
     }
     else
     {
-            UINT24_TO_BE_STREAM(p, T4T_DES_EV0_NFC_APP_ID);
+        UINT24_TO_BE_STREAM(p, T4T_DES_EV0_NFC_APP_ID);
     }
     UINT8_TO_BE_STREAM(p,0x00);                      /* Le */
 
@@ -462,14 +461,14 @@
     UINT16_TO_BE_STREAM (p, 0x0000);
     if(p_t4t->card_type == T4T_TYPE_DESFIRE_EV1)
     {
-        UINT8_TO_BE_STREAM(p,0x09);                    /* Lc: length of wrapped data */
-            UINT8_TO_BE_STREAM(p,0x01);                    /* EV1 CC file id             */
-        UINT16_TO_BE_STREAM(p,0x03E1);                 /* ISO file id                */
+        UINT8_TO_BE_STREAM (p, 0x09);                    /* Lc: length of wrapped data */
+        UINT8_TO_BE_STREAM (p, 0x01);                    /* EV1 CC file id             */
+        UINT16_TO_BE_STREAM (p, 0x03E1);                 /* ISO file id                */
     }
     else
     {
-            UINT8_TO_BE_STREAM(p,0x07);               /* Lc: length of wrapped data */
-            UINT8_TO_BE_STREAM(p,0x03);               /* DESFire CC file id         */
+        UINT8_TO_BE_STREAM (p, 0x07);               /* Lc: length of wrapped data */
+        UINT8_TO_BE_STREAM (p, 0x03);               /* DESFire CC file id         */
     }
     UINT8_TO_BE_STREAM(p,0x00);                   /* COMM settings              */
     UINT16_TO_BE_STREAM(p,0xEEEE);                /* Access rights              */
@@ -516,21 +515,21 @@
     UINT16_TO_BE_STREAM (p, 0x0000);
     if(p_t4t->card_type == T4T_TYPE_DESFIRE_EV1)
     {
-        UINT8_TO_BE_STREAM(p,0x09);                   /* Lc: length of wrapped data */
-            UINT8_TO_BE_STREAM(p,0x02);                   /* DESFEv1 NDEF file id       */
-        UINT16_TO_BE_STREAM(p,0x04E1);                /* ISO file id                */
+        UINT8_TO_BE_STREAM (p, 0x09);                   /* Lc: length of wrapped data */
+        UINT8_TO_BE_STREAM (p, 0x02);                   /* DESFEv1 NDEF file id       */
+        UINT16_TO_BE_STREAM (p, 0x04E1);                /* ISO file id                */
     }
     else
     {
-            UINT8_TO_BE_STREAM(p,0x07);
-            UINT8_TO_BE_STREAM(p,0x04);                   /* DESF4 NDEF file id        */
+        UINT8_TO_BE_STREAM (p, 0x07);
+        UINT8_TO_BE_STREAM (p, 0x04);                   /* DESF4 NDEF file id        */
     }
 
-    UINT8_TO_BE_STREAM(p,0x00);                       /* COMM settings              */
-    UINT16_TO_BE_STREAM(p,0xEEEE);                    /* Access rights              */
-    UINT16_TO_STREAM(p,p_t4t->card_size);
-        UINT8_TO_BE_STREAM(p,0x00);                       /* Set card size              */
-    UINT8_TO_BE_STREAM(p,0x00);                       /* Le                         */
+    UINT8_TO_BE_STREAM (p, 0x00);                       /* COMM settings              */
+    UINT16_TO_BE_STREAM (p, 0xEEEE);                    /* Access rights              */
+    UINT16_TO_STREAM (p, p_t4t->card_size);
+    UINT8_TO_BE_STREAM (p, 0x00);                       /* Set card size              */
+    UINT8_TO_BE_STREAM (p, 0x00);                       /* Le                         */
 
     p_c_apdu->len = (p_t4t->card_type == T4T_TYPE_DESFIRE_EV1)?15:13;
 
@@ -555,7 +554,7 @@
     tRW_T4T_CB  *p_t4t = &rw_cb.tcb.t4t;
     BT_HDR      *p_c_apdu;
     UINT8       *p;
-    UINT8        CCFileBytes[]  = {0x00,0x0f,0x10,0x00,0x3B,0x00,0x34,0x04,0x06,0xE1,0x04,0x04,0x00,0x00,0x00};
+    UINT8       CCFileBytes[] = {0x00, 0x0F, 0x10, 0x00, 0x3B, 0x00, 0x34, 0x04, 0x06, 0xE1, 0x04, 0x04, 0x00, 0x00, 0x00};
 
     p_c_apdu = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
 
@@ -574,14 +573,14 @@
     UINT8_TO_BE_STREAM(p,0x16);                    /* Lc: length of wrapped data  */
     if(p_t4t->card_type == T4T_TYPE_DESFIRE_EV1)
     {
-            CCFileBytes[2]  = 0x20;
-            CCFileBytes[11] = p_t4t->card_size >> 8;
-            CCFileBytes[12] = (UINT8) p_t4t->card_size;
-        UINT8_TO_BE_STREAM(p, 0x01);               /* CC file id                  */
+        CCFileBytes[2]  = 0x20;
+        CCFileBytes[11] = p_t4t->card_size >> 8;
+        CCFileBytes[12] = (UINT8) p_t4t->card_size;
+        UINT8_TO_BE_STREAM (p, 0x01);               /* CC file id                  */
     }
     else
     {
-            UINT8_TO_BE_STREAM(p, 0x03);
+        UINT8_TO_BE_STREAM (p, 0x03);
     }
     UINT24_TO_BE_STREAM(p, 0x000000);              /* Set the offset              */
     UINT24_TO_BE_STREAM(p, 0x0F0000);              /* Set available length        */
@@ -633,7 +632,7 @@
     }
     else
     {
-            UINT8_TO_BE_STREAM(p, 0x04);
+        UINT8_TO_BE_STREAM (p, 0x04);
     }
     UINT24_TO_BE_STREAM(p, 0x000000);              /* Set the offset              */
     UINT24_TO_BE_STREAM(p, 0x020000);              /* Set available length        */
@@ -648,7 +647,6 @@
     }
     return TRUE;
 }
-#endif
 
 #if(NXP_EXTNS == TRUE)
 static BOOLEAN rw_t3bt_get_pupi (void)
@@ -1149,11 +1147,11 @@
             event = RW_T4T_SET_TO_RO_EVT;
             break;
 
-#if(NXP_EXTNS == TRUE)
         case RW_T4T_STATE_NDEF_FORMAT:
             event = RW_T4T_NDEF_FORMAT_CPLT_EVT;
             rw_data.status = NFC_STATUS_FAILED;
             break;
+#if(NXP_EXTNS == TRUE)
         case RW_T3BT_STATE_GET_PROP_DATA:
             event = RW_T3BT_RAW_READ_CPLT_EVT;
             rw_data.status = NFC_STATUS_FAILED;
@@ -1176,7 +1174,7 @@
         p_t4t->state = RW_T4T_STATE_IDLE;
     }
 }
-#if(NXP_EXTNS == TRUE)
+
 /*******************************************************************************
 **
 ** Function         rw_t4t_sm_ndef_format
@@ -1412,6 +1410,7 @@
     }
 }
 
+#if(NXP_EXTNS == TRUE)
 static void rw_t3Bt_sm_get_card_id(BT_HDR *p_r_apdu)
 {
     tRW_T4T_CB  *p_t4t = &rw_cb.tcb.t4t;
@@ -2044,6 +2043,7 @@
     tRW_T4T_CB *p_t4t    = &rw_cb.tcb.t4t;
     BT_HDR     *p_r_apdu;
     tRW_DATA    rw_data;
+    (void)conn_id;
 
 #if (BT_TRACE_VERBOSE == TRUE)
     UINT8  begin_state   = p_t4t->state;
@@ -2060,7 +2060,6 @@
         return;
 
     case NFC_ERROR_CEVT:
-#if(NXP_EXTNS == TRUE)
         if (p_t4t->state == RW_T4T_STATE_PRESENCE_CHECK)
         {
             p_t4t->state   = RW_T4T_STATE_IDLE;
@@ -2083,18 +2082,6 @@
             rw_data.status = (tNFC_STATUS) (*(UINT8*) p_data);
             (*(rw_cb.p_cback)) (RW_T4T_INTF_ERROR_EVT, &rw_data);
         }
-#else
-        rw_data.status = (tNFC_STATUS) (*(UINT8*) p_data);
-
-        if (p_t4t->state != RW_T4T_STATE_IDLE)
-        {
-            rw_t4t_handle_error (rw_data.status, 0, 0);
-        }
-        else
-        {
-            (*(rw_cb.p_cback)) (RW_T4T_INTF_ERROR_EVT, &rw_data);
-        }
-#endif
         return;
 
     case NFC_DATA_CEVT:
@@ -2181,11 +2168,11 @@
         rw_t4t_sm_set_readonly (p_r_apdu);
         GKI_freebuf (p_r_apdu);
         break;
-#if(NXP_EXTNS == TRUE)
     case RW_T4T_STATE_NDEF_FORMAT:
         rw_t4t_sm_ndef_format(p_r_apdu);
         GKI_freebuf (p_r_apdu);
         break;
+#if(NXP_EXTNS == TRUE)
     case RW_T3BT_STATE_GET_PROP_DATA:
         rw_t3Bt_sm_get_card_id(p_r_apdu);
         GKI_freebuf (p_r_apdu);
@@ -2207,7 +2194,6 @@
 #endif
 }
 
-#if(NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         RW_T4tFormatNDef
@@ -2238,7 +2224,7 @@
 
     return NFC_STATUS_OK;
 }
-#endif
+
 /*******************************************************************************
 **
 ** Function         rw_t4t_select
@@ -2676,7 +2662,6 @@
         return ("WAIT_UPDATE_RESP");
     case RW_T4T_SUBSTATE_WAIT_UPDATE_NLEN:
         return ("WAIT_UPDATE_NLEN");
-#if(NXP_EXTNS == TRUE)
     case RW_T4T_SUBSTATE_WAIT_GET_HW_VERSION:
         return ("WAIT_GET_HW_VERSION");
     case RW_T4T_SUBSTATE_WAIT_GET_SW_VERSION :
@@ -2693,6 +2678,7 @@
         return ("WAIT_WRITE_CC");
     case RW_T4T_SUBSTATE_WAIT_WRITE_NDEF:
         return ("WAIT_WRITE_NDEF");
+#if(NXP_EXTNS == TRUE)
     case RW_T3BT_SUBSTATE_WAIT_GET_ATTRIB:
         return ("WAIT_GET_ATTRIB");
     case RW_T3BT_SUBSTATE_WAIT_GET_PUPI:
diff --git a/src/nfca_version.c b/src/nfca_version.c
index d415d6f..047cdf4 100644
--- a/src/nfca_version.c
+++ b/src/nfca_version.c
@@ -17,7 +17,7 @@
  ******************************************************************************/
 #include "bt_types.h"
 
-const UINT8 nfca_version_string[] = "NFCDROID-AOSP_L_00.01";
+const UINT8 nfca_version_string[] = "NFCDROID-AOSP_M_00.01";
 
 /*
 // The following string should be manually updated to contain the