From 250db1f3484551dfad4a35c7cabcc7b7b3354f22 Mon Sep 17 00:00:00 2001 From: Chirayu Desai Date: Sun, 28 Sep 2014 19:05:26 +0530 Subject: Use open source NFC HAL Change-Id: I8049fdacb06990d73efd552443ac4b282c3541fc --- BoardConfigCommon.mk | 4 + include/hardware/nfc.h | 276 ------------------------------------------------ rootdir/init.qcom.rc | 4 + rootdir/ueventd.qcom.rc | 3 + shinano.mk | 3 +- 5 files changed, 13 insertions(+), 277 deletions(-) delete mode 100644 include/hardware/nfc.h diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 6fa0848..9a98bc5 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -126,6 +126,10 @@ WIFI_DRIVER_FW_PATH_AP := "/vendor/firmware/fw_bcmdhd_apsta.bin" WIFI_DRIVER_FW_PATH_STA := "/vendor/firmware/fw_bcmdhd.bin" WIFI_DRIVER_MODULE_ARG := "nvram_path=/system/etc/firmware/wlan/bcmdhd/bcmdhd.cal" +# NFC +BOARD_NFC_CHIPSET := pn547 +BOARD_NFC_HAL_SUFFIX := $(TARGET_BOARD_PLATFORM) + # Filesystem BOARD_FLASH_BLOCK_SIZE := 131072 TARGET_USERIMAGES_USE_EXT4 := true diff --git a/include/hardware/nfc.h b/include/hardware/nfc.h deleted file mode 100644 index 09baab2..0000000 --- a/include/hardware/nfc.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (C) 2011, 2012 The Android Open Source Project - * - * 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. - */ - -#ifndef ANDROID_NFC_HAL_INTERFACE_H -#define ANDROID_NFC_HAL_INTERFACE_H - -#include -#include -#include -#include - -#include - -__BEGIN_DECLS - - -/* NFC device HAL for NCI-based NFC controllers. - * - * This HAL allows NCI silicon vendors to make use - * of the core NCI stack in Android for their own silicon. - * - * The responibilities of the NCI HAL implementation - * are as follows: - * - * - Implement the transport to the NFC controller - * - Implement each of the HAL methods specified below as applicable to their silicon - * - Pass up received NCI messages from the controller to the stack - * - * A simplified timeline of NCI HAL method calls: - * 1) Core NCI stack calls open() - * 2) Core NCI stack executes CORE_RESET and CORE_INIT through calls to write() - * 3) Core NCI stack calls core_initialized() to allow HAL to do post-init configuration - * 4) Core NCI stack calls pre_discover() to allow HAL to prepare for RF discovery - * 5) Core NCI stack starts discovery through calls to write() - * 6) Core NCI stack stops discovery through calls to write() (e.g. screen turns off) - * 7) Core NCI stack calls pre_discover() to prepare for RF discovery (e.g. screen turned back on) - * 8) Core NCI stack starts discovery through calls to write() - * ... - * ... - * 9) Core NCI stack calls close() - */ -#define NFC_NCI_HARDWARE_MODULE_ID "nfc_nci_pn547" -#define NFC_NCI_CONTROLLER "nci" - -/* - * nfc_nci_module_t should contain module-specific parameters - */ -typedef struct nfc_nci_module_t { - struct hw_module_t common; -} nfc_nci_module_t; - -/* - * HAL events that can be passed back to the stack - */ -typedef uint8_t nfc_event_t; - -enum { - HAL_NFC_OPEN_CPLT_EVT = 0x00, - HAL_NFC_CLOSE_CPLT_EVT = 0x01, - HAL_NFC_POST_INIT_CPLT_EVT = 0x02, - HAL_NFC_PRE_DISCOVER_CPLT_EVT = 0x03, - HAL_NFC_REQUEST_CONTROL_EVT = 0x04, - HAL_NFC_RELEASE_CONTROL_EVT = 0x05, - HAL_NFC_ERROR_EVT = 0x06 -}; - -/* - * Allowed status return values for each of the HAL methods - */ -typedef uint8_t nfc_status_t; - -enum { - HAL_NFC_STATUS_OK = 0x00, - HAL_NFC_STATUS_FAILED = 0x01, - HAL_NFC_STATUS_ERR_TRANSPORT = 0x02, - HAL_NFC_STATUS_ERR_CMD_TIMEOUT = 0x03, - HAL_NFC_STATUS_REFUSED = 0x04 -}; - -/* - * The callback passed in from the NFC stack that the HAL - * can use to pass events back to the stack. - */ -typedef void (nfc_stack_callback_t) (nfc_event_t event, nfc_status_t event_status); - -/* - * The callback passed in from the NFC stack that the HAL - * can use to pass incomming data to the stack. - */ -typedef void (nfc_stack_data_callback_t) (uint16_t data_len, uint8_t* p_data); - -/* nfc_nci_device_t starts with a hw_device_t struct, - * followed by device-specific methods and members. - * - * All methods in the NCI HAL are asynchronous. - */ -typedef struct nfc_nci_device { - struct hw_device_t common; - /* - * (*open)() Opens the NFC controller device and performs initialization. - * This may include patch download and other vendor-specific initialization. - * - * If open completes successfully, the controller should be ready to perform - * NCI initialization - ie accept CORE_RESET and subsequent commands through - * the write() call. - * - * If open() returns 0, the NCI stack will wait for a HAL_NFC_OPEN_CPLT_EVT - * before continuing. - * - * If open() returns any other value, the NCI stack will stop. - * - */ - int (*open)(const struct nfc_nci_device *p_dev, nfc_stack_callback_t *p_cback, - nfc_stack_data_callback_t *p_data_cback); - - /* - * (*write)() Performs an NCI write. - * - * This method may queue writes and return immediately. The only - * requirement is that the writes are executed in order. - */ - int (*write)(const struct nfc_nci_device *p_dev, uint16_t data_len, const uint8_t *p_data); - - /* - * (*core_initialized)() is called after the CORE_INIT_RSP is received from the NFCC. - * At this time, the HAL can do any chip-specific configuration. - * - * If core_initialized() returns 0, the NCI stack will wait for a HAL_NFC_POST_INIT_CPLT_EVT - * before continuing. - * - * If core_initialized() returns any other value, the NCI stack will continue - * immediately. - */ - int (*core_initialized)(const struct nfc_nci_device *p_dev, uint8_t* p_core_init_rsp_params); - - /* - * (*pre_discover)() Is called every time before starting RF discovery. - * It is a good place to do vendor-specific configuration that must be - * performed every time RF discovery is about to be started. - * - * If pre_discover() returns 0, the NCI stack will wait for a HAL_NFC_PRE_DISCOVER_CPLT_EVT - * before continuing. - * - * If pre_discover() returns any other value, the NCI stack will start - * RF discovery immediately. - */ - int (*pre_discover)(const struct nfc_nci_device *p_dev); - - /* - * (*close)() Closed the NFC controller. Should free all resources. - */ - int (*close)(const struct nfc_nci_device *p_dev); - - /* - * (*control_granted)() Grant HAL the exclusive control to send NCI commands. - * Called in response to HAL_REQUEST_CONTROL_EVT. - * Must only be called when there are no NCI commands pending. - * HAL_RELEASE_CONTROL_EVT will notify when HAL no longer needs exclusive control. - */ - int (*control_granted)(const struct nfc_nci_device *p_dev); - - /* - * (*power_cycle)() Restart controller by power cyle; - * HAL_OPEN_CPLT_EVT will notify when operation is complete. - */ - int (*power_cycle)(const struct nfc_nci_device *p_dev); -} nfc_nci_device_t; - -/* - * Convenience methods that the NFC stack can use to open - * and close an NCI device - */ -static inline int nfc_nci_open(const struct hw_module_t* module, - nfc_nci_device_t** dev) { - return module->methods->open(module, NFC_NCI_CONTROLLER, - (struct hw_device_t**) dev); -} - -static inline int nfc_nci_close(nfc_nci_device_t* dev) { - return dev->common.close(&dev->common); -} -/* - * End NFC NCI HAL - */ - -/* - * This is a limited NFC HAL for NXP PN544-based devices. - * This HAL as Android is moving to - * an NCI-based NFC stack. - * - * All NCI-based NFC controllers should use the NFC-NCI - * HAL instead. - * Begin PN544 specific HAL - */ -#define NFC_HARDWARE_MODULE_ID "nfc" - -#define NFC_PN544_CONTROLLER "pn544" - -typedef struct nfc_module_t { - struct hw_module_t common; -} nfc_module_t; - -/* - * PN544 linktypes. - * UART - * I2C - * USB (uses UART DAL) - */ -typedef enum { - PN544_LINK_TYPE_UART, - PN544_LINK_TYPE_I2C, - PN544_LINK_TYPE_USB, - PN544_LINK_TYPE_INVALID, -} nfc_pn544_linktype; - -typedef struct { - struct hw_device_t common; - - /* The number of EEPROM registers to write */ - uint32_t num_eeprom_settings; - - /* The actual EEPROM settings - * For PN544, each EEPROM setting is a 4-byte entry, - * of the format [0x00, addr_msb, addr_lsb, value]. - */ - uint8_t* eeprom_settings; - - /* The link type to which the PN544 is connected */ - nfc_pn544_linktype linktype; - - /* The device node to which the PN544 is connected */ - const char* device_node; - - /* On Crespo we had an I2C issue that would cause us to sometimes read - * the I2C slave address (0x57) over the bus. libnfc contains - * a hack to ignore this byte and try to read the length byte - * again. - * Set to 0 to disable the workaround, 1 to enable it. - */ - uint8_t enable_i2c_workaround; - /* I2C slave address. Multiple I2C addresses are - * possible for PN544 module. Configure address according to - * board design. - */ - uint8_t i2c_device_address; -} nfc_pn544_device_t; - -static inline int nfc_pn544_open(const struct hw_module_t* module, - nfc_pn544_device_t** dev) { - return module->methods->open(module, NFC_PN544_CONTROLLER, - (struct hw_device_t**) dev); -} - -static inline int nfc_pn544_close(nfc_pn544_device_t* dev) { - return dev->common.close(&dev->common); -} -/* - * End PN544 specific HAL - */ - -__END_DECLS - -#endif // ANDROID_NFC_HAL_INTERFACE_H diff --git a/rootdir/init.qcom.rc b/rootdir/init.qcom.rc index 52184a6..1c9a43f 100644 --- a/rootdir/init.qcom.rc +++ b/rootdir/init.qcom.rc @@ -262,6 +262,10 @@ on boot chown system /sys/devices/virtual/timed_output/vibrator/vtg_level + # NFC + # Symlink for compability + symlink /dev/pn547 /dev/pn544 + on post-fs # MHL driver. To support MHL power off charge, # the insmod must be done before chargemon. diff --git a/rootdir/ueventd.qcom.rc b/rootdir/ueventd.qcom.rc index 043ae15..cf20688 100644 --- a/rootdir/ueventd.qcom.rc +++ b/rootdir/ueventd.qcom.rc @@ -216,3 +216,6 @@ # S-Force /dev/sforce 0660 system audio + +# NFC +/dev/pn547 0660 nfc nfc diff --git a/shinano.mk b/shinano.mk index bd64221..ea6f698 100644 --- a/shinano.mk +++ b/shinano.mk @@ -116,7 +116,8 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ NfcNci \ Tag \ - com.android.nfc_extras + com.android.nfc_extras \ + nfc_nci.msm8974 PRODUCT_COPY_FILES += \ $(COMMON_PATH)/rootdir/system/etc/nfcee_access.xml:system/etc/nfcee_access.xml \ -- cgit v1.2.3