From cc0a4ac3f0d41f515a215a4c4290fedbdfdc0a2a Mon Sep 17 00:00:00 2001 From: Rohit Rangwani Date: Mon, 9 Oct 2017 17:36:51 +0530 Subject: NFC: Fix delay in NFC enable in NQ2xx devices Delay in NFC enable seen due to failure to configure SWP1A in NQ2xx devices. Only encountered when ESE not present NFCEE notfication received and set configuration command to disable all SWPs is sent Changes done to dynamically modify set/get SWP configuration based on chipid Change-Id: I823ceb2fd3b37df0c8c3af49f19ebb141995f916 --- nci/jni/NativeNxpFeature.cpp | 18 ++++++++++-------- nci/jni/extns/pn54x/src/utils/phNxpConfig.cpp | 16 +++++++++------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/nci/jni/NativeNxpFeature.cpp b/nci/jni/NativeNxpFeature.cpp index 170575c8..172d8ba0 100644 --- a/nci/jni/NativeNxpFeature.cpp +++ b/nci/jni/NativeNxpFeature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright (C) 2015 NXP Semiconductors @@ -664,12 +664,14 @@ tNFA_STATUS GetNumNFCEEConfigured(void) uint8_t cmd_buf_len = 0x08; uint8_t num_config_params = 0x02; uint8_t config_param_len = 0x05; - uint8_t buf_offset = 0x08; - cmd_buf[buf_offset++] = NXP_NFC_SET_CONFIG_PARAM_EXT; - cmd_buf[buf_offset++] = NXP_NFC_PARAM_ID_SWP1A; - cmd_buf_len += 0x02; - num_config_params++; - config_param_len += 0x02; + if ((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) { + uint8_t buf_offset = 0x08; + cmd_buf[buf_offset++] = NXP_NFC_SET_CONFIG_PARAM_EXT; + cmd_buf[buf_offset++] = NXP_NFC_PARAM_ID_SWP1A; + cmd_buf_len += 0x02; + num_config_params++; + config_param_len += 0x02; + } cmd_buf[2] = config_param_len; cmd_buf[3] = num_config_params; @@ -842,7 +844,7 @@ tNFA_STATUS enableSWPInterface() SetCbStatus(NFA_STATUS_FAILED); { SyncEventGuard guard (gnxpfeature_conf.NxpFeatureConfigEvt); - if(nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) { + if ((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) { status = NFA_SendNxpNciCommand(sizeof(dual_uicc_cmd_buf), dual_uicc_cmd_buf, NxpResponse_Cb); } diff --git a/nci/jni/extns/pn54x/src/utils/phNxpConfig.cpp b/nci/jni/extns/pn54x/src/utils/phNxpConfig.cpp index b82b3ffe..ce6fb2aa 100644 --- a/nci/jni/extns/pn54x/src/utils/phNxpConfig.cpp +++ b/nci/jni/extns/pn54x/src/utils/phNxpConfig.cpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (c) 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright (C) 2011-2012 Broadcom Corporation @@ -62,7 +62,6 @@ #include #include #include - #if GENERIC_TARGET const char alternative_config_path[] = "/data/nfc/"; #else @@ -294,6 +293,7 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) int config_id = QRD_TYPE_DEFAULT; char target_type[MAX_SOC_INFO_NAME_LEN] = {'\0'}; char soc_info[MAX_SOC_INFO_NAME_LEN] = {'\0'}; + bool nq2xx_present = false; char nq_chipid[PROPERTY_VALUE_MAX] = {0}; char nq_fw_ver[PROPERTY_VALUE_MAX] = {0}; string strPath; @@ -312,13 +312,15 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) ALOGE("get_soc_info(HW_PLATFORM) fail!\n"); return DEFAULT_CONFIG; } - rc = __system_property_get("sys.nfc.nq.chipid", nq_chipid); if (rc <= 0) ALOGE("get sys.nfc.nq.chipid fail, rc = %d\n", rc); else ALOGD("sys.nfc.nq.chipid = %s\n", nq_chipid); + nq2xx_present = (!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) + || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX)); + rc = __system_property_get("sys.nfc.nq.fwver", nq_fw_ver); if (rc <= 0) ALOGE("get sys.nfc.nq.fwver fail, rc = %d\n", rc); @@ -356,7 +358,7 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) case TARGET_MSM8937: case TARGET_MSM8940: case TARGET_MSM8917: - if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) { + if (nq2xx_present) { // NQ210 or NQ220 config_id = QRD_TYPE_DEFAULT; strlcpy(config_file, config_name_qrd, MAX_DATA_CONFIG_PATH_LEN); @@ -384,7 +386,7 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) case TARGET_MSM8997: case TARGET_SDM660: case TARGET_SDM630: - if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) { + if (nq2xx_present) { // NQ210 or NQ220 config_id = QRD_TYPE_2; strlcpy(config_file, config_name_qrd2, MAX_DATA_CONFIG_PATH_LEN); @@ -410,7 +412,7 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) case TARGET_MSM8937: case TARGET_MSM8940: case TARGET_MSM8917: - if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) { + if (nq2xx_present) { // NQ210 or NQ220 config_id = MTP_TYPE_DEFAULT; strlcpy(config_file, config_name_mtp, MAX_DATA_CONFIG_PATH_LEN); @@ -433,7 +435,7 @@ int CNxpNfcConfig::getconfiguration_id(char *config_file) case TARGET_MSM8997: case TARGET_SDM660: case TARGET_SDM630: - if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) { + if (nq2xx_present) { // NQ210 or NQ220 config_id = MTP_TYPE_1; strlcpy(config_file, config_name_mtp1, MAX_DATA_CONFIG_PATH_LEN); -- cgit v1.2.3