From 9224c881cf3f8575194823a6c779c0d65c42258a Mon Sep 17 00:00:00 2001 From: Arian Date: Mon, 30 Sep 2019 11:10:42 +0200 Subject: shinano-common: pn54x: Import from lineage-15.1 * https://github.com/LineageOS/android_system_nfc/tree/lineage-15.1/halimpl/pn54x/common * support for pn54x has been dropped in lineage-16.0 and above Change-Id: I19f2c3a6e3066bf9aaaaf4ddcd7d7ad867de0ed8 --- pn54x/nfc_nci.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 pn54x/nfc_nci.c (limited to 'pn54x/nfc_nci.c') diff --git a/pn54x/nfc_nci.c b/pn54x/nfc_nci.c new file mode 100644 index 0000000..611c83c --- /dev/null +++ b/pn54x/nfc_nci.c @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2012-2014 NXP Semiconductors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "NxpNfcNciHal" + +#include +#include +#include +#include +#include +#include +#include + +/***************************************************************************** + * NXP NCI HAL Function implementations. + *****************************************************************************/ + +/******************************************************************************* +** +** Function hal_open +** +** Description It opens and initialzes the physical connection with NFCC. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_open(const struct nfc_nci_device* p_dev, + nfc_stack_callback_t p_hal_cback, + nfc_stack_data_callback_t* p_hal_data_callback) { + int retval = 0; + + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + retval = phNxpNciHal_open(p_hal_cback, p_hal_data_callback); + + return retval; +} + +/******************************************************************************* +** +** Function hal_write +** +** Description Write the data to NFCC. +** +** Returns Number of bytes successfully written to NFCC. +** +*******************************************************************************/ +static int hal_write(const struct nfc_nci_device* p_dev, uint16_t data_len, + const uint8_t* p_data) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_write(data_len, p_data); + return retval; +} + +/******************************************************************************* +** +** Function hal_core_initialized +** +** Description Notify NFCC after successful initialization of NFCC. +** All proprietary settings can be done here. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_core_initialized(const struct nfc_nci_device* p_dev, + uint8_t* p_core_init_rsp_params) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_core_initialized(p_core_init_rsp_params); + return retval; +} + +/******************************************************************************* +** +** Function hal_pre_discover +** +** Description Notify NFCC before start discovery. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_pre_discover(const struct nfc_nci_device* p_dev) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_pre_discover(); + return retval; +} + +/******************************************************************************* +** +** Function hal_close +** +** Description Close the NFCC interface and free all resources. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_close(const struct nfc_nci_device* p_dev) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_close(); + return retval; +} + +/******************************************************************************* +** +** Function hal_control_granted +** +** Description Notify NFCC that control is granted to HAL. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_control_granted(const struct nfc_nci_device* p_dev) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_control_granted(); + return retval; +} + +/******************************************************************************* +** +** Function hal_power_cycle +** +** Description Notify power cycling has performed. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int hal_power_cycle(const struct nfc_nci_device* p_dev) { + int retval = 0; + pn547_dev_t* dev = (pn547_dev_t*)p_dev; + + retval = phNxpNciHal_power_cycle(); + return retval; +} + +/************************************* + * Generic device handling. + *************************************/ + +/******************************************************************************* +** +** Function nfc_close +** +** Description Close the nfc device instance. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int nfc_close(hw_device_t* dev) { + int retval = 0; + free(dev); + return retval; +} + +/******************************************************************************* +** +** Function nfc_open +** +** Description Open the nfc device instance. +** +** Returns 0 if successful +** +*******************************************************************************/ +static int nfc_open(const hw_module_t* module, const char* name, + hw_device_t** device) { + ALOGD("%s: enter; name=%s", __func__, name); + int retval = 0; /* 0 is ok; -1 is error */ + + if (strcmp(name, NFC_NCI_CONTROLLER) == 0) { + pn547_dev_t* dev = calloc(1, sizeof(pn547_dev_t)); + + /* Common hw_device_t fields */ + dev->nci_device.common.tag = HARDWARE_DEVICE_TAG; + dev->nci_device.common.version = + 0x00010000; /* [31:16] major, [15:0] minor */ + dev->nci_device.common.module = (struct hw_module_t*)module; + dev->nci_device.common.close = nfc_close; + + /* NCI HAL method pointers */ + dev->nci_device.open = hal_open; + dev->nci_device.write = hal_write; + dev->nci_device.core_initialized = hal_core_initialized; + dev->nci_device.pre_discover = hal_pre_discover; + dev->nci_device.close = hal_close; + dev->nci_device.control_granted = hal_control_granted; + dev->nci_device.power_cycle = hal_power_cycle; + + *device = (hw_device_t*)dev; + } else { + retval = -EINVAL; + } + + ALOGD("%s: exit %d", __func__, retval); + return retval; +} + +/* Android hardware module definition */ +static struct hw_module_methods_t nfc_module_methods = { + .open = nfc_open, +}; + +/* NFC module definition */ +struct nfc_nci_module_t HAL_MODULE_INFO_SYM = { + .common = + { + .tag = HARDWARE_MODULE_TAG, + .module_api_version = 0x0100, /* [15:8] major, [7:0] minor (1.0) */ + .hal_api_version = 0x00, /* 0 is only valid value */ + .id = NFC_NCI_HARDWARE_MODULE_ID, + .name = "NXP PN54X NFC NCI HW HAL", + .author = "NXP Semiconductors", + .methods = &nfc_module_methods, + }, +}; -- cgit v1.2.3