11ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/* 21ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Copyright (C) 2012-2014 NXP Semiconductors 31ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 41ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Licensed under the Apache License, Version 2.0 (the "License"); 51ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * you may not use this file except in compliance with the License. 61ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * You may obtain a copy of the License at 71ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 81ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * http://www.apache.org/licenses/LICENSE-2.0 91ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * 101ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Unless required by applicable law or agreed to in writing, software 111ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * distributed under the License is distributed on an "AS IS" BASIS, 121ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * See the License for the specific language governing permissions and 141ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * limitations under the License. 151ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao */ 161ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 171ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#define LOG_TAG "NxpNfcNciHal" 181ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 191ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <errno.h> 201ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <hardware/hardware.h> 211ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <hardware/nfc.h> 2292b8c4fc092fd0b25450c414d118cf6f73d4e11eSteven Moreland#include <log/log.h> 231ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao#include <phNxpNciHal_Adaptation.h> 246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include <stdlib.h> 256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include <string.h> 261ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 271ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/***************************************************************************** 281ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * NXP NCI HAL Function implementations. 291ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao *****************************************************************************/ 301ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 311ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 321ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 331ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_open 341ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 351ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description It opens and initialzes the physical connection with NFCC. 361ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 371ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 381ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 391ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_open(const struct nfc_nci_device* p_dev, 416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_stack_callback_t p_hal_cback, 426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_stack_data_callback_t* p_hal_data_callback) { 436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 441ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_open(p_hal_cback, p_hal_data_callback); 471ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 491ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 501ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 511ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 521ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 531ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_write 541ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 551ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Write the data to NFCC. 561ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 571ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns Number of bytes successfully written to NFCC. 581ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 591ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_write(const struct nfc_nci_device* p_dev, uint16_t data_len, 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi const uint8_t* p_data) { 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_write(data_len, p_data); 666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 671ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 681ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 691ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 701ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 711ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_core_initialized 721ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 731ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Notify NFCC after successful initialization of NFCC. 741ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** All proprietary settings can be done here. 751ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 761ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 771ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 781ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_core_initialized(const struct nfc_nci_device* p_dev, 806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_core_init_rsp_params) { 816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_core_initialized(p_core_init_rsp_params); 856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 861ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 871ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 881ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 891ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 901ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_pre_discover 911ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 921ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Notify NFCC before start discovery. 931ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 941ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 951ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 961ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_pre_discover(const struct nfc_nci_device* p_dev) { 986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 1001ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_pre_discover(); 1026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 1031ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 1041ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1051ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 1061ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1071ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_close 1081ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1091ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Close the NFCC interface and free all resources. 1101ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1111ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 1121ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1131ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 1146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_close(const struct nfc_nci_device* p_dev) { 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 1171ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_close(); 1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 1201ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 1211ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1221ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 1231ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1241ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_control_granted 1251ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1261ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Notify NFCC that control is granted to HAL. 1271ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1281ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 1291ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1301ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 1316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_control_granted(const struct nfc_nci_device* p_dev) { 1326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 1341ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_control_granted(); 1366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 1371ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 1381ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1391ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 1401ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1411ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function hal_power_cycle 1421ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1431ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Notify power cycling has performed. 1441ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1451ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 1461ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1471ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int hal_power_cycle(const struct nfc_nci_device* p_dev) { 1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 1506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = (pn547_dev_t*)p_dev; 1511ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = phNxpNciHal_power_cycle(); 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 1541ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 1551ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1561ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/************************************* 1571ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao * Generic device handling. 1581ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao *************************************/ 1591ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1601ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 1611ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1621ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function nfc_close 1631ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1641ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Close the nfc device instance. 1651ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1661ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 1671ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1681ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic int nfc_close(hw_device_t* dev) { 1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi free(dev); 1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 1731ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 1741ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 1751ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/******************************************************************************* 1761ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1771ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Function nfc_open 1781ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1791ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Description Open the nfc device instance. 1801ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1811ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** Returns 0 if successful 1821ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao** 1831ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao*******************************************************************************/ 1841ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liaostatic int nfc_open(const hw_module_t* module, const char* name, 1856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi hw_device_t** device) { 1866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ALOGD("%s: enter; name=%s", __func__, name); 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int retval = 0; /* 0 is ok; -1 is error */ 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (strcmp(name, NFC_NCI_CONTROLLER) == 0) { 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pn547_dev_t* dev = calloc(1, sizeof(pn547_dev_t)); 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Common hw_device_t fields */ 1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.common.tag = HARDWARE_DEVICE_TAG; 1946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.common.version = 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 0x00010000; /* [31:16] major, [15:0] minor */ 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.common.module = (struct hw_module_t*)module; 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.common.close = nfc_close; 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* NCI HAL method pointers */ 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.open = hal_open; 2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.write = hal_write; 2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.core_initialized = hal_core_initialized; 2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.pre_discover = hal_pre_discover; 2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.close = hal_close; 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.control_granted = hal_control_granted; 2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi dev->nci_device.power_cycle = hal_power_cycle; 2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *device = (hw_device_t*)dev; 2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi retval = -EINVAL; 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ALOGD("%s: exit %d", __func__, retval); 2146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return retval; 2151ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao} 2161ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 2171ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/* Android hardware module definition */ 2186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistatic struct hw_module_methods_t nfc_module_methods = { 2191ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao .open = nfc_open, 2201ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao}; 2211ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao 2221ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao/* NFC module definition */ 2236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoistruct nfc_nci_module_t HAL_MODULE_INFO_SYM = { 2241ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao .common = 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi { 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .tag = HARDWARE_MODULE_TAG, 2276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .module_api_version = 0x0100, /* [15:8] major, [7:0] minor (1.0) */ 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .hal_api_version = 0x00, /* 0 is only valid value */ 2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .id = NFC_NCI_HARDWARE_MODULE_ID, 2306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .name = "NXP PN54X NFC NCI HW HAL", 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .author = "NXP Semiconductors", 2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi .methods = &nfc_module_methods, 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi }, 2341ab8a755853d5118d6a504311d079bd5aa21a964Jizhou Liao}; 235