summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChirayu Desai <cdesai@cyanogenmod.org>2014-09-28 19:05:26 +0530
committerGerrit Code Review <gerrit@cyanogenmod.org>2014-11-03 11:33:32 +0000
commit250db1f3484551dfad4a35c7cabcc7b7b3354f22 (patch)
tree55426dce846ede20bd2c15adfb2f71e86570f410
parent53609653cb8ba74bc20d69b9355bf151503163f0 (diff)
Use open source NFC HAL
Change-Id: I8049fdacb06990d73efd552443ac4b282c3541fc
-rw-r--r--BoardConfigCommon.mk4
-rw-r--r--include/hardware/nfc.h276
-rw-r--r--rootdir/init.qcom.rc4
-rw-r--r--rootdir/ueventd.qcom.rc3
-rw-r--r--shinano.mk3
5 files changed, 13 insertions, 277 deletions
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 <stdint.h>
-#include <strings.h>
-#include <sys/cdefs.h>
-#include <sys/types.h>
-
-#include <hardware/hardware.h>
-
-__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 \