diff options
author | Christophe Ricard <christophe.ricard@gmail.com> | 2015-02-01 16:26:11 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2015-02-02 15:50:39 -0500 |
commit | f7f793f31378d5e83276871339c2a8374b0e8657 (patch) | |
tree | fbb5d1fe808f5a5ef1626e929cdc17717448420a /net/nfc | |
parent | af9c8aa67d07adcd3b41fb2934af7af056eabecf (diff) |
NFC: nci: Add NFCEE enabling and disabling support
NFCEEs can be enabled or disabled by sending the
NCI_OP_NFCEE_MODE_SET_CMD command to the NFCC. This patch
provides an API for drivers to enable and disable e.g. their
NCI discoveredd secure elements.
Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net/nfc')
-rw-r--r-- | net/nfc/nci/core.c | 21 | ||||
-rw-r--r-- | net/nfc/nci/rsp.c | 13 |
2 files changed, 34 insertions, 0 deletions
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index a25857548524..e5fb8c8eed94 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c | |||
@@ -486,6 +486,27 @@ int nci_nfcee_discover(struct nci_dev *ndev, u8 action) | |||
486 | } | 486 | } |
487 | EXPORT_SYMBOL(nci_nfcee_discover); | 487 | EXPORT_SYMBOL(nci_nfcee_discover); |
488 | 488 | ||
489 | static void nci_nfcee_mode_set_req(struct nci_dev *ndev, unsigned long opt) | ||
490 | { | ||
491 | struct nci_nfcee_mode_set_cmd *cmd = | ||
492 | (struct nci_nfcee_mode_set_cmd *)opt; | ||
493 | |||
494 | nci_send_cmd(ndev, NCI_OP_NFCEE_MODE_SET_CMD, | ||
495 | sizeof(struct nci_nfcee_mode_set_cmd), cmd); | ||
496 | } | ||
497 | |||
498 | int nci_nfcee_mode_set(struct nci_dev *ndev, u8 nfcee_id, u8 nfcee_mode) | ||
499 | { | ||
500 | struct nci_nfcee_mode_set_cmd cmd; | ||
501 | |||
502 | cmd.nfcee_id = nfcee_id; | ||
503 | cmd.nfcee_mode = nfcee_mode; | ||
504 | |||
505 | return nci_request(ndev, nci_nfcee_mode_set_req, (unsigned long)&cmd, | ||
506 | msecs_to_jiffies(NCI_CMD_TIMEOUT)); | ||
507 | } | ||
508 | EXPORT_SYMBOL(nci_nfcee_mode_set); | ||
509 | |||
489 | static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev) | 510 | static int nci_set_local_general_bytes(struct nfc_dev *nfc_dev) |
490 | { | 511 | { |
491 | struct nci_dev *ndev = nfc_get_drvdata(nfc_dev); | 512 | struct nci_dev *ndev = nfc_get_drvdata(nfc_dev); |
diff --git a/net/nfc/nci/rsp.c b/net/nfc/nci/rsp.c index ee094dfab2ed..0a3e98240dd6 100644 --- a/net/nfc/nci/rsp.c +++ b/net/nfc/nci/rsp.c | |||
@@ -213,6 +213,15 @@ static void nci_nfcee_discover_rsp_packet(struct nci_dev *ndev, | |||
213 | nci_req_complete(ndev, discover_rsp->status); | 213 | nci_req_complete(ndev, discover_rsp->status); |
214 | } | 214 | } |
215 | 215 | ||
216 | static void nci_nfcee_mode_set_rsp_packet(struct nci_dev *ndev, | ||
217 | struct sk_buff *skb) | ||
218 | { | ||
219 | __u8 status = skb->data[0]; | ||
220 | |||
221 | pr_debug("status 0x%x\n", status); | ||
222 | nci_req_complete(ndev, status); | ||
223 | } | ||
224 | |||
216 | void nci_rsp_packet(struct nci_dev *ndev, struct sk_buff *skb) | 225 | void nci_rsp_packet(struct nci_dev *ndev, struct sk_buff *skb) |
217 | { | 226 | { |
218 | __u16 rsp_opcode = nci_opcode(skb->data); | 227 | __u16 rsp_opcode = nci_opcode(skb->data); |
@@ -262,6 +271,10 @@ void nci_rsp_packet(struct nci_dev *ndev, struct sk_buff *skb) | |||
262 | nci_nfcee_discover_rsp_packet(ndev, skb); | 271 | nci_nfcee_discover_rsp_packet(ndev, skb); |
263 | break; | 272 | break; |
264 | 273 | ||
274 | case NCI_OP_NFCEE_MODE_SET_RSP: | ||
275 | nci_nfcee_mode_set_rsp_packet(ndev, skb); | ||
276 | break; | ||
277 | |||
265 | default: | 278 | default: |
266 | pr_err("unknown rsp opcode 0x%x\n", rsp_opcode); | 279 | pr_err("unknown rsp opcode 0x%x\n", rsp_opcode); |
267 | break; | 280 | break; |