mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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: Christophe Ricard <christophe-h.ricard@st.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
cc1417eb24
commit
dbd70b4046
2 changed files with 27 additions and 0 deletions
|
@ -20,6 +20,8 @@
|
||||||
#include <linux/nfc.h>
|
#include <linux/nfc.h>
|
||||||
#include <net/nfc/nci.h>
|
#include <net/nfc/nci.h>
|
||||||
#include <net/nfc/nci_core.h>
|
#include <net/nfc/nci_core.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#include "st21nfcb.h"
|
#include "st21nfcb.h"
|
||||||
#include "st21nfcb_se.h"
|
#include "st21nfcb_se.h"
|
||||||
|
@ -76,6 +78,23 @@ static __u32 st21nfcb_nci_get_rfprotocol(struct nci_dev *ndev,
|
||||||
NFC_PROTO_ISO15693_MASK : 0;
|
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 = {
|
static struct nci_ops st21nfcb_nci_ops = {
|
||||||
.open = st21nfcb_nci_open,
|
.open = st21nfcb_nci_open,
|
||||||
.close = st21nfcb_nci_close,
|
.close = st21nfcb_nci_close,
|
||||||
|
@ -88,6 +107,8 @@ static struct nci_ops st21nfcb_nci_ops = {
|
||||||
.hci_load_session = st21nfcb_hci_load_session,
|
.hci_load_session = st21nfcb_hci_load_session,
|
||||||
.hci_event_received = st21nfcb_hci_event_received,
|
.hci_event_received = st21nfcb_hci_event_received,
|
||||||
.hci_cmd_received = st21nfcb_hci_cmd_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,
|
int st21nfcb_nci_probe(struct llt_ndlc *ndlc, int phy_headroom,
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
/* Define private flags: */
|
/* Define private flags: */
|
||||||
#define ST21NFCB_NCI_RUNNING 1
|
#define ST21NFCB_NCI_RUNNING 1
|
||||||
|
|
||||||
|
#define ST21NFCB_NCI_CORE_PROP 0x01
|
||||||
|
|
||||||
|
struct nci_mode_set_rsp {
|
||||||
|
u8 status;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
struct st21nfcb_nci_info {
|
struct st21nfcb_nci_info {
|
||||||
struct llt_ndlc *ndlc;
|
struct llt_ndlc *ndlc;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
Loading…
Reference in a new issue