1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Marvell NFC driver 4 * 5 * Copyright (C) 2014-2015, Marvell International Ltd. 6 */ 7 8 #ifndef _NFCMRVL_H_ 9 #define _NFCMRVL_H_ 10 11 #include <linux/platform_data/nfcmrvl.h> 12 13 #include "fw_dnld.h" 14 15 /* Define private flags: */ 16 #define NFCMRVL_NCI_RUNNING 1 17 #define NFCMRVL_PHY_ERROR 2 18 19 #define NFCMRVL_EXT_COEX_ID 0xE0 20 #define NFCMRVL_NOT_ALLOWED_ID 0xE1 21 #define NFCMRVL_ACTIVE_ID 0xE2 22 #define NFCMRVL_EXT_COEX_ENABLE 1 23 #define NFCMRVL_GPIO_PIN_NFC_NOT_ALLOWED 0xA 24 #define NFCMRVL_GPIO_PIN_NFC_ACTIVE 0xB 25 #define NFCMRVL_NCI_MAX_EVENT_SIZE 260 26 27 /* 28 * NCI FW Parameters 29 */ 30 31 #define NFCMRVL_PB_BAIL_OUT 0x11 32 #define NFCMRVL_PROP_REF_CLOCK 0xF0 33 #define NFCMRVL_PROP_SET_HI_CONFIG 0xF1 34 35 /* 36 * HCI defines 37 */ 38 39 #define NFCMRVL_HCI_EVENT_HEADER_SIZE 0x04 40 #define NFCMRVL_HCI_EVENT_CODE 0x04 41 #define NFCMRVL_HCI_NFC_EVENT_CODE 0xFF 42 #define NFCMRVL_HCI_COMMAND_CODE 0x01 43 #define NFCMRVL_HCI_OGF 0x81 44 #define NFCMRVL_HCI_OCF 0xFE 45 46 enum nfcmrvl_phy { 47 NFCMRVL_PHY_USB = 0, 48 NFCMRVL_PHY_UART = 1, 49 NFCMRVL_PHY_I2C = 2, 50 NFCMRVL_PHY_SPI = 3, 51 }; 52 53 struct nfcmrvl_private { 54 55 unsigned long flags; 56 57 /* Platform configuration */ 58 struct nfcmrvl_platform_data config; 59 60 /* Parent dev */ 61 struct nci_dev *ndev; 62 63 /* FW download context */ 64 struct nfcmrvl_fw_dnld fw_dnld; 65 66 /* FW download support */ 67 bool support_fw_dnld; 68 69 /* 70 * PHY related information 71 */ 72 73 /* PHY driver context */ 74 void *drv_data; 75 /* PHY device */ 76 struct device *dev; 77 /* PHY type */ 78 enum nfcmrvl_phy phy; 79 /* Low level driver ops */ 80 struct nfcmrvl_if_ops *if_ops; 81 }; 82 83 struct nfcmrvl_if_ops { 84 int (*nci_open) (struct nfcmrvl_private *priv); 85 int (*nci_close) (struct nfcmrvl_private *priv); 86 int (*nci_send) (struct nfcmrvl_private *priv, struct sk_buff *skb); 87 void (*nci_update_config)(struct nfcmrvl_private *priv, 88 const void *param); 89 }; 90 91 void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv); 92 int nfcmrvl_nci_recv_frame(struct nfcmrvl_private *priv, struct sk_buff *skb); 93 struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy, 94 void *drv_data, 95 struct nfcmrvl_if_ops *ops, 96 struct device *dev, 97 struct nfcmrvl_platform_data *pdata); 98 99 100 void nfcmrvl_chip_reset(struct nfcmrvl_private *priv); 101 void nfcmrvl_chip_halt(struct nfcmrvl_private *priv); 102 103 int nfcmrvl_parse_dt(struct device_node *node, 104 struct nfcmrvl_platform_data *pdata); 105 106 #endif 107