Support custom crystal frequency on 20795A1 chip

Support new .conf variable XTAL_PARAMS_CFG to configure custom
crystal frequency.  Variable XTAL_PARAMS_CFG is used if and only if
variable XTAL_FREQ_INDEX=0xFF.

Change-Id: I21112677f6e1109f9b6f23df51c819f5febd3bdd
diff --git a/halimpl/bcm2079x/adaptation/patchram.cpp b/halimpl/bcm2079x/adaptation/patchram.cpp
index 4c278cd..e33bac3 100644
--- a/halimpl/bcm2079x/adaptation/patchram.cpp
+++ b/halimpl/bcm2079x/adaptation/patchram.cpp
@@ -45,12 +45,14 @@
 static StartupConfig sStartupConfig;
 static StartupConfig sLptdConfig;
 static StartupConfig sPreDiscoveryConfig;
+static StartupConfig sXtalCustomParam;
 extern UINT8 *p_nfc_hal_dm_start_up_cfg; //defined in the HAL
 static UINT8 nfa_dm_start_up_vsc_cfg[CONFIG_MAX_LEN];
 extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg; //defined in the HAL
 extern UINT8 *p_nfc_hal_dm_lptd_cfg; //defined in the HAL
 static UINT8 sDontSendLptd[] = { 0 };
 extern UINT8 *p_nfc_hal_pre_discover_cfg; //defined in the HAL
+extern UINT8 *p_nfc_hal_dm_xtal_params_cfg; //defined in HAL
 
 extern tSNOOZE_MODE_CONFIG gSnoozeModeCfg;
 extern tNFC_HAL_CFG *p_nfc_hal_cfg;
@@ -589,6 +591,7 @@
     UINT32 hwId = 0;
     UINT16 xtalFreq = 0;
     UINT8 xtalIndex = 0;
+    int actualLen = 0;
 
     GetNumValue (NAME_XTAL_HARDWARE_ID, &num, sizeof(num));
     hwId = num;
@@ -599,6 +602,13 @@
     GetNumValue (NAME_XTAL_FREQ_INDEX, &num, sizeof(num));
     xtalIndex = (UINT8) num;
 
+    actualLen = GetStrValue (NAME_XTAL_PARAMS_CFG, (char*)sConfig, sizeof(sConfig));
+    if (actualLen && (xtalIndex == NFC_HAL_XTAL_INDEX_SPECIAL)) //whether to use custom crystal frequency
+    {
+        sXtalCustomParam.append (sConfig, actualLen);
+        p_nfc_hal_dm_xtal_params_cfg = const_cast<UINT8*> (sXtalCustomParam.getInternalBuffer ());
+    }
+
     if ((hwId == 0) && (xtalFreq == 0) && (xtalIndex == 0))
         return;
 
diff --git a/src/include/config.h b/src/include/config.h
index e864d28..4113d65 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -79,6 +79,7 @@
 #define NAME_XTAL_HARDWARE_ID           "XTAL_HARDWARE_ID"
 #define NAME_XTAL_FREQUENCY             "XTAL_FREQUENCY"
 #define NAME_XTAL_FREQ_INDEX            "XTAL_FREQ_INDEX"
+#define NAME_XTAL_PARAMS_CFG            "XTAL_PARAMS_CFG"
 #define NAME_EXCLUSIVE_SE_ACCESS        "EXCLUSIVE_SE_ACCESS"
 #define NAME_DBG_NO_UICC_IDLE_TIMEOUT_TOGGLING  "DBG_NO_UICC_IDLE_TIMEOUT_TOGGLING"
 #define NAME_PRESENCE_CHECK_ALGORITHM   "PRESENCE_CHECK_ALGORITHM"