1 /* 2 * Marvell NFC driver 3 * 4 * Copyright (C) 2014-2015, Marvell International Ltd. 5 * 6 * This software file (the "File") is distributed by Marvell International 7 * Ltd. under the terms of the GNU General Public License Version 2, June 1991 8 * (the "License"). You may use, redistribute and/or modify this File in 9 * accordance with the terms and conditions of the License, a copy of which 10 * is available on the worldwide web at 11 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 12 * 13 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 14 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 15 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 16 * this warranty disclaimer. 17 **/ 18 19 #ifndef _NFCMRVL_H_ 20 #define _NFCMRVL_H_ 21 22 #include <linux/platform_data/nfcmrvl.h> 23 24 #include "fw_dnld.h" 25 26 /* Define private flags: */ 27 #define NFCMRVL_NCI_RUNNING 1 28 #define NFCMRVL_PHY_ERROR 2 29 30 #define NFCMRVL_EXT_COEX_ID 0xE0 31 #define NFCMRVL_NOT_ALLOWED_ID 0xE1 32 #define NFCMRVL_ACTIVE_ID 0xE2 33 #define NFCMRVL_EXT_COEX_ENABLE 1 34 #define NFCMRVL_GPIO_PIN_NFC_NOT_ALLOWED 0xA 35 #define NFCMRVL_GPIO_PIN_NFC_ACTIVE 0xB 36 #define NFCMRVL_NCI_MAX_EVENT_SIZE 260 37 38 /* 39 ** NCI FW Parmaters 40 */ 41 42 #define NFCMRVL_PB_BAIL_OUT 0x11 43 #define NFCMRVL_PROP_REF_CLOCK 0xF0 44 #define NFCMRVL_PROP_SET_HI_CONFIG 0xF1 45 46 /* 47 ** HCI defines 48 */ 49 50 #define NFCMRVL_HCI_EVENT_HEADER_SIZE 0x04 51 #define NFCMRVL_HCI_EVENT_CODE 0x04 52 #define NFCMRVL_HCI_NFC_EVENT_CODE 0xFF 53 #define NFCMRVL_HCI_COMMAND_CODE 0x01 54 #define NFCMRVL_HCI_OGF 0x81 55 #define NFCMRVL_HCI_OCF 0xFE 56 57 enum nfcmrvl_phy { 58 NFCMRVL_PHY_USB = 0, 59 NFCMRVL_PHY_UART = 1, 60 NFCMRVL_PHY_I2C = 2, 61 NFCMRVL_PHY_SPI = 3, 62 }; 63 64 struct nfcmrvl_private { 65 66 unsigned long flags; 67 68 /* Platform configuration */ 69 struct nfcmrvl_platform_data config; 70 71 /* Parent dev */ 72 struct nci_dev *ndev; 73 74 /* FW download context */ 75 struct nfcmrvl_fw_dnld fw_dnld; 76 77 /* FW download support */ 78 bool support_fw_dnld; 79 80 /* 81 ** PHY related information 82 */ 83 84 /* PHY driver context */ 85 void *drv_data; 86 /* PHY device */ 87 struct device *dev; 88 /* PHY type */ 89 enum nfcmrvl_phy phy; 90 /* Low level driver ops */ 91 struct nfcmrvl_if_ops *if_ops; 92 }; 93 94 struct nfcmrvl_if_ops { 95 int (*nci_open) (struct nfcmrvl_private *priv); 96 int (*nci_close) (struct nfcmrvl_private *priv); 97 int (*nci_send) (struct nfcmrvl_private *priv, struct sk_buff *skb); 98 void (*nci_update_config)(struct nfcmrvl_private *priv, 99 const void *param); 100 }; 101 102 void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv); 103 int nfcmrvl_nci_recv_frame(struct nfcmrvl_private *priv, struct sk_buff *skb); 104 struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy, 105 void *drv_data, 106 struct nfcmrvl_if_ops *ops, 107 struct device *dev, 108 struct nfcmrvl_platform_data *pdata); 109 110 111 void nfcmrvl_chip_reset(struct nfcmrvl_private *priv); 112 void nfcmrvl_chip_halt(struct nfcmrvl_private *priv); 113 114 int nfcmrvl_parse_dt(struct device_node *node, 115 struct nfcmrvl_platform_data *pdata); 116 117 #endif 118