Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbd70b40 authored by Christophe Ricard's avatar Christophe Ricard Committed by Samuel Ortiz
Browse files

NFC: st21nfcb: Add support for nci proprietary commands



On st21nfcb, nci proprietary commands are available to run
specific chip operations (for example: power management)

Signed-off-by: default avatarChristophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent cc1417eb
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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,
+6 −0
Original line number Diff line number Diff line
@@ -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;