1 /* SPDX-License-Identifier: GPL-2.0-only */
5 * Copyright (C) 2014-2015, Marvell International Ltd.
13 /* Define private flags: */
14 #define NFCMRVL_NCI_RUNNING 1
15 #define NFCMRVL_PHY_ERROR 2
17 #define NFCMRVL_EXT_COEX_ID 0xE0
18 #define NFCMRVL_NOT_ALLOWED_ID 0xE1
19 #define NFCMRVL_ACTIVE_ID 0xE2
20 #define NFCMRVL_EXT_COEX_ENABLE 1
21 #define NFCMRVL_GPIO_PIN_NFC_NOT_ALLOWED 0xA
22 #define NFCMRVL_GPIO_PIN_NFC_ACTIVE 0xB
23 #define NFCMRVL_NCI_MAX_EVENT_SIZE 260
29 #define NFCMRVL_PB_BAIL_OUT 0x11
30 #define NFCMRVL_PROP_REF_CLOCK 0xF0
31 #define NFCMRVL_PROP_SET_HI_CONFIG 0xF1
37 #define NFCMRVL_HCI_EVENT_HEADER_SIZE 0x04
38 #define NFCMRVL_HCI_EVENT_CODE 0x04
39 #define NFCMRVL_HCI_NFC_EVENT_CODE 0xFF
40 #define NFCMRVL_HCI_COMMAND_CODE 0x01
41 #define NFCMRVL_HCI_OGF 0x81
42 #define NFCMRVL_HCI_OCF 0xFE
51 struct nfcmrvl_platform_data
{
56 /* GPIO that is wired to RESET_N signal */
58 /* Tell if transport is muxed in HCI one */
65 /* Tell if UART needs flow control at init */
67 /* Tell if firmware supports break control for power management */
76 unsigned int irq_polarity
;
79 struct nfcmrvl_private
{
83 /* Platform configuration */
84 struct nfcmrvl_platform_data config
;
89 /* FW download context */
90 struct nfcmrvl_fw_dnld fw_dnld
;
92 /* FW download support */
96 * PHY related information
99 /* PHY driver context */
104 enum nfcmrvl_phy phy
;
105 /* Low level driver ops */
106 const struct nfcmrvl_if_ops
*if_ops
;
109 struct nfcmrvl_if_ops
{
110 int (*nci_open
) (struct nfcmrvl_private
*priv
);
111 int (*nci_close
) (struct nfcmrvl_private
*priv
);
112 int (*nci_send
) (struct nfcmrvl_private
*priv
, struct sk_buff
*skb
);
113 void (*nci_update_config
)(struct nfcmrvl_private
*priv
,
117 void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private
*priv
);
118 int nfcmrvl_nci_recv_frame(struct nfcmrvl_private
*priv
, struct sk_buff
*skb
);
119 struct nfcmrvl_private
*nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy
,
121 const struct nfcmrvl_if_ops
*ops
,
123 const struct nfcmrvl_platform_data
*pdata
);
126 void nfcmrvl_chip_reset(struct nfcmrvl_private
*priv
);
127 void nfcmrvl_chip_halt(struct nfcmrvl_private
*priv
);
129 int nfcmrvl_parse_dt(struct device_node
*node
,
130 struct nfcmrvl_platform_data
*pdata
);