[SINGLE BINARY] : Force NCI2.0 logic
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.cpp b/halimpl/pn54x/configs/NxpNfcCapability.cpp
index 0e36424..0bcc876 100644
--- a/halimpl/pn54x/configs/NxpNfcCapability.cpp
+++ b/halimpl/pn54x/configs/NxpNfcCapability.cpp
@@ -31,47 +31,50 @@
 }
 
 tNFC_chipType capability::processChipType(uint8_t* msg, uint16_t msg_len) {
-    if(msg[0] == 0x60 && msg[1] == 00) {
-        chipType = pn81T;
-    }
-    else if(offsetHwVersion < msg_len) {
-        ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
-        switch(msg[offsetHwVersion]){
+    if((msg != NULL) && (msg_len != 0)) {
+        if((msg[0] == 0x60 && msg[1] == 00) ||
+                ((offsetFwVersion < msg_len) && (msg[offsetFwVersion] == 0x12))) {
+            chipType = pn81T;
+        }
+        else if(offsetHwVersion < msg_len) {
+            ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
+            switch(msg[offsetHwVersion]){
 
-        case 0x40 : //PN553 A0
-        case 0x41 : //PN553 B0
-            chipType = pn553;
-            break;
+            case 0x40 : //PN553 A0
+            case 0x41 : //PN553 B0
+                chipType = pn553;
+                break;
 
-        case 0x50 : //PN553 A0 + P73
-        case 0x51 : //PN553 B0 + P73
-            chipType = pn80T;
-            break;
+            case 0x50 : //PN553 A0 + P73
+            case 0x51 : //PN553 B0 + P73
+                chipType = pn80T;
+                break;
 
-        case 0x98 :
-            chipType = pn551;
-            break;
+            case 0x98 :
+                chipType = pn551;
+                break;
 
-        case 0xA8 :
-            chipType = pn67T;
-            break;
+            case 0xA8 :
+                chipType = pn67T;
+                break;
 
-        case 0x28 :
-            chipType = pn548C2;
-            break;
+            case 0x28 :
+                chipType = pn548C2;
+                break;
 
-        case 0x18 :
-            chipType = pn66T;
-            break;
+            case 0x18 :
+                chipType = pn66T;
+                break;
 
-        default :
+            default :
+                chipType = pn80T;
+            }
+        }
+        else {
+            ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
             chipType = pn80T;
         }
     }
-    else {
-        ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
-        chipType = pn80T;
-    }
     return chipType;
 }
 
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.h b/halimpl/pn54x/configs/NxpNfcCapability.h
index fd6b398..538a9c8 100644
--- a/halimpl/pn54x/configs/NxpNfcCapability.h
+++ b/halimpl/pn54x/configs/NxpNfcCapability.h
@@ -55,6 +55,7 @@
 private:
     static capability* instance;
     const uint16_t offsetHwVersion = 24;
+    const uint16_t offsetFwVersion = 25;
     capability();
 public:
     static tNFC_chipType chipType;
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 7036a1e..006cdff 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -779,10 +779,20 @@
         status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
     } else {
         status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
+        if(status == NFCSTATUS_SUCCESS && (nfcFL.chipType == pn557)) {
+            NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip to 2.0 mode");
+            status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
+            if(status == NFCSTATUS_SUCCESS) {
+                status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+                if(status == NFCSTATUS_SUCCESS) {
+                    goto init_retry;
+                }
+            }
+        }
     }
 
     if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
+      NXPLOG_NCIHAL_E("COMMAND Failed");
       if (init_retry_cnt < 3) {
         init_retry_cnt++;
         (void)phNxpNciHal_power_cycle();