diff --git a/include/hardware/nfc.h b/include/hardware/nfc.h
new file mode 100644
index 0000000..ca3683b
--- /dev/null
+++ b/include/hardware/nfc.h
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 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
+
+#define NFC_HARDWARE_MODULE_ID "nfc"
+
+/*
+ * Begin PN544 specific HAL
+ */
+#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;
+} 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
