diff options
-rw-r--r-- | drivers/nfc/st21nfcb/st21nfcb.c | 21 | ||||
-rw-r--r-- | drivers/nfc/st21nfcb/st21nfcb.h | 6 |
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/nfc/st21nfcb/st21nfcb.c b/drivers/nfc/st21nfcb/st21nfcb.c index 12699fa0b1b9..50ad6d04f0f4 100644 --- a/drivers/nfc/st21nfcb/st21nfcb.c +++ b/drivers/nfc/st21nfcb/st21nfcb.c @@ -20,6 +20,8 @@ #include <linux/nfc.h> #include <net/nfc/nci.h> #include <net/nfc/nci_core.h> +#include <linux/gpio.h> +#include <linux/delay.h> #include "st21nfcb.h" #include "st21nfcb_se.h" @@ -76,6 +78,23 @@ static __u32 st21nfcb_nci_get_rfprotocol(struct nci_dev *ndev, NFC_PROTO_ISO15693_MASK : 0; } +static int st21nfcb_nci_prop_rsp_packet(struct nci_dev *ndev, + struct sk_buff *skb) +{ + __u8 status = skb->data[0]; + + nci_req_complete(ndev, status); + return 0; +} + +static struct nci_prop_ops st21nfcb_nci_prop_ops[] = { + { + .opcode = nci_opcode_pack(NCI_GID_PROPRIETARY, + ST21NFCB_NCI_CORE_PROP), + .rsp = st21nfcb_nci_prop_rsp_packet, + }, +}; + static struct nci_ops st21nfcb_nci_ops = { .open = st21nfcb_nci_open, .close = st21nfcb_nci_close, @@ -88,6 +107,8 @@ static struct nci_ops st21nfcb_nci_ops = { .hci_load_session = st21nfcb_hci_load_session, .hci_event_received = st21nfcb_hci_event_received, .hci_cmd_received = st21nfcb_hci_cmd_received, + .prop_ops = st21nfcb_nci_prop_ops, + .n_prop_ops = ARRAY_SIZE(st21nfcb_nci_prop_ops), }; int st21nfcb_nci_probe(struct llt_ndlc *ndlc, int phy_headroom, diff --git a/drivers/nfc/st21nfcb/st21nfcb.h b/drivers/nfc/st21nfcb/st21nfcb.h index 5ef8a58c9839..7c12d9dd03d0 100644 --- a/drivers/nfc/st21nfcb/st21nfcb.h +++ b/drivers/nfc/st21nfcb/st21nfcb.h @@ -25,6 +25,12 @@ /* Define private flags: */ #define ST21NFCB_NCI_RUNNING 1 +#define ST21NFCB_NCI_CORE_PROP 0x01 + +struct nci_mode_set_rsp { + u8 status; +} __packed; + struct st21nfcb_nci_info { struct llt_ndlc *ndlc; unsigned long flags; |