summaryrefslogtreecommitdiffstats
path: root/halimpl
diff options
context:
space:
mode:
authorJizhou Liao <jizhou.liao@nxp.com>2018-12-21 11:26:07 -0800
committerJizhou Liao <jizhou.liao@nxp.com>2018-12-21 11:26:07 -0800
commit2b8d876e4e5acf47299bdb5b3f7f2738b9de6252 (patch)
treee309a3c8acfdc3ee9bb79836e5a226312dafd177 /halimpl
parent5023739280f82fd773713912b59a910454b0d443 (diff)
downloadandroid_hardware_nxp_nfc-2b8d876e4e5acf47299bdb5b3f7f2738b9de6252.tar.gz
android_hardware_nxp_nfc-2b8d876e4e5acf47299bdb5b3f7f2738b9de6252.tar.bz2
android_hardware_nxp_nfc-2b8d876e4e5acf47299bdb5b3f7f2738b9de6252.zip
Fix NFC continuous crash after nci command timeout
Unblock semaphone in case of nci write command timeout or the response buffer is corrupted. Bug: 120646857 Test: VTS, NFC ON/OFF, NCI command timeout with PNSCR tool Change-Id: Ib9659ae6d4f702c170e72bf5c9ecffe65303cc7b
Diffstat (limited to 'halimpl')
-rwxr-xr-xhalimpl/hal/phNxpNciHal.cc6
-rwxr-xr-xhalimpl/hal/phNxpNciHal_ext.cc1
2 files changed, 6 insertions, 1 deletions
diff --git a/halimpl/hal/phNxpNciHal.cc b/halimpl/hal/phNxpNciHal.cc
index d798f0c..51375ef 100755
--- a/halimpl/hal/phNxpNciHal.cc
+++ b/halimpl/hal/phNxpNciHal.cc
@@ -2076,7 +2076,11 @@ int phNxpNciHal_close(bool bShutdown) {
CONCURRENCY_LOCK();
-
+ int sem_val;
+ sem_getvalue(&(nxpncihal_ctrl.syncSpiNfc), &sem_val);
+ if(sem_val == 0 ) {
+ sem_post(&(nxpncihal_ctrl.syncSpiNfc));
+ }
if(!bShutdown){
status = phNxpNciHal_send_ext_cmd(sizeof(cmd_ven_disable_nci), cmd_ven_disable_nci);
if(status != NFCSTATUS_SUCCESS) {
diff --git a/halimpl/hal/phNxpNciHal_ext.cc b/halimpl/hal/phNxpNciHal_ext.cc
index 646a07b..da74afa 100755
--- a/halimpl/hal/phNxpNciHal_ext.cc
+++ b/halimpl/hal/phNxpNciHal_ext.cc
@@ -915,6 +915,7 @@ static void hal_extns_write_rsp_timeout_cb(uint32_t timerId, void* pContext) {
NXPLOG_NCIHAL_E("hal_extns_write_rsp_timeout_cb - write timeout!!!");
nxpncihal_ctrl.ext_cb_data.status = NFCSTATUS_FAILED;
usleep(1);
+ sem_post(&(nxpncihal_ctrl.syncSpiNfc));
SEM_POST(&(nxpncihal_ctrl.ext_cb_data));
return;