NFC: st21nfcb: Add support for nci proprietary commands
authorChristophe Ricard <christophe.ricard@gmail.com>
Sat, 6 Jun 2015 11:16:47 +0000 (13:16 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 8 Jun 2015 22:34:24 +0000 (00:34 +0200)
On st21nfcb, nci proprietary commands are available to run
specific chip operations (for example: power management)

Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/st21nfcb/st21nfcb.c
drivers/nfc/st21nfcb/st21nfcb.h

index 12699fa0b1b992683a08cc7c6e287bf899dd139c..50ad6d04f0f4dd2b656fde01b94733106043e822 100644 (file)
@@ -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,
index 5ef8a58c9839dd542a7ba85911c5f931ce7ee616..7c12d9dd03d0ee355d465c311e2f5b405fc91fec 100644 (file)
 /* 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;